
简介Toonflow 是一套面向短剧创作者与 AI 应用开发者的开源 AI 短剧生成工具核心定位是「自动化导演助理」负责把小说或剧本自动拆分为分镜、生成固定人设卡并转化为视频解决 AI 画图「千人千面」与重复劳动的问题。它并非简单的文生视频而是能保证主角形象一致的工业化管线涵盖角色卡生成、智能分镜与视频转化三大模块适合想跑通「文本→分镜→出片」全流程的中高级开发者研究源码与二次开发。资源包共 170 个文件以 139 个 TypeScript 源码为主辅以 jpg、png 图片素材、yml 配置、json 数据及 Dockerfile、docker-compose 等部署文件压缩包约 8.86MB目录结构完整便于按模块阅读。目前已有 1783 人学习下载读者可从中获取角色特征提取、SDXL 分镜生成、SVD 视频转化等关键实现思路以及可本地部署运行的完整工程代码。1. Toonflow 到底解决什么问题从一句梗到一集短剧的自动化流水线短剧赛道卷到今天真正的瓶颈早就不是有没有创意而是创意到成片之间的重复劳动。Toonflow 这个 AI 短剧生成工具瞄准的正是这段流水线把剧本拆成分镜、把分镜转成画面、把画面配上配音和字幕最后拼成一条能直接发布的竖屏视频。它不是一个输入一句话就出大片的魔法盒子而是一套把大模型、文生图、TTS、视频合成串起来的工程化编排层。源码开放意味着你可以改提示词模板、换模型供应商、调分镜节奏而不是被某个 SaaS 的固定套路锁死。适合谁一是想批量做短剧内容的自媒体团队二是想把 AI 生成能力接进自己产品的开发者三是想研究多 AI 协作编排agent 编排的工程师。如果你只是偶尔做一两条视频手动剪映可能更快但当你需要一天出十条、还要保持角色一致性时Toonflow 这类工具的价值才会真正显现。下面我按能跑起来、能改得动、能避坑的顺序把整套方案拆开讲。2. 拆解 Toonflow 的技术栈多 AI 协作是怎么串起来的2.1 从剧本到分镜LLM 负责结构化不负责创作Toonflow 的第一段流水线是剧本 → 分镜脚本。核心思路是让大语言模型把一段自然语言剧情输出成结构化的 JSON每个镜头包含场景描述、角色、台词、时长、镜头类型。这里的关键不是让模型写得好看而是让它输出稳定可解析。常见做法是用 system prompt 强约束输出格式再配合 JSON schema 校验。我一般会把分镜的字段固定成下面这样方便后续环节直接消费{ scene_id: 1, shot_type: close_up, duration_sec: 3.5, character: [女主], dialogue: 你到底瞒了我多久, visual_prompt: 年轻女性特写眼眶泛红室内暖光电影感, bgm_mood: tense }逻辑说明visual_prompt是给文生图模型的输入必须和dialogue解耦——台词归 TTS画面归图像模型两者不要混在一个字段里否则后期改一句台词就得重生成整张图。duration_sec决定这条镜头在时间轴上的长度直接影响成片节奏。参数上shot_type建议限定枚举值wide/medium/close_up否则模型会自由发挥出中近景偏左这种没法程序化处理的值。提示分镜生成阶段一定要做 JSON 解析失败的重试。模型偶尔会在 JSON 外面裹一层解释文字用正则先截取第一个{到最后一个}再解析比直接json.loads稳得多。2.2 角色一致性短剧翻车的头号重灾区短剧最怕的就是同一个角色第一集是圆脸第三集变方脸。Toonflow 这类工具通常用两种手段控制一致性一是固定角色参考图reference image二是固定随机种子seed。具体做法是给每个角色建一张角色卡包含参考图、外貌描述、固定 seed。生成该角色的所有镜头时都把参考图作为 image-to-image 的输入或者用 IP-Adapter 这类角色保持方案。参数上参考图权重类似ip_adapter_scale建议在 0.60.8 之间太低角色会漂移太高画面会僵化、动作不自然。# 角色一致性生成的核心参数伪代码按你实际用的推理框架替换 gen_params { prompt: shot[visual_prompt], reference_image: character_card[ref_img], ip_adapter_scale: 0.7, # 0.6~0.8 是甜区 seed: character_card[seed], # 同角色固定 seed negative_prompt: 变形, 多手, 多指, 模糊 }逻辑说明seed固定能保证同一提示词下画面基底稳定但换了提示词后 seed 的作用会减弱所以真正扛一致性的是参考图。ip_adapter_scale是那个玄学参数不同底模差异很大必须自己试。血泪经验是别指望一次生成就完美角色脸崩了要允许单镜头重生成而不是整集重跑。2.3 配音、字幕与合成把零件拼成成片画面有了接下来是 TTS 配音、字幕对齐、视频拼接。Toonflow 的编排层在这里做的是时间轴对齐每条镜头的时长由duration_sec决定配音生成后如果实际音频比镜头长要么压缩镜头要么拉伸音频要么重新生成更短的台词。常见做法是用 FFmpeg 做最终合成把图片序列 音频 字幕烧成一条 MP4。字幕建议用 SRT 而不是硬烧方便后期微调。合成命令大致长这样# 把分镜图片按顺序合成视频再叠加配音和字幕 ffmpeg -y -framerate 1/3.5 -i shot_%03d.png \ -i voice.wav -i subtitle.srt \ -c:v libx264 -pix_fmt yuv420p -c:a aac \ -vf subtitlessubtitle.srt output.mp4逻辑说明-framerate 1/3.5表示每张图停留 3.5 秒这个值要和分镜里的duration_sec对齐否则音画会错位。-pix_fmt yuv420p是兼容性保险不加的话某些播放器会黑屏。参数上竖屏短剧记得在合成前把图片统一 resize 到 1080x1920别指望 FFmpeg 自动帮你裁。3. 本地跑通 Toonflow 的最小路径环境、配置与第一次生成3.1 环境准备与依赖安装Toonflow 作为一套 Python 为主的生成编排工具本地跑通的第一步是把依赖装干净。我一般用 conda 建独立环境避免和系统里的包打架。核心依赖通常包括大模型调用 SDK、图像生成推理库、TTS 库、FFmpeg。conda create -n toonflow python3.10 -y conda activate toonflow pip install -r requirements.txt # FFmpeg 建议用系统包管理器装别用 pip 的 ffmpeg-python 代替二进制 ffmpeg -version逻辑说明Python 版本建议锁 3.10很多图像推理库对 3.11 支持还不稳。requirements.txt里如果混了 GPU 版和 CPU 版的 torch会出现装了却用不了显卡的情况装完务必跑一句python -c import torch; print(torch.cuda.is_available())验证。参数上显存低于 8G 的话文生图环节要么降分辨率要么改用 API 而不是本地推理。注意不要把所有模型都堆在本地。LLM 和 TTS 用 API、文生图用本地是性价比最高的组合反过来本地跑 LLM 对显存要求高得多新手容易在这一步劝退。3.2 配置文件怎么填模型、密钥、路径三件套Toonflow 的配置一般集中在一个config.yaml或.env里核心就三块模型供应商、API 密钥、输出路径。下面是一个典型结构llm: provider: openai_compatible base_url: https://your-endpoint/v1 model: your-llm-model api_key: ${LLM_API_KEY} image: backend: local_sd model_path: ./models/sd_base width: 1080 height: 1920 tts: provider: edge # 或你用的其他 TTS voice: zh-CN-female output: dir: ./output fps: 24逻辑说明base_url用兼容 OpenAI 协议的端点方便随时换供应商不用改代码。api_key走环境变量而不是写死在文件里避免提交到仓库泄露。width/height直接定成竖屏 1080x1920省得后期再裁。参数上fps对图片序列合成的短剧影响不大24 或 30 都行但一旦定了就别中途改否则时间轴会乱。3.3 第一次生成从一条分镜到一条成片建议第一次别跑整集先跑一条分镜把链路打通。流程是输入一小段剧情 → 生成分镜 JSON → 生成一张图 → 生成一段配音 → 合成一条 5 秒视频。from toonflow import Pipeline pipe Pipeline(config_path./config.yaml) # 只跑一条分镜验证链路 script 女主发现男主手机里的秘密质问对方。 shots pipe.generate_storyboard(script, max_shots1) for shot in shots: img pipe.generate_image(shot) audio pipe.generate_voice(shot[dialogue]) pipe.assemble(img, audio, shot, outtest_shot.mp4)逻辑说明max_shots1是关键先控制成本和时间。generate_storyboard内部会调 LLM 并做 JSON 校验如果这一步就报错问题在提示词或模型不在后面的图像环节。assemble负责把单镜头拼成视频跑通它意味着 FFmpeg 路径没问题。参数上第一次生成把图像分辨率调低比如 540x960能快很多链路通了再拉满。4. 避坑与排查Toonflow 落地时最容易翻车的 5 个点4.1 分镜 JSON 解析失败整条流水线卡死现象脚本跑到分镜生成就抛异常日志里是JSONDecodeError。原因大模型在 JSON 前后加了好的以下是分镜这类自然语言或者字段值里带了未转义的引号。解决解析前先用正则截取{...}区间再对字段值做转义清洗同时把 system prompt 里的只输出 JSON不要任何解释写死并开启重试建议 3 次。4.2 角色脸崩、服装跳变现象同一角色在不同镜头里长相、衣服颜色对不上。原因只固定了 seed没上参考图或者ip_adapter_scale设太低。解决给每个角色建角色卡固定参考图 seed把参考图权重提到 0.7 左右服装颜色写进visual_prompt的固定前缀里别每镜头重写。4.3 音画不同步越到后面越明显现象前几条镜头还行后面台词和口型/画面完全错位。原因每条镜头的实际配音时长和duration_sec不一致误差累积。解决合成前先探测每条音频的真实时长用它反推镜头时长而不是硬用分镜里的预设值或者统一把音频拉伸到镜头时长。4.4 显存爆了生成到一半进程被杀现象跑到第 N 张图时进程突然消失系统日志显示 OOM。原因图像模型没释放显存或者分辨率开太高。解决每生成一批图后手动torch.cuda.empty_cache()分辨率从 1080x1920 降到 720x1280 先跑通批大小设为 1别贪心。4.5 输出视频在部分播放器黑屏现象本地能播发到某些平台就黑屏或没声音。原因像素格式不是yuv420p或音频编码不兼容。解决FFmpeg 合成时强制-pix_fmt yuv420p -c:a aac字幕尽量用软字幕或单独上传别硬烧。5. 进阶玩法把 Toonflow 从能用调到好用链路跑通只是起点真正决定成片质量的是几个进阶技巧。第一是分镜节奏的批量调优把duration_sec做成可配置的节奏模板比如悬疑剧平均 2.5 秒一镜、情感剧 4 秒一镜整集套用同一模板观感会统一很多。第二是多 AI 协作的提示词分层把角色设定场景风格镜头语言拆成三层提示词分别维护生成时拼接改风格时只动一层不用全量重写。第三是建立重生成白名单。不是每条镜头都值得重跑我一般只对三类镜头重生成含角色正脸的、含关键台词的、转场镜头。其余背景镜头崩一点无所谓观众注意力不在那。这个策略能把重生成成本压掉一半以上。调优项默认值推荐值影响ip_adapter_scale0.50.6~0.8角色一致性 vs 画面自然度图像分辨率1080x1920720x1280 起显存占用与速度分镜时长固定 3s按剧型模板成片节奏重试次数13稳定性 vs 成本验证方法很简单同一段剧本用默认参数和调优参数各跑一遍把两条成片并排看重点看角色脸、音画同步、整体节奏。我自己的习惯是每改一个参数只跑一条分镜做 A/B别一次改五个参数然后不知道是哪个起了作用。这套东西踩坑最多的永远是角色一致性和音画同步把这两块磨顺Toonflow 才算真正能投产。希望帮到你。本文还有配套的精品资源点击获取