漫劇(小説 / ネット小説 / 漫画改編)・五駅式パイプライン(novel-video-pipeline)
Overview
任意のテキストストーリー(ネット小説、漫画、オリジナル脚本、童話絵本など)を、文生動画モデルに入力可能な絵コンテプロンプトパッケージ+ビジュアル参照画像+CC0音声・BGMに安定的に変換し、**「第三者の著作権キャラクターを複製しない」という厳格なラインを守ります。デフォルトでは漫劇(横長16:9 / 多話連載)**生産ライン向けで、必要に応じて子ども向け漫劇、単話ショート動画などサブタイプに切り替え可能です。生産ラインの基調は、現在のヒット漫劇の「強力なフック+感情の揺さぶり+逆転+爽快ポイント+話間サスペンス」リズムを参考にしつつ、方法層の骨格のみを採用し、キャラクター・プロット・絵柄はすべてオリジナルです。
パイプラインは5つの連続する作業駅で構成され、各駅は合意されたJSON/リソースディレクトリを出力し、次駅が前駅の成果物を消費します。**重要:アセットライブラリを先に構築(S2)→ その後絵コンテ記述(S3)**という順序を厳守します。絵コンテはアセットをカメラ言語で配置するだけであり、キャラクターの一貫性とシーン空間の連続性を確保します。
S1 脚本改編 ──script.json──▶ S2 アセットライブラリ ──character_manifest + scene_manifest (+ visual_manifest)──▶ S3 絵コンテプロンプト ──storyboard.json(アセット+ref_imagesを参照)──▶ S4 音声 ──audio_manifest──▶ S5 合成 ──完成映像
- S1 脚本改編:長編/原文を「教育的または物語的価値の骨格 + ビート表」に圧縮し、
script.json(title / logline / characters / scenes / beats)を出力します。 - S2 アセットライブラリ(先に構築):全局脚本を読み込み、キャラクター三面図アセット(
character_manifest.json:visual_lock + front/side/back 三面図 + アンカー画像パック + fixed_prompt)とシーン正打ち逆打ち多視図アセット(scene_manifest.json:axis_of_action + establishing/OTS A→B/reverse/insert)を確立し、併せてパブリックドメイン / CC0 ビジュアル参照画像(visual_manifest.json)を取得します。IPファイアウォールのネガティブプロンプトを適用します。このステーションの成果物が「アセットライブラリ」となり、S3で直接参照されます。 - S3 絵コンテプロンプト(アセットライブラリに基づく):各ビートをカット(shot)に展開し、**各shotは
character_ref(キャラクター+視図)とscene_ref(シーン+視図)**を参照し、アセットライブラリからロックされた説明 + カメラムーブメントライブラリ(camera-movements.json)+ プラットフォームプリセットからプロンプトを構築し、negative_promptを注入し、storyboard.jsonを出力します。 - S4 音声:カットに CC0 BGM / 効果音をマッチングし、
audio_manifest.jsonを出力します。 - S5 合成(完成映像へのクローズ):S3の
storyboard.json(ref_imagesアンカー画像を含む)+ S4のaudio_manifest.jsonを完成映像にクローズします。カットごとに画像生成/動画生成(ref_imagesで顔ロック)→ 音声同期 → 編集結合(duration_sとaspect_ratioに従う)→ プラットフォームエクスポート → 一貫性最終チェック。詳細はreferences/s5-composite.mdとscripts/build_ffmpeg_concat.pyを参照してください。
When To Use(トリガー)
- ユーザーがストーリー/小説/ネット小説/漫画/脚本を提供し、「漫劇 / ショート動画 / 絵コンテ / アニメにしたい」と言う。
- ユーザーが「脚本改編、絵コンテプロンプト作成、動画スクリプト生成、絵柄設定、音楽付け」を必要としている。
- ユーザーが任意の単駅の成果物のみを必要としている(例:絵コンテプロンプトのみ、またはパブリックドメイン参照画像のみ)。
- ユーザーが素材に対して「著作権クリーン / 商用利用可能 / IPリスクゼロ」という厳格な要件を持っている。
ワークフロー(Workflow)
全フローは、人気オープンソースソリューションのオーケストレーションアプローチを参考にしていますが、コードは独自開発、アセットは自己完結しています:
- ViMax(MIT ライセンス、約 392 コミットの S1→S4 オーケストレーションパイプライン)→ 「ストーリー→絵コンテ→動画」の段階分割と成果物契約を参考。
- seedance-prompt-skill / ai-shortfilm-prompts(MIT ライセンス)→ その SKILL 形式のプロンプトテンプレート構成を参考に、S3 の基盤として採用。
- ArcReel(AGPL ライセンス)→ アーキテクチャのみ学習、コードはコピー禁止(AGPL の感染力のため、本 MIT スタイルの skill への統合は禁止)。 詳細は
references/architecture-licenses.mdを参照。
第 0 ステップ · 要求の受付
4点を確認:① 元ストーリー(ネット小説 / 漫画 / オリジナル脚本 / 投稿文、もしくはパス指定);② ターゲットプラットフォーム(横長漫劇はデフォルトで Bilibili / YouTube 向け、assets/s3/platform-presets.json の bilibili を参照;縦長抖音 / 微信 video 向けは douyin);③ 絵柄(中国漫画 / 水彩 / 写実 / 浮世絵 / 童書挿絵…);④ サブタイプとターゲット(デフォルトは横長 16:9 漫劇、ヒット漫劇のリズムをベースにしつつオリジナル;子ども向けの場合は追加で IP ファイアウォール + mature コンテンツ除外を強制)。
第 1 駅 · S1 脚本改編
assets/s1/story-structure.md(三幕 / ビート構造テンプレート)+assets/s1/adaptation-method.md(圧縮方法論:価値骨格保持、冗長削除、感情カーブ)を読み込む。- 必要に応じて
assets/s1/beat-sheet.md(記入可能なビート表)を記入。 assets/s1/example-romeo-juliet.md、example-journey-to-west.mdの2つの改編例を参考にする。script.jsonを出力。フィールドはreferences/workflow.md§S1 契約を参照。
第 2 駅 · S2 アセットライブラリ(先に構築、後に絵コンテ記述)
- S1 の全 beats / characters / scenes を読み込み、キャラクターアセットを確立:
assets/s2/character-design.mdを読み込み、主要キャラクターごとにcharacter_manifest.json(visual_lock + fixed_prompt + 三面図 front/side/back + アンカー画像パック ref_pack + 一貫性ルール)を出力。 - シーンアセットを確立:
assets/s2/scene-multiview.mdを読み込み、主要シーンごとにscene_manifest.json(geography + axis_of_action + views{establishing, ots_a, ots_b, reverse, insert})を出力。 - 併せてパブリックドメイン / CC0 ビジュアル参照画像
visual_manifest.json(多絵柄:中国漫画 / 水彩 / 写実 / 童書挿絵 / Met パブリックドメインアート…)を取得/生成し、IP ファイアウォールを適用。 - IP ファイアウォールを適用:
assets/s2/negative-ip.json+assets/s2/negative-ip-firewall.md。 - ライセンスゲート:
Public Domain/CC0のみ受け入れ。キャラクター/シーンアセットはすべてオリジナル。同名・同設定でヒット作をそのままコピーすることを禁止(詳細は IP ファイアウォール §六)。
第 3 駅 · S3 絵コンテプロンプト(アセットライブラリに基づく)
-
以下のファイルを読み込む:
assets/s3/template-library.json(絵コンテテンプレートライブラリ:カットタイプ / ショットサイズ / 感情)+assets/s3/camera-movements.json(カメラムーブメントライブラリ:40+ ムーブメント + ビート→ムーブメントマッピング + プラットフォーム文法)+assets/s3/platform-presets.json(各プラットフォームのプロンプト文法、アスペクト比、時間制限)+assets/s3/tag-stats.json(タグ頻度統計)+assets/s3/negative-quality.md(品質ネガティブプロンプト)+assets/s2/negative-ip.json(IP ファイアウォール)。 -
各 beat → 最低 1 shot。各 shot 必須で
character_refとscene_refを持つ(S2アセットライブラリを参照)。アセットのfixed_promptからロックされたキャラクター説明を取得。camera-movements.jsonから 1 つの主カメラムーブメントを選択(subject_aware_mapが beat タイプに基づいてレコメンド)。必須でnegative_prompt(IP ファイアウォール + 品質ネガティブプロンプトを結合)を持つ。 -
storyboard.jsonを出力:shots[{shot_id, beat_ref, character_ref[], scene_ref, ref_images[](任意・アンカー画像直接リンク、下記「参照画像アンカー」参照), camera_movement, shot_size, speed(任意・スピード修飾 slow_motion など、camera-movements.json の speed_modifiers 参照), prompt, prompt_readable, negative_prompt, platform, aspect_ratio, duration_s, attribution}]。権力変化カットはcamera_movement: low_angle/high_angle+speed: "slow_motion"を使用(書き方はassets/s2/scene-multiview.md§三(補)権力軸を参照)。参照画像アンカー(ref_images、クロスカット一貫性の鍵):
ref_imagesは各カットのアンカー画像への直接リンクリストであり、テキストのみのfixed_promptよりも安定しています(Jimeng の @引用 / Runway Gen-4 の単画像顔ロックに適合)。各要素は文字列で、2つの書き方があります:① アセット参照トークンchar:<char_id>:<ref_packキーまたはthree_viewキー>/scene:<scene_id>:<view>(スクリプトが自動でcharacter_manifest.ref_packから抽出、生成器が実際の画像パスに解決);② 直接画像パス / URL(例/assets/char_shen_zhao_face.png)。各キャラクターに 2〜3 枚推奨(正面近接/横顔/全身)。Jimeng は最大 9 枚、Runway は 1 枚でロック可能。build_storyboard.pyはデフォルトで自動的にキャラクターのref_packをref_imagesとして抽出します。S5 合成時に動画生成モデルに顔ロック/衣装ロック参照として直接提供することも可能です。 -
CC BY 4.0 データは attribution 必須(本ライブラリのアセットは PD/CC0 で、デフォルトで帰属表示不要。外部 CC BY データを導入する場合は必ず attribution を記入)。
-
スキャフォールディング加速(任意):まず S1
script.json+ S2character_manifest.json/scene_manifest.jsonを構築し、python scripts/build_storyboard.py --project <DIR> --platform bilibiliを実行すると自動でstoryboard.jsonのドラフトが生成されます(beat ごとに自動でcharacter_ref/scene_refを設定、subject_aware_mapから 1 つの主カメラムーブメントを選択、beat タイプに基づいてショットサイズを選択、negative_promptを全 IP トークンにカバーするように結合)。その後、手動でカメラアングル / 感情 / セリフ / リズムを微調整します。このスクリプトは「アセットファースト」順序の自動実装であり、その出力はvalidate_pipeline.pyで直接検証可能です。
第 4 駅 · S4 音声
assets/s4/audio-manifest.json(既に取得済みの CC0 音声リスト。BGM / 効果音 / 感情カテゴリ:ambient / cinematic / playful / tense / romantic / lullaby 等を含む)を読み込み。- カットの感情に応じてマッチング:サスペンス低音→逆転パート、優しいピアノ→温かいパート、whoosh→トランジション、lullaby→安眠パート、cartoon bounce→活発パート。
audio_manifest.jsonを出力:items[{file, license, source, duration_ms}]、CC0 のみ。
第 5 駅 · S5 合成(完成映像へのクローズ)
references/s5-composite.md(S5 合成 SOP:五段階クローズ + ツールマトリックス + 一貫性最終チェックリスト)を読み込む。 1.5 アンカー画像解決:python scripts/resolve_ref_images.py --project <DIR>を実行し、各 shot のref_imagesトークン(char:<id>:<key>/scene:<id>:<view>)を実際の画像パスに展開し、storyboard.resolved.jsonを出力(未解決トークンは元の文字列を保持し警告を出す)。- カットごとの画像生成 / 動画生成:
storyboard.resolved.jsonのref_images(解決済み実画像)を顔ロック/衣装ロック参照として使用し、fixed_prompt+camera_movement+camera-movements.jsonのlens/stagesと組み合わせて Jimeng @引用 / Runway Gen-4 / Kling / Seedance に投入し、各クリップを生成。 - 音声同期:beat の感情に基づいて
audio_manifest.json(CC0)から BGM を選択し、duration_sに応じて効果音をカット。 - 編集結合:
python scripts/build_ffmpeg_concat.py --project <DIR> --clips-dir <DIR>/clipsを実行し、concat リストとコマンドを生成。aspect_ratio(横長 16:9)に従って 1080p でエクスポート。 - 一貫性最終チェック:§四のリスト(キャラクター/シーン/軸/権力軸/時間/IPファイアウォール/音声/アスペクト比)を確認してから公開。
第 6 ステップ · アクセスゲート検証(必須)
python scripts/validate_pipeline.py --project <DIR> --platform bilibili [--strict] [--content-rating {normal,child}] を実行し、五駅間の成果物契約 + 五つの品質ゲートを検証:S3 の各 shot の negative_prompt は assets/s2/negative-ip.json の全ブロック対象 IP トークンをカバーしている必要があります(第三者著作権キャラクター像の複製防止の必須要件。欠落は strict モードでエラー)。時間は platform-presets.json の該当プラットフォームの合法範囲内に収まる必要があり、アスペクト比は一致する必要があります(横長漫劇デフォルト 16:9)。S4 音声時間は 0.3〜180秒(非常に短い効果音も許容)。--strict では警告もエラーとみなされます。通過後にのみ動画合成が可能です。
コンテンツレーティング(重要 · デフォルトは無制限):アクセスゲートはデフォルトで --content-rating normal —— 一切のコンテンツ制限を行いません。アクション / 暴力 / サスペンス / ダーク等の成人向けテーマも正常に生成可能。著作権 IP ファイアウォールとアセット契約のみを守ります。子ども向け生産ラインでのみ --content-rating child(または旧別名 --child)を追加:S1 に「価値回収」タイプのビートを含めることを強制、S3 に子ども安全ネガティブトークン(violence/gore/horror/blood/mature/nudity/weapon…)をカバー、beats の成熟コンテンツをスキャン(strict モードではエラー)。つまり、--child は純粋に任意の「子ども安全スイッチ」であり、指定しない限り漫劇コンテンツは完全に自由で、幼児化されることはありません。
取得スクリプト(IPリスクゼロ)
2つのスクリプトは標準ライブラリ + システム curl のみで動作し、pip install は不要です:
# S2 ビジュアルアセット:OBI パブリックドメイン多絵柄挿絵(童書/中国漫画スタイル含む)+ Openverse CC0 画像 + Met パブリックドメインアート
python scripts/fetch_visual_assets.py --out <DIR> --sources obi,openverse,met
# S4 音声:Openverse CC0(キー不要);PIXABAY/FREESOUND キーを設定すると拡張チャンネルが有効に
python scripts/fetch_audio.py --out <DIR>
- 品質ゲート内蔵:ライセンス(PD/CC0)、画質(長辺≥1000 かつ短辺≥600、ファイル≥50KB)、重複除去(SHA256、実行間で永続化)、ソースゲート(機関ソースのみ)、センシティブゲート(Openverse の
mature=trueは一律除外、全プラットフォームで厳格な要件)。 - OBI 転送は
curlエンジン(--retry 5 --retry-all-errors -k)を使用し、Pythonurllibで生じる SSL 切断を回避。
五つの品質ゲート(全駅共通)
- ライセンスゲート:S2/S4 は
Public Domain/CC0のみ受け入れ。CC BY 4.0 を導入する場合は attribution 必須。 - 画質ゲート:画像は長辺≥1000 かつ短辺≥600。音声は 0.3〜180秒、ファイル≥100KB。
- 重複除去ゲート:SHA256 で実行間をまたいで永続化。重複画像/音声は自動スキップ。
- ソースゲート:機関レベル / パブリックドメインソースのみ(OBI、Openverse、Met、Freesound CC0…)。不明なソースは拒否。
- センシティブゲート:全コンテンツで
matureを除外(子ども向けはさらに強化)。S2/S3 で IP ファイアウォールネガティブプロンプトを強制注入し、既知の著作権キャラクターをブロック。人気漫劇 / ネット小説 IP については、その題材 / 感情 / 爽快ポイント構造(方法層)を参考にすることは可能だが、個別キャラクター、個別シーン、名場面の完全なコピー(完全な盗作)は禁止。
IP ファイアウォール(参考にするがコピーしない)
- 恒常的なネガティブプロンプトは
assets/s2/negative-ip.jsonを参照。Peppa Pig、Disney、Marvel、Sanrio、Numberblocks、My Little Pony など登録済みのリアルな第三者著作権キャラクター像をカバー。これらはハードボーダーであり、参考にするかどうかにかかわらず再現してはならない(アクセスゲートはトークンカバレッジを強制検証)。 - 漫劇固有の規律(参考にするがコピーしない):人気漫劇 / ネット小説 IP の「題材タイプ、感情構造、爽快ポイントパラダイム、カメラ言語、リズム」は方法層に属し、著作権で保護されず、創作の栄養として利用可能であり、参考にすることを奨励。しかし、完全な盗作は禁止。すなわち、個別キャラクターをそのままコピーする(同名・同設定)、個別シーンで名場面の構図を複製する、看板絵柄/特徴的な配色組み合わせを直接複製する、原文のセリフを流用することは禁止。ユーザーが特定のヒット作を指名した場合でも、その「再利用可能な方法骨格」のみを抽出し、「表現」は抽出せず、オリジナルの説明(「強い宿命感のある黒衣の男性主人公 + 紅衣の女性主人公が対峙」)に変換してから画像/動画モデルに投入し、さらに negative prompt の二重安全策でリアルな第三者著作権キャラクター像をブロックする。
- 本スキルはいかなる著作権テキストも内蔵せず、構造/書き方層のパラダイムのみを統計。すべての例はパブリックドメインまたはユーザー自身の素材。
Resources
assets/s1/:ストーリー構造テンプレート、改編圧縮方法論、記入可能なビート表、脚本フォーマット仕様、2つの改編例。assets/s2/:ネガティブプロンプトリソースnegative-ip.json+ IP ファイアウォール説明negative-ip-firewall.md+ キャラクターアセット方法論character-design.md+ シーンアセット方法論scene-multiview.md。assets/s3/:絵コンテテンプレートライブラリtemplate-library.json、カメラムーブメントライブラリcamera-movements.json、プラットフォームプリセットplatform-presets.json、タグ統計tag-stats.json、品質ネガティブプロンプトnegative-quality.md。assets/s4/:取得済み CC0 音声リストaudio-manifest.json。scripts/:fetch_visual_assets.py(S2 画像取得)、fetch_audio.py(S4 音声取得)、build_storyboard.py(S1+S2 → S3 絵コンテスキャフォールディング自動生成。ref_imagesアンカー自動抽出 /power_dynamic自動キャラクター選択 /--target-durationカット予算 /--no-growth自己成長提案オフをサポート)、resolve_ref_images.py(S5 でref_imagesトークンを実際の画像パスに解決、storyboard.resolved.jsonを出力)、build_ffmpeg_concat.py(S5 で storyboard.json から FFmpeg 結合リスト + コマンドを生成)、validate_pipeline.py(駅間アクセスゲート。デフォルト--content-rating normalでコンテンツ制限なし。--content-rating child/--childで子ども向けハードゲート発動)、collect.py(自己成長収集エンド:一度の実行成果物 + 人間の評価 + 失敗ログをメモリサーバーにフィードバック)、load_learnings.py(自己成長フィードバックエンド:メモリサーバーからlearnings.jsonを取得しローカルにキャッシュ、build_storyboard.pyが高頻度失敗パターンの提案を読み取り)。memory_server/:server.py(依存ゼロのメモリサービス、4テーブル SQLite + Bearer 認証 + レート制限)、growth.py(集約 →snapshot/learnings.json+ フィードバック priors)、.env.example、README.md(Caddy HTTPS / systemd / cron デプロイ)。references/:architecture-licenses.md(オープンソースソリューションの参考とライセンス境界)、workflow.md(五駅の詳細契約と使用方法)、case-studies.md(ヒット漫劇/ショートドラマのカメラ・絵コンテ文法参考、方法論文献。IP をそのままコピーしない)、benchmark.md(比較評価:NVP vs ViMax/seedance/ai-shortfilm/ArcReel 等のスコア行列 + 実証自己テスト)、s5-composite.md(S5 合成 SOP:五段階クローズ + ツールマトリックス + 一貫性最終チェックリスト)。
注意事項
- 大容量の画像ライブラリ/音声ライブラリはスキルに内蔵しません(可搬性維持)。実行時にスクリプトで取得するか、自身の CC0 素材ディレクトリ(
./assets/characters、S4-音声ライブラリ/samples/など)を指定してください。 - 本スキルはオーケストレーション方法論 + 自己完結型アセットであり、ViMax/ArcReel などの外部コードに依存しません。
- BHL キー / NYPL トークンを取得した後、
fetch_visual_assets.pyにfetch_bhl()/fetch_nypl()チャンネルを独自に追加可能(OBI はキー不要で動作確認済み)。
自己成長(任意 · データクローズドループ)
スキルを使用とともに自己成長させることが可能:各生産ライン実行後に、客観的指標 / 人間の評価 / 失敗ログをメモリデータベースにフィードバックし、集約後に「高頻度失敗パターンの提案 / 評価 / スタイル信号」をスキルにフィードバック。次回生成時に事前に回避。純粋な標準ライブラリ、依存ゼロ、一台の小型サーバーに独立デプロイ可能で、スキル本体とは疎結合。完全なデプロイは memory_server/README.md を参照。
単機で使う?デプロイ不要。
NVP_MEMORY_URLを設定しない場合、collect.py/load_learnings.pyは自動的にスキル内の SQLite(memory_server/data/nvp_memory.db)に直接接続し、収集後に自動で集約。設定ゼロで完全クローズドループが動作。複数機の集約 / 複数人でのコラボ / リモートフィードバックの場合のみ、server.pyを起動する必要があります(下記「サービス起動」と README §2 参照)。
クローズドループの3ステップ:
- 収集(生産ライン実行後):
python scripts/collect.py --project <DIR> --platform bilibiliが自動でscript.json/storyboard.json/storyboard.resolved.jsonから beats / shots / 解決率 / 時間などの指標を読み取り、メモリデータベースに書き込みます(デフォルトはローカル SQLite。NVP_MEMORY_URLが設定されている場合はサービスに POST)。人間の評価--feedback 5 overall "リズムがいい"や失敗ログ--failures fails.jsonを追加可能。オフラインマシンでは--mirror ./mirror.json --dry-runでミラーを生成し、後でcollect.py --sync ./mirror.jsonでサーバーに同期。--localで強制ローカル、--remoteで強制サービス。 - 集約(ローカル自動 / サーバー定期):ローカルモードでは収集後自動で集約。HTTP モードでは cron で毎時
python memory_server/growth.pyを実行し、SQLite の 4 テーブルをsnapshot/learnings.jsonに集約し、安定した知識をpriorsテーブルに upsert。 - フィードバック(次回生成前):
python scripts/load_learnings.pyがlearnings.jsonを読み取り、.cache/learnings.jsonにキャッシュ(デフォルトはローカル snapshot を読む;URL が設定されている場合はリモートから取得。--localで強制ローカル、--no-fetchでキャッシュのみ読み取り)。build_storyboard.pyが自動読み取り、生成時に「自己成長提案」(高頻度失敗パターン → 事前回避、例:未解決参照画像、権力軸欠落ショット)を表示。--no-growthでオフ。
サービス起動:python memory_server/server.py --no-auth(ローカルテスト)または python memory_server/server.py(パブリック、NVP_API_TOKEN 環境変数 / --token が必要。Caddy リバースプロキシで TLS 対応)。エンドポイント:GET /health、POST /ingest、GET /query、GET /snapshot、GET /export。