name: wf-new description: "Use when まだコレクションディレクトリが存在せず、新規コレクション制作を立ち上げたいとき。「新しいコレクション始めたい」「制作開始」「新規ワークフロー」など、企画選択からディレクトリ作成・素材準備までを行う初期化フェーズで使用する。既存コレクションの進行は /wf-next"
Overview
新コレクション開始オーケストレーター。通常は企画選択 + サムネイル承認の2箇所で一時停止する。 minimal mode では企画候補生成前にテーマ / ジャンル / 雰囲気の直接入力確認が追加される。 アナリティクス未収集の新チャンネルでも、ベンチマークまたはユーザー直接入力で初回企画を開始する。
このセッションで初めて
/wf-*を呼ぶ場合は、先にdocs/workflow-cheatsheet.mdの判定フローを 1 回だけユーザーに提示すること(CLAUDE.md §6 参照)。
When to Use
| 状況 | 使う? |
|---|---|
| 制作中コレクションが無い + 新しく始めたい | ✅ 使う |
| 「次なに作る?」とだけ聞かれた(企画候補が未確定) | ❌ 先に /collection-ideate で候補を出す(/wf-new 内部でも呼ぶが、単独で候補だけ見たいなら直接 /collection-ideate) |
| 既存コレクションを次工程へ進めたい | ❌ /wf-next を使う |
| 進捗だけ知りたい | ❌ /wf-status を使う |
/wf-new は workflow-state.json を 新規作成し自動更新する。ユーザーが手で編集してはいけない(扱い基準)。
前提
config/channel/ が存在すること(load_config() でロード可能)。
存在しない場合、ユーザーに確認:
- 新規チャンネル →
/channel-newを案内 - 既存チャンネル(YouTube で既に運営中)→
/channel-importを案内
Instructions
テーマはこの段階では不要。企画の結果でテーマが決定される。
データ収集は /analytics-collect(yt-analytics のラッパー)が担当するため、workflow からは呼び出さない。必要に応じてユーザー側で cron / launchd に登録する運用。
Phase 1: 企画(自動実行 + 入力モードに応じた一時停止)
Step 1(企画)を自動実行中...
- 入力モード判定 —
/collection-ideateを呼ぶ前に以下を確認し、同じ条件を/collection-ideateに引き継ぐ
| モード | 判定条件 | /collection-ideate の入力 |
|---|---|---|
| analytics mode | reports/analysis_*.md が存在し、stale ではない |
日次収集データ + ベンチマーク + config |
| benchmark fallback mode | reports/analysis_*.md が存在せず、data/benchmark_*.json が存在する |
ベンチマークデータ + config |
| minimal mode | reports/analysis_*.md と data/benchmark_*.json がどちらも存在しない |
ユーザー直接入力(テーマ / ジャンル / 雰囲気)+ config |
reports/analysis_*.md が存在するが stale の場合は fallback せず、/analytics-analyze 再実行を案内して中断する。古い分析と別入力の混在を避けるため。
- Skill ツールで
/collection-ideateを実行 — 入力モードに応じて企画候補をプレビューサムネイル付きで生成- analytics mode: 日次収集データ + ベンチマークを基に分析 + ペルソナ別候補を生成
- benchmark fallback mode: 自チャンネル分析をスキップし、ベンチマークデータ + config から初回候補を生成
- minimal mode: テーマ / ジャンル / 雰囲気をユーザーに確認し、その直接入力 + config から初回候補を生成
/collection-ideate の出力が表示された後、ユーザーに企画選択のみ求める:
- 選択肢: 提示された候補のいずれか
- トラック数・音楽エンジンは確認しない(
config/channel/*.jsonの設定に従う) - ここでフローが一時停止し、ユーザーの入力を待つ
エラーハンドリング:
- analytics mode で
/collection-ideateがエラー → エラー内容を表示して中断。分析データの確認を案内 - benchmark fallback mode / minimal mode で
/collection-ideateがエラー → エラー内容を表示して中断。入力モードと不足データを明示して再入力または/benchmarkを案内
Phase 2: 選択後の処理(自動)
ユーザーが企画を選択したら、以下を自動実行する:
2a. コレクション初期化(ディレクトリ + workflow-state.json)
以下の Python スクリプトを実行してコレクションディレクトリと workflow-state.json を自動生成する:
uv run yt-init-collection "<Collection Name>" "<theme-slug>" --track-count <N> --selected-plan <A-E> --music-engine <suno|lyria>
<Collection Name>: 企画で決定したコレクション表示名<theme-slug>: ハイフン区切りのテーマスラッグ(例:brigid-hearth)--track-count: 確認済みトラック数(デフォルト 12)--selected-plan: 選択された企画(A〜E)--music-engine: 音楽エンジン(suno/lyria)。省略時はconfig/channel/youtube.jsonのmusic_engineが使われる。コレクション単位で上書きしたいときのみ明示する
スクリプトが以下を自動実行:
collections/planning/YYYYMMDD-<short>-<theme>-collection/ディレクトリ作成- サブディレクトリ(10-assets, 20-documentation)作成
workflow-state.json初期化(stage=planning, phase=planning-approved)
出力されたパスを後続ステップで使用する。フルスキーマは references/schema.md を参照。
2a-2. scene_phrases 初期化(多言語対応コレクションのみ)
多言語タイトル生成で必須となる workflow-state.json.scene_phrases を投入する:
uv run yt-populate-scene-phrases <collection-dir-name>
<collection-dir-name>: 2a で作成されたYYYYMMDD-<short>-<theme>-collectionのディレクトリ名- 英語フレーズは
config/channel/content.jsonのtitle.theme_scenes[<theme>].sceneから自動解決され、Vertex AI Gemini でlocalizations.json.supported_languages全件に翻訳されて書き込まれる supported_languagesが 1 言語以下のチャンネルでは CLI 側で自動スキップされるため、条件分岐は不要(そのまま呼んで構わない)- 既に
scene_phrasesが存在する場合もスキップ(--overwriteで上書き可能) theme_scenes[<theme>]が未定義の場合は--en "<custom phrase>"で英語フレーズを明示指定する。詳細はreferences/scene_phrases.md参照
エラーハンドリング:
theme_scenes未定義 +--en未指定 → エラー終了。config/channel/content.jsonのtitle.theme_scenesに該当 theme を追加するか、--enを渡して再実行- Gemini 呼び出し失敗 → エラーを報告して続行(メタデータ生成前に
/wf-nextから再実行可能)
2b. ドキュメント保存
Phase 1 の成果物を 20-documentation/ に保存:
- 企画候補一覧と選択結果
2c. サムネイル確定 + 音楽素材生成
- 選択した企画のプレビュー画像をコレクションの
10-assets/main.pngにコピー(/collection-ideateで本番品質で生成済み) - プレビューディレクトリの自セッション分を削除
- サムネイル確定:
single_stepモードまたはimage_generation.provider: codexの場合:/collection-ideateのプレビュー画像がテキスト込みの完成サムネイルなので、/thumbnailは不要。 ただし QA は必ず通す(#570、プレビュー = 最終 thumbnail だと品質チェックが一切走らない経路を塞ぐ):- 必須 QA(最低限): Read ツールで
main.pngを等倍プレビューし、以下を目視確認する- 手・指の解剖学: キャラが手を出している場合、各手 5 本指・指の分離が明瞭・指の融合や本数異常・溶融が無い(特に楽器持ち・指を伸ばすポーズで Gemini が破綻しやすい)
- テキスト破綻: タイトル文字が読める・誤字脱字・grbage character・記号化が無い
- 署名 / 透かし / ロゴ: 参照元の signature / autograph / watermark / brand mark が転写されていない(#569)
- NG だった場合:
4-4の diff_prompt_template に${anatomy_clause}を強調挿入して再生成、または codex プロバイダー(人体破綻に強い傾向)へ切り替えて再生成。/collection-ideateの Phase 4 から再実行する - OK だった場合のみ
main.pngをthumbnail.jpgにコピーする:cp <collection-path>/10-assets/main.png <collection-path>/10-assets/thumbnail.jpg
- 必須 QA(最低限): Read ツールで
- それ以外のモード:
/thumbnail <theme>を Agent で実行(テキストオーバーレイ生成。/thumbnailの品質チェック節で同等 QA が走る)
- 音楽素材生成: Agent ツールで音楽エンジンに応じたスキルを実行:
- Suno:
/suno <theme>を Skill ツールで実行(プロンプト生成のみ。実際の楽曲生成は/suno-helperで連続実行する)/suno呼び出し前提条件チェック(#571):config/skills/suno.yaml::genre_lineを読み、空のときはconfig/channel/analytics.json::benchmark.channels[].slug全件についてdata/video_analysis/<slug>/*.jsonの存在を確認する。両方とも未充足(genre_line空 AND 全 slug で分析結果不在)であれば/sunoを起動せず、uv run yt-video-analyze --source benchmark --channel <slug> --top 5を先行実行するようユーザーに案内して Phase 2c を一旦停止する(data/benchmark_*.jsonが無ければさらにその前段で/benchmarkを案内)。AI がgenre_lineを手書きで埋めて続行することは禁止
- Lyria:
/lyria <theme>を Skill ツールで実行(プロンプト設計のみ。Lyria 3 API 呼び出しは/wf-nextで実行)
- Suno:
workflow-state.jsonを更新:assets.music_prompts:true
エラーハンドリング:
- ループ動画生成失敗 →
assets.loop_video = "failed"を記録して続行 - 音楽素材生成失敗 → エラーを報告して続行
2d. サムネイル承認
サムネイルをプレビューで開く:
open <collection-path>/10-assets/thumbnail.jpgAskUserQuestion でサムネイルの承認を求める:
question: "サムネイルを承認しますか?" options: - 承認する → assets.thumbnail = true に更新 → ループ動画生成へ - 再生成 → `/collection-ideate` のプレビュー段階で調整済みのため、diff_prompt を修正して `generate_image.py` で再生成 - 中断 → ここで一旦停止(後で `/wf-next` で再開可能)承認された場合、ループ動画を生成:
/loop-videoを Skill ツールで実行(main.png→loop.mp4)workflow-state.jsonを更新:assets.loop_video:true/"failed"- phase = "prepared" に更新
完了ガイダンスを表示:
`/wf-new` 完了! コレクション: <collection_name> テーマ: <theme> トラック数: <track_count> 音楽エンジン: <suno|lyria> ディレクトリ: collections/planning/YYYYMMDD-<short>-<theme>-collection/ 現在のフェーズ: prepared ループ動画: ✅ 生成済み / ⚠️ 失敗(`/wf-next` で再試行可能)音楽エンジンに応じた次ステップ案内:
- Suno: 「
/suno-helperを実行してください。yt-collection-serveでsuno-prompts.jsonを配信 → suno-helper Chrome 拡張で Suno タブに連続注入 → 全件完了で playlist 一括追加まで自動。完了後に/wf-nextを実行(plain Suno UI への手動投入は非推奨)」 - Lyria: 「
/wf-nextを実行すると Lyria 3 API が呼ばれ、コレクション尺に応じてセグメントが生成されます → ミキシング+マスタリング後に再度/wf-next」
- Suno: 「
重要: /suno-helper / /wf-next への自動接続はしない(/suno-helper は Chrome + Suno ログイン + 拡張ロードの physical 準備、/wf-next は次フェーズ進行の意思決定をそれぞれ user に委ねる)。ユーザーが手動で呼ぶ。
障害時ガイダンス
| 状況 | 兆候 | 対処 |
|---|---|---|
| GCP ADC 未取得/失効 | ConfigError / ADC 認証エラー |
gcloud auth application-default login(必要なら set-quota-project)を再実行 |
| Vertex AI rate | HTTP 429 | 時間を置いて再実行。並列実行を避け順次処理する |
| API 障害 / サービス停止 | HTTP 503 / タイムアウト | Google Cloud(Vertex AI)のステータスを確認し、時間を置いて再実行 |
| 委譲先 skill の失敗 | 子 skill がエラー終了 | 各子 skill の「障害時ガイダンス」を参照して個別に対処 |
Cross References
- 企画生成:
/collection-ideateスキル- analytics mode:
reports/analysis_*.md+ ベンチマーク + config を使用 - benchmark fallback mode:
data/benchmark_*.json+ config のみで初回企画を生成 - minimal mode: ユーザー直接入力(テーマ / ジャンル / 雰囲気)+ config のみで初回企画を生成
- analytics mode:
- サムネイル生成:
/thumbnailスキル - ループ動画生成:
/loop-videoスキル - 音楽プロンプト生成:
/sunoスキル - Suno UI への連続注入 + playlist 一括追加:
/suno-helperスキル - 音楽プロンプト設計 + Lyria 3 API 呼び出し:
/lyriaスキル - 後続ステップ管理:
/wf-next - 進捗確認:
/wf-status