Summarize:万物摘要工具(CLI + Chrome 侧边栏)

> 来源: https://github.com/steipete/summarize

> 作者: Peter Steinberger (@steipete),同时也是 PinchBench 的推广者

> 许可: MIT

> 安装: npm i -g @steipete/summarizebrew install steipete/tap/summarize

📌 核心理念

> "Point at any URL/YouTube/Podcast or file. Get the gist."

Summarize 是一个"万物摘要"工具——给它任何 URL、文件、YouTube 视频、播客、PDF、图片、音视频,它返回一个结构化的摘要。同时提供 CLI 和 Chrome/Firefox 浏览器扩展。

🏗️ 双形态架构

形态 1:命令行工具


# 网页
summarize "https://example.com"

# PDF(本地或远程)
summarize "/path/to/file.pdf" --model google/gemini-3-flash

# YouTube(自动提取字幕 + 截取关键帧)
summarize "https://youtu.be/dQw4w9WgXcQ" --youtube auto

# 播客 RSS
summarize "https://feeds.npr.org/500005/podcast.xml"

# Apple Podcasts / Spotify
summarize "https://podcasts.apple.com/us/podcast/..."

# 音视频文件
summarize "/path/to/audio.mp3"

# 管道输入
pbpaste | summarize -
cat report.pdf | summarize -

形态 2:Chrome 侧边栏 / Firefox 侧边栏

安装浏览器扩展后,在 Chrome 侧边栏直接看到当前页面的摘要。

工作方式:扩展本身不跑模型,而是通过 localhost 与本地 daemon 通信:


# 安装 daemon(自动开机启动)
summarize daemon install --token <从扩展复制的 token>

Daemon 处理重活:yt-dlp 下载、ffmpeg 转码、OCR、转录——浏览器扩展只负责展示。

🎯 支持的内容类型

类型示例说明
网页任意 URLHTML → Markdown → 摘要
PDF本地/远程直接发给模型(Google 最稳)
图片jpg/png/webp/gif多模态理解
YouTubeyoutube.com/youtu.be字幕提取 + 关键帧截图 + OCR
播客RSS/Apple/Spotify自动转录最新一期
音频mp3/wav/m4a/ogg/flac本地转录
视频mp4/mov/webm转录 + 可选关键帧提取
文本txt/md/json/yaml/xml直接内联到 prompt
stdin管道输入支持文本和二进制(≤50MB)

🎬 YouTube Slides 功能(亮点)

这是最有特色的功能:

1. 从 YouTube 视频中自动截取关键帧(幻灯片切换检测)

2. 对每帧运行 OCR(需要 tesseract)

3. 生成带时间戳的卡片

4. 点击卡片跳转到视频对应位置

5. 可切换 OCR 文本 / 原始字幕


summarize "https://youtu.be/..." --slides --slides-ocr

这对看技术演讲特别有用——不用看完整个视频,直接看关键帧 + 摘要。

🔬 关键帧识别算法(源码分析)

通过阅读 src/slides/scene-detection.ts 源码,关键帧识别分三步,不依赖任何 ML 模型,纯信号处理:

Step 1:自动校准阈值(calibrateSceneThreshold)

先从视频中均匀采样 3-12 帧(覆盖 5%-95% 的时间线),对每帧:


ffmpeg -ss {时间} -i {视频} -frames:v 1 -vf "scale=32:32,format=gray" -f rawvideo -

把每帧缩到 32×32 灰度图(1024 字节),然后算 Average Hash(平均哈希):


对每个像素:值 ≥ 全图平均值 → 1,否则 → 0
得到一个 1024 位的二进制指纹

比较相邻采样帧的汉明距离(不同位数 / 总位数),得到一组 diff 值。根据统计分布(中位数、P75、P90)自动计算最佳场景检测阈值:


threshold = max(median * 0.15, p75 * 0.2, p90 * 0.25)
// 然后 clamp 到 [0.05, 0.3] 范围

为什么这样做:不同类型的视频(幻灯片演讲 vs 自然风景 vs 动画)的帧间差异分布完全不同。预采样 + 统计分析可以自适应地找到最佳阈值,避免一刀切。

Step 2:场景变化检测(detectSceneTimestamps)

用 ffmpeg 内置的 scene 滤镜跑整个视频:


ffmpeg -i {视频} -vf "select='gt(scene,{阈值})',showinfo" -f null -

