| name | novel-video-pipeline |
| description | 小说 / 网文 / 漫画改编 AI 漫剧(横屏 16:9)的「四站式」生成流水线 Skill(S1 改编剧本 → S2 视觉资产 → S3 分镜提示词 → S4 音频)。当用户要把一段故事、小说、网文、漫画或剧本做成 AI 漫剧(横屏 16:9)/ 短视频(分镜提示词 + 视觉参考 + 配音配乐),或需要四站中任意一站的产出与质量把关时使用。内置 S1 故事结构库(含爆款漫剧情绪引擎)与改编压缩方法论、S2 公共领域负向词 IP 防火墙、S3 分镜模板库与平台预设、S4 CC0 音频清单,并提供零 IP 风险的图/音拉取脚本与站间门禁校验。支持借鉴热门爆款漫剧的题材 / 情绪 / 爽点结构(方法层,可自由使用),但坚守「不照搬表达、不复制真实第三方版权形象」底线;也支持儿童向漫剧(童话 / 绘本改编)作为可选子类型。 |
漫剧(小说 / 网文 / 漫画改编)· 四站式流水线(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 锚定图)+ 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 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 + S2 character_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 令牌),再人工精修相机角度 / 情绪 / 台词 / 节奏。该脚本是「资产优先」顺序的自动落地,产出可被 直接通过。
第 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:
python scripts/fetch_visual_assets.py --out <DIR> --sources obi,openverse,met
python scripts/fetch_audio.py --out <DIR>
- 质量闸门内置:许可(PD/CC0)、画质(长边≥1000 且短边≥600、文件≥50KB)、去重(SHA256 跨运行)、来源闸(仅机构源)、敏感闸(Openverse
mature=true 一律排除,全平台硬要求)。
- OBI 传输用
curl 引擎(--retry 5 --retry-all-errors -k)绕过本环境 Python urllib 偶发 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。