AI 漫剧制作最近确实很热。很多人看到别人用一套流程就能批量产出短剧、漫剧,第一反应是“这事我也能干”。真到动手的时候才发现,剧本可以用豆包写,配音可以用 TTS 合成,剪辑用剪映也能顶住,但到了 ComfyUI 生成静帧这一步,很多人直接被卡住。不是图崩了,就是人物前后长相差太远,两个场景之后主角已经换了个人。
这篇文章想讲清楚一件事:一条能跑的 AI 漫剧生产链路到底应该怎么搭。我不会重复“AI 时代内容创作变简单”这种话,而是把番茄、豆包、ComfyUI、红果这几个环节各负责什么、整个流程怎么串、最容易踩的坑在哪里,拆开讲一遍。
如果你正准备做 AI 漫剧,或者已经在尝试但始终觉得流程不顺畅,这篇文章值得读完。它会帮你从“单个工具能用”走到“全套流程能跑”,重点解决三个问题:可控的角色一致性、批量的静态帧生产、以及从静帧到成片的工程化衔接。
1. 一条完整 AI 漫剧链路,先看全局
1.1 四个工具到底各管哪一段
很多人把 AI 漫剧想象成一个工具从头干到尾,其实不是。它是一条分工明确的生产线,每一环都有专门的工具。
- 番茄:主要负责内容和故事层面的定位。番茄等小说阅读平台上有大量适合改编成漫剧的短篇故事,很多创作者从这里找灵感、找故事骨架。
- 豆包:承担剧本、分镜脚本、提示词优化的辅助创作。它本身不是画图工具,而是内容策划和文本生成的助手。你需要把故事转成一场一场的分镜,再把分镜转成能直接喂给绘图模型的提示词,这一步用豆包能节省大量时间。
- ComfyUI:整条链路里技术含量最高的一环。它负责把提示词变成漫画静帧,并且通过工作流的方式把“生成一张图”变成“批量生成一批风格统一的图”。这是 AI 漫剧能不能规模化的分水岭。
- 红果:典型的内容分发出口。红果短剧这类平台对短剧、漫剧内容有持续需求,是成片发布和测试反馈的地方。
1.2 生产链路全景
把漫剧生产拆成六个环节,大概是这样:
故事选题 → 剧本创作 → 分镜设计 → 静态帧生成 → 视频化 → 配音剪辑成片 (番茄) (豆包) (豆包) (ComfyUI) (图生视频) (配音/剪映等)注意一个关键判断:前三个环节是创意工作,后三个环节是工程工作。创意工作里 AI 能帮你放大效率,但真正决定你能不能“稳定量产”的,是后面三个工程环节。特别是 ComfyUI 的静态帧生成,它不是只要会文生图就行,而是要解决“怎么让一千张图长得像同一个故事里的人物”。
1.3 与传统流程的差异
传统漫画或动画制作,角色设定、原画、上色、补间、配音、剪辑,每一环都是人力密集型工作。一个几分钟的短片,一个小团队要做几周甚至几个月。
AI 漫剧把“原画”这个环节变成了“模型生成 + 批量控制”。过去画一百张角色图要画师一张一张画,现在是用工作流一次跑几十张,再用 LoRA、参考图、ControlNet 等机制保证长相稳定。效率提升非常明显,但代价是你需要学 ComfyUI 工作流,需要理解模型、提示词、采样器这些概念。
一句话总结:AI 漫剧没有消灭工作量,而是把工作量从“手工绘制”转移到了“搭建工作流和排查问题”。
2. 为什么真正的难点在“可控生成”
2.1 你实际要解决三件事
做 AI 漫剧,真正要解决的不是“图能不能生成”,而是三个更现实的问题。
第一是角色一致性。一个漫剧有主角、配角,每一集可能几十个分镜。如果主角第 3 个分镜和第 20 个分镜长得不一样,观众一眼就能看出来。这需要你在模型选择、LoRA 训练、参考图控制上下足功夫。
第二是批量生产能力。一部漫剧可能上百个分镜,每个分镜要生成多张候选图才能筛。如果一张一张手动调提示词、手动点生成,效率太低。ComfyUI 最有价值的地方就是可以把工作流固化成模板,然后通过脚本循环调用 API,一次性跑完几十个分镜。
第三是静帧到视频的桥接。漫画静帧是静态的,漫剧需要动态画面。你要决定每一帧是直接用图生视频工具生成小段视频,还是用镜头缩放、平移的运镜效果在剪辑软件里做“伪动态”。这个决策会影响整个生产速度。
2.2 角色一致性不是“多写两句提示词”
很多新手以为,只要在提示词里写“red hair, blue eyes, black jacket”就能保证角色统一。实际上模型很难靠文字描述记住一个具体长相。更稳妥的做法是组合使用:
- LoRA:用十几张同一角色的图片训练一个小型 LoRA,让模型“认识”这个角色。
- 参考图:在 ComfyUI 工作流里加入参考图输入,让每一张生成图都参考主角的设定图生成。
- ControlNet:控制画面构图和姿势,保证同一分镜的构图稳定。
- 固定 Seed 策略:同一场景相同 Seed 会生成相似画面,可以用来微调细节而不是推倒重来。
这四项是 AI 漫剧出图的核心方法论,后面章节会再展开。
2.3 常见误区:只调提示词,不稳固结构
我见过不少创作者在 ComfyUI 里反复改提示词,试图解决“人物不像”问题。结果往往是一会儿像、一会儿不像,非常不稳定。
提示词只能影响生成的方向,不能精确锁定外貌。真正的稳定来自两个地方:一是模型本身的风格方向,二是 LoRA、参考图、ControlNet 这类结构性控制手段。如果你只靠提示词,就相当于在沙滩上盖楼。
3. ComfyUI 环境准备与模型组织
3.1 部署方式怎么选
ComfyUI 的部署主要有三种方式,适合不同人群。
第一种:整合包。国内社区(比如秋叶整合包)把 Python、依赖、常用模型组织好了,下载解压就能用,适合新手快速跑通。整合包的好处是省去环境折腾,坏处是升级和排错时,内部结构需要花时间理解。
第二种:官方源码手动部署。适合已经熟悉 Python 环境的用户。
git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI pip install -r requirements.txt python main.py优点是最新、可控;缺点是环境问题要自己解决,比如 PyTorch 版本、CUDA 版本不匹配会让你启动即失败。
第三种:Docker 部署。适合团队统一环境和服务器部署。ComfyUI 社区有一些成熟镜像,但显卡直通和模型挂载需要额外配置,复杂度较高。
从实战角度看,个人学习和单机生产用整合包最快,工程团队更推荐官方源码 + 固定版本依赖。
3.2 目录结构与模型放置
ComfyUI 的模型目录结构决定了你能不能快速找到模型、排查路径错误。建议保持默认结构:
ComfyUI/ ├── models/ │ ├── checkpoints/ # 主模型,决定整体画风 │ ├── loras/ # 角色 LoRA 和风格 LoRA │ ├── controlnet/ # ControlNet 模型 │ ├── ipadapter/ # 图像参考相关模型 │ └── vae/ # VAE,负责图像解码 ├── input/ # 参考图、遮罩等输入文件 ├── output/ # 生成结果 ├── custom_nodes/ # 第三方自定义节点 └── workflows/ # 建议自建,存放工作流 JSON 存档主模型选择直接决定你出图的画风。画写实漫剧和画日系漫画用的模型完全不同;画国漫风格又有更接近的专属模型。你可以根据实际效果多试几个,不要从众轻易“迷信”某个模型。
3.3 硬件要求
ComfyUI 对硬件有两个硬指标:显存和内存。
- 8GB 显存:能跑,需要控制分辨率在 1024 附近,不要把 Batch Size 调太大。
- 12GB 以上显存:比较舒服,可以同时跑文生图和图生视频的局部片段。
- 16GB 以上显存:可以比较轻松地跑批量任务和多个 ControlNet 组合。
没有 NVIDIA 显卡时,用 CPU 跑不是不行,但速度会非常慢,几百张静帧基本不现实。如果你只是测试流程,可以先用免费在线绘图工具验证思路,正式生产再切到本地 ComfyUI。
4. 分镜脚本与提示词工程
4.1 用豆包辅助写剧本和分镜
豆包这类大模型助手在漫剧生产里最适合扮演“编剧助理”的角色。你可以先把故事梗概喂给豆包,让它扩展成剧本,再进一步拆成分镜脚本。
分镜脚本通常包含:镜号、景别、画面内容、台词、时长。豆包生成的内容可能不会一次到位,需要你主动补充角色设定、场景风格和情绪要求。这很正常,提示词工程在文本创作里同样存在。
建议让豆包输出的分镜结构如下:
{ "scene_id": "001", "shot_type": "中景", "visual": "男主角推开房间门,看到桌上放着旧照片", "character": ["男主角", "旧照片"], "camera": "缓慢推进", "dialogue": "你什么时候回来?", "duration_seconds": 5 }这个结构化输出可以稳定地转成后面绘图用的提示词。
4.2 分镜表要工程化
个人做项目时,分镜表随便写写问题不大;一旦要批量生产,分镜表就必须工程化。建议用 CSV 维护:
scene_id,shot_type,visual,character,style_tag,camera,dialogue,seed,duration 001,中景,男主角推门进入房间,男主,cinematic lighting,slow push in,台词A,20250101,5 002,特写,男主角拿起旧照片,男主,close-up,zoom in,台词B,20250102,3这份 CSV 的价值在于:它可以同时作为豆包写稿的输入结构、ComfyUI API 批量脚本的读取来源、以及剪辑时的镜头清单。一份文件贯穿整条流程,能避免后期素材对不上号的混乱。
4.3 提示词模板
提示词不需要每次重写。先做一个基础模板,再针对分镜替换场景。
我建议把正向提示词分成四个区块,用英文逗号分隔开:
人物描述, 场景描述, 画面构图, 画质风格例如:
young man, short black hair, dark coat, standing at door, bedroom interior, old photo on desk, medium shot, cinematic composition, depth of field, high quality, detailed illustration, coherent lighting反向提示词相对固定:
bad anatomy, disfigured, extra limbs, blurry, watermark, text, logo, low quality, deformed hands, poor composition这段提示词不是唯一标准,但结构可以复用。关键是“人物描述”部分要高度稳定,不要频繁变,否则角色一致性会崩。
5. 核心 ComfyUI 工作流:静态帧批量生成
5.1 最小文生图工作流
在 ComfyUI 界面里新建工作流,最小文生图链路包含这些节点:
- Load Checkpoint:加载主模型。
- CLIP Text Encode (Prompt):输入正向提示词。
- CLIP Text Encode (Negative):输入反向提示词。
- Empty Latent Image:设置宽、高、批次数。
- KSampler:设置采样器、步数、降噪强度。
- VAE Decode:从潜空间解码成图像。
- Save Image:保存图片。
初学者最容易忽略的是 KSampler 里seed的作用。固定 seed 时,改动提示词能产生相近画面;随机 seed 时,每次生成变化很大。批量做分镜时,我会推荐每个分镜固定一个 seed,方便微调接近目标画面,而不是每次全随机。
5.2 通过 API 批量出图
ComfyUI 的 Web 界面适合交互调试,但真正生产时要走 API。先启动服务:
python main.py --listen 127.0.0.1 --port 8188然后在 Python 脚本里提交工作流。你需要先把工作流从界面导出为 API 格式 JSON(在 Workflow 菜单里选择 Export API),然后写脚本:
import json import urllib.request SERVER = "127.0.0.1:8188" def queue_prompt(workflow): data = json.dumps({"prompt": workflow}).encode("utf-8") req = urllib.request.Request( url=f"http://{SERVER}/prompt", data=data, headers={"Content-Type": "application/json"}, ) with urllib.request.urlopen(req) as resp: return json.loads(resp.read().decode("utf-8")) if __name__ == "__main__": with open("workflow_api.json", "r", encoding="utf-8") as f: workflow = json.load(f) # 这里假设你的工作流 JSON 里 KSampler 的节点 id 是 "3" workflow["3"]["inputs"]["seed"] = 20250101 result = queue_prompt(workflow) print(result)这段代码的作用是:把工作流 JSON 加载进来,修改 seed,然后提交给 ComfyUI 排队执行。执行结果不会保存文件路径,真正的图片会输出到ComfyUI/output目录。
5.3 批量跑分镜的完整思路
批量生成的关键,是把 CSV 分镜表和上面的 API 脚本结合起来。每次从一个分镜行读取提示词和 seed,替换到工作流模板里,然后提交任务。
import csv import json import time import urllib.request SERVER = "127.0.0.1:8188" def queue_prompt(workflow): data = json.dumps({"prompt": workflow}).encode("utf-8") req = urllib.request.Request( url=f"http://{SERVER}/prompt", data=data, headers={"Content-Type": "application/json"}, ) with urllib.request.urlopen(req) as resp: return json.loads(resp.read().decode("utf-8")) def set_prompt_input(workflow, node_id, field, value): workflow[node_id]["inputs"][field] = value with open("storyboard.csv", encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: with open("workflow_api.json", encoding="utf-8") as fw: workflow = json.load(fw) # 替换正向提示词、反向提示词和 seed set_prompt_input(workflow, "6", "text", row["prompt_template"]) set_prompt_input(workflow, "7", "text", row["negative_prompt"]) set_prompt_input(workflow, "3", "seed", int(row["seed"])) print(f"提交分镜 {row['scene_id']} ...") queue_prompt(workflow) time.sleep(2) # 避免提交过快 print("全部任务已提交,可在 ComfyUI 界面查看进度")这段代码对新手来说可以先用前一小节的最小示例跑通 API 调用,再扩展成批量版。注意节点 id(比如"6"、"7"、"3")不是固定的,它来自你导出的workflow_api.json,每个人可能不同。一定要先打开 JSON 文件确认你要修改的节点 id 是什么。
5.4 角色一致性控制落地
如果你已经训好了角色 LoRA,把它放进models/loras目录,然后在工作流里加入LoraLoader节点。批量脚本的思路不变,只要额外给 LoRA 节点设置权重即可。
如果你暂时不想训练 LoRA,也可以先尝试参考图方式。把角色设定图放到ComfyUI/input目录,在工作流里加入图像加载节点,并用 IPAdapter 或 ControlNet 的 Reference 模式做参考控制。效果可能没有 LoRA 稳定,但胜在无需训练。
实际操作建议是:主力角色先用 LoRA 保住一致性,配角可以用参考图降低工作量。如果每个角色都训练 LoRA,成本会比较高。
6. 从静帧到视频:视频生成与配音剪辑
6.1 静帧视频化
静态帧生成完毕后,下一步是把静帧变成视频。常见路径有两条。
第一条是在 ComfyUI 内部接 AnimateDiff 或类似模型,直接生成短视频片段。优点是流程统一,但从静帧生成视频对显存要求高,且角色一致性风险会放大,出了问题排查成本高。
第二条是把静帧导出,交给专门的图生视频工具处理。你可以选择 Runway、Pika,也可以选择国内用户更常用的可灵、即梦等视频生成平台。操作方式类似:上传静帧、写一句运动描述、生成短片段。
更稳妥的建议:如果你只是想快速验证权限,短片节奏其实可以通过小幅缩放、平移来模拟运镜。这样能在不依赖视频生成模型的情况下,把漫画静帧做成有动态感的漫剧。
6.2 配音与字幕
配音可以用豆包等 TTS 工具生成。把分镜表里的台词整理成脚本,逐句生成音频,然后按分镜时长对齐到时间线。
字幕最省力的做法是用剪映等工具的自动识别字幕功能。生成后手动校对一遍即可,不要直接依赖识别结果,专有名词和人名容易出现错误。
6.3 素材合并与文件整理
当每个分镜都生成了一段片段后,需要用剪辑工具把它们串起来。命令行场景下,ffmpeg 可以快速做无损合并:
# 在 filelist.txt 中按顺序写入文件名 # file 'scene_001.mp4' # file 'scene_002.mp4' ffmpeg -f concat -safe 0 -i filelist.txt -c copy merged_episode.mp4注意:-c copy只适合相同编码、相同分辨率的片段合并;如果片段参数不一致,需要重新编码,否则时间轴会错乱。
7. 常见 ComfyUI 报错与排查方法
ComfyUI 最让人头疼的就是“节点在执行过程中发生错误”。这个错误其实是总提示,真正的原因要从控制台日志里看。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 节点在执行过程中发生错误,日志提示模型加载失败 | 模型文件缺失或路径错误 | 看报错日志中提到的文件路径 | 把模型放到正确的models子目录,确认文件名和节点配置一致 |
| CUDA out of memory,显存不足 | 分辨率过高、Batch Size 过大 | 看任务开始时的显存占用 | 降低分辨率、Batch Size 设为 1,或换轻量模型 |
| 生成速度异常慢 | 采样步数过高、硬件较旧 | 查看采样步数和输出时间 | 合理降低步数,使用蒸馏模型,开启 xformers 或 TensorRT |
| 人物角色漂移 | 缺少 LoRA、参考图,或提示词描述不稳 | 对比前后画面角色特征 | 加入角色 LoRA,固定主力角色的外观描述 |
| 输出图片全是黑图 | VAE 加载异常或模型通道问题 | 看 VAE 节点是否连接 | 在 Checkpoint 后显式加载 VAE,或更换 VAE 文件 |
| 工作流导入后节点是红色 | 缺少自定义节点 | 看节点标题提示缺什么插件 | 到custom_nodes安装对应节点,重启 ComfyUI |
如果遇到“节点在执行过程中发生错误”,第一步不是去查节点参数,而是回到终端窗口看堆栈日志。日志通常会把报错定位到具体节点和具体原因。这个习惯比记住任何排查技巧都重要。
8. AI 漫剧生产的最佳实践
8.1 素材命名规范
当你有几百张图片、几十个音频、几十个片段时,命名就是生产力。推荐统一规则:分镜编号_场景_版本。例如:
scene_001_room_v1.png scene_001_room_v2.png scene_002_door_v1.png不要用“最终版”“最新版”这类名字。剪映或剪辑软件里素材面板一旦乱掉,返工成本极高。
8.2 工作流版本管理
ComfyUI 工作流 JSON 是文本文件,完全可以纳入 Git 管理。只要模型名、节点配置不变,同一份工作流就可以反复产出。建议每次修改结构后都保存一份带日期的版本:
workflows/ ├── 20250101_basic_txt2img.json ├── 20250102_add_lora.json └── 20250103_add_controlnet.json你还可以在workflow_api.json同目录放一份README.md,写清楚这份工作流依赖哪些模型、哪些 custom nodes、节点 id 分别代表什么。这对团队协作尤其重要。
8.3 批量任务与进度管理
批量生成不是点一下“运行”就什么都不管了。任务多的时候,建议按“分镜批次”提交,一批一停,查看成果再推进。一次提交几千个任务,如果中间某个模型路径写错,浪费的排队时间很可观。
定期清理output目录,把已选中的候选图移动到selected目录,保持工作目录整洁。
8.4 版权与原创红线
这一条必须强调:AI 漫剧的分发平台对版权和原创性有明确要求。做原创剧本没问题;但如果参考已有小说、漫画、动画作品,或使用他人角色设定,需要先确认授权边界。批量生成时,不要使用与真实人物、品牌相关且未经授权的提示词。本地部署也一样,工具自由不等于内容可以随意使用。
8.5 质量评估与迭代
漫剧和短视频一样,成片质量不是一次跑出来的。建议每一集成片后记录三个指标:
- 角色一致性:主角是否在每个镜头里都稳定。
- 节奏与时长:每个分镜时长是否合理,观众会不会觉得拖沓。
- 画面质量:有没有明显的手部崩溃、文字乱码、构图失衡。
把这些指标反馈到工作流参数和提示词模板里,下一集会比上一集稳定得多。
9. 总结与下一步学习方向
AI 漫剧制作看起来是一套“AI 工具串起来”的流程,但实际上是一条需要工程化思维的流水线。番茄负责选题方向,豆包负责把故事变成剧本和分镜,ComfyUI 负责用稳定可控的方式批量生成静帧,红果等平台负责成片分发。这里每一环都不算特别难,但组合在一起时,最容易出问题的就是 ComfyUI 环节——模型路径、节点配置、批量调用、角色一致性,每一个细节都能影响整条产线。
如果你是新手,建议不要一上来就跑全套。先跑通一条最小链路:用豆包写 5 个分镜,用 ComfyUI 出 5 张图,再随便用一个工具把它们拼成一段 30 秒的短视频。流程通了,再逐步加入 LoRA、参考图、批量 API 和图生视频。
下一步学习方向可以按顺序推进:先是 ComfyUI 的基础工作流和 API 调用,再是 LoRA 训练和角色一致性,然后是 ControlNet 对构图和姿态的控制,最后是视频生成和剪辑衔接。这些内容每一项单独拎出来都够写几篇文章,但核心始终是:“稳定、可控、可批量”这六个字。把这六个字想明白,你的 AI 漫剧流程就真正跑起来了。