ffmpeg 的 scene 滤镜对每帧计算一个场景变化分数(0-1),当分数 > 阈值时判定为场景切换。原理是比较当前帧与上一帧的像素差异。

并行加速:视频被分成多段(最多 16 个 worker),每段独立检测,最后合并时间戳。

Step 3:过滤 + 提取


所有场景变化时间戳
    ↓ 按 minDurationSeconds 过滤太密集的(两帧间隔 ≥ N 秒)
    ↓ 按 maxSlides 截断(默认最多 6 帧)
    ↓ ffmpeg 提取对应时间点的截图
    ↓ [可选] tesseract OCR 识别截图中的文字
    ↓ 生成带时间戳的卡片

算法评价

优点说明
**零 ML 依赖**不需要 GPU、不需要模型下载,纯 ffmpeg 信号处理
**自适应阈值**预采样校准,不同类型视频都能工作
**并行处理**分段检测 + 多 worker,长视频也快
**两级过滤**先检测再过滤,保证关键帧之间有足够间隔

这个设计非常工程化——用简单可靠的方法(感知哈希 + ffmpeg scene 滤镜)解决了从视频中提取关键帧的问题,不追求学术上的最优,而是追求在任何机器上都能稳定运行

🤖 模型支持

支持几乎所有主流模型,使用 provider/model 格式:


summarize "..." --model openai/gpt-5-mini
summarize "..." --model anthropic/claude-sonnet-4-5
summarize "..." --model google/gemini-3-flash
summarize "..." --model xai/grok-4-fast-non-reasoning

还支持本地编码 CLI 作为后端


summarize "..." --cli codex    # 用 Codex CLI
summarize "..." --cli claude   # 用 Claude Code
summarize "..." --cli gemini   # 用 Gemini CLI

免费使用


# 配置 OpenRouter 免费模型
summarize refresh-free --set-default
# 之后默认用免费模型

📏 长度控制


summarize "..." --length short    # ~900 字符
summarize "..." --length medium   # ~1,800 字符
summarize "..." --length long     # ~4,200 字符
summarize "..." --length xl       # ~9,000 字符
summarize "..." --length xxl      # ~17,000 字符
summarize "..." --length 20k      # 自定义字符数

智能短内容检测:如果原文比请求的摘要还短,直接返回原文(可用 --force-summary 强制摘要)。

📊 输出模式

模式说明
默认流式 Markdown 渲染 + 指标
`--plain`原始文本,无 ANSI 渲染
`--json`机器可读,含诊断/prompt/指标
`--extract`只提取内容不摘要
`--metrics detailed`详细的 token/成本/耗时统计

💡 分析与评价

为什么值得关注

1. 同一个作者:Peter Steinberger 也是 PinchBench 的推广者,在 OpenClaw 社区非常活跃

2. 真正的全能选手:不只是"网页摘要"工具,YouTube slides 提取、播客转录、本地音视频处理都做了

3. CLI + 浏览器双形态:开发者用 CLI,普通用户用 Chrome 侧边栏

4. Daemon 架构精妙:浏览器扩展 → localhost daemon → 本地工具链,避免了浏览器的沙箱限制

转录 Fallback 链


已发布字幕 → Groq → ONNX → whisper.cpp → AssemblyAI → Gemini → OpenAI → FAL

这个 fallback 链设计得很务实——优先用免费的(已有字幕),然后是快速便宜的(Groq),最后才是贵的(OpenAI)。

与类似工具对比

工具CLI浏览器YouTube播客音视频PDF多模型
**Summarize**✅ 侧边栏✅ Slides+OCR
Kagi部分
tldr-pages
ChatGPT部分

评分

维度评分(/10)
功能覆盖9.5
CLI 设计9
浏览器扩展8.5
模型兼容性9
实用价值9
**综合****9.0**

🔗 与我们的关联

1. 深度研究工具链:可以集成到我们的研究流程中——把 YouTube 演讲自动摘要成报告素材

2. 与 OpenClaw 集成:支持 --cli codex/claude 作为后端,可以在 OpenClaw 的 Codex 频道中使用

3. 播客/视频研究:之前我们只处理文章和推文,有了 Summarize 可以扩展到播客和视频

4. 同一生态圈:作者 steipete 同时做 PinchBench 和 Summarize,都是 OpenClaw 社区核心工具

报告由深度研究助手自动生成 | 2026-03-08