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 パイプライン経由
動画は Inngest イベントバス経由で取り込みます。yt-dlp、mlx-whisper、scp を実行したり、Vault ノートを手動で作成したりしないでください。 パイプラインがダウンロード → NAS への転送 → 文字起こし → Vault ノート作成 → 要約の拡充まで、すべて処理します。
クイックスタート
joelclaw send pipeline/video.requested -d '{"url":"URL_HERE"}'
# legacy alias still accepted
joelclaw send pipeline/video.download -d '{"url":"URL_HERE"}'
以上です。残りはイベントチェーンが処理します。
別の方法(raw 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/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
送信前:ヘルスチェック
イベントを送信する前に、必ずパイプラインが正常に稼働していることを確認してください。
# 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}}"
ワーカーが停止している場合:
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"}'
要約のみを再実行する
Vault ノートは存在するものの、より良い要約が必要な場合:
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 ノート | ~/Vault/Resources/videos/SLUG.md |
| デイリーノートのリンク | ## Videos の下の ~/Vault/Daily/YYYY-MM-DD.md |
| ランタイムテレメトリー | joelclaw otel(Typesense/ClickHouse の otel_events) |
| 永続的なソースの記録 | Vault ノートと、起点となった Inngest イベント/実行 |
トラブルシューティング
イベントが受け付けられて(200 OK)も何も起きない場合:
-
Docker からワーカーへの接続を確認する — 最もよくある問題です:
docker logs $(docker ps -q --filter ancestor=inngest/inngest) 2>&1 | grep -E "ERROR|Unable" | tail -5「Unable to reach SDK URL」と表示される場合は、inngest スキルの serveHost に関する注意点を確認してください。
-
ワーカーが実際に稼働していることを確認する:
kubectl get deploy -n joelclaw system-bus-worker kubectl get pods -n joelclaw -l app=system-bus-worker -
該当する関数のワーカーエラーを確認する:
kubectl logs -n joelclaw deploy/system-bus-worker --tail=80 -
特定の実行 ID を GraphQL で詳しく調べるには、inngest-debug スキルを使用します。
やってはいけないこと
- ❌
yt-dlpを直接実行しないでください — ダウンロードと NAS への転送はパイプラインが処理します - ❌
mlx_whisperを直接実行しないでください — 文字起こしはパイプラインが処理します - ❌ 手動で NAS に
scpしないでください — 転送はパイプラインが処理します - ❌ Vault ノートを手動で作成しないでください — 適切なフロントマター付きでパイプラインが作成します
- ❌ 動画の処理に codex/バックグラウンドタスクを使わないでください — Inngest は永続性があり、再試行も行います