漫劇(小說 / 網文 / 漫畫改編)· 四站式流水線(novel-video-pipeline)
Overview
把一段文本故事(網文小說、漫畫、原創劇本、童話繪本等)穩定地轉化為可餵給文生影片模型的分鏡提示詞包 + 視覺參考圖 + CC0 配音配樂,全程守住「不複製真實第三方版權形象」底線。預設面向漫劇(橫屏 16:9 / 多集連載)產線,也可按需切換為兒童向漫劇、單集短影音等子類型。產線基調對標當下爆款漫劇的「強鉤子 + 情緒拉扯 + 反轉 + 爽點 + 集間懸念」節奏,但只取法其方法層骨架,角色 / 情節 / 畫風一律原創。
流水線由四個順序工作站組成,每站產出一份約定 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 分鏡提示詞(基於資產庫):把每個 beat 展開成鏡頭(shot),每條 shot 引用
character_ref(角色+視圖)與scene_ref(場景+視圖),從資產庫鎖定描述 + 運鏡庫(camera-movements.json)+ 平台預設拼出 prompt,注入negative_prompt,輸出storyboard.json。 - S4 音訊:為鏡頭匹配 CC0 BGM / 音效,輸出
audio_manifest.json。 - S5 合成(閉環到成片):把 S3
storyboard.json(含ref_images錨定圖)+ S4audio_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 commits 的 S1→S4 編排流水線)→ 借鑑其「故事→分鏡→影片」的階段切分與產物契約。
- seedance-prompt-skill / ai-shortfilm-prompts(MIT)→ 借鑑其 SKILL 格式的提示詞模板組織方式,作為 S3 底座。
- ArcReel(AGPL)→ 僅學架構,不抄程式碼(AGPL 傳染性,禁止合入本 MIT 風格 skill)。 詳見
references/architecture-licenses.md。
第 0 步 · 接收需求
確認四點:① 源故事(網文 / 漫畫 / 原創劇本 / 貼文或給路徑);② 目標平台(橫屏漫劇預設 B站 / YouTube 向,見 assets/s3/platform-presets.json 的 bilibili;豎屏抖音 / 影片號向則用 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兩個改編範例。 - 產出
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(各平台 prompt 語法、寬高比、時長上限)+assets/s3/tag-stats.json(標籤頻率統計)+assets/s3/negative-quality.md(品質負向詞)+assets/s2/negative-ip.json(IP 防火牆)。 -
每 beat → 至少一 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更穩(對齊即夢 @引用 / Runway Gen-4 單圖鎖臉)。每條為字串,約定兩種寫法:① 資產引用令牌char:<char_id>:<ref_pack鍵或three_view鍵>/scene:<scene_id>:<view>(由腳本自動從character_manifest.ref_pack抽取,生成器再解析為真實圖路徑);② 直接圖路徑 / URL(如/assets/char_shen_zhao_face.png)。建議每角色配 2–3 張(正面近景/側面/全身),即夢上限 9 張、Runway 單張即鎖。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餵給即夢 @引用 / Runway Gen-4 / Kling / Seedance 生成每段 clip。 - 音訊對齊:按 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 步 · 門禁校驗(必做)
執行 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–180s(保留真實極短音效)。--strict 下 warn 也判失敗。通過後才可進入影片合成。
內容分級(重要 · 預設不限制題材):門禁預設 --content-rating normal —— 不做任何內容分級限制,打鬥 / 暴力 / 懸疑 / 暗黑等成人向題材均可正常產出,僅守版權 IP 防火牆與資產契約。兒童向產線才追加 --content-rating child(或舊別名 --child):強制 S1 含「價值收尾」類節拍、S3 覆蓋兒童安全負向令牌(violence/gore/horror/blood/mature/nudity/weapon…)、掃描 beats 命中成熟內容(strict 下為失敗)。即:--child 是純可選的「兒童安全開關」,不傳則漫劇內容完全自由,不會低齡化。
拉取腳本(零 IP 風險)
兩個腳本僅標準庫 + 系統 curl,無需 pip install:
# S2 視覺資產:OBI 公共領域多畫風插畫(含童書/國漫風)+ Openverse CC0 圖 + Met 公版美術
python scripts/fetch_visual_assets.py --out <DIR> --sources obi,openverse,met
# S4 音訊:Openverse CC0(免 key);填 PIXABAY/FREESOUND key 可啟用擴充通道
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–180s、檔案≥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 雙保險守住真實第三方版權形象。
- 本 skill 不內嵌任何版權文本,只統計結構 / 寫法層範式;所有範例均為公版或使用者自有素材。
Resources
assets/s1/:故事結構模板、改編壓縮方法論、可填節拍表、劇本格式規範、兩個改編範例。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:五步閉環 + 工具矩陣 + 一致性終檢清單)。
注意事項
- 大體積圖庫/音訊庫不內嵌進 skill(保持可攜帶);執行時用腳本拉取,或指向你自己的 CC0 素材目錄(如
./assets/characters、S4-音訊庫/samples/這類本地潔淨批)。 - 本 skill 為編排方法論 + 自包含資產,不依賴 ViMax/ArcReel 等外部程式碼執行。
- 取得 BHL key / NYPL token 後,可自行在
fetch_visual_assets.py追加fetch_bhl()/fetch_nypl()通道(OBI 已驗證無需 key)。
自我生長(可選 · 資料閉環)
讓 skill 隨使用自我生長:每次產線執行後把客觀指標 / 人類評分 / 失敗日誌回灌進記憶庫,經聚合後把「高頻失敗模式建議 / 評分 / 風格訊號」回灌 skill,下次生成時提前規避。純標準庫、零依賴、可獨立部署在一台小伺服器上,與 skill 本體解耦。完整部署見 memory_server/README.md。
單機用?不用部署。 不設定
NVP_MEMORY_URL時,collect.py/load_learnings.py會自動直連 skill 內的 SQLite(memory_server/data/nvp_memory.db)並在採集後自動聚合,零設定即可跑完整閉環。只有「多機彙總 / 多人協作 / 遠程回灌」才需要起server.py(見下方「服務啟動」與 README §2)。
閉環三步:
- 採集(跑完產線後):
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 四表聚合成snapshot/learnings.json,並把穩定知識 upsert 進priors表。 - 回灌(下次生成前):
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。