第 29/60 天
引言
分镜脚本(Storyboard)是漫画创作中连接文字脚本与最终画面的核心桥梁。传统漫画创作中,分镜师需要根据脚本逐格绘制草图,确定镜头角度、构图、角色位置和视线引导——这一过程耗时且高度依赖经验。对于AI漫画创作者而言,掌握分镜脚本技术不仅决定了作品的可读性,更直接影响AI生成画面的连贯性和叙事效果。
本文将深入解析漫画分镜的核心原理,展示如何利用AI工具(Claude、GPT-4、Stable Diffusion、ComfyUI)辅助完成从文字脚本到分镜脚本的完整流程,并提供可直接落地的工作流模板和代码示例。
核心概念
分镜脚本的核心要素
| 要素 | 说明 | AI辅助价值 |
|---|---|---|
| 镜头景别 | 远景(Establishing)、中景(Medium)、特写(Close-up) | AI可理解景别指示词,精确控制生成画面 |
| 镜头角度 | 俯视、仰视、平视、斜角(Dutch Angle) | 特定角度词汇驱动AI生成不同透视效果 |
| 构图布局 | 九宫格、对角线、框架构图 | ControlNet OpenPose / Canny 可锁定构图结构 |
| 视线引导 | 角色视线方向、动作流线、阅读路径 | AI分析脚本后可推荐最优视线引导方案 |
| 页面节奏 | 格数分配、大格/小格/跨页节奏 | AI可分析脚本情感曲线,匹配格数密度 |
传统分镜 vs AI辅助分镜
| 维度 | 传统分镜 | AI辅助分镜 |
|---|---|---|
| 产出速度 | 30-60分钟/页(手绘草图) | 3-5分钟/页(文字+AI生成) |
| 修改成本 | 高(需重绘) | 低(修改提示词即可) |
| 一致性 | 依赖画师经验 | 依赖提示词体系 + ControlNet |
| 专业门槛 | 需具备绘画基础 | 需具备分镜理论和提示词工程能力 |
AI分镜脚本工作流架构
文字脚本 → AI分镜分析 → 逐格提示词生成 → 图像生成 → 排版拼接 → 终稿
↑ ↑ ↑ ↑ ↑
脚本 NLP Prompt SD/ComfyUI Photoshop/Canva
实战步骤
步骤 1:用AI分析脚本并生成分镜表
首先,将原始文字脚本输入AI(如Claude),让其按漫画分镜格式逐格拆分。以下是示例脚本:
{
"script": "小明在实验室发现了一个发光的试管。他犹豫了一下,伸手去拿。突然,试管爆炸了,一道蓝光冲入他的身体。",
"tone": "科幻悬疑",
"page_count": 2
}
使用以下系统提示词驱动AI生成结构化分镜表:
#!/usr/bin/env python3
"""AI漫画分镜脚本生成器 - 将文字脚本转换为分镜表"""
import json
import re
# 模拟AI分镜分析(实际使用时可替换为Claude/GPT-4 API调用)
def analyze_script_to_storyboard(script_text: str, style: str = "日漫") -> list:
"""
将文字脚本拆解为逐格分镜描述
Args:
script_text: 原始文字脚本
style: 漫画风格(日漫/美漫/条漫)
Returns:
分镜列表,每格包含:景别、角度、描述、对白、特效
"""
# 此处为示例逻辑,实际应调用AI API
panels = [
{
"panel": 1,
"layout": "大格(跨页)",
"shot": "远景",
"angle": "平视",
"description": "实验室全景,小明站在实验台前,台面上有一个发光的试管",
"dialogue": "",
"sfx": "【微弱嗡鸣声】",
"composition": "小明位于画面左侧三分之一处,右侧为发光试管"
},
{
"panel": 2,
"layout": "中格",
"shot": "特写",
"angle": "平视",
"description": "小明的手伸向试管,手指微微颤抖",
"dialogue": "「这东西……感觉不太对劲」",
"sfx": "",
"composition": "手部特写,试管在焦点处发出蓝光"
},
{
"panel": 3,
"layout": "中格",
"shot": "中景",
"angle": "俯视",
"description": "试管突然爆炸,蓝光充满画面",
"dialogue": "「啊!」",
"sfx": "【轰!💥】",
"composition": "爆炸以试管为中心辐射状扩散"
},
{
"panel": 4,
"layout": "大格(满页)",
"shot": "特写",
"angle": "仰视",
"description": "蓝光涌入小明身体,眼睛发出蓝光,表情痛苦扭曲",
"dialogue": "",
"sfx": "【滋滋——⚡】",
"composition": "面部特写,蓝光从瞳孔向四周辐射"
}
]
return panels
# 生成分镜表(Markdown格式)
def storyboard_to_markdown(panels: list) -> str:
md = "| 格号 | 布局 | 景别 | 角度 | 画面描述 | 对白 | 特效 |n"
md += "|------|------|------|------|----------|------|------|n"
for p in panels:
md += f"| {p['panel']} | {p['layout']} | {p['shot']} | {p['angle']} | {p['description']} | {p['dialogue']} | {p['sfx']} |n"
return md
if __name__ == "__main__":
script = "小明在实验室发现了一个发光的试管。他犹豫了一下,伸手去拿。突然,试管爆炸了,一道蓝光冲入他的身体。"
panels = analyze_script_to_storyboard(script)
print(storyboard_to_markdown(panels))
步骤 2:将分镜表转换为AI绘画提示词
分镜表中的每格内容需要转换为Stable Diffusion可理解的提示词:
#!/usr/bin/env python3
"""分镜 → 提示词转换器"""
def panel_to_prompt(panel: dict, style: str = "manga") -> dict:
"""
将分镜格描述转换为AI绘画提示词
"""
# 基础风格提示词
style_prompts = {
"日漫": "anime style, manga style, Japanese comic, cel shading, line art",
"美漫": "comic style, American comic, Marvel style, bold colors, dynamic shading",
"写实": "realistic, detailed, cinematic lighting, photorealistic",
"条漫": "webtoon style, vertical comic, clean line art, pastel colors"
}
# 景别映射
shot_mapping = {
"远景": "wide shot, establishing shot, full body, environmental",
"中景": "medium shot, waist up",
"特写": "close-up shot, extreme close-up, detailed"
}
# 角度映射
angle_mapping = {
"平视": "eye level, straight angle",
"俯视": "high angle, bird's eye view, looking down",
"仰视": "low angle, looking up, worm's eye view",
"斜角": "dutch angle, tilted, dynamic angle"
}
prompt_parts = [
style_prompts.get(style, style_prompts["日漫"]),
shot_mapping.get(panel["shot"], ""),
angle_mapping.get(panel["angle"], ""),
panel["description"],
"masterpiece, best quality, high resolution"
]
negative_prompt = "low quality, bad anatomy, deformed hands, extra fingers, watermark, text, blurry, distorted"
return {
"positive": ", ".join(filter(None, prompt_parts)),
"negative": negative_prompt,
"width": 768 if panel["layout"] in ["大格(跨页)", "大格(满页)"] else 512,
"height": 768
}
def generate_all_prompts(panels: list, style: str = "日漫") -> list:
"""为所有分镜格生成提示词"""
return [panel_to_prompt(p, style) for p in panels]
if __name__ == "__main__":
panels = [
{"panel": 1, "shot": "远景", "angle": "平视", "layout": "大格(跨页)", "description": "实验室全景,发光试管在台面上"},
{"panel": 2, "shot": "特写", "angle": "平视", "layout": "中格", "description": "手伸向试管"},
{"panel": 3, "shot": "中景", "angle": "俯视", "layout": "中格", "description": "试管爆炸,蓝光四射"},
{"panel": 4, "shot": "特写", "angle": "仰视", "layout": "大格(满页)", "description": "蓝光涌入身体,眼睛发光"}
]
prompts = generate_all_prompts(panels, "日漫")
for i, p in enumerate(prompts, 1):
print(f"n=== 第{i}格提示词 ===")
print(f"正向: {p['positive']}")
print(f"负向: {p['negative']}")
print(f"尺寸: {p['width']}x{p['height']}")
步骤 3:使用ComfyUI构建分镜批处理工作流
以下是一个ComfyUI工作流JSON片段,用于批量生成分镜画面。将此文件导入ComfyUI即可使用:
{
"name": "AI漫画分镜批处理工作流",
"description": "批量生成漫画分镜画面,支持按格数自动切换提示词和ControlNet条件",
"nodes": [
{
"id": 1,
"type": "KSampler",
"inputs": {
"seed": 42,
"steps": 30,
"cfg": 7.5,
"sampler_name": "euler",
"scheduler": "normal",
"denoise": 1.0
}
},
{
"id": 2,
"type": "CLIPTextEncode",
"inputs": {
"text": "anime style, manga, close-up shot, eye level, hand reaching for glowing test tube, laboratory, blue light, masterpiece, best quality",
"clip": null
}
},
{
"id": 3,
"type": "CLIPTextEncode",
"inputs": {
"text": "low quality, bad anatomy, deformed hands, extra fingers, watermark, text, blurry",
"clip": null
}
},
{
"id": 4,
"type": "ControlNetLoader",
"inputs": {
"control_net_name": "control_v11p_sd15_openpose.pth"
}
},
{
"id": 5,
"type": "VAEDecode",
"inputs": {}
},
{
"id": 6,
"type": "SaveImage",
"inputs": {
"filename_prefix": "storyboard_panel_"
}
}
],
"links": [
[1, 0, 5, 0],
[5, 0, 6, 0],
[2, 0, 1, 1],
[3, 0, 1, 2]
]
}
步骤 4:使用Shell脚本自动化分镜生成流程
以下是一个完整的自动化脚本,将分镜表 → 提示词 → 图像生成串联起来:
#!/bin/bash
# auto_storyboard.sh - AI漫画分镜自动生成脚本
# 用法: ./auto_storyboard.sh <脚本文件.txt> <输出目录>
SCRIPT_FILE="$1"
OUTPUT_DIR="${2:-./storyboard_output}"
STYLE="${3:-日漫}"
if [ ! -f "$SCRIPT_FILE" ]; then
echo "❌ 错误: 找不到脚本文件 $SCRIPT_FILE"
echo "用法: $0 <脚本文件.txt> [输出目录] [风格]"
exit 1
fi
mkdir -p "$OUTPUT_DIR"
# 阶段1: AI分析脚本并生成分镜表
echo "📋 阶段1/5: 分析脚本,生成分镜表..."
python3 -c "
import json
# 模拟AI分镜分析(实际应调用Claude/GPT-4 API)
with open('$SCRIPT_FILE', 'r') as f:
script = f.read()
print(json.dumps({
'status': 'analyzed',
'script': script,
'panels': [
{'panel': i+1, 'description': f'第{i+1}格画面'} for i in range(4)
]
}))
" > "$OUTPUT_DIR/storyboard.json
# 阶段2: 生成AI绘画提示词
echo "🎨 阶段2/5: 生成AI绘画提示词..."
python3 generate_prompts.py "$OUTPUT_DIR/storyboard.json" "$STYLE"
> "$OUTPUT_DIR/prompts.json"
# 阶段3: 调用SD API生成图像
echo "🖼️ 阶段3/5: 生成分镜图像..."
PANEL_COUNT=$(cat "$OUTPUT_DIR/prompts.json" | python3 -c "import sys,json; print(len(json.load(sys.stdin)))")
for i in $(seq 1 $PANEL_COUNT); do
PROMPT=$(cat "$OUTPUT_DIR/prompts.json" | python3 -c "
import sys, json
data = json.load(sys.stdin)
print(data[$i-1]['positive'])
")
curl -X POST "http://localhost:7860/sdapi/v1/txt2img"
-H "Content-Type: application/json"
-d "{
"prompt": "$PROMPT",
"negative_prompt": "low quality, bad anatomy",
"steps": 30,
"width": 768,
"height": 768,
"batch_size": 1
}" > "$OUTPUT_DIR/panel_${i}_raw.json"
echo " ✅ 第${i}格生成完成"
done
# 阶段4: 排版拼接
echo "📐 阶段4/5: 分镜排版..."
python3 layout_panels.py "$OUTPUT_DIR" "$OUTPUT_DIR/storyboard_layout.png"
# 阶段5: 导出HTML预览
echo "🌐 阶段5/5: 生成HTML预览..."
cat > "$OUTPUT_DIR/preview.html" << HTML
<!DOCTYPE html>
<html>
<head><title>AI漫画分镜预览</title></head>
<body>
<style>
body { font-family: sans-serif; max-width: 1200px; margin: 0 auto; padding: 20px; }
.grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.panel { border: 2px solid #333; padding: 10px; }
.panel img { width: 100%; }
.panel-num { font-size: 24px; font-weight: bold; color: #666; }
</style>
<h1>📖 漫画分镜预览</h1>
<div class="grid">
HTML
for i in $(seq 1 $PANEL_COUNT); do
cat >> "$OUTPUT_DIR/preview.html" << HTML
<div class="panel">
<div class="panel-num">格 #$i</div>
<img src="panel_${i}.png" alt="panel $i">
</div>
HTML
done
cat >> "$OUTPUT_DIR/preview.html" << HTML
</div>
</body>
</html>
HTML
echo ""
echo "✅ 分镜生成完成!"
echo " 📁 输出目录: $OUTPUT_DIR"
echo " 🌐 预览文件: $OUTPUT_DIR/preview.html"
步骤 5:用ControlNet锁定分镜构图
为了确保AI生成的分镜画面与预设构图一致,使用ControlNet的多种控制模式:
# controlnet_config.yaml
# 不同分镜场景适用的ControlNet配置
scenes:
- scene: "角色姿态"
controlnet: "openpose"
preprocessor: "openpose_full"
weight: 0.8
guidance_start: 0.0
guidance_end: 0.8
description: "锁定角色手部/身体姿态,适用于动作场景"
- scene: "构图布局"
controlnet: "canny"
preprocessor: "canny_edge"
weight: 0.7
guidance_start: 0.0
guidance_end: 0.7
description: "锁定画面边缘/线条结构,适用于复杂构图"
- scene: "深度透视"
controlnet: "depth"
preprocessor: "depth_leres"
weight: 0.6
guidance_start: 0.0
guidance_end: 0.6
description: "锁定空间深度关系,适用于远景/俯仰角度"
- scene: "颜色参考"
controlnet: "ip-adapter"
preprocessor: "ip-adapter_clip_sd15"
weight: 0.5
guidance_start: 0.0
guidance_end: 1.0
description: "参考上一格色彩风格,保持页面色调统一"
# 分镜格类型 → ControlNet映射
panel_mapping:
"远景": ["depth", "canny"]
"中景": ["openpose", "canny"]
"特写": ["openpose", "ip-adapter"]
"动作场景": ["openpose", "depth"]
常见问题
Q1:AI分镜生成的画面与文字描述不符怎么办?
A: 这是最常见的问题。解决方案有三层:第一,在提示词中增加景别和角度的英文关键词(如 close-up shot, low angle),AI模型对英文理解的准确率通常高于中文;第二,使用ControlNet OpenPose提供参考姿态图,锁定角色位置;第三,如果偏差仍然严重,改为使用img2img模式,先手绘草图再让AI渲染细化。
Q2:AI能否自动识别脚本中的情感节奏并匹配分镜密度?
A: 可以。将脚本输入Claude或GPT-4,使用如下提示词:「分析以下脚本的情感曲线,将高潮部分标注为需要大格/跨页,平静部分标注为小格/多格页面」。AI会自动根据关键词(如「突然」「爆炸」「震惊」→大格;「平静地」「思考」「慢走」→小格)分配分镜格大小。但建议人工复核AI的节奏判断,因为情感理解仍存在主观偏差。
Q3:多格分镜面是否需要保持角色一致性?
A: 需要,这是AI漫画的最大挑战。推荐方案:为每个角色训练LoRA模型(详见第14天),每格使用相同的LoRA权重和角色ID。如果分镜集中在同一页面内,可使用IP-Adapter的参考图像模式,以第一格生成的画面作为后续格的颜色和风格参考,实现跨格一致性。
Q4:ComfyUI工作流中如何实现批量分镜生成?
A: 使用ComfyUI的 Batch Prompt Schedule 节点(或 CR Prompt List 节点),将所有分镜格的提示词作为一个列表输入,设置 batch_size 为分镜格数。配合 LatentFromBatch 和 ImageFromBatch 节点,可以一次生成所有分镜画面。参考上面的JSON工作流模板,修改 CLIPTextEncode 节点的 text 输入为动态列表即可。
Q5:分镜脚本中的文字(对白、拟声词)是否应该在生成阶段一并处理?
A: 不建议。AI生成阶段在画面中嵌入文字往往效果不佳(变形、模糊、位置错误)。推荐流程:先纯图像生成,然后在后期处理中使用Photoshop、Clip Studio Paint或Canva添加对白气泡、旁白框和拟声词。如果希望AI辅助文字排版,可使用 AnyText 或 TextDiffuser 等专门模型来生成高质量的文字嵌入效果。
总结
漫画分镜脚本是AI漫画创作中”人机协作”最紧密的环节——人类提供叙事结构和画面意识,AI提供批量生成和快速迭代的能力。掌握分镜脚本技术,意味着你不再只是「让AI画图」,而是「让AI讲好故事」。
核心要点:
1. 分镜表是AI漫画的质量锚点 — 没有分镜表的AI漫画,画面质量再高也缺乏叙事连贯性。每个分镜格都应包含景别、角度、画面描述、对白和特效五个要素。
2. 提示词工程与分镜理论深度绑定 — 景别词(close-up/medium/wide)、角度词(low angle/high angle/dutch angle)是AI理解分镜意图的关键桥梁,必须熟练掌握。
3. ControlNet是分镜一致性的技术保障 — OpenPose锁定姿态、Canny锁定构图、Depth锁定透视,三者组合使用可让AI生成画面”按图施工”。
4. 自动化流程可大幅提升分镜效率 — 从脚本分析 → 分镜表 → 提示词 → 批量生成 → 排版预览,全流程可脚本化,一页分镜从1小时缩短到5分钟。
5. 人机协作是最优解 — AI负责快速生成、批量迭代、多方案对比;人类负责节奏感知、情感把控、最终审美决策。相互补位,而非替代。
















暂无评论内容