watch-video

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

/watch-video — Transcribe and analyze any video at the depth you choose

/watch-video — 按你选择的深度转录并分析任意视频

Replaces and broadens the prior
youtube-transcript
skill. YouTube is now one of many sources; depth is user-controlled.
替代并扩展了之前的
youtube-transcript
技能。YouTube现在只是众多数据源之一,处理深度由用户自主控制。

Step 1 — Parse input

步骤1 — 解析输入

Accept:
  • YouTube: full URL,
    youtu.be/<id>
    ,
    youtube.com/shorts/<id>
    , raw 11-char ID
  • Loom:
    loom.com/share/<id>
    or
    loom.com/embed/<id>
  • Vimeo:
    vimeo.com/<id>
  • Riverside: download URL or local file
  • Zoom: local
    .mp4
    from a downloaded recording
  • X / IG / TikTok video: URL — defers to
    social-fetch
    for metadata, uses yt-dlp for the file
  • Local file: any path to an
    .mp4
    /
    .mov
    /
    .webm
    /
    .mkv
Detect source from URL pattern or file extension. If ambiguous, ask.
支持以下来源:
  • YouTube:完整URL、
    youtu.be/<id>
    youtube.com/shorts/<id>
    、11位原始ID
  • Loom
    loom.com/share/<id>
    loom.com/embed/<id>
  • Vimeo
    vimeo.com/<id>
  • Riverside:下载URL或本地文件
  • Zoom:下载后的本地
    .mp4
    录制文件
  • X / IG / TikTok视频:URL — 委托
    social-fetch
    获取元数据,使用yt-dlp获取视频文件
  • 本地文件:任意
    .mp4
    /
    .mov
    /
    .webm
    /
    .mkv
    格式的文件路径
通过URL模式或文件扩展名检测来源。若存在歧义,则询问用户确认。

Step 2 — Parse depth mode

步骤2 — 解析深度模式

InvocationModeWhat you get
/watch-video <url>
transcript (default)Clean text, metadata, optional chapters
/watch-video <url> transcript
transcriptSame as default
/watch-video <url> visual
visualTranscript + frames at intervals + Claude vision pass identifying key moments
/watch-video <url> multimodal
multimodalNative video to Gemini (if
$GEMINI_API_KEY
), else dense Claude vision frame-by-frame
If the depth isn't specified and the video is >10 minutes, ask before defaulting (visual/multimodal cost real money on long videos).
调用指令模式输出内容
/watch-video <url>
transcript(默认)清晰文本、元数据、可选章节信息
/watch-video <url> transcript
transcript与默认模式一致
/watch-video <url> visual
visual转录内容+定时提取帧+Claude视觉分析识别关键瞬间
/watch-video <url> multimodal
multimodal原生视频接入Gemini(若已设置
$GEMINI_API_KEY
),否则使用密集型Claude视觉逐帧分析
若未指定深度模式且视频时长超过10分钟,将在默认前询问用户(视觉/多模态模式处理长视频会产生实际费用)。

Step 3 — Pull metadata

步骤3 — 获取元数据

For URL sources, use yt-dlp:
bash
yt-dlp --print "%(title)s|%(uploader)s|%(duration_string)s|%(upload_date>%Y-%m-%d)s|%(description)s" \
  --print "%(chapters)j" --skip-download "<url>"
Capture: title, uploader/channel, duration, upload date, description (first paragraph), chapters (JSON or null).
For local files, use ffprobe:
bash
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "<file>"
对于URL来源,使用yt-dlp:
bash
yt-dlp --print "%(title)s|%(uploader)s|%(duration_string)s|%(upload_date>%Y-%m-%d)s|%(description)s" \
  --print "%(chapters)j" --skip-download "<url>"
捕获信息:标题、上传者/频道、时长、上传日期、描述(第一段)、章节(JSON格式或空值)。
对于本地文件,使用ffprobe:
bash
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "<file>"

Step 4 — Build workdir

步骤4 — 创建工作目录

~/Documents/videos/<source>-<slug>-<date>/
Where:
  • source
    :
    youtube
    /
    loom
    /
    vimeo
    /
    riverside
    /
    zoom
    /
    local
  • slug
    : kebab-case of title (first 4–6 words, max 50 chars)
  • date
    :
    YYYY-MM-DD
