novel-storyboard について
novel-storyboard は、AI 短編ドラマの脚本から絵コンテを作るスキルです。節拍の網羅、ショットの長さ、台詞をスクリプトで検証し、動画プロンプトや制作資料、レポートを出力します。
主な機能
- 01脚本から節拍の下書きを作成
- 02節拍・長さ・台詞を検証
- 03H3 動画プロンプトを生成
- 04Seedance プロンプトを出力
- 05生成バッチと音声対応表を作成
- 06Markdown・HTML レポートを出力
活用シーン
- 01脚本の節拍を動画ショットに分割
- 02ショット時間と台詞の整合を確認
- 03H3 または Seedance のプロンプトを準備
- 04絵コンテレポートと台詞対応表を作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ eternityspring/ shuohao-skills --skill novel-storyboardインストール後、Claude Code で/novel-storyboardを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.en.mdREADME.mdexamples/渡口-storyboard.jsonreferences/frame.mdh3-prompt.mdreport-style.mdschema.mdseedance-prompt.mdshot-writing.mdstoryboard-pass.mdreferences/test-fixtures/shot-recipes/hands-tell.mdinsert-beat.mdots-shot-reverse.mdreferences/test-fixtures/upstream/README.md渡口-art.json渡口-cast.json渡口-outline.json渡口-script.jsonscripts/novel-storyboard.mjsselftest.mjs詳細
novel-storyboard
AI ショートドラマの絵コンテを作成します——パイプラインで、動画モデルに直接向き合う最初のレイヤーです。前提は骨身に刻まれています。ショットは生成するもので、ショットを一つ増やすコストはほぼゼロです。そのため、ここではショット数を気にせず、上限はただ一つ、動画モデルが一度に生成できる長さ(デフォルトは 15 秒)です。
中核となる仕組み:ショットがビートを担当します。 各ショットは、脚本のどのシーンの連続したビートを担当するか(sceneIndex + beats: [起, 止])を宣言します。ショットがシーンをまたぐことはできません——場面が変わればショットも変わります。これにより、絵コンテと脚本の関係を機械的に照合できます。
| 成果物 | 解決すること |
|---|---|
| ビートの担当 | 各ビートをちょうど一つのショットが担当し、順序も乱れません——脚本を変更したら validate を再実行し、無効になったショットをその場で特定できます |
| 1 ショット ≤ 15 秒 | AI 動画の一度に生成できる上限です。長い会話はここで強制的にショット分割します(params.maxShotSeconds はモデルに合わせて変更) |
| 台詞が収まる | 担当ビートの台詞秒数 ≤ ショット秒数——勘ではなく、ショットごとに確認します |
| 絵コンテ画像プロンプト + ショット本文 | 絵コンテ画像プロンプト(frame、中国語、キャラクター名を直接記載)は、設定画像と組み合わせて画像モデルに出力させます。ショット本文(shot、中国語、一般的な身元表現)には、この数秒間に何が起きるかを書きます。ショットサイズは列挙値です。中国語のショットサイズ表現を絵コンテ画像プロンプトに必ず記載してください |
| H3 動画プロンプト(各セグメントに 1 件) | MiniMax H3 の I2VA 構造です。固定の同期指示 + integrated_multimodal_description + overall_soundscape + non_diegetic_music。担当ビートの台詞を一字一句 <d>[Chinese] …</d> ブロックに入れます——台詞、音風景、音楽をすべて一つのプロンプトに含めます |
| Seedance 動画プロンプト(各セグメントに 1 件、プログラムで組み立て) | H3 と並ぶ方式です。スクリプトが公式構造に従って組み立てます。参照画像の宣言、セグメント単位の動線、ショットごとの定量化フィールド、台詞 {}、効果音 <>、音楽 ()、番号に関する制約を含みます。モデルが書くのは各カットの shot のみで、秒数、番号、画像参照は書きません |
| 構図の定量化フィールド | 各セグメントの blocking(誰が左、誰が右、間隔)、各ショットの焦点距離/カメラ位置/構図/視線の着地点/フォーカス/安定性——絵コンテ画像を作らない場合、これらが構図のすべての情報源になります |
| 生成バッチシート | 同じシーン + 同じ照明のショットをまとめ、同じ環境参照画像を共有します——AI 版の順撮り表で、スクリプトが自動で集計します |
| 吹き替え同期シート | 各台詞をショット番号に対応付けます——TTS 音声をどの動画セグメントに貼り付けるか、スクリプトが自動で集計します |
{baseDir} = このファイルがあるディレクトリです。スクリプトは {baseDir}/scripts/novel-storyboard.mjs にあり、依存関係はなく、node で直接実行できます。
対象範囲(行わないこと):脚本を書いたり台詞を変更したりしません(novel-script の担当です)。シーン/キャラクター/小道具の設定画像は作成しません(novel-art / novel-characters の担当です)。動画の生成や編集・合成も行いません。口の動き/リップシンクは対象外です——生成パイプライン側の処理です。
Step 0 — 入力と範囲を決める
script.json は必須条件です——脚本なしでは絵コンテに意味がありません。validate/render には必ず --script を指定してください。それ以外の上流入力は、あれば使用します。
--outline/--cast:プロンプト内の人名禁止チェック + レポートで C01 を人名として表示--art:レポートで S01 をシーン名として表示 + バッチシートにシーン設定画像を埋め込み--shots <カードディレクトリ>:任意で shot-recipes のショットレシピカードライブラリをマウントします(shot-recipes/references/cardsを指定します。受け付けるのはディレクトリのみで、エクスポートした JSON は受け付けません)。第 18 のshot-recipeゲートが有効になります。shot-recipes がインストールされていない場合は指定しないでください——この skill は自己完結しており、これには依存しません
一度に何話を作業するか:脚本のバッチに合わせます(脚本があるところまでを絵コンテ化します)。デフォルトでは 1 バッチ ≤ 3 話です。
最初にアスペクト比を決める:storyboard.json のトップレベルにある aspectRatio は、絵コンテと後続の画像生成が共に守る正式な契約です。指定できるのは 16:9 または 9:16 のみです。特別な指定がなければ 16:9 を使用し、縦型ショートドラマでは 9:16 を明示してください。
Step 1 — seed 作業用下書きを生成する
node {baseDir}/scripts/novel-storyboard.mjs seed <script.json> --eps 1-3 --aspect 16:9 > <workdir>/storyboard.json
決定的に展開します。各シーンのビート一覧(番号、動作/台詞、各ビートの秒数、話者)を seedScenes に入れます。これがショット分割時の作業用下書きになります。同時に --aspect をトップレベルの aspectRatio に設定し、省略時はデフォルトの 16:9 を使用します。各ビートの秒数は計算で求めます。モデルに再推定させないでください。 shots は空のままにします。ショット分割はモデルの担当です。
Step 2 — 話ごとにセグメント分けしてショットを切る
各話につき 1 件のタスクを作成し、並行処理できる場合は並行して実行します。各タスクには次の情報を渡します。
{baseDir}/references/storyboard-pass.mdと{baseDir}/references/schema.md(これらを読み、指示に従ってください)- 対象話の seedScenes 下書き + シーンカード(art.json のアンカーと照明プロンプト)+ キャラクターカード(cast.json の外見の要点)
手順:まずストーリー上のまとまりごとにセグメント分けします(各セグメント 9–15 秒、シーンをまたがない)。セグメント内で 2–5 秒のショットに分割します(会話の切り返し、重要な動作を捉えるインサートショット、登場時の三点セット——ショット分割の手法は storyboard-pass.md に記載されています)。各カットに絵コンテ画像プロンプト(中国語、キャラクター名を直接記載)、ショット本文 shot(中国語、一般的な身元表現)、6 つの構図フィールドを書きます。各セグメントには blocking と soundscape を記載し、音楽がある場合は music も記載します。すべての絵コンテ画像と後続の生成画像は、トップレベルの aspectRatio で指定した同じアスペクト比を維持してください。
各セグメントのショット本文は {baseDir}/references/shot-writing.md に従って記述します(プロトコルに依存しません。1 カットにつき 1 つのカメラワーク、動作は完了できる内容にし、台詞は一字一句そのまま、音はレイヤーごとに記述し、画風は記述しません)。どの動画サービスに渡すかに応じて、該当するプロトコルの構文をさらに適用してください。MiniMax H3 は {baseDir}/references/h3-prompt.md、Seedance は {baseDir}/references/seedance-prompt.md を参照してください。
各セグメントに h3Prompt を 1 件記述します。{baseDir}/references/h3-prompt.md に従ってください(公式メソドロジーを内在化したもので、外部 skill には依存しません)。公式の規定言語はデフォルトで英語です(promptLang で中国語に切り替え可能)。各ショットは必ず独立した 1 行にします。要点:最初の行の同期指示と [Shot k] の切り替え時刻は絵コンテの秒数から導出し、1 文字たりともずれてはいけません(validate で一字一句照合します)。担当する台詞を一字一句そのまま <d>[Chinese] …</d> に入れます。各カットのカメラワーク表現はそれぞれの行に記載します。音風景と音楽は後ろの 2 フィールドに分けて記載します——音風景も動作指示です。映像が変わったら音風景も合わせて変更してください。
Seedance プロンプトは記述不要です。render レポートのプロンプトパネルと export --protocol seedance は、上記のフィールドからその場で組み立てます。ビジュアルスタイルは呼び出し側が送信時に追加し、全体的な制約は --constraints <ファイル> で指定します。
ショット分割が終わったら seedScenes を削除します。
Step 3 — 検証 ⛔ 省略禁止
node {baseDir}/scripts/novel-storyboard.mjs validate <storyboard.json> \
--script <script.json> --outline <outline.json> --cast <cast.json> \
[--shots </path/to/cards>]
品質ゲート 18 個はすべてコードでチェックします。ビートがすべて網羅されていること(ショット単位で過不足なく一度だけ、順序どおり、連続していること)、セグメントの秒数が 0 < 合計 ≤ 15 であること、各カットが 2–5 秒であること、台詞がショットに収まること、各話の総尺が脚本の目標値 ±15% 以内であること、同じフレーム内の人物が ≤ 3 人であること(超える場合は分割の説明が必須)、セグメント番号が E01-01 形式で連番になっていること、中国語のショットサイズ表現が絵コンテ画像プロンプトに含まれていること、カメラワークが H3 用語リストに準拠し、対応する [Shot k] セクション内にあること、H3 同期指示が絵コンテ構造から導出され一字一句照合されること + 切り替え時刻が一つずつ照合されること、担当台詞が一字一句 <d> ブロックに入っていること、プロンプトの言語が promptLang と一致していること(双方向にチェックします。中国語を英語で書いた場合も、英語が中国語に混ざった場合も検出します)、絵コンテ画像プロンプトが中国語で空でないこと、動画プロンプトにキャラクター名が含まれていないこと(H3 本文は言語を問わず、Seedance のショット本文もチェックします。絵コンテ画像プロンプトでの名前の直接記載は許可します)、構図の定量化フィールドがすべて揃っていること、Seedance のショット本文が要件に準拠していること(中国語で空ではなく、時間、ショット番号、画像参照、プロトコル記号を含まないこと)、シーン/人物/小道具を脚本と照合すること、ショットレシピを照合すること(任意のゲート。以下を参照)。
構造チェックでは、任意指定の aspectRatio も検証します。指定できるのは 16:9 または 9:16 のみです。これは storyboard.json の契約チェックに含まれ、品質ゲートの数には含めません。
違反があれば一つずつ修正し、変更後に再実行して、合格するまで続けてください。
第 18 の shot-recipe(任意でマウント):--shots が指定されている場合のみチェックし、指定されていなければスキップしたことを明記します。cut には任意で recipe(レシピカード ID)を記述できます(segment 単位ではなく cut 単位です。複数コマのレシピは、同じ ID が連続するショットで表現し、配列にはしません)。ゲートでは 3 点をチェックします。ID がカードライブラリに存在すること、カードの各 must_phrases がそのカットの frame に含まれていること(両方を小文字化してから includes で照合)、カードの cuts の下限が ≥ 2 の場合、同じ ID が連続するショット数がその下限以上であること。カードの推奨ショットサイズとカメラワークはゲート対象外です。レポートの「レシピ」列と checkup の末尾で、逸脱があれば通知するだけです。レシピは語彙であって法令ではありません。任意マウントの機能が厳格になりすぎれば、誰もマウントしなくなります。
Step 4 — 输出与汇报
cd <输出目录>
node {baseDir}/scripts/novel-storyboard.mjs render <剧名>-storyboard.json --md \
--script <script.json> --outline <outline.json> --art <art.json> > <剧名>-storyboard.md
node {baseDir}/scripts/novel-storyboard.mjs render <剧名>-storyboard.json --html \
--script <script.json> --outline <outline.json> --art <art.json> > storyboard-report.html
报告界面语言用 --lang zh|en 指定(优先级 --lang > JSON 顶层 lang 字段 > 默认中文)——只切界面标签,与 promptLang(H3 提示词语言)互相独立。主分镜图与子分镜条按顶层 aspectRatio 排版;旧数据的 _meta.orientation 与 frame 末尾画幅标签只作兼容。render 用 --frames <目录> 找分镜图(<目录>/<段号>/f<切序>.png,默认当前目录)、用 --images <目录> 找批次单的场景设定图(<目录>/<场景 slug>-sheet.png,默认 ./images),两个都可以指到任意路径——本 skill 不产生这些文件,下游出完图重跑一次 render 就能嵌进报告。export --frames <目录> 会把找得到的分镜图拷进投产包,不用手动往包里放。报告含:KPI 带、分镜节奏带(粗分隔 = 段边界、片宽 = 分镜时长占比、颜色深浅 = 景别远近、点击跳段卡)、分集分镜表(主分镜图 + 子分镜条 + 逐切分镜行 + 分镜图/H3 提示词复制按钮)、生成批次单、配音对齐单、质量门、导出 JSON。Markdown 版每段附完整 H3 提示词,直接复制可用。
汇报一句话说清:几集几镜、总时长 vs 目标、几个生成批次、报告路径;没过的门明说。
不要说「已出图」——这一步不存在了,交付的是提示词和挂图清单。
最终落地:
<输出目录>/
├── <剧名>-storyboard.json
├── <剧名>-storyboard.md
├── storyboard-report.html ← 双击就能开
├── manifest.json ← export 生成
└── E01-01/ ← 一段一个文件夹 = 一次 H3 生成的全部材料
├── f1.png ← 主分镜图(下游出完放这儿)
├── f2.png … ← 子分镜图
└── prompt.md ← H3 提示词(export 生成)
五个 skill 的接力(管线到此闭环)
novel-outline → outline.json (什么:结构与分集)
novel-characters → cast.json (谁:角色设定图)
novel-art → art.json (哪里:场景/道具设定图)
novel-script → script.json (戏:场次、节拍、台词)
novel-storyboard → storyboard.json (怎么拍:镜头、首帧、批次)
分镜是消费端:seed 吃 script.json,分镜图出图(在下游)吃 art 和 characters 的设定图当参考,H3 提示词直接下单给视频模型,配音对齐单接 script 台词本的 TTS 产物。五份 JSON 各自的报告都带导出按钮,改完都能喂回各自的 render/validate。
边界
- 报告界面内置中英(
--lang,默认中文);提示词语言由promptLang单独控制(默认英文) - 秒数是下给视频模型的生成时长不是估算——段上限按你的模型改
params.maxSegmentSeconds,切的节奏区间改min/maxCutSeconds - 口型/唇形同步暂不管——那是生成管线的事
- 分镜图不追求一次到位——它是给视频模型的构图锚,构图对、资产对就够,微调交给重生成
门失败会累积
validate 与 checkup 每次都把门的结果追加到当前目录的 .gates.jsonl;跑 stats 汇总:
node {baseDir}/scripts/novel-storyboard.mjs stats
回答三件事:哪道门最常响(那条规则模型最常无视,该改的是措辞)、哪道门从没响过(可能是死门,也可能规则已被内化)、失败详情长什么样(反复出现却没有门的那类问题,只能靠人看)。
不想记加 --no-log;写不进去静默跳过,不影响校验。
自测
node {baseDir}/scripts/selftest.mjs
336 项断言,不调模型、不花额度。18 道质量门每一道都有击穿用例。改完脚本先跑这个。
自带样例
{baseDir}/examples/渡口-storyboard.json:《渡口》第 1 集完整分镜——10 段 34 切认领剧本全部 35 拍,平均 3.5 秒一切,共 119 秒 / 目标 120 秒,2 个生成批次,每段带完整的 H3 视频提示词(多图对齐 + 切点时刻全部对账通过)。当质量基准,也是自测夹具。