2026/9/29 18:21:45

AI短剧生成流水线实战:ComfyUI+Skills系统全解析

AI短剧生成流水线实战:ComfyUI+Skills系统全解析 简介面向短剧创作者与AI视频爱好者这份资源围绕Seedance 2.0 Storyboard Generator搭建了一套完整的AI短剧生成流水线整合ComfyUI工作流与Skills系统帮助用户从小说/故事快速生成多集视频剧本并完成分镜规划、文生图、图生视频、语音合成与片段合并。相比传统人工拆条能显著降低试错成本让新手也能借助结构化提示词快速产出高质量剧情。包体非常轻量共41个文件、1.2MB以JSON工作流、Python脚本、Markdown指南为主另含少量Shell/TXT辅助文件结构清晰便于按需调用。内容涵盖剧本重写器、分镜生成器、镜头文生图/图生视频工作流、TTS配音脚本及Web管理界面还附带分镜规划指南、进度说明和备份目录既适合新手理解全流程也方便高级用户修改参数复用。目前已有162人学习是快速上手AI短剧制作的实用参考包。1. AI短剧生成流水线打包了什么一个zip装的是流程不是模型做短剧最磨人的不是写剧本而是把剧本变成画面的那几百张关键帧。标题里这个“AI短剧生成流水线 - ComfyUI Skills系统.zip”拆开看不是一堆大模型文件而是一套把“剧本→分镜→图像→视频片段→成片”固定下来的流程ComfyUI负责图像与视频生成Skills系统负责剧本解析、提示词编排和步骤调度。适合一个人做剧、小团队量产素材、或者想把手动抽卡改成流水线作业的人。拿到这个zip先别急着找模型先把工作流和技能包目录摸清楚这才是它能省下时间的地方。2. 为什么是ComfyUI Skills短剧生产的两端责任怎么分2.1 ComfyUI在短剧里承担什么可复现的节点式“生成车间”短剧生成和普通画图不一样它要求同一个角色反复出现、同一个场景多角度复用、同一个分镜能改参数重跑。ComfyUI被选来做这件事核心原因是节点式工作流把每一步都变成可见、可存、可复现的节点图。一张“角色中景”的工作流保存成JSON文件之后换提示词、换种子、换参考图都不需要改代码把节点参数一调、再点一次队列输出就是另一版结果。对比一下常见的三种落地方式就很清楚一次性脚本直接调用模型参数全埋在代码里改一个镜头风格要改代码普通绘图界面适合单张精修但不适合批量ComfyUI把模型调用、参数、预处理都拆成节点既能整张工作流分享给别人也能被外部脚本通过API批量触发。短剧流水线里ComfyUI就是那个“生成车间”它不管剧本怎么写只管把进来的提示词和参考图变成画面。ComfyUI生态里的现成节点也正好覆盖短剧需求ControlNet管姿势和构图IPAdapter/LoRA管角色一致性AnimateDiff/SVD这类节点管静态图转动态片段。这意味着短剧所需的图像生成能力不用全从零写只需要把现成节点按分镜逻辑串起来。选型理由就一句话短剧最怕不可复现而ComfyUI天生就是为了复现和批量设计的。2.2 Skills系统补上的拼图文本编排、提示词工程与步骤管理短剧生产不只是“生成图片”。一条完整的链路里有剧本、分镜表、角色卡、提示词模板、配音文案这些文本工作如果全部塞进ComfyUI的节点里工作流会变成一团乱麻。这里说的Skills系统不是ComfyUI官方内置的功能而是这个流水线里的一套组织方式把每个子任务拆成独立的“技能包”每个技能包包含提示词模板、参数配置和输入输出约定。常见做法是拆成几个技能包剧本解析包负责把短剧文本切成场景和分镜角色包负责维护角色外貌、服装、性格特征提示词包负责把分镜表中的镜头信息拼成模型能理解的正向和负向提示词成片包负责把生成的图片序列按顺序交给视频拼接。每个技能包都可以单独修改改提示词风格不会碰图像生成节点换模型不用重写文本模板。这种拆分的价值在于责任边界清晰。ComfyUI管的是“怎么生成”Skills管的是“生成什么、按什么顺序生成”。当生成结果有问题时先判断是提示词写得不清楚、分镜拆分不合理还是节点参数不对排查范围一下子缩小很多。如果只用一个大脚本把所有事情串起来改动任何一环都可能牵动全局维护成本会快速失控。2.3 两端怎么咬合从技能包到ComfyUI API的调用链技能包处理完文本产出的是结构化分镜数据ComfyUI要消费这些数据走的是API通道。常见做法是让Skills脚本把分镜清单遍历一遍把每个镜头的提示词和参数组装成工作流JSON再提交给ComfyUI的/prompt接口轮询状态直到生成完成。import json import time import requests # ComfyUI 默认跑在本机 8188 端口改成你自己的地址 API http://127.0.0.1:8188 def submit_and_wait(workflow, timeout180): # workflow 是从 ComfyUI 前端导出的 API 格式 JSON resp requests.post(f{API}/prompt, json{prompt: workflow}) prompt_id resp.json().get(prompt_id) if not prompt_id: raise RuntimeError(f提交失败: {resp.text}) # 轮询 generation 结果每 1 秒查一次 for _ in range(timeout): history requests.get(f{API}/history/{prompt_id}).json() if prompt_id in history: print(生成完成) return prompt_id time.sleep(1) raise TimeoutError(等待超时去 ComfyUI 前端页面看看队列状态)这里有个关键点ComfyUI前端菜单里“保存”有普通格式和API格式之分提交给接口的必须是API格式导出的JSON否则缺少节点连线信息。脚本里不要修改class_type和inputs这些键名只需要改text提示词、seed种子、batch_size这类参数值。轮询间隔1秒比较合适太频繁会占用不必要的请求超时时间要根据生成时长调文生图通常几十秒图生视频可能几分钟。2.4 为什么不用单一脚本一把梭边界清晰比代码量少更重要有人会问既然最终都是脚本调API为什么不直接写一个Python脚本把所有逻辑放在一起还能少一层ComfyUI的依赖。真实情况是短剧项目的需求变化非常频繁角色定位改了、风格方向换了、某个镜头要从白天改黄昏如果提示词和模型参数埋在代码里每次改动都要改代码再重启脚本。而拆成“Skills管文本ComfyUI管生成”之后改文本只改技能包里的模板改画面只调工作流节点互不干扰。这个边界在排错时尤其值钱。技能包的问题通常表现为“生成画面内容不对、角色描述漏掉”,工作流的问题通常表现为“报错、节点红色、显存不足”。两类问题的排查路径完全不同分开之后不会互相干扰。ComfyUI对模型加载、显存管理、采样器封装得足够好不需要重复造轮子Skills侧负责那些ComfyUI不擅长处理的文本解析和流程控制。两个系统各管一段流水线才真正跑得起来。3. 跑通zip的最小动作解压校验、目录对接与ComfyUI启动3.1 解压前先做三件事校验大小、看目录结构、查伪加密拿到zip之后不要直接双击解压先花一分钟确认这个包是否完整。AI短剧流水线里通常有成百上千个小文件传输过程中容易损坏解压到一半报CRC错误的情况很常见。先看文件大小和文件数量是否符合预期再用命令行列目录而不是直接解压因为有些包为了防盗链做过伪加密双击时弹密码框会让人误以为包是坏的。# 只列表不解压先看内容再动手 unzip -l ai_short_drama_pipeline.zip | less # 确认没问题后解压到指定目录保留目录结构 unzip -o ai_short_drama_pipeline.zip -d D:/ai_short_drama_pipeline-l参数只显示压缩包内的文件列表不实际解压方便先核对目录结构是否和说明一致-o表示覆盖已有文件-d指定解压目标目录。如果在解压过程中弹密码框而说明文档里没有密码多半是zip伪加密——加密标志位被设置为1但文件内容其实没有加密用修复工具清掉标志位就能正常解压不必在密码上死磕。解压完成后先找README或启动说明确认这个包是纯工作流包还是带了模型文件的完整包后续操作方式不一样。3.2 目录放对位置custom_nodes、workflows与output的约定短剧流水线的目录结构通常遵循ComfyUI的约定技能包和工作流各自放好才能被正确加载。常见的目录组织方式是workflows/存放可复用的工作流JSONcustom_nodes/存放依赖的ComfyUI插件output/存放生成结果skills/存放技能包。ai_short_drama_pipeline/ ├─ workflows/ │ ├─ character_scene.json │ └─ video_clip.json ├─ skills/ │ ├─ script_parse/ │ ├─ scene_breakdown/ │ └─ prompt_builder/ ├─ custom_nodes/ └─ output/需要说明的是这个目录结构不是某个固定标准而是我实际使用中最顺手的组织方式。ComfyUI只会自动扫描它的custom_nodes目录加载插件workflows和skills更多是我们的约定只要脚本里路径写对放哪里都可以。但建议沿用这个结构因为技能包和工作流文件多了之后建立一个统一约定比每次重新记忆路径更省事。如果zip里自带README以它写的目录结构为准README就是这个包的说明书。3.3 本机没有ComfyUI时的最小起步安装、启动参数与国内源如果本机已经跑通过ComfyUI直接跳到下一节合并目录。如果还没安装常见做法有两种用秋叶ComfyUI整合包这类现成环境当底子或者手工装一个纯环境。整合包的好处是插件和模型路径已经配好省掉大量体力活便携版则解压即用适合不想污染系统的场景。手工安装也不复杂关键是保证Python版本和依赖版本匹配。# 创建虚拟环境避免依赖污染系统 Python python -m venv venv # Windows 激活方式不一样venv\Scripts\activate source venv/bin/activate # 安装依赖临时切到国内 PyPI 镜像能快很多 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 启动 ComfyUI127.0.0.1 表示只允许本机访问 python main.py --port 8188 --listen 127.0.0.1--port 8188是默认端口只要没有被占用就不用手动指定--listen 127.0.0.1限制为仅本机访问如果另一台机器需要连到这个面板可以把--listen改成0.0.0.0但要确认内网环境安全。显存小于8G的机器建议追加--lowvram让模型分段加载到显存避免一张大图直接爆掉。把pip源临时切到国内镜像下载依赖的体验会从容很多尤其是第一次安装需要拉几十个包的时候。3.4 已有ComfyUI时先验证环境合并插件目录与ComfyUI Manager补节点打开zip里的工作流JSON时最常遇到的状况是节点一片红报“cannot find node type”。这几乎都是因为工作流依赖的自定义节点没有装。先把zip自带的custom_nodes目录内容合并到ComfyUI的custom_nodes目录重启ComfyUI再看工作流是否恢复正常。# -n 表示不覆盖已存在的同名文件避免把新版插件覆盖成旧版 cp -rn ./custom_nodes/* /path/to/ComfyUI/custom_nodes/合并完成后必须重启ComfyUI插件加载只在启动时执行一次。如果重启后仍然有节点报红用ComfyUI Manager在插件管理面板里搜索缺失节点名直接在线安装比手动放目录方便得多。装完插件后再重启一次、刷新页面不要省这一步。注意有些插件依赖较新的ComfyUI版本报错信息里如果出现module not found去插件目录看requirements.txt手动补装依赖即可。先跑一个最小文生图工作流验证环境正常再打开短剧相关的大工作流能少走很多弯路。4. 把剧本变成成片Skills模板怎么设计、生成参数怎么给4.1 把短剧技能包拆成文件分镜JSON、提示词模板与输出约定技能包拆文件的核心原则是一个文件只承担一件事。提示词模板如果直接写在ComfyUI节点里改一次风格要进节点改一次非常容易出错。常见做法是把提示词按模块拆到独立文件由技能包脚本在提交ComfyUI之前拼装成最终提示词。{ script: 都市短剧第一集_03场, scene_id: S01E03, shots: [ { shot_id: S01E03-01, camera: 中景, character: 女主, action: 推门进入办公室, dialogue: 这份合同我不同意。, environment: 现代写字楼办公区落地窗自然光 } ] }这个分镜JSON是技能包的核心产出一个镜头对应一个shot对象字段包含景别、角色、动作、台词和环境。提示词技能包拿到这个JSON后把character替换成角色卡里的外貌描述把environment拼接进去最后加上画质词和负面词组装成ComfyUI的正向提示词。这样分镜数据、角色描述、风格模板三者分离任何一项改动都不需要重写另外两项。注意技能包不要拆得太碎一个子任务一个目录就够了否则光维护文件关系就会消耗大量精力。4.2 图像生成节点怎么接基础模型、角色一致性与ControlNet短剧画面对人物一致性要求远超普通文生图。只靠提示词写“25岁长发女性”每次生成的都不是同一个人。常见做法是配置IPAdapter或InstantID节点绑定角色参考图让模型在生成时参考固定的人脸特征同时用角色LoRA锁住服装、发型、场景道具等元素。颜色和构图控制交给ControlNet OpenPose确保动作和镜头语言符合分镜脚本的要求。工作流的接法通常是文生图节点负责出底图IPAdapter节点把角色参考图嵌入生成过程ControlNet节点在采样前约束姿势骨架最后交给视频节点生成动态片段。每加一个控制节点显存占用会明显上涨所以节点不是越多越好按需接。初跑阶段建议只开IPAdapter和ControlNet其他辅助节点先禁用等主流程稳定后再逐步开启。这里要特别强调角色一致性不是靠单个环节解决的而是参考图、LoRA、种子共同作用的结果。同一个镜头列表内固定种子同样能减少随机性造成的脸型漂移。改任何一环都要重新验证比如换了参考图就要先跑两三张测试图对比人脸再全量铺开。4.3 一套可抄的短剧参数分辨率、步数、CFG与LoRA权重参考短剧是竖屏为主的内容形态但像素尺寸不能直接按视频分辨率给。常见做法是先按模型支持的分辨率生成较高画质的图后续再缩放合成视频。分词模板和参数值可以先用这套作为起步跑通后再根据实际模型调整。正向提示词模版 现代都市女性剧照25岁深棕色长直发浅灰色职业西装 站在落地窗前中景镜头左侧自然光纪实摄影风格浅景深 高细节8kbest quality 负向提示词模版 lowresbad anatomybad handsmissing fingers extra fingersblurrydistortedworst quality参数参考表参数建议值说明分辨率1216×672 横版 / 672×1216 竖版SDXL系模型常用尺寸避免拉伸变形采样步数25-35步步数过低容易出现不完整细节CFG4.0-7.0超过7容易颜色过饱和产生塑料感采样器DPM 2M Karras短剧写实风格下比较稳妥的组合LoRA权重0.6-0.8权重过高会导致角色刻板、背景退化ControlNet权重0.8-1.1OpenPose在1.0附近表现稳定batch_size1-2增大批量会显著提高显存压力这组参数不是唯一答案。底模不同CFG和步数的敏感度也不同动画风格的工作流通常需要更低的CFG写实风格则可以稍微提高。重点记一条原则先固定所有参数只改提示词确认画风稳定后再动其他变量否则画面崩了都不知道是哪一步引入的。4.4 把分镜图拼成动态片段批量出图与临时视频预览单张关键帧只解决了“画面长什么样”的问题短剧还需要“画面动起来”。最快的方式是让ComfyUI里的视频生成节点把静态图变成几秒的动态片段如果本地显存不允许也可以用FFmpeg给静态图加推拉摇移和转场先做成临时预览。不管走哪条路都要先把分镜图批量生成出来再进入拼接环节。批量生成建议写一个外层脚本用前面提到的API方式把分镜逐个提交而不是在ComfyUI前端手动一张张点。脚本遍历分镜列表为每个分镜组装提示词固定该镜头的seed生成完成后把文件名按分镜号统一命名方便后续拼接。# 把某个分镜的连续帧拼成临时视频24fps 是常用帧率 ffmpeg -framerate 24 -i output/S01E03/frame_%04d.png \ -c:v libx264 -pix_fmt yuv420p output/S01E03_preview.mp4-framerate 24指定输入帧率为24fpsframe_%04d.png要求帧文件按4位连续数字编号-pix_fmt yuv420p是为了兼容大多数播放器。如果帧文件名不连续先写脚本统一重命名再拼接否则FFmpeg会漏帧。这个临时预览主要用于检查动作是否连贯、角色是否稳定还不是最终成片不需要加音轨和字幕。5. 五个高频坑的排查笔记节点丢失、显存爆、角色漂移5.1 工作流打开一片红自定义节点找不到现象打开zip里带的工作流JSONComfyUI界面上一大片节点变成红色文字提示找不到节点类型。原因工作流依赖的自定义节点没有安装或者插件版本过旧不兼容当前ComfyUI版本。自定义节点以目录形式放在custom_nodes下换个文件夹名字插件就失效。解决先确认zip里是否有自带custom_nodes目录有就合并到ComfyUI对应目录并重启。没有就用ComfyUI Manager在插件管理面板里按节点类型名搜索补装。装完必须重启ComfyUI刷新浏览器页面。如果重启后仍报错打开控制台看具体的报错内容module not found说明插件依赖的Python包缺失去插件目录下找requirements.txt安装依赖。5.2 显存爆掉短剧批量生成的头号杀手现象单张生成很正常一旦把二十个分镜一次性塞进队列ComfyUI开始卡顿最后报错“CUDA out of memory”或者整个进程被杀掉。原因批量提交时模型权重一直驻留在显存工作流里的ControlNet、IPAdapter等辅助节点叠加后显存需求翻倍。还有一个容易被忽略的因素是系统虚拟内存不足Python进程被系统OOM机制杀掉。解决batch_size设成1或2不要贪批量显存小于8G的启动时加--lowvram参数如果只是生成过程中偶尔爆显存给系统分配充足页面文件让内存溢出时仍有缓冲。更稳的做法是在脚本里控制并发一次只提交三五个分镜等前一批完成后再提交下一批不要一次性把所有任务全塞进队列。提示短剧流水线需要长时间运行显存建议保留约20%余量。压满显存的后果往往是生成到一半就崩前面所有努力白费。5.3 用多模态模型做剧本解析时总报错现象把剧本文本交给带视觉能力的多模态节点比如Qwen Image 2.1这类模型解析分镜返回结果要么是空的要么格式不对镜头数量也经常缺失。原因这类节点对输入格式很敏感输出要求是JSON但模型经常返回带markdown代码块包围的文本技能包里的提示词没有约束输出格式模型就会自由发挥。本地低精度部署还会增加格式不稳定的概率。解决在解析节点下游加一步JSON清洗把代码块里的内容提取出来再做二次解析提示词模板里明确写“只输出JSON不要任何解释”把期望的分镜字段结构直接附在提示词后面模型照着填总比自由发挥靠谱。出现问题时先打开ComfyUI控制台看日志确认到底是模型没有返回内容还是脚本解析坏了别把锅全甩给模型。5.4 角色一致性漂移前3集和后3集不是同一个人现象男主女主的脸每隔几场戏就变一下有时候只是角度不同脸型、眼神已经明显对不上。观众弹幕一眼就能看出来。原因只依赖提示词描述外貌没有绑定参考图生成时没固定种子每次采样引入新的随机性镜头角度变化后IPAdapter参考图的权重不足以锁住面部特征。解决建一份角色卡包含正面、侧面、全身参考图通过IPAdapter统一绑定有条件的话为每个主要角色训练一个低学习率的LoRA权重控制在0.6-0.8同一个分镜系列内的所有镜头固定seed。跑全量之前先抽三个不同角度的测试镜头确认人脸稳定后再铺开这一步省下来的返工时间远超验证成本。5.5 zip伪加密导致解压失败现象解压时弹窗要密码包里说明文档没有写密码或者解压进行到一半某个文件提示CRC校验失败。原因zip伪加密文件头的加密标志位被置为1但数据内容并没有真正加密加上短剧包文件数量多传输过程中某个大文件损坏就会出现半程CRC报错。这两种情况都容易被误判为“这个包是坏的”。解决先用unzip -l列出包内文件确认列表正常说明包结构完整伪加密用修复工具清理加密标志位或者换一个解压工具强制按不加密方式处理CRC报错说明文件确实损坏重新下载、重新传输整个zip不要继续使用已经被截断的半成品。解压完成后再看一眼文件总数和列表数量对得上再进入下一步。6. 进阶用法批量渲染、TTS配音与成片拼接的最后一公里6.1 先跑一个30秒预告验证整条链路全量生成之前先从技能包里挑出前几个分镜跑一条30秒的预告片段出来。这个片段要覆盖主要角色、核心场景和关键镜头用来验证三件事角色人脸是否一致、画面色调是否符合风格要求、整条流水线的参数组合是否稳定。跑通之后再放开全量渲染风险会小很多。我见过太多项目一上来就全量生成几百张图最后发现风格不对全部作废。6.2 用脚本把分镜片段拼接成完整剧集每个分镜生成一段短视频后用文本文件按顺序列出片段的路径交给FFmpeg拼接。clips.txt里的每一行写一个文件路径最后用-c copy直接复制编码流速度快且不损失质量。# clips.txt 内容示例按分镜顺序排列 # file output/S01E03.mp4 # file output/S01E04.mp4 ffmpeg -f concat -safe 0 -i clips.txt -c copy output/episode1.mp4-safe 0允许文件路径中包含相对路径字符-c copy表示直接复制视频流不做重新编码几十个分镜拼下来几秒就能完成。片段编码参数不一致时会拼接失败所以所有分镜在生成阶段就要统一使用相同的分辨率、帧率和编码格式。6.3 把TTS配音和字幕接进成片画面拼好之后把分镜JSON里的对话字段提取出来作为TTS输入逐段生成配音再按时间轴对齐到画面上。字幕直接生成SRT文件TTS的每句话对应一条字幕条目。最后用FFmpeg合并视频、音轨和字幕。# 合并画面与配音视频流不重新编码音频转成 aac ffmpeg -i episode1.mp4 -i voice1.mp3 \ -c:v copy -c:a aac output/episode1_final.mp4短剧的台词节奏和普通配音不同每一句都要对应到具体镜头的时长TTS生成前最好先把每句台词的起止时间算好而不是让TTS自由发挥。拼接完成后花十分钟把全片过一遍重点检查音画同步和转场处是否有跳帧。这些年做短剧流水线我养成了一个习惯任何改动都先跑最小样本验证确认角色脸不漂、色调不跳再铺全量这个顺序帮我少翻过很多车。希望这个顺序也能帮到你。本文还有配套的精品资源点击获取