~/Documents/videos/<source>-<slug>-<date>/
其中:
  • source
    :
    youtube
    /
    loom
    /
    vimeo
    /
    riverside
    /
    zoom
    /
    local
  • slug
    : 标题的短横线命名格式(取前4-6个词,最多50字符)
  • date
    :
    YYYY-MM-DD

Step 5 — Get the transcript

步骤5 — 获取转录内容

Backend selection (in order):
  1. Platform-provided transcript if it exists and looks complete:
    • YouTube:
      yt-dlp --write-sub --write-auto-sub --skip-download --sub-lang en --sub-format vtt
    • Loom: fetch via
      https://www.loom.com/share/<id>
      page metadata or Loom API if
      $LOOM_API_KEY
      set
    • Riverside: built-in transcripts available on the recording's share page
    • If platform transcript exists and has timestamps, use it. Skip Whisper.
  2. MLX-Whisper local (default fallback — fast on Mac M-series):
    bash
    # Install once: pip install mlx-whisper
    python3 -c "import mlx_whisper; mlx_whisper.transcribe('<file>', path_or_hf_repo='mlx-community/whisper-large-v3-turbo')" \
      > "<workdir>/transcript-raw.json"
    Or via the CLI:
    mlx_whisper <file> --model mlx-community/whisper-large-v3-turbo --output-dir <workdir>
  3. whisper.cpp (further fallback if MLX unavailable)
Download the video file first if it's a URL (use yt-dlp; Loom/Vimeo/YT all supported):
bash
yt-dlp -f "bv*[height<=720]+ba/b[height<=720]" -o "<workdir>/video.%(ext)s" "<url>"
720p is plenty for transcription and frame analysis (smaller download, faster processing).
Clean the transcript (only needed for YouTube auto-subs which have rolling captions; Whisper output is already clean):
bash
undefined
后端选择顺序
  1. 平台提供的转录内容(若存在且完整):
    • YouTube:
      yt-dlp --write-sub --write-auto-sub --skip-download --sub-lang en --sub-format vtt
    • Loom: 通过
      https://www.loom.com/share/<id>
      页面元数据获取,若已设置
      $LOOM_API_KEY
      则使用Loom API
    • Riverside: 录制分享页面提供内置转录内容
    • 若平台转录内容存在且带时间戳,则直接使用,跳过Whisper。
  2. 本地MLX-Whisper(默认备选方案——在Mac M系列设备上速度极快):
    bash
    # 安装一次:pip install mlx-whisper
    python3 -c "import mlx_whisper; mlx_whisper.transcribe('<file>', path_or_hf_repo='mlx-community/whisper-large-v3-turbo')" \
      > "<workdir>/transcript-raw.json"
    或通过CLI执行:
    mlx_whisper <file> --model mlx-community/whisper-large-v3-turbo --output-dir <workdir>
  3. whisper.cpp(若MLX不可用则进一步备选)
若为URL来源,先下载视频文件(使用yt-dlp;支持Loom/Vimeo/YT等平台):
bash
yt-dlp -f "bv*[height<=720]+ba/b[height<=720]" -o "<workdir>/video.%(ext)s" "<url>"
720p分辨率足以满足转录和帧分析需求(下载体积更小,处理速度更快)。
清理转录内容(仅针对YouTube自动字幕,其为滚动字幕;Whisper输出已为清晰格式):
bash
undefined

YouTube VTT cleanup — de-dup rolling captions, strip tags, paragraph-break on cue gaps >2s

YouTube VTT清理 — 去重滚动字幕、移除标签、在间隔超过2秒的字幕段间添加段落分隔

awk ' /^WEBVTT/ || /^Kind:/ || /^Language:/ || /^NOTE/ { next } /-->/ { in_cue = 1; last = ""; next } /^$/ { if (last) print last; in_cue = 0; last = ""; next } in_cue { gsub(/<[^>]+>/, "", $0); last = $0 } END { if (last) print last } ' "<workdir>/transcript.en.vtt" | awk '!seen[$0]++' > "<workdir>/transcript.txt"

