第 3/60 天
引言
经过了前两天的概念预热和工具基础搭建,今天我们将正式进入 AI 漫剧制作的核心环节——从小说文本到成品漫画的完整工作流。
你可能已经读过不少小说,也看过不少漫画,但有没有想过:如何把脑海中那些文字描述的场景,变成一张张风格统一、叙事流畅的漫画画面?过去,这需要专业的漫画师、分镜师、上色师团队协作数周甚至数月。而在 2026 年的今天,借助 AI 工具链,一个创作者可以在一天之内完成从小说到漫画的完整转换。
本文将拆解一条经过实战验证的 6 阶段工作流,每个阶段都配有具体的工具、Prompt 模板和代码示例,让你看完就能上手实践。
核心概念
什么是 AI 漫剧制?
AI 漫剧制(AI Comic Production)是指利用大语言模型(LLM)和图像生成模型(Diffusion Model),将小说文本自动或半自动地转化为漫画分镜、角色设计、场景画面,最终排版输出为漫画书或漫剧视频的创作流程。
6 阶段工作流全景
小说文本 → 分镜脚本 → 角色设计 → 画面生成 → 排版 → 输出
每个阶段的输入输出如下:
| 阶段 | 输入 | 输出 | 核心工具 |
|---|---|---|---|
| ① 文本解析 | 小说章节 | 分镜脚本 + 场景描述 | LLM(GPT-4 / Claude) |
| ② 角色设计 | 角色描述 | 角色一致性参考图 | Midjourney / Stable Diffusion |
| ③ 画面生成 | 分镜 Prompt | 单帧漫画画面 | SD XL / ComfyUI |
| ④ 排版 | 单帧画面 + 对话 | 漫画页 | Photoshop / Figma / 自动化脚本 |
| ⑤ 后期 | 漫画页 | 调色 + 特效 | CapCut / After Effects |
| ⑥ 输出 | 处理完的漫画 | EPUB / PDF / MP4 | Calibre / FFmpeg |
关键原则:一致性
AI 漫剧制作最大的挑战不是画面质量,而是一致性——角色长相一致、场景风格一致、光影调性一致。我们将在每个阶段通过 ControlNet、LoRA、角色库等机制来保证这一点。
实战步骤
阶段一:小说文本 → 分镜脚本
首先,我们需要让 LLM 理解小说文本,并输出结构化的分镜脚本。
1.1 文本解析
将小说章节输入 LLM,使用以下 System Prompt:
你是一个专业的漫画分镜师。你的任务是将小说文本转换为分镜脚本。
输出格式要求 JSON:
{
"scene": [
{
"panel_id": 1,
"description": "场景描述(50字以内)",
"composition": "构图描述(全景/中景/特写/仰视/俯视)",
"dialogue": "角色对话内容(如果有)",
"camera_angle": "镜头角度",
"emotion": "情绪基调",
"character_actions": ["动作1", "动作2"],
"background": "背景描述"
}
]
}
每个 panel 对应一个漫画格子。一页 A4 漫画放 4-6 个 panel。
保持叙事节奏:高潮用大格特写,过渡用小格全景。
1.2 分镜 Prompt 生成
有了分镜脚本后,需要为每个 panel 生成图像生成模型的 Prompt:
#!/usr/bin/env python3
"""从分镜 JSON 生成 Stable Diffusion Prompt"""
import json
def panel_to_sd_prompt(panel, character_refs):
"""将单个 panel 转换为 SD Prompt"""
base = f"{panel['background']}, {panel['composition']}, {panel['emotion']}"
chars = ", ".join([f"{ref['name']}: {ref['appearance']}" for ref in character_refs])
actions = ", ".join(panel['character_actions'])
prompt = f"{chars}, {actions}, {base}, comic style, cel shading, line art, detailed background, vibrant colors"
negative = "photorealistic, 3d render, low quality, blurry, deformed, extra limbs, bad anatomy"
return {
"prompt": prompt,
"negative_prompt": negative,
"width": 768,
"height": 768,
"cfg_scale": 7.0,
"steps": 30,
"seed": -1
}
# 示例:处理第 1 章
with open("chapter1_script.json", "r") as f:
script = json.load(f)
character_refs = [
{"name": "林夜", "appearance": "black hair, red eyes, teenage boy, school uniform, slender build"}
]
for scene in script["scene"]:
for panel in scene["panels"]:
sd_params = panel_to_sd_prompt(panel, character_refs)
print(json.dumps(sd_params, ensure_ascii=False, indent=2))
阶段二:角色设计
角色一致性是 AI 漫剧制作的生命线。我们使用 LoRA(Low-Rank Adaptation)来固定角色外观。
2.1 训练角色 LoRA
使用 Kohya’s GUI 或 sd-scripts 训练一个角色 LoRA:
# 安装依赖
pip install torch torchvision diffusers transformers accelerate
# 使用 sd-scripts 训练 LoRA
accelerate launch train_network.py
--pretrained_model_name_or_path="runwayml/stable-diffusion-v1-5"
--train_data_dir="./character_images/林夜"
--output_dir="./output/lora"
--output_name="linye"
--resolution=512
--train_batch_size=1
--learning_rate=1e-4
--max_train_steps=1500
--network_module=networks.lora
--network_dim=64
--network_alpha=32
--caption_extension=".txt"
2.2 角色参考图 Prompt 模板
# Midjourney 角色设计 Prompt 模板
/imagine prompt:
Character design sheet for "林夜" —
a teenage boy with black spiky hair, red eyes,
wearing a dark school uniform,
front view, side view, 3/4 view,
anime style, cel shaded,
white background, full body shot,
consistent character design sheet --ar 3:4 --v 6
阶段三:画面生成(批量)
使用批量生成脚本,配合角色 LoRA 和 ControlNet 保持构图一致性:
{
"batch_config": {
"model": "sd_xl_base_1.0",
"lora_models": [
{"name": "linye_v1.safetensors", "weight": 0.8},
{"name": "comic_style_v2.safetensors", "weight": 0.6}
],
"controlnet_units": [
{
"model": "control_v11p_sd15_openpose",
"weight": 0.6,
"input_image": "./pose_refs/panel_01_pose.png"
}
],
"output_dir": "./output/frames/",
"batch_size": 4,
"steps": 30,
"cfg_scale": 7.0
}
}
阶段四:排版
画面生成完毕后,需要将单帧图片排版为漫画页面。这里提供一个 Python 自动化排版脚本:
#!/usr/bin/env python3
"""漫画自动排版脚本"""
from PIL import Image, ImageDraw, ImageFont
import os
import json
# 页面布局配置
PAGE_WIDTH = 2480 # A4 300dpi
PAGE_HEIGHT = 3508
GAP = 20 # 格子间距
BORDER = 40 # 页边距
# 从分镜脚本读取布局
with open("page_layout.json", "r") as f:
layout = json.load(f)
def layout_page(panels, page_num):
"""将 panel 图片排版为一页漫画"""
page = Image.new("RGB", (PAGE_WIDTH, PAGE_HEIGHT), "white")
for panel in panels:
img = Image.open(panel["image_path"])
# 根据分镜脚本中的坐标放置
x = BORDER + panel["x"]
y = BORDER + panel["y"]
w = panel["width"]
h = panel["height"]
img_resized = img.resize((w, h), Image.LANCZOS)
page.paste(img_resized, (x, y))
# 添加对话气泡(如果有)
if panel.get("dialogue"):
draw = ImageDraw.Draw(page)
# 简化的气泡绘制逻辑
draw.text((x + 10, y + 10), panel["dialogue"], fill="black")
page.save(f"./output/pages/page_{page_num:03d}.png")
print(f"✅ 第 {page_num} 页排版完成")
# 执行排版
for page_num, panels in enumerate(layout["pages"], 1):
layout_page(panels, page_num)
阶段五:后期处理与输出
排版完成后,使用 FFmpeg 将漫画页合成为漫剧视频:
#!/bin/bash
# 漫画页 → 漫剧视频
# 参数设置
FPS=0.33 # 每页 3 秒
IMAGE_DIR="./output/pages"
OUTPUT_VIDEO="./output/comic_video.mp4"
# 生成 file list
rm -f /tmp/comic_images.txt
for f in $(ls "$IMAGE_DIR"/page_*.png | sort); do
echo "file '$f'" >> /tmp/comic_images.txt
echo "duration 3.0" >> /tmp/comic_images.txt
done
# 合成视频(无音频)
ffmpeg -y -f concat -safe 0 -i /tmp/comic_images.txt
-vf "fps=$FPS,scale=1920:1080"
-c:v libx264 -preset medium -crf 23
"$OUTPUT_VIDEO"
echo "✅ 漫剧视频已生成: $OUTPUT_VIDEO"
# 导出为电子书(可选)
# 使用 Calibre 的 ebook-convert 工具
# ebook-convert ./output/pages/ ./output/comic.epub --output-profile=tablet
阶段六:完整 Pipeline 自动化
将以上所有阶段串联成一个一键执行的 Shell 脚本:
#!/bin/bash
# AI漫剧制完整 Pipeline
# 用法: ./run-pipeline.sh <chapter_text.txt>
set -euo pipefail
CHAPTER_FILE="${1:?请提供小说章节文件}"
CHAPTER_NAME=$(basename "$CHAPTER_FILE" .txt)
echo "🚀 开始处理: $CHAPTER_NAME"
# 阶段 1: 文本 → 分镜脚本
echo "[1/5] 解析小说文本..."
python3 scripts/parse_novel.py "$CHAPTER_FILE" > output/script.json
# 阶段 2: 生成角色参考图
echo "[2/5] 生成角色设计图..."
python3 scripts/generate_characters.py output/script.json
# 阶段 3: 批量生成画面
echo "[3/5] 批量生成漫画帧..."
python3 scripts/batch_generate.py output/script.json --lora models/linye_v1.safetensors
# 阶段 4: 排版
echo "[4/5] 排版漫画页面..."
python3 scripts/layout_comic.py output/script.json output/frames/
# 阶段 5: 输出
echo "[5/5] 导出视频+电子书..."
bash scripts/export_output.sh output/pages/ "$CHAPTER_NAME"
echo "🎉 完成! 输出目录: output/$CHAPTER_NAME/"
常见问题
Q1: 角色在不同画面中长相不一致怎么办?
A: 这是最常见的问题。解决方案有三层:
1. LoRA:为每个主要角色训练一个 LoRA,在生成时以 0.7-0.9 的权重加载
2. IP-Adapter:使用角色参考图作为 IP-Adapter 的图像 Prompt
3. Seed 锁定:同一角色的不同画面使用相近的 seed 值,并在生成后手动挑选最一致的版本
Q2: 画面风格不统一,有些像日漫,有些像美漫?
A: 需要固定一个风格 LoRA(如 “comic_style_v2″),并在所有 Prompt 中使用相同的风格关键词。推荐搭配:
– 基础模型:SD XL + AnimeLineart 风格 LoRA
– 关键字:comic style, manga style, cel shading, black outlines, screentone
– Cfg Scale:7.0-8.0,不要低于 6.0
Q3: 生成的画面构图太单一,全是中景镜头?
A: 在分镜脚本阶段就要明确指定每个 panel 的构图类型:
– 全景(Wide Shot):场景建立、大场面
– 中景(Medium Shot):对话、日常动作
– 特写(Close-up):情绪高潮、关键道具
– 仰视/俯视(Low/High Angle):戏剧性效果
在 Prompt 中明确加上 wide shot 或 close-up from below 等关键词。
Q4: 批量生成速度太慢,一天只能出几十页?
A: 优化建议:
1. 使用 --xformers 或 --attention-slicing 加速推理
2. 批量大小设为 4-8(取决于 GPU 显存)
3. 使用 --lowvram 模式在 8GB 显存上运行
4. 考虑使用 cloud GPU(RunPod / Vast.ai)并行生成
5. 步数从 30 降到 20,Cfg Scale 降到 6.0,质量损失可接受
Q5: 对话气泡怎么加?
A: 有两种方式:
1. AI 直接生成:在 Prompt 中加 speech bubble, text in bubble,但文字质量不可控
2. 后期叠加:先用排版脚本生成空白气泡区域,再用 Photoshop / PIL 添加文字
3. 推荐工具:Comic Life 3 或 Krita 的漫画模板,半自动添加气泡
总结
今天我们完整走通了 AI 漫剧制作的 6 阶段工作流:
| 阶段 | 核心要点 |
|---|---|
| 小说 → 分镜 | LLM 结构化输出,每段对应一个 panel |
| 角色设计 | LoRA 训练 + 角色参考图,确保一致性 |
| 画面生成 | SD XL + ControlNet + LoRA 批量生成 |
| 排版 | Python PIL 自动布局,A4 300dpi 输出 |
| 后期 | FFmpeg 合成漫剧视频,Calibre 导出电子书 |
| 自动化 | 一键 Pipeline 串联所有阶段 |
关键收获:
– 一致性 > 单帧质量——宁可用 80 分的统一风格,不要 95 分但每张图角色长不一样
– 结构化 Prompt 是核心——分镜脚本越详细,画面质量越高
– 自动化是生产力——用 Python 脚本串联所有工具,而非手动操作
明天预告:第 4 天我们将深入「角色一致性」这一核心难题,系统讲解 ControlNet + IP-Adapter + LoRA 的组合方案,并给出完整的角色库管理工具。
本文是「AI漫剧制」60 天系列的第 3 天。关注本系列,从零开始掌握 AI 漫剧制作全流程。















暂无评论内容