白板动画·实测工坊(whiteboard-video-lab)
把中文文案/讲稿/SRT 变成一支白板手绘讲解视频。核心方法论三条:
- 语义分镜先行:按叙事语义(而非画面显眼度)拆幕、排出场顺序,每幕只表达一个核心意思
- 旁白时间决定画面:画面时序必须挂靠真实旁白时间,禁止按字数/页长估算(音画对齐契约,见 references/pipeline-guide.md)
- 图片模型不写字:源图零文字,重点短语出图后本地叠加,杜绝 AI 中文乱码
本 skill 与开源工具 cs-board(MIT)的差异定位:cs-board 是重型本地工作台(需自建 TTS/GPU 服务);本 skill 在 WorkBuddy 内一站式完成分镜与线稿,渲染给出两条实测路径。方法论借鉴已按 MIT 协议在 NOTICE.md 署名,代码全部原创。
触发路由(含模糊说法)
| 用户说法 | 路由 |
|---|---|
| "把这个文案/SRT 做成白板动画/手绘视频" | 完整工作流(第 1 步起) |
| "帮我拆分镜"、"这个讲稿怎么分镜" | 只做第 1 步,输出分镜表后停 |
| "白板风格的插画/线稿" | 只做第 2 步出图,需先有分镜或现场快拆 |
| "白板视频怎么渲染/导出" | 直接进渲染路径指引(references/pipeline-guide.md) |
| "让 AI 画个视频"(笼统) | 先确认:是不是白板手绘风?有没有旁白/字幕文件?按答案路由,不要猜 |
| "做儿童画本/绘本/睡前故事成册" | 轻量画本模式(见延伸应用节),不走向视频流程 |
| "画个简笔画/儿童插画素材" | 只做第 2 步出图,用全彩档配方(见 references/pipeline-guide.md) |
完整工作流(每步完成后停下等用户确认)
第 1 步:语义分镜(不生成任何图片)
- 输入为 SRT:运行
scripts/scene_planner.py <字幕.srt>,按真实时间拆幕(默认 25–35 秒/幕) - 输入为纯文案:运行
scripts/scene_planner.py --text <文案.txt> --rate 4(按中文口播语速≈4 字/秒估算时长,输出中标记estimated: true并提示用户配音后用 SRT 重跑以获得精确时序) - 输出分镜表:每幕含场景编号、核心表达、画面主体建议、4–10 字重点短语、时间区间
- 重点短语必须来自该幕文案核心观点,一幕一个核心意思
- 展示分镜表,停止等待确认
第 2 步:生成统一风格线稿
对每幕,把 references/visual-spec.md 的完整视觉规范写入出图提示词,生成 16:9 线稿(无真实素材时)。出图通道二选一:
- 默认:WorkBuddy 内置出图——把 visual-spec.md 规范写入提示词生成
- 备选:本地 ComfyUI(可一键批量)——挂 ColoringBookRedmond-V2 线稿 LoRA(权重 1.0 + 写实系底模),运行
scripts/auto_illustrate.py --plan plan.json --outdir scenes/:按分镜逐幕出图,内置三档色量配方、出图后自动质检(PNG 体积阈值)与换 seed 自动重抽(≤3 次)、幂等续跑(已出幕自动跳过);配方细节见 references/pipeline-guide.md。白底黑线出图后可用 Pillow multiply 叠#F5EBD7纸色
硬性要求:
- 暖米黄纸底
#F5EBD7,深灰线条,仅红/橙/蓝做少量点缀 - 极简手绘涂鸦风、大量留白、系列内风格一致
- 禁止任何文字/字母/数字/水印进入源图
- 构图主体间留足空隙,便于后续按叙事分区
- 逐幕展示线稿,停止等待确认
第 3 步:标注 JSON(语义排序 + 像素坐标)
用户确认线稿后:
- 先读该幕文案、再实际查看图片(用 Read 工具看图),不得只凭文案臆测画面
- 起手可用
scripts/annotate_helper.py <线稿.png>自动生成 region 草稿(边缘密度网格建议区域,草稿带draft: true标记与人工核对提醒),再读图核对语义、改写 label/narrativeRole/subtitle、校准 startMs 后转正——草稿只省坐标测量,语义字段必须人工按图改写 - 按语义顺序安排绘制顺序:「场景铺垫 → 关键人物/物体 → 动作冲突/变化 → 反应/结果」
- 每个元素输出原图坐标系整数像素
x/y/width/height(原点左上角,禁止百分比与估算坐标),canvas尺寸=原图像素尺寸 - 元素字段:
sequence(从 1 连续)、narrativeRole(中文叙事作用)、subtitle(对应字幕原文)、region、reveal.startMs/durationMs - 区域串行作画(一支笔):同幕内
startMs不重叠,下一区域从上一区域结束后 +100~300ms 开始;durationMs内按 ink:color = 2:1 分配(先铺线后添彩) - JSON 保存为
<图片名>.annotation.json(与图片同名),停止等待确认
标注 JSON 格式示例:
{
"sceneId": "scene-01",
"canvas": { "width": 1672, "height": 941 },
"sceneDurationMs": 30000,
"elements": [
{
"id": "problem",
"label": "问题抛出",
"sequence": 1,
"narrativeRole": "场景铺垫",
"subtitle": "为什么你的钱越存越少?",
"region": { "x": 120, "y": 200, "width": 600, "height": 500 },
"reveal": { "startMs": 300, "durationMs": 2600 }
}
]
}
第 4 步:渲染成片(双路径,按用户环境选)
两条路径的部署步骤、命令与实测坑清单见 references/pipeline-guide.md。要点:
- 路径 A(推荐,效果最好):部署开源 cs-board 本地渲染器,用第 3 步的标注 JSON 直接渲染 stream 笔迹成片
- 路径 B(零部署):WorkBuddy 出图 → ComfyUI 做手绘动效(可选)→ 剪映合成配音/字幕/BGM(可配合 jianying-draft-forge 生成草稿)
- 无论哪条路径,成片后按质检清单核查(见下),停止等待确认
第 5 步:重点短语叠加(仅路径 A)
开启重点文字时:每个叙事区域顶部用本地中文字体叠加 1 条 4–10 字短语(cs-board 的 add_key_text.py 或等价方式),随画手笔迹一起出现。用户可关闭。
第 6 步:批量 i2v 动画化(可选——只在"需要真人步态"时才做)
静态线稿 + 推拉已经能成片;只有当镜头需要真实步态或物理动作(走路、爬梯、翻书、开门、杠杆撬物)才上 i2v。批量生产的完整规则见 references/07-batch-i2v-production.md,三条必须先记住:
- 提速走 Lightning LoRA(4 步 / cfg 1.0),实测比基准 28 步快 6.15 倍(25.4 → 4.13 分钟/段);
- 提交别手拼 API——用 ComfyUI history 里真实成功任务的 API 格式当黄金样本,只改首帧/帧数/提示词/文件名前缀;
- 16GB 卡单段上限 49 帧(61 帧崩驱动、97 帧必崩),长页拆段、不足用尾帧保持。
产物必过双指标质检(黑屏:亮度<20;花屏:中间调占比>55%),每段过检立即转码落盘——temp 不是存储,攒到最后收割必丢件。
第 7 步:页内连贯性契约(同一页拆多段时必做)
b 段首帧 = a 段真末帧(从落盘成品抽),多段页逐段链式相接。做不到这一点,观众看到的就是"两段重复动画"。(实测 16 个 a/b 对里 14 处中招,返工 13 段 1h37m。)
验收用高斯模糊 r=4 后的 MAD 判构图级差异——线稿细黑线错位 1–2px 就能拉高原始 MAD,原始阈值不可用;最终判定必须目检对照拼图。详见 references/08-consistency-export-publish.md。
第 8 步:导出与发布交付(v2 三段式直出,固定路径)
- 剪映 11.5+ 草稿已加密、导出需会员(用户已拍板不充值)→ 以自己生成的 plan(绝对时间轴)为唯一真相源,走 v2 三段式 ffmpeg 直出:
① 切槽位——每段按绝对时间切精确帧数(tpad clone补 gap →trim=end_frame=N→setpts归零),总帧数必须闭合;
② 拼接——concat demuxer-c copy;
③ 成片——叠字幕 PNG + 挂预混音频。 - ⚠️ 禁用
overlay+enable铺多段动画:副输入流随主时间轴推进,enable 打开时素材已播完只剩末帧,全片动画会被冻结(v1 首发级事故,实测素材帧间差异 76.8% vs 成片 0.17%); - 静止金句段(素材 Δ≈0)用 zoompan 单帧微推近激活(每帧 +0.00035,4× 预放大;禁配
-loop 1);大 filtergraph 混音会断流,音视频解耦:先单独命令预混旁白+BGM 再挂载; - 配乐走可商用免版税源,起点对齐画面、逐窗验收"不盖人声 0 处";
- 验收四件套(缺一不发):规格(时长/分辨率/fps/声道)/EBU R128 响度/逐段差异扫描(成片 Δ ≈ 素材原生 Δ,专杀动画冻结)/音频流时长(专杀静默截断);
- 发布四件套:标题(问题+数字钩子)/话题 6–8 个/1920×1080 卡片式封面(另出无字版)/简介 ≤400 字,三处文案口径一致;AI 生成内容必须勾选作品声明。
完整清单见 references/08-consistency-export-publish.md;导出细节另见 skill jianying-draft-export(剪映成片·绕行直出)。
自动化与幂等续跑
- 产物命名固定:线稿
<sceneId>.png、标注<sceneId>.annotation.json,全部落在同一工作目录 - 重跑即续跑:
auto_illustrate.py自动跳过已存在的<sceneId>.png,失败/中断后直接重跑同一条命令只补缺失幕,不重复劳动(--force才强制重出) - 自动重试在先,人工在后:出图不合格(带文字、纹理崩坏、主体粘连)先由脚本自动换 seed 重抽 ≤3 次;3 次仍失败才升级人工检查提示词,不要一开始就手动反复重试
- 每步产物落盘:分镜 JSON、标注 JSON 均写文件(不只在对话里展示),任何一步失败都从文件恢复而非从头再来
质量检查清单(成片前后逐条过)
- 首帧为干净暖米黄纸底,无提前露线
- 所有
region为整数像素且在画布内;sequence/startMs与文案事件顺序一致 - 抽查三个时间点(开场、重叠区中段、结尾):未绘制区域不可见,最终帧停留 ≥0.5 秒完整原图
- 开启重点文字时:每区域顶部有且只有一条准确短语;关闭时画面无任何模型生成的乱码
- 音画对齐:画面元素出现时间 ≤ 对应旁白短语起点(宁可画面稍后,不可抢跑)
批量 i2v 与交付段追加:
- 每段 i2v 过双指标质检(亮度<20 判黑屏;中间调>55% 判花屏)且当段立即转码落盘
- 同页多段满足「b 首帧 = a 末帧」,接缝用模糊 r=4 的 MAD 判构图级差异 + 拼图目检无重复播放
- 混音:配乐相对旁白偏低、逐 0.4s 窗口「配乐盖人声」= 0 处(双声道等功率口径测量)
- 发布物齐备:标题 ≤30 字 / 话题 6–8 / 封面 ≥1920×1080(含无字版)/ 简介 ≤400 字,且三处文案口径一致;AI 生成声明已勾选
异常处理与纠偏
| 情况 | 处置 |
|---|---|
| 用户只给文案没有 SRT | 正常继续,但明确告知时序是估算的;成片若音画错位,建议配音后用剪映/Whisper 导出 SRT 重跑第 1 步 |
| 线稿生成带文字或风格不统一 | 立即废弃重出,不「事后修图」;连续 2 次不合格时与用户确认 prompt 是否需要调整后再试 |
| 标注坐标无法确定(主体粘连) | 用 protectedRegions 保护重叠区;仍无法分区时建议用户换构图更松散的线稿,不要硬拆 |
| 渲染环境装不起来 | 路径 A 失败先查 Python 版本与依赖;仍失败降级路径 B,不反复折腾 |
| 音画对齐全片错位 | 检查是否用了估算时序配音;处置:用真实 SRT 重跑第 1 步,只重渲染受影响幕 |
| 用户中途改文案 | 只重做受影响的幕(分镜→线稿→标注),未受影响幕的产物全部保留复用 |
| ComfyUI LoRA 出图崩坏(纹理噪声/空纸/主体重复) | 先查底模:二次元底模不兼容该 LoRA,换写实系;再查权重必须 1.0;PNG >1.5MB 直接丢弃重抽(详见 pipeline-guide.md) |
| 画本模式角色跨页不一致 | 检查主角特征描述模板是否逐页原样复用、seed 是否固定;仍不一致则废弃该页重抽,不要勉强使用 |
延伸应用:少儿读物与儿童科普
本 skill 的出图管线(线稿 LoRA 三档色量配方,见 references/pipeline-guide.md)天然适合少儿场景:
- 儿童科普白板动画:知识讲解类内容用纯线稿/点缀色档,节奏慢、留白多,适配低龄注意力
- 简笔画素材页:全彩档直接出儿童简笔画插图(小动物/日常物件),可作绘本内页素材
- 轻量画本模式(非视频产物,用户明确要画本时启用):主题 + 目标年龄段 → 分页大纲(每页 1~2 句低龄文案,3-6 岁/6-9 岁两档语言分级)→ 逐页全彩简笔画插图 → 标题/页码本地字体叠加 → 输出单文件 HTML 翻页书 + 打印友好分页 PDF。角色一致性:主角特征写成固定描述模板跨页复用 + 固定 seed,同角色每页外观必须一致,不一致立即重抽
- 边界提醒:视频(白板动画)是本 skill 主线,画本模式是延伸轻量路径;画本不做音画对齐与渲染,分页文案确认后再批量出图
能力边界
能做:分镜拆解、线稿出图(WorkBuddy 内置出图 / 本机 ComfyUI 线稿 LoRA)、标注 JSON、渲染路径指引与故障排查、质检
不能做:直接在 WorkBuddy 沙箱内渲染 MP4(渲染在用户本机完成);TTS 配音(推荐用户自备或走 cs-board 本地音色克隆);保证成片达到特定播放量
参考文档
references/visual-spec.md:统一出图视觉规范 + 可直接粘贴的出图提示词模板references/pipeline-guide.md:双渲染路径部署指引 + ComfyUI/EP2 实测坑清单 + 音画对齐契约references/07-batch-i2v-production.md:批量 i2v 生产线(Lightning 提速、黄金样本提交、49 帧上限、黑屏/花屏/僵尸/驱动丢设备四类故障判别、坏种子两种修法、阶梯诊断法、产线纪律)references/08-consistency-export-publish.md:页内连贯性契约(b 首帧=a 末帧)、模糊 MAD 接缝验收、剪映会员墙绕行导出、配乐混音要点、发布四件套与合规references/FAQ.md:常见问题、错误用法与异常恢复scripts/scene_planner.py:SRT/文案 → 分镜 JSONscripts/i2v_batch_template.py:批量 i2v 串行生产线模板(串行提交+双指标质检+冷却+僵尸判活+换种子+断点续跑)scripts/verify_seam_template.py:接缝验收模板(原始 MAD + 高斯模糊 MAD 双口径)scripts/make_cover_template.py:1920×1080 卡片式封面生成器(浅底+蓝主色,换插画与文案即出新封面)
NOTICE
方法论借鉴自开源项目 cs-board(ChenShuo2004/cs-board,MIT License),含语义分镜、分区遮罩编排、流式笔迹、旁白驱动时间轴等思想;全部代码与文档为本 skill 原创。署名详情见 NOTICE.md。
变更记录
- v1.0.0(2026-09-20):首版。语义分镜、统一视觉规范线稿、标注 JSON、双渲染路径、音画对齐契约、异常处理、FAQ。
- v1.0.1(2026-09-20):新增批量出图脚本(自动质检+换 seed 重试+幂等续跑)与标注草稿脚本;新增儿童画本轻量模式与三档色量配方;补全路由/异常/FAQ;新增自动化与幂等续跑规范。
- v1.0.2(2026-09-22):首条全片实战(94 秒白板动画,从长文到发布)回灌。新增第 6/7/8 步(批量 i2v 动画化、页内连贯性契约、导出与发布交付);新增两份参考文档
07-batch-i2v-production.md(Lightning 提速 6.15×、黄金样本提交、49 帧上限、四类 GPU 故障判别、坏种子两种修法、阶梯诊断、产线纪律)与08-consistency-export-publish.md(b 首帧=a 末帧、模糊 MAD 验收、会员墙绕行导出、配乐响度对齐、发布四件套与 AI 声明);新增三个脚本模板(i2v 批量生产线/接缝验收/封面生成器)。 - v1.0.3(2026-09-22):发布级事故复盘回灌,导出定版 v2 三段式。① 第 8 步重写:切槽位→concat→叠字幕挂预混音频,禁用 overlay+enable 铺段(全片动画冻结根因);② 验收升级四件套(规格/响度/逐段差异扫描/音频流时长);③ 静止段 zoompan 微推近激活与两个新坑(-loop 1 失控、大 filtergraph 混音断流→音视频解耦);④ frontmatter 补 version 字段。