Save final to `<workdir>/transcript.txt`.
awk ' /^WEBVTT/ || /^Kind:/ || /^Language:/ || /^NOTE/ { next } /-->/ { in_cue = 1; last = ""; next } /^$/ { if (last) print last; in_cue = 0; last = ""; next } in_cue { gsub(/<[^>]+>/, "", $0); last = $0 } END { if (last) print last } ' "<workdir>/transcript.en.vtt" | awk '!seen[$0]++' > "<workdir>/transcript.txt"

将最终结果保存至`<workdir>/transcript.txt`。

Step 6 — If
transcript
mode: stop here

步骤6 — 若为
transcript
模式:到此结束

Output:
  • transcript.txt
  • metadata.json
  • One-line summary in chat: title, source, duration, word count
  • Path to workdir
  • (Optional) Step 9 — offer to capture to second-brain
输出内容:
  • transcript.txt
  • metadata.json
  • 聊天窗口中的单行摘要:标题、来源、时长、字数
  • 工作目录路径
  • (可选)步骤9 — 提供保存至second-brain的选项

Step 7 — If
visual
mode: extract frames + vision pass

步骤7 — 若为
visual
模式:提取帧+视觉分析

Frame extraction (ffmpeg)

帧提取(ffmpeg)

Cadence by source heuristic:
Source typeFrame cadence
Screen-share / Loom / demo1 frame per 5s (UI changes fast)
Talking head / podcast1 frame per 30s (slow change)
Slide presentation1 frame per 10s + force a frame on each detected scene change
Default if unsure1 frame per 15s
bash
mkdir -p "<workdir>/frames"
ffmpeg -i "<workdir>/video.mp4" -vf "fps=1/15" "<workdir>/frames/frame-%04d.png" -y
For scene-change detection (slide decks especially):
bash
ffmpeg -i "<workdir>/video.mp4" -vf "select='gt(scene,0.3)',showinfo" -vsync vfr "<workdir>/frames/scene-%04d.png" 2> "<workdir>/scene-detection.log"
根据来源类型设置提取频率:
来源类型帧提取频率
屏幕共享 / Loom / 演示视频5秒1帧(UI变化快)
单人讲话 / 播客30秒1帧(变化慢)
幻灯片演示10秒1帧 + 检测到场景变化时强制提取1帧
不确定时默认15秒1帧
bash
mkdir -p "<workdir>/frames"
ffmpeg -i "<workdir>/video.mp4" -vf "fps=1/15" "<workdir>/frames/frame-%04d.png" -y
针对场景变化检测(尤其适用于幻灯片):
bash
ffmpeg -i "<workdir>/video.mp4" -vf "select='gt(scene,0.3)',showinfo" -vsync vfr "<workdir>/frames/scene-%04d.png" 2> "<workdir>/scene-detection.log"

Vision pass

视觉分析

Pair each frame with the transcript chunk for the same timestamp window. Then batch-send to Claude vision for synthesis.
Per-frame batch prompt (up to ~10 frames per call):
Here are N frames from a video at timestamps T1..TN. For each frame, describe what's on screen in 1–2 sentences. Flag: (a) UI changes from previous frame, (b) text visible on screen, (c) any moment that looks like a decision, action, or notable event. Also note the transcript text spoken during this window.
Save the output as
<workdir>/moments.md
:
markdown
undefined
将每一帧与对应时间窗口的转录片段配对,批量发送至Claude vision进行合成分析。
每帧批量提示(每次调用最多约10帧):
以下是视频在时间戳T1..TN的N帧画面。请为每一帧用1-2句话描述屏幕内容,并标记:(a) 与上一帧相比的UI变化,(b) 屏幕上可见的文字,(c) 任何看起来是决策、动作或重要事件的瞬间。同时记录该时间窗口内的转录文本。
将输出保存为
<workdir>/moments.md
markdown
undefined

Key moments — <title>

关键瞬间 — <title>

00:00:15 (frame-001.png)

00:00:15 (frame-001.png)

On screen: Login form, email field focused Transcript: "So you just open it up and..." Note: Beginning of UI demo
屏幕内容: 登录表单,邮箱输入框处于聚焦状态 转录文本: "So you just open it up and..." 备注: UI演示开始

00:00:45 (frame-002.png)

