full-pipeline
いつ使うか(必ず発火する条件)
- ユーザーが「素材から動画を作って」「全自動で」「編集して」「粗編集を作って」と言ったとき
- rough cut まで、または final package までを途中 stage を跨いで進めたいとき
- 既存 project に artifact はあるが、「途中から再開して」「続きから直して」と言われたとき
このスキルは orchestration 専用。 通常は repo 公式の単一エントリ npm run full-pipeline -- --project <id> --source-dir <dir> を使う。失敗時や部分再実行だけ、既存 stage Skill を Gate 付きでつなぐ。
実行可能契約
- Manifest:
.agents/skills/agent-skill-contracts.json - Commands:
npm run full-pipeline -- --project <project-id> --source-dir <source-dir>,npx tsx scripts/analyze.ts,npx tsx scripts/editorial-agent-task.ts,npx tsx scripts/compile-timeline.ts,npm run render-route,npm run package - Public flags:
--project,--source-dir,--content-hint,--from,--skip-analyze,--skip-footage-db,--skip-render,--skip-qa,--no-qwen3vl,--no-clap-audio,--help - Resume stages:
ingest,stt,marlin,visual-quality,peak,embeddings,triage,blueprint,compile,render,QA
上記は生成manifestと契約テストで検証される。analyze-footage など個別stageの
フラグを、公開 full-pipeline CLIのフラグとして扱わないこと。
前提条件
- この repo の正式デフォルトは
npm run full-pipeline。内部では既存のanalyze -> build-footage-db -> editorial-pipelineの意味論を保ったまま連結する - 実行中は staged progress / ETA を表示し、実測時間を
03_analysis/pipeline-timings.jsonに追記する - 次回実行では
pipeline-timings.jsonを優先して ETA を出し、履歴が無い stage はsegments.jsonのセグメント数から粗く見積もる。どちらも無ければ計測中と表示する - 開始前に
references/gate-conditions.mdを読むこと - 失敗時や再実行時は
references/recovery-playbook.mdを読むこと - Gate 番号は full-pipeline 用の orchestration 定義であり、runtime の内部 gate 名とは 1 対 1 ではない
- Gate 1 は実質
analysis_gate - Gate 3 は実質
compile_gate - Gate 5 の後ろで
planning_gateも確認する - Gate 7 は実質
review_gate - Gate 9-10 は
packaging_gateとcheckGate10()に対応する
- Gate 1 は実質
- 進行判断は「一番下流の file があるか」ではなく「最も早く失敗した Gate はどこか」で決める
やること(ステップ)
Step 0: ゴールと再開地点を決める
- まず user が rough cut (
06_review/*まで) を欲しいのか、final package (07_package/*まで) を欲しいのかを切り分ける - fresh run で source dir があるなら、既定では次を使う:
npm run full-pipeline -- --project <project-id> --source-dir <source-dir> --content-hint "<hint>"
- 既存 project の途中再開なら、失敗 stage に応じて
--from <stage>、または下記 Gate に対応する個別 skill / CLI を使う - つぎに Gate 10 から Gate 0 へ逆順で artifact を点検し、最初に失敗する Gate を再開地点にする
- 既存 artifact があっても upstream が変わっていれば stale とみなす。
runtime/state/reconcile.tsの invalidation matrix に従い、以下のように巻き戻す- brief または analysis が変わったら
select-clipsからやり直す - selects または
STYLE.mdが変わったらbuild-blueprintからやり直す - blueprint が変わったら
compile-timelineからやり直す - timeline または
human_notes.yamlが変わったらreview-roughcutをやり直す caption_approval.json、music_cues.json、qa-report.jsonが変わったら package artifact をやり直す
- brief または analysis が変わったら
- BGM希望時はBGM Pack Registryとレビュー済みライブラリを先に使う。利用可能曲がなければ人間レビューへ回し、案件内で通常BGMを手続き生成して穴埋めしない。例外は明示的な短い
simple_soundのみ。 - 複数尺・複数比率を同時制作する場合は、納品物ごとに brief / variant contract を分ける。長尺の
original_onlyやBGMなし判断を短尺へ、短尺のaggressive hookを長尺へ暗黙継承しない。
Step 1: Gate 0 を確認する
- fresh run なら素材ファイルまたは素材フォルダが存在することを確認する
- resume で Gate 1 以降の artifact が valid なら、raw media を再解析しない限り Gate 0 は再通過扱いでよい
- Gate 0 が落ちたら進めない。正しい素材パスを確定してから再開する
Step 2: Gate 1 を通す
03_analysis/assets.jsonと03_analysis/segments.jsonが無い、壊れている、または stale ならanalyze-footageを使うgap_report.yamlの blocking な欠落でqc_statusがblockedなら先に analysis をやり直すqc_statusがpartialの場合、matching なanalysis_overrideがあるときだけ後続に進める- API key や外部推論が足りない場合は、個別
analyze-footageCLI にある--skip-stt、--skip-vlm、--skip-diarize、--skip-peakだけを使って degraded path を明示する。これらは公開full-pipelineCLI のフラグではない
Step 3: Gate 2 と Gate 3 を通す
creative_brief.yamlが無い、schema invalid、または stale ならdesign-intentを使うunresolved_blockers.yamlにstatus: blockerがあれば Gate 3 失敗。勝手に compile に進まない- blocker を消す場合は
design-intentを再実行して brief / blockers を更新する - 仮置き assumption で進める場合も、user 合意を取ったうえで blocker 側に反映してから進む
Step 4: Gate 4 を通す
04_plan/selects_candidates.yamlが無い、schema invalid、candidate が 0 件、または brief / analysis 更新で stale ならselect-clipsを使う- referential integrity まで含めて通す。
segment_id/asset_idが analysis artifact に存在しないならやり直す
Step 5: Gate 5 を通す
04_plan/edit_blueprint.yamlが無い、schema invalid、または stale ならbuild-blueprintを使う- さらに
04_plan/uncertainty_register.yamlを確認し、status: blockerが残るなら planning blocker とみなして止める - blueprint file が存在しても uncertainty blocker がある状態では、そのまま review / package まで自動で進めない
Step 6: Gate 6 を通す
compile-timelineを使って05_timeline/timeline.jsonを作る- compile 後は必ず post-compile validation を見る。
timeline.jsonが schema invalid なら Gate 6 失敗 - brief / user feedback がタイトル、章ラベル、質問カード、強調語、lower third
などの設計済みグラフィックを要求する場合、それらを
timeline.jsonの overlay clip に登録済みcontent-element/v1として記録する。プロジェクト固有の JSX / HTML / 別タイムラインを作らない - blueprint beat に
viewer_labelがある場合、HyperFrames/Remotionの章ラベル本文には 構造用labelではなくviewer_labelを使う。HOOK/LEVEL 1/PAYOFF/ENDINGのような内部設計語を、briefの明示指定なしに画面表示へ流用しない - content element を追加したら
npm run render-route -- projects/<project-id>を実行し、 必要な Remotion / HyperFrames ownership が選ばれていることを Gate 7 前に確認する。 要素がないのにSNSジャンルという理由だけで Remotion を強制しない - 失敗時は compile error をそのまま downstream patch でごまかさず、
references/recovery-playbook.mdに従って upstream stage に戻る
Step 7: Gate 7 を通す
review-roughcutを使って06_review/review_report.yamlとreview_patch.jsonを作るtimeline.jsonが変わった直後の review は省略しないfatal_issuesが 1 件でもあれば Gate 7 失敗。package には進まない
Step 8: Gate 8 を通す
review_patch.jsonに safe op があるならcompile-timelineの patch mode で適用する- patch 後は
timeline.jsonを再検証し、必ずreview-roughcutを再実行する - patch が empty、unsafe、または compile 後 schema invalid の場合は Gate 8 失敗。report の root cause に従って
build-blueprintかselect-clipsに戻る
Step 9: Gate 9 を通す
- user が rough cut だけを求めているなら Gate 7 または Gate 8 で止める
- final output が必要なら
references/gate-conditions.mdの Gate 9 前提を確認する - speech caption はジャンルを問わず semantic caption timing を確認する
caption_policy.semantic_timing.mode: speech_syncを基本とし、字幕cue全体が発話 onset より 大きく先行しないようにする。読みやすさのための微先行は既定で最大2フレーム- オチ・驚き語・結果語がある場合だけ
mode: protect_revealsに上げ、anchor_textを setup から分離して、word onset から既定1フレーム後に出す - anchor は word timing、発話冒頭、明示
source_start_us/timeline_frameのいずれかで 根拠を持たせる。文字数比例で時刻を推測しない caption_timing_report.jsonに block がある、または caption review にunresolved_reveal_anchorがある場合は承認・burn-in・Remotion renderへ進まない- インタビュー、講義、アクセシビリティ字幕にも
speech_syncは適用するが、 音声後へ一律遅延はしない。protect_revealsと分割は明示anchorがある場合だけに限定する
- 特に operator accept または creative override を経た
approvedstate、handoff decision、caption / music prerequisite、engine_renderならassembly.mp4、nle_finishingなら supplied final の有無を確認する
Step 10: Gate 10 を通す
- Gate 9 が通ったら
render-videoを使う qa-report.jsonが fail なら packaged に進めない。失敗した QA 項目を直して Gate 9 からやり直すengine_renderではaudio-mix-report.jsonが存在し、audio_mix_policy_validとloudness_target_validがpassしていることを確認するpackage_manifest.jsonとqa-report.jsonが揃い、QA が pass して初めて完了扱いにする- Studio確認またはPremiere handoffを行う場合は
playback-contract-statusがexactであることも確認する。timeline更新後の古いpreviewを完成物として開かない
進捗 / ETA
- 表示形式は
[3/10] triage 実行中... 経過 1m32s / 推定残り ~4m (全体 ~7m)を基準にする - TTY では同じ行を更新し、非 TTY ではログ行として追記される
- stage は
ingest,stt,marlin,visual-quality,peak,embeddings,triage,blueprint,compile,render,QA 03_analysis/pipeline-timings.jsonは履歴 artifact。削除せず、次回 ETA の材料として扱う- エラー時は失敗 stage 名、次に試す再実行コマンド、
troubleshoot-errorskill への誘導を表示する
出力 artifact
01_intent/*03_analysis/*04_plan/*05_timeline/*06_review/*- 条件が揃っていれば
07_package/* - renderをskipしなければ
09_output/rough-cut.mp4
注意事項
scripts/editorial-agent-task.ts --mode interactiveを使う場合、rough/fine prompt出力時点は応答待ちであり完了ではない。応答適用後は共有downstreamで compile/render/QA/statusまで進み、--skip-qa時はQA_SKIPPEDblockerを残す- current repo の
review.mp4は placeholder で、実 preview render ではない - final render は
assembly.mp4前提なので、timeline.jsonだけではfinal.mp4まで進めない - programmable graphics の authority も
timeline.json。remotion-social/entry.tsxのような project-local renderer を完成物の再現経路にしない - Gate 7 や Gate 8 が落ちたときは、無理に patch を盛るより earliest failing gate へ戻る
- user が「全自動」と言っても、Gate 3 の blocker 解消や Gate 10 の handoff decision のような human decision は残る