第 24/60 天
引言
画面构图对了、角色形象稳定了,但你的 AI 漫画角色是否总是挂着同一副”AI 标准微笑”?表情是漫画角色灵魂的载体——读者正是通过角色的喜怒哀乐来共情故事。然而在 AI 漫画创作中,表情恰恰是最容易失控的环节:要么全篇一个表情、情绪表达全靠文字硬凑;要么表情千奇百怪、角色瞬间”崩脸变人”。
表情库(Expression Library)就是解决这个问题的核心基础设施:把角色的每一种情绪预先批量生成、筛选归档、分类管理,形成一套可随时调用的”情感资产”。今天我们来系统讲解表情库的建模方法、生成工作流与配套脚本,让你的角色真正”活”起来。
核心概念
什么是表情库
表情库是一套结构化的角色表情资产集合:为每个角色建立”情绪 → 图像 + 提示词参数”的映射表,创作分镜时按需抽取,而不是每次从零生成。
表情分类体系
基于心理学基本情绪理论(Ekman 六情绪)结合漫画表现需要,可划分为三层:
| 层级 | 类别 | 示例 |
|---|---|---|
| 基本情绪 | 喜怒哀惧惊厌 | 开心、愤怒、悲伤、恐惧、惊讶、厌恶 |
| 复合情绪 | 情绪叠加 | 喜极而泣、惊喜、嫌弃+无语、苦笑 |
| 漫画化情绪 | 符号化夸张 | 豆豆眼、黑化、颜艺、冷汗、脸红、流汗 |
每类还可按强度(微/中/强)和视角(正面/侧面/俯视/仰视)拆分,形成”情绪 × 强度 × 视角”三维矩阵。
常用表情控制技术路线对比
| 技术路线 | 一致性 | 可控性 | 成本 | 适用场景 |
|---|---|---|---|---|
| 纯提示词 | 低 | 中 | 零 | 快速原型、一次性表情 |
| 表情参考图 + IP-Adapter | 高 | 高 | 低 | 已有参考图,精准复现 |
| ControlNet(Face/MediaPipe) | 中 | 高 | 低 | 姿态/表情结构精确控制 |
| 表情 LoRA | 极高 | 中 | 高(需训练) | 连载核心角色的长期复用 |
实际创作中推荐组合使用:LoRA 保证角色身份 + IP-Adapter 参考表情 + 提示词微调强度。
实战步骤
步骤 1:定义表情清单(JSON)
先用结构化配置定义角色要建哪些表情,作为生成与归档的”总纲”:
{
"character": "林小满",
"base_prompt": "1girl, college student, short black hair, green eyes, school uniform, anime style",
"negative_prompt": "ugly, deformed, bad anatomy, extra fingers, watermark, text",
"expressions": [
{"id": "happy_strong", "emotion": "开心", "intensity": "强", "prompt_add": "laughing loudly, closed happy eyes, open mouth, tears of joy, blush"},
{"id": "happy_mid", "emotion": "开心", "intensity": "中", "prompt_add": "gentle smile, soft eyes"},
{"id": "angry_strong", "emotion": "愤怒", "intensity": "强", "prompt_add": "furious, angry eyebrows, gritted teeth, red face, anger veins"},
{"id": "sad_mid", "emotion": "悲伤", "intensity": "中", "prompt_add": "teary eyes, sad expression, slightly frowning, looking down"},
{"id": "surprise_strong", "emotion": "惊讶", "intensity": "强", "prompt_add": "shocked, wide open eyes, open mouth, surprised"},
{"id": "fear_mid", "emotion": "恐惧", "intensity": "中", "prompt_add": "scared, trembling, wide eyes, pale face, sweat drop"}
]
}
步骤 2:搭建表情库目录结构(Shell)
统一目录规范,便于后续检索与管理:
mkdir -p /data/manga/characters/lin_xiaoman/expressions/{raw,selected,loRA_dataset}
# raw:生成后的全部结果(含废稿)
# selected:筛选后的精品(按 情绪_强度_编号 命名)
# loRA_dataset:挑出来用于训练表情 LoRA 的样本
命名规范建议:{角色ID}_{情绪}_{强度}_{视角}_{序号}.png,例如 lin_xiaoman_happy_strong_front_001.png。
步骤 3:批量生成表情(Python 调用 WebUI API)
用脚本批量调用 Stable Diffusion WebUI 的 txt2img API,一次跑完整个清单:
import json
import requests
import time
API_URL = "http://127.0.0.1:7860/sdapi/v1/txt2img"
with open("expression_plan.json", "r", encoding="utf-8") as f:
plan = json.load(f)
for exp in plan["expressions"]:
for i in range(4): # 每个表情生成 4 张候选
payload = {
"prompt": f"{plan['base_prompt']}, {exp['prompt_add']}",
"negative_prompt": plan["negative_prompt"],
"steps": 25,
"width": 512,
"height": 512,
"cfg_scale": 7.0,
"seed": 1000 + i,
}
resp = requests.post(API_URL, json=payload)
if resp.status_code == 200:
img_b64 = resp.json()["images"][0]
out = f"raw/{plan['character']}_{exp['id']}_{i:03d}.png"
with open(out, "wb") as f:
f.write(__import__("base64").b64decode(img_b64))
time.sleep(1)
print(f"[OK] {exp['id']} 完成")
print("批量表情生成结束")
步骤 4:准备表情 LoRA 训练集(Python)
对连载核心角色,训练专属表情 LoRA 可让表情质量与一致性上一个大台阶。先整理训练集:
import os
import re
import shutil
from pathlib import Path
SRC = Path("selected") # 已筛选的表情精品
DST = Path("loRA_dataset") # 训练集目录
CAPTION_TEMPLATE = (
"{character}, {emotion}, {intensity} expression, "
"upper body, looking at viewer, anime style, masterpiece"
)
EMOTION_MAP = {
"happy": "smiling happily",
"angry": "angry expression",
"sad": "crying sad expression",
"surprise": "surprised expression",
"fear": "scared expression",
}
for f in SRC.glob("*.png"):
# 文件名形如 lin_xiaoman_happy_strong_front_001.png
match = re.match(r"(w+)_(w+)_(w+)_w+_(d+).png", f.name)
if not match:
continue
char_id, emotion, intensity, num = match.groups()
new_name = f"{char_id}_{emotion}_{intensity}_{num}.png"
shutil.copy(f, DST / new_name)
caption = CAPTION_TEMPLATE.format(
character=char_id, emotion=EMOTION_MAP.get(emotion, emotion), intensity=intensity
)
(DST / f"{new_name}.txt").write_text(caption, encoding="utf-8")
print(f"训练集就绪:{len(list(DST.glob('*.png')))} 张图片 + 对应打标文件")
训练建议:每角色 40~100 张表情图,分辨率统一 512×512,用 kohya_ss 或 sd-scripts 训练 15~30 epoch。
步骤 5:ComfyUI 工作流中调用表情参考(JSON)
在实际分镜生成时,用 IP-Adapter 把”表情库精选图”作为参考输入,配合 ControlNet 保证结构稳定。核心节点配置(节选):
{
"IPAdapter_Advanced": {
"inputs": {
"image": ["4", 0],
"model": ["5", 0],
"ipadapter": ["ipadapter", 0],
"weight": 0.8,
"noise": 0.4,
"start_at": 0.0,
"end_at": 1.0
},
"class_type": "IPAdapterAdvanced",
"_meta": {"title": "IPAdapter 表情参考"}
},
"ControlNetLoader": {
"inputs": {
"model": "control_v11p_sd15_openpose [cab727d4]"
},
"class_type": "ControlNetLoader",
"_meta": {"title": "姿态控制"}
},
"KSampler": {
"inputs": {
"seed": 42,
"steps": 28,
"cfg": 7.0,
"sampler_name": "dpmpp_2m",
"scheduler": "karras",
"denoise": 1.0,
"model": ["5", 0],
"positive": ["7", 0],
"negative": ["8", 0],
"latent_image": ["9", 0]
},
"class_type": "KSampler",
"_meta": {"title": "采样器"}
}
}
步骤 6:建立表情速查表(Markdown)
最后为每个角色维护一张”表情速查表”,创作时直接引用,保证系列内表情语义统一:
# 角色表情速查表:林小满
| 情绪ID | 含义 | 参考图路径 | 提示词片段 |
|--------|------|-----------|-----------|
| happy_strong | 大笑(含泪笑) | expressions/selected/lin_xiaoman_happy_strong_front_001.png | laughing loudly, closed happy eyes |
| angry_strong | 暴怒 | expressions/selected/lin_xiaoman_angry_strong_front_002.png | furious, anger veins |
| sad_mid | 落泪 | expressions/selected/lin_xiaoman_sad_mid_front_003.png | teary eyes, sad |
> 用法:生成分镜时,将"参考图路径"喂给 IP-Adapter,"提示词片段"拼入正向提示词。
常见问题
Q1:表情生成出来总是崩脸怎么办?
先检查基础模型质量与负向提示词(补齐 ugly, deformed, bad anatomy 等),再确认分辨率是否过小(建议 ≥512)。表情越夸张越容易崩,可先用低强度表情验证管线,稳定后再逐步加大强度;也可以叠加 ControlNet(MediaPipe Face)锁定面部结构。
Q2:表情库需要每张都人工筛选吗?
首轮建议人工筛选(每个表情从 4~6 张候选中选 1~2 张精品),建立标准后可用 CLIP 打分 + 相似度聚类脚本做半自动筛选,人工只做最终确认。
Q3:只用提示词控制表情够吗?
原型阶段够用,但长期连载一致性不足——同一句提示词在不同 seed、不同批次下生成的表情差异很大。连载建议至少引入 IP-Adapter 参考图,核心角色训练表情 LoRA。
Q4:表情 LoRA 和角色 LoRA 能同时用吗?
能,而且推荐分开。角色 LoRA 负责”身份”(脸型、发型、服装),表情 LoRA 负责”情绪”。组合使用时按 0.6~0.8 权重叠加,避免互相干扰导致角色”变脸”。
Q5:表情库文件太多,管理混乱怎么办?
严格执行目录规范与命名规范(角色ID_情绪_强度_视角_序号),用步骤 6 的速查表做索引,废稿及时移入 raw 归档。超过几百张后建议上 NAS + 轻量数据库(如 SQLite)管理元数据。
总结
- 表情库是情绪资产,不是素材堆:用”情绪 × 强度 × 视角”矩阵规划,先定清单再批量生成,避免盲目产出
- 多层技术栈组合:提示词打底、IP-Adapter 精准复现、ControlNet 锁结构、LoRA 固化高频表情,按需选用
- 命名与归档即生产力:规范的目录结构 + 速查表,让”找表情”从翻文件夹变成查表,连载效率大幅提升
- 训练集质量决定 LoRA 上限:表情 LoRA 用 40~100 张精修图 + 准确打标,比堆数量更有用
- 从关键角色开始:不必一上来给所有角色建库,优先为连载主角和重要情绪(喜/怒/悲/惊)建库,随剧情推进迭代扩充
下一期我们将进入 AI 漫画动作场景实战:战斗与动态效果的控制技巧,让分镜不再静止。














暂无评论内容