00:00:45 (frame-002.png)

On screen: Dashboard with 4 cards Transcript: "And here's where you see all your projects." Note: Major view change — first time the dashboard appears
undefined
屏幕内容: 包含4个卡片的仪表盘 转录文本: "And here's where you see all your projects." 备注: 视图重大变化 — 首次展示仪表盘
undefined

Generate summary

生成摘要

After moments are identified, synthesize the whole video into
<workdir>/summary.md
:
markdown
undefined
识别关键瞬间后,将整个视频内容合成为
<workdir>/summary.md
markdown
undefined

Summary — <title>

摘要 — <title>

Source: <source URL / file> Duration: hh:mm:ss Watched at: <date> Mode: visual
来源: <来源URL / 文件路径> 时长: hh:mm:ss 处理时间: <日期> 模式: visual

TL;DR

摘要(TL;DR)

<2–4 sentences>
<2-4句话>

Key moments

关键瞬间

  • 00:00:15 — <one-line>
  • 00:00:45 — <one-line>
  • 00:00:15 — <单行描述>
  • 00:00:45 — <单行描述>

Action items flagged

标记的行动项

  • <item> [timestamp]
  • <行动项> [时间戳]

Decisions flagged

标记的决策

  • <decision> [timestamp] — consider routing to /decide
  • <决策内容> [时间戳] — 建议路由至/decide指令

Quotes worth keeping

值得保留的引用

  • "..." [timestamp]
  • "..." [时间戳]

Open questions

未解答的问题

  • <question raised but not answered>
undefined
  • <提出但未解答的问题>
undefined

Step 8 — If
multimodal
mode

步骤8 — 若为
multimodal
模式

Backend selection

后端选择

  1. Gemini native if
    $GEMINI_API_KEY
    is set (much cheaper + faster than per-frame for long videos):
    Default model:
    gemini-3.5-flash
    (released May 2026, ~$1.50 input / $9 output per 1M tokens; ~$0.15/sec of video; beats 3.1 Pro on coding/agentic benchmarks at 4× the speed). Override to
    gemini-3.1-pro
    for brand audits / high-stakes analysis where details matter;
    gemini-2.5-flash-lite
    for bulk cheap processing.
    bash
    # Step 1: Upload video via Files API
    FILE_URI=$(curl -s -X POST "https://generativelanguage.googleapis.com/upload/v1beta/files?key=$GEMINI_API_KEY" \
      -H "X-Goog-Upload-Command: start, upload, finalize" \
      -H "Content-Type: video/mp4" \
      --data-binary "@<workdir>/video.mp4" | jq -r '.file.uri')
    
    # Wait until file is ACTIVE (Gemini processes the video first)
    while true; do
      STATE=$(curl -s "$FILE_URI?key=$GEMINI_API_KEY" | jq -r '.state')
      [ "$STATE" = "ACTIVE" ] && break
      sleep 3
    done
    
    # Step 2: Generate content with the file + multimodal-analysis prompt
    curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash:generateContent?key=$GEMINI_API_KEY" \
      -H "Content-Type: application/json" \
      -d "{
        \"contents\":[{
          \"parts\":[
            {\"file_data\":{\"mime_type\":\"video/mp4\",\"file_uri\":\"$FILE_URI\"}},
            {\"text\":\"<multimodal analysis prompt — see Step 7's summary template + use-case extensions>\"}
          ]
        }]
      }"
    Files persist in Gemini Files API for ~48 hours — useful for re-querying the same video with different prompts.
  2. Dense Claude vision fallback if no Gemini key:
    • Frame cadence: 1 frame per 3s (much denser than visual mode)
    • Batch through Claude vision with the multimodal-analysis prompt
    • Slower and more expensive than Gemini for long videos — warn the user before running on >10min content
  1. Gemini原生处理(若已设置
    $GEMINI_API_KEY
    ——比逐帧分析更便宜、更快,尤其适用于长视频):
    默认模型:
    gemini-3.5-flash
    (2026年5月发布,每1M输入令牌约1.5美元/输出令牌约9美元;每秒钟视频约0.15美元;在编码/智能体基准测试中表现优于3.1 Pro,速度快4倍)。若为品牌审核/高风险分析等需关注细节的场景,可替换为
    gemini-3.1-pro
    ;若为批量低成本处理,可使用
    gemini-2.5-flash-lite
    bash
    # 步骤1: 通过Files API上传视频
    FILE_URI=$(curl -s -X POST "https://generativelanguage.googleapis.com/upload/v1beta/files?key=$GEMINI_API_KEY" \
      -H "X-Goog-Upload-Command: start, upload, finalize" \
      -H "Content-Type: video/mp4" \
      --data-binary "@<workdir>/video.mp4" | jq -r '.file.uri')
    
    # 等待文件状态变为ACTIVE(Gemini需先处理视频)
    while true; do
      STATE=$(curl -s "$FILE_URI?key=$GEMINI_API_KEY" | jq -r '.state')
      [ "$STATE" = "ACTIVE" ] && break
      sleep 3
    done
    
    # 步骤2: 结合文件与多模态分析提示生成内容
    curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash:generateContent?key=$GEMINI_API_KEY" \
      -H "Content-Type: application/json" \
      -d "{
        \"contents\":[{
          \"parts\":[
            {\"file_data\":{\"mime_type\":\"video/mp4\",\"file_uri\":\"$FILE_URI\"}},
            {\"text\":\"<多模态分析提示 — 参考步骤7的摘要模板+用例扩展>\"}
          ]
        }]
      }"
    文件在Gemini Files API中保留约48小时——便于用不同提示重新查询同一视频。
  2. 密集型Claude视觉备选(若无Gemini密钥):
    • 帧提取频率:每3秒1帧(比visual模式密集得多)
    • 结合多模态分析提示批量发送至Claude vision
    • 处理长视频比Gemini慢且成本更高——处理超过10分钟的内容前需提醒用户

