Communitygithub.com

woanderingboy/novel-video-pipeline

Novel to AI manga-drama (16:9) generation pipeline skill. 5 stations: script -> assets -> storyboard -> audio -> composite. Asset-first, IP firewall, child-safety gate. Consumes novel-writing-pipeline output.

novel-video-pipeline 是什麼?

novel-video-pipeline is a Claude Code agent skill that novel to AI manga-drama (16:9) generation pipeline skill. 5 stations: script -> assets -> storyboard -> audio -> composite. Asset-first, IP firewall, child-safety gate. Consumes novel-writing-pipeline output.

相容平台~Claude Code~Codex CLI~Cursor
npx skills add woanderingboy/novel-video-pipeline

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

漫剧(小说 / 网文 / 漫画改编)· 四站式流水线(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_saspect_ratio)→ 平台导出 → 一致性终检。详见 references/s5-composite.mdscripts/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 改编剧本

  1. 载入 assets/s1/story-structure.md(三幕 / 节拍结构模板)+ assets/s1/adaptation-method.md(压缩方法论:保留价值骨架、删冗、情绪曲线)。
  2. 按需填 assets/s1/beat-sheet.md(可填节拍表)。
  3. 参考 assets/s1/example-romeo-juliet.mdexample-journey-to-west.md 两个改编范例。
  4. 产出 script.json,字段见 references/workflow.md §S1 契约。

第 2 站 · S2 资产库(先建,后写分镜)

  1. 通读 S1 全部 beats / characters / scenes,建立角色资产:载入 assets/s2/character-design.md,为每个主要角色产出 character_manifest.json(visual_lock + fixed_prompt + 三视图 front/side/back + 锚定图包 ref_pack + 一致性规则)。
  2. 建立场景资产:载入 assets/s2/scene-multiview.md,为每个主要场景产出 scene_manifest.json(geography + axis_of_action + views{establishing, ots_a, ots_b, reverse, insert})。
  3. 配套拉取 / 生成公共领域 / CC0 视觉参考图 visual_manifest.json(多画风:国漫 / 水彩 / 写实 / 童书插画 / Met 公版美术…),套用 IP 防火墙。
  4. 套用 IP 防火墙:assets/s2/negative-ip.json + assets/s2/negative-ip-firewall.md
  5. 许可闸门:仅收 Public Domain / CC0。角色 / 场景资产一律原创,禁止同名同设定照搬爆款(详见 IP 防火墙 §六)。

第 3 站 · S3 分镜提示词(基于资产库写)

  1. 载入 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 防火墙)。

  2. 每 beat → 至少一 shot;每条 shot 必带 character_refscene_ref(引用 S2 资产库),并从资产 fixed_prompt 取锁定角色描述;从 camera-movements.json 取 1 个主运镜(subject_aware_map 按 beat 类型推荐);必带 negative_prompt(IP 防火墙 + 质量负向拼接)。

  3. 产出 storyboard.jsonshots[{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 合成时直接喂给图生视频模型做锁脸/锁服装参考。

  4. CC BY 4.0 数据须带 attribution(本库资产均为 PD/CC0,默认免署名;若引入外部 CC BY 数据则必须填 attribution)。

  5. 脚手架加速(可选):先建好 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 令牌),再人工精修相机角度 / 情绪 / 台词 / 节奏。该脚本是「资产优先」顺序的自动落地,产出可被 validate_pipeline.py 直接通过。

第 4 站 · S4 音频

  1. 载入 assets/s4/audio-manifest.json(已拉取的 CC0 音频清单,含 BGM / 音效 / 情绪类别:ambient / cinematic / playful / tense / romantic / lullaby 等)。
  2. 按镜头情绪匹配:悬疑低音→反转段、温柔钢琴→温情段、whoosh→转场、lullaby→安睡段、cartoon bounce→活泼段。
  3. 产出 audio_manifest.jsonitems[{file, license, source, duration_ms}]仅 CC0

第 5 站 · S5 合成(闭环到成片)

  1. 载入 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(未解析令牌保留原串并告警)。
  2. 逐镜生图 / 图生视频:以 storyboard.resolved.jsonref_images(已解析真实图)作为锁脸/锁服装参考,配合 fixed_prompt + camera_movement + camera-movements.jsonlens/stages 喂给即梦 @引用 / Runway Gen-4 / Kling / Seedance 生成每段 clip。
  3. 音频对齐:按 beat 情绪从 audio_manifest.json(CC0)选 BGM,按 duration_s 裁音效。
  4. 剪辑拼接:运行 python scripts/build_ffmpeg_concat.py --project <DIR> --clips-dir <DIR>/clips 生成 concat 列表与命令,按 aspect_ratio(横屏 16:9)导出 1080p。
  5. 一致性终检:核对 §四清单(角色/场景/轴线/权力轴/时长/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)绕过本环境 Python urllib 偶发 SSL 断流。

五道质量闸门(全站通用)

  1. 许可闸门:S2/S4 仅收 Public Domain / CC0;引入 CC BY 4.0 必须带 attribution。
  2. 画质闸门:图最长边≥1000 且短边≥600;音频时长 0.3–180s、文件≥100KB。
  3. 去重闸门:SHA256 跨运行持久化,重复图/音频自动跳过。
  4. 来源闸门:仅机构级 / 公共领域源(OBI、Openverse、Met、Freesound CC0…);拒收不明来源。
  5. 敏感闸门:全内容排除 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.exampleREADME.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/charactersS4-音频库/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 内的 SQLitememory_server/data/nvp_memory.db)并在采集后自动聚合,零配置即可跑完整闭环。只有「多机汇总 / 多人协作 / 远程回灌」才需要起 server.py(见下方「服务启动」与 README §2)。

闭环三步:

  1. 采集(跑完产线后)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 强制走服务。
  2. 聚合(本地自动 / 服务器定时):本地模式下采集后已自动聚合;HTTP 模式下用 cron 每小时跑 python memory_server/growth.py,把 SQLite 四表聚合成 snapshot/learnings.json,并把稳定知识 upsert 进 priors 表。
  3. 回灌(下次生成前)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 /healthPOST /ingestGET /queryGET /snapshotGET /export

相關技能