关于 video-ingest
video-ingest 是通过 Inngest 事件触发的视频与转录处理技能,面向需要将视频纳入 vault 的操作者。它协调下载、NAS 传输、转录和摘要流程,并提供监控与批量提交方法。
主要功能
- 01事件触发视频处理流程
- 02自动下载并传输至 NAS
- 03自动转录并生成 vault 笔记
- 04支持批量提交视频
- 05提供运行监控与故障排查
适用场景
- 01提交视频 URL 并生成笔记
- 02处理已有音频或原始转录文本
- 03批量排队处理多个视频
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ joelhooks/ joelclaw --skill video-ingest安装后在 Claude Code 中输入/video-ingest确认已加载。
详细介绍
视频摄取 — 通过 Inngest Pipeline
视频通过 Inngest 事件总线摄取。请勿运行 yt-dlp、mlx-whisper、scp,也不要手动创建知识库笔记。 Pipeline 会处理所有步骤:下载 → 传输到 NAS → 转录 → 知识库笔记 → 摘要补充。
快速开始
joelclaw send pipeline/video.requested -d '{"url":"URL_HERE"}'
# legacy alias still accepted
joelclaw send pipeline/video.download -d '{"url":"URL_HERE"}'
就这样。事件链会处理剩下的所有工作。
另一种方式(原始 curl):
curl -s -X POST "http://localhost:8288/e/$INNGEST_EVENT_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"pipeline/video.requested","data":{"url":"URL_HERE"}}'
Pipeline 流程
pipeline/video.requested — you send this (legacy alias: pipeline/video.download)
↓
video-download function — yt-dlp → /tmp → NAS transfer
↓ emits
pipeline/video.downloaded — logged by system-logger
pipeline/transcript.requested — auto-triggered (legacy alias: pipeline/transcript.process)
↓
transcript-process function — mlx-whisper (M4 Pro, ~5min/hr of video)
↓ emits
pipeline/transcript.processed — logged
content/summarize.requested — auto-triggered (legacy alias: content/summarize)
↓
content-summarize function — pi enrichment → vault note with summary
↓ emits
content/summarized — logged, done
发送前:健康检查
发送事件前,请务必确认 Pipeline 运行正常:
# Inngest server
curl -s http://localhost:8288/health
# Worker (should show functions including video-download)
curl -s http://localhost:3111/ | python3 -c "
import json,sys
d=json.load(sys.stdin)
fns = [f.get('id','?') for f in d.get('functions',[])]
print(f'Worker OK — {len(fns)} functions: {', '.join(fns)}')
"
# Docker container running
docker ps --filter ancestor=inngest/inngest --format "table {{.Status}}\t{{.Ports}}"
如果 worker 已停止:
kubectl -n joelclaw rollout restart deployment/system-bus-worker
kubectl -n joelclaw rollout status deployment/system-bus-worker --timeout=180s
joelclaw refresh
监控运行情况
实时查看进度
# Worker logs — shows step execution + failures
kubectl logs -n joelclaw deploy/system-bus-worker -f
# Docker logs — shows event dispatch
docker logs -f $(docker ps -q --filter ancestor=inngest/inngest) 2>&1 | grep -v DEBUG
检查事件是否已触发
# Look for the video's events in Docker logs
docker logs $(docker ps -q --filter ancestor=inngest/inngest) 2>&1 | grep -i "video\|transcript\|summarize" | tail -20
仪表板
在浏览器中打开 http://localhost:8288 — 查看函数、事件和运行情况,以及每个步骤的跟踪记录。
验证是否完成
# Check if vault note was created
ls -la ~/Vault/Resources/videos/*SLUG*
# Check canonical telemetry for pipeline entries
joelclaw otel search "video|transcript|summarize" --hours 24
批量摄取
发送多个事件。Inngest 会将它们排队,并通过并发控制进行处理:
joelclaw send pipeline/video.requested -d '{"url":"https://youtube.com/watch?v=XXXX"}'
joelclaw send pipeline/video.requested -d '{"url":"https://youtube.com/watch?v=YYYY"}'
joelclaw send pipeline/video.requested -d '{"url":"https://youtube.com/watch?v=ZZZZ"}'
手动转录(非 YouTube)
对于已存储在磁盘上的音频文件,或来自 Granola/Fathom 的原始文本:
# From audio file
joelclaw send pipeline/transcript.requested -d '{"source":"manual","audioPath":"/path/to/audio.mp4","title":"Recording Title","slug":"recording-title"}'
# From raw text (Granola, Fathom, etc.)
joelclaw send pipeline/transcript.requested -d '{"source":"granola","text":"transcript text...","title":"Meeting Title","slug":"meeting-title"}'
仅重新生成摘要
如果知识库笔记已存在,但需要更好的摘要:
joelclaw send content/summarize.requested -d '{"vaultPath":"/Users/joel/Vault/Resources/videos/SLUG.md"}'
选项
| 字段 | 默认值 | 描述 |
|---|---|---|
url | 必填 | YouTube 或视频 URL |
maxQuality | "1080" | 视频最高分辨率:"720"、"1080"、"4k" |
文件存放位置
| 内容 | 位置 |
|---|---|
| 视频和元数据 | NAS:/volume1/home/joel/video/YYYY/SLUG/ |
| 知识库笔记 | ~/Vault/Resources/videos/SLUG.md |
| 每日笔记链接 | ~/Vault/Daily/YYYY-MM-DD.md 中的 ## Videos 下 |
| 运行时遥测数据 | joelclaw otel(Typesense/ClickHouse 中的 otel_events) |
| 持久化来源凭据 | 知识库笔记,以及发起该流程的 Inngest 事件/运行记录 |
故障排除
如果事件已被接受(200 OK),但没有任何后续操作:
-
检查 Docker→worker 的连通性 — 这是最常见的问题:
docker logs $(docker ps -q --filter ancestor=inngest/inngest) 2>&1 | grep -E "ERROR|Unable" | tail -5如果看到“Unable to reach SDK URL” → 请参阅 inngest skill 中关于 serveHost 的注意事项。
-
检查 worker 是否确实在运行:
kubectl get deploy -n joelclaw system-bus-worker kubectl get pods -n joelclaw -l app=system-bus-worker -
检查特定函数的 worker 错误:
kubectl logs -n joelclaw deploy/system-bus-worker --tail=80 -
使用 inngest-debug skill,通过 GraphQL 深入检查特定运行 ID。
请勿执行的操作
- ❌ 不要直接运行
yt-dlp— Pipeline 会处理下载和传输到 NAS - ❌ 不要直接运行
mlx_whisper— Pipeline 会处理转录 - ❌ 不要手动使用
scp传输到 NAS — Pipeline 会处理传输 - ❌ 不要手动创建知识库笔记 — Pipeline 会使用正确的 frontmatter 创建笔记
- ❌ 不要使用 codex/后台任务处理视频 — Inngest 支持持久化执行和重试
评论
支持 Markdown