Multimodal output

多模态输出

Same
summary.md
template as Step 7 + an extended section:
markdown
undefined
使用与步骤7相同的
summary.md
模板,并添加扩展章节:
markdown
undefined

Multimodal observations

多模态观察

  • Body language / delivery: <observations on talking-head video>
  • Pacing: <fast/slow/uneven>
  • Visual style: <brand audit, ad review, design observations>
  • Audio quality / atmosphere: <music, silence, background>

Exact extra sections depend on the use case (brand audit, ad review, talk delivery review, client-call read). Use case is inferred from the source + the user's verbal framing when invoking.
  • 肢体语言/表达: <对单人讲话视频的观察>
  • 节奏: <快/慢/不均匀>
  • 视觉风格: <品牌审核、广告评审、设计观察>
  • 音频质量/氛围: <音乐、静音、背景音>

额外章节的具体内容取决于使用场景(品牌审核、广告评审、演讲效果评估、客户通话分析)。根据来源和用户调用时的表述推断使用场景。

Step 9 — Optional: capture to second-brain

步骤9 — 可选:保存至second-brain

After any mode completes, offer:
"Want to capture this to second-brain? I'll write a
call-<slug>.md
(or
meeting-
/
note-
/
resource-
) to
${SECOND_BRAIN_VAULT:-$HOME/Documents/SecondBrain}/raw/
with the summary, source URL, and transcript link."
Type prefix by source:
SourcePrefix
Loom / Zoom / Riverside / Otter / call recording
call-
Meeting (own notes, not a transcript)
meeting-
Talk / keynote / conference
note-
Ad / landing-page video / marketing reference / competitor video
resource-
File body: 1-line source, the summary, link to full workdir.
任意模式完成后,向用户提供选项:
"是否要将内容保存至second-brain?我会将摘要、来源URL和转录链接写入
call-<slug>.md
(或
meeting-
/
note-
/
resource-
格式),保存至
${SECOND_BRAIN_VAULT:-$HOME/Documents/SecondBrain}/raw/
目录。"
根据来源设置文件前缀:
来源前缀
Loom / Zoom / Riverside / Otter /通话录制
call-
会议(自有笔记,非转录内容)
meeting-
演讲/主旨发言/会议
note-
广告/落地页视频/营销参考/竞品视频
resource-
文件内容:单行来源信息、摘要、完整工作目录链接。

Step 10 — Report

步骤10 — 结果反馈

In chat:
  • One-line headline:
    <source> · <title> · <duration> · <mode> · <word count> words
  • Workdir path
  • For
    visual
    /
    multimodal
    : brief list of top 3 key moments
  • For all modes: any action items / decisions flagged for triage
  • If captured to second-brain: that path too
在聊天窗口中展示:
  • 单行标题:
    <来源> · <标题> · <时长> · <模式> · <字数> 字
  • 工作目录路径
  • 若为
    visual
    /
    multimodal
    模式:简要列出Top3关键瞬间
  • 所有模式:标记出需优先处理的行动项/决策
  • 若已保存至second-brain:同时展示该路径

Sources reference

来源参考

SourceDownloadBuilt-in transcriptNotes
YouTube
yt-dlp
Auto-subs (
--write-auto-sub
)
Same as the prior youtube-transcript skill
Loom
yt-dlp
(Loom supported)
Yes — fetch via embed metadata or Loom APIAsync screenshare focus — prime use case
Vimeo
yt-dlp
SometimesMarketing/embed videos
RiversideDirect URL from export, or local fileYes — Riverside generates themPodcast episodes
ZoomLocal
.mp4
(downloaded recordings)
Sometimes (Zoom audio transcript file)Client calls
X / IG / TikTokDefer to
social-fetch
for metadata, yt-dlp for file
NoShort-form
Local filen/an/aDrop a path
来源下载方式内置转录内容备注
YouTube
yt-dlp
自动字幕(
--write-auto-sub
与之前的youtube-transcript技能一致
Loom
yt-dlp
(支持Loom)
是 — 通过嵌入元数据或Loom API获取异步屏幕共享场景的首选
Vimeo
yt-dlp
部分支持营销/嵌入视频
Riverside导出的直接URL或本地文件是 — Riverside自动生成播客节目
Zoom本地
.mp4
(下载的录制文件)
部分支持(Zoom音频转录文件)客户通话
X / IG / TikTok委托
social-fetch
获取元数据,yt-dlp获取文件
短视频
本地文件无需下载直接提供文件路径

Composes with

可组合技能

  • social-fetch
    — for X/IG/TikTok URL metadata (engagement, author, replies) before video processing
  • second-brain
    — capture summary as
    raw/call-<slug>.md
    ,
    meeting-
    ,
    note-
    , or
    resource-
    per source type
  • decide
    — when a video contains a flagged decision, route to
    /decide
    for structured capture
  • pm
    — action items flagged in summary can be triaged to project boards
  • slide-deck
    — talk recordings → outline extraction → deck draft (loop)
  • jab-hook
    — quotes + clip-worthy moments from podcast/talk videos feed BIP/promo posts
  • skillify from-video
    — primary use case for
    visual
    mode on process recordings. the user records themselves doing a workflow (Loom/screen-share), this skill extracts transcript + key visual moments, then
    skillify
    synthesizes the workflow into a SKILL.md. "Record once, AI converts to skill."
  • social-fetch
    — 处理X/IG/TikTok URL时,先获取元数据(互动量、作者、评论)再处理视频
  • second-brain
    — 根据来源类型将摘要保存为
    raw/call-<slug>.md
    meeting-
    note-
    resource-
    格式
  • decide
    — 当视频中包含标记的决策时,路由至
    /decide
    指令进行结构化记录
  • pm
    — 摘要中标记的行动项可分流至项目看板
  • slide-deck
    — 演讲录制内容 → 提取大纲 → 生成演示文稿草稿(循环流程)
  • jab-hook
    — 从播客/演讲视频中提取引用和值得剪辑的片段,用于BIP/推广内容
  • skillify from-video
    visual
    模式的主要用例:用户录制自己的工作流程(Loom/屏幕共享),本技能提取转录内容+关键视觉瞬间,然后
    skillify
    将工作流程合成为SKILL.md。"一次录制,AI转换为技能文档。"

Error handling

错误处理

FailureResponse
Video unavailable / private / region-lockedReport and stop
No subtitles + Whisper not installedTell the user:
pip install mlx-whisper
(Mac)
ffmpeg missing (for visual/multimodal)Tell the user:
brew install ffmpeg
Vision pass returns empty / unclearLower the frame count, retry, or fall back to transcript-only with a note
Multimodal requested but no
$GEMINI_API_KEY
and >30min video
Warn cost, offer to fall back to visual mode
yt-dlp
binary missing
brew install yt-dlp
故障场景响应方式
视频不可用/私密/区域限制告知用户并终止处理
无字幕且未安装Whisper告知用户:
pip install mlx-whisper
(Mac)
缺少ffmpeg(用于visual/multimodal模式)告知用户:
brew install ffmpeg
视觉分析返回空内容/结果模糊降低帧数量,重试,或返回仅转录内容并备注
请求multimodal模式但未设置
$GEMINI_API_KEY
且视频时长>30分钟
提醒成本,提供切换至visual模式的选项
缺少
yt-dlp
二进制文件
brew install yt-dlp

Notes on quality

质量说明

  • User picks depth, not the skill. Transcript / visual / multimodal are 3 different cost + latency profiles. Long videos (>10 min) always confirm before spending on visual/multimodal.
  • Platform transcript first, Whisper second. YouTube auto-subs, Loom transcripts, Riverside built-in transcripts — all free + instant when they exist. Fall back to MLX-Whisper local only when nothing platform-provided works.
  • MLX-Whisper local is the fast path on Mac. M-series machines transcribe faster than real-time. Cloud Whisper is a distant second choice — costs money, network dependency, worse latency on typical durations.
  • Frame cadence by source type. Screen-share / demos need 1 frame per 5s (UI changes fast); talking-head podcasts need 1 per 30s (slow change). Default 15s if unsure. Wrong cadence = missed key moments OR wasted vision-pass cost.
  • 720p is plenty. Downloading 1080p / 4K for transcription + frame analysis wastes bandwidth + storage.
    yt-dlp -f "bv*[height<=720]+ba/b[height<=720]"
    is the default.
  • Scene-change detection catches slide transitions. When the video is a slide presentation, add
    ffmpeg -vf "select='gt(scene,0.3)'"
    to force a frame on each detected slide change — more reliable than pure time-based sampling.
  • Multimodal cost warning is non-optional. Gemini multimodal on a 60-min video is meaningfully expensive. Warn before running; offer transcript-only as fallback if the user isn't sure.
  • Summary format includes routing hints.
    ## Decisions flagged
    +
    ## Action items flagged
    sections signal
    /decide
    and
    /pm
    follow-ups. Downstream composability lives in the summary structure.
  • 由用户选择处理深度,而非技能自动决定。Transcript/visual/multimodal对应三种不同的成本+延迟方案。处理长视频(>10分钟)时,在启用visual/multimodal模式前必须确认用户意愿。
  • 优先使用平台转录内容,其次是Whisper。YouTube自动字幕、Loom转录内容、Riverside内置转录内容——这些均为免费且可即时获取。仅当无平台提供的转录内容时,才使用本地MLX-Whisper。
  • 本地MLX-Whisper是Mac设备的快速方案。M系列设备转录速度快于实时。云端Whisper是远次一等的选择——产生费用、依赖网络、在常规时长下延迟更高。
  • 根据来源类型设置帧提取频率。屏幕共享/演示视频需每5秒1帧(UI变化快);单人讲话播客需每30秒1帧(变化慢)。不确定时默认15秒。错误的频率设置会导致错过关键瞬间或浪费视觉分析成本。
  • 720p分辨率足够。下载1080p/4K视频用于转录+帧分析会浪费带宽和存储空间。默认使用
    yt-dlp -f "bv*[height<=720]+ba/b[height<=720]"
  • 场景变化检测可捕捉幻灯片切换。若视频为幻灯片演示,添加
    ffmpeg -vf "select='gt(scene,0.3)'"
    强制在检测到幻灯片变化时提取帧——比纯基于时间的采样更可靠。
  • 多模态模式的成本提醒必不可少。Gemini多模态处理60分钟视频的成本相当可观。运行前必须提醒用户;若用户不确定,提供仅转录模式作为备选。
  • 摘要格式包含路由提示
    ## 标记的决策
    +
    ## 标记的行动项
    章节为
    /decide
    /pm
    后续操作提供信号。下游可组合性体现在摘要结构中。