本地部署Stable Diffusion实现原神角色桑多涅同人批量出图

发布时间:2026/10/5 13:22:10
本地部署Stable Diffusion实现原神角色桑多涅同人批量出图 这次我们来看一个比较有意思的 AI 绘画需求围绕“C108 すずら 原神 桑多涅”这一组合做一套完整的本地角色同人出图流程。“C108”指的是同人展会 Comic Market 108 的创作场景“すずら”是常见的铃兰风格/画师风格参考词“桑多涅”则是原神中愚人众执行官“木偶”(Sandrone) 的中文社区常用译名。简单说目标就是在本地部署一套可控的 AI 绘图环境稳定生成桑多涅的同人角色图并且支持批量出图、风格微调和角色一致性控制。这个需求最核心的价值不是“能不能画”而是“能不能稳定地画出同一个角色”。桑多涅这类游戏角色外观细节多、服装结构复杂随便写提示词能出图但很难保证每个批次的脸部、发型、服装保持一致。所以要解决的是三个问题一是本地环境怎么搭二是角色特征怎么锁住三是批量任务怎么跑。这篇文章会围绕这三件事从环境准备、模型加载、角色一致性测试、批量出图到参数调优按一条完整的实操链路讲清楚。先给结论这套流程不需要很高的硬件门槛。主流做法是用 Stable Diffusion 的 WebUI 或 ComfyUI基础模型加 LoRA 角色卡6GB 显存起步就能跑出可用结果更高显存可以获得更大分辨率和更高批量。支持 CPU 推理但速度很慢只适合验证流程。支持 API 调用ComfyUI 和 WebUI 都开放了 HTTP 接口批量任务可以写在脚本里循环执行。这篇文章适合三类读者喜欢原神角色并想自己出同人图的玩家、想把角色图批量做成素材库的画师或内容创作者、以及刚接触本地 AI 绘画想搞清楚部署和批量流程的技术用户。1. 核心能力速览能力项说明项目类型基于 Stable Diffusion 的本地 AI 绘画部署与角色一致性出图核心功能文生图、图生图、LoRA 角色保持、局部重绘、批量出图基础模型SD 1.5 / SDXL 系开源模型具体以本机测试为准推荐硬件NVIDIA 显卡显存 6GB 起步12GB 以上更从容CPU 支持支持但出图速度明显变慢只建议验证流程启动方式命令行启动 / 一键脚本启动界面入口WebUI 浏览器访问默认端口通常为 7860 或 8188API 能力WebUI / ComfyUI 均提供 HTTP API可批量调用批量任务支持可通过脚本遍历提示词、种子、LoRA 权重适合场景同人角色图、立绘参考、表情差分、批量素材生产这里需要明确一个边界标题里的 C108 和すずら 是创作场景和风格参考不是某个开源项目的名称。这套流程的核心技术载体是 Stable Diffusion 生态角色识别依赖“基础模型 角色 LoRA 提示词”三者配合。显存占用会随模型版本、分辨率、采样步数和批次数变化实际数字要看本机跑出来的结果不要照抄任何人的固定数值。2. 适用场景与使用边界这套流程适合谁先说适合的人。第一种是原神玩家想给桑多涅出同人图做头像、壁纸或者表情包。第二种是画师和内容创作者在创作前生成角色参考图用来辅助构图、配色和服装细节设计。第三种是技术型用户把这套环境改造成一个可重复使用的“角色素材生成服务”接进自己的工作流里比如批量生成角色差分图、不同服装版式、不同背景构图。能解决什么问题核心是“同一角色多角度出图”。手工画一张桑多涅立绘需要很长时间AI 出图可以快速产出十几个构图版本再用图生图和局部重绘把不满意的细节修掉。对于需要大量角色素材的场景这套流程的效率优势非常明显。不适合什么场景第一不适合直接商用。原神角色版权属于米哈游桑多涅这个形象的商业使用需要获得授权。同人创作是否允许盈利、允许到什么程度要遵守官方同人规则和发布平台的具体条款不要默认“AI 画的就能卖”。第二不适合用来“冒充官方立绘”。AI 生成的图不是游戏官方素材发布时必须标注清楚。第三不适合在低端设备上追求高分辨率大图。集显或 4GB 显存做 1024x1024 以上的出图会频繁爆显存体验很差。合规提醒必须放在前面本地出图工具本身是中性技术但使用对象是受版权保护的游戏角色因此要遵循三条底线。一是只做个人学习和小范围展示不直接售卖二是生成图涉及真人脸模、特定画师风格模仿时要确认有无肖像权或版权争议尤其是不建议用“すずら”等具体画师名去训练或模拟其个人风格三是发布的图片要保留创作来源说明避免平台判定为侵权内容。3. 环境准备与前置条件这里先给一套通用检查清单按顺序确认缺哪块补哪块。硬件方面CPU近五年主流处理器即可AI 绘画推理主要看显卡。显卡优先 NVIDIA因为 CUDA 生态最成熟。显存 6GB 起步8GB 可以流畅跑 SD 1.5 的高分辨率图12GB 以上可以跑 SDXL 和更大的批量。内存建议 16GB 以上。加载大模型和批量处理时内存不足会导致直接闪退。磁盘预留至少 30GB 空间。基础模型文件一般 2GB 到 7GBLoRA、VAE、ControlNet 模型会越攒越多。软件方面操作系统Windows 10/11 最省心Linux 也可以。macOS 需要看是否有对应版本的 PyTorch 和显卡支持AMD 显卡在 Windows 下需要走 DirectML配置更麻烦。显卡驱动更新到 NVIDIA 官方最新稳定版避免 CUDA 版本不匹配。Python推荐 3.10 到 3.11。Stable Diffusion WebUI 和 ComfyUI 的主流分支在这个版本段兼容性最好。CUDA 与 PyTorch安装对应 CUDA 版本的 PyTorch。具体规定是“安装 PyTorch 时选择带 CUDA 的版本”不是单独装一个 CUDA 工具包就能解决。端口方面WebUI 默认用 7860ComfyUI 默认用 8188。如果本机端口被占用启动时指定新端口即可。后面会给出命令。4. 本地部署与基础模型加载4.1 搭建 ComfyUI推荐优先使用 ComfyUI原因是它更适合“固定工作流 批量执行”的角色出图场景。先把仓库克隆到本地# 示例命令实际路径按你的目录调整 git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI然后创建 Python 虚拟环境并安装依赖# Windows 示例 python -m venv venv venv\Scripts\activate pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 pip install -r requirements.txt如果使用 Stable Diffusion WebUI也可以用官方一键安装脚本但建议用 git clone 方式管理后续更新更容易。这里不写死某个整合包因为整合包版本更新频繁直接读项目的 README 更可靠。4.2 准备模型文件基础模型要放到 ComfyUI 的models/checkpoints目录LoRA 放到models/lorasVAE 放到models/vae。文件结构大致如下ComfyUI/ └── models/ ├── checkpoints/ # 放基础模型如 SD1.5 或 SDXL 的 safetensors 文件 ├── loras/ # 放角色 LoRA / 风格 LoRA ├── vae/ # 放 VAE 文件 └── controlnet/ # 放 ControlNet 模型启动命令# 在 ComfyUI 根目录执行 python main.py --listen 127.0.0.1 --port 8188启动成功后浏览器打开http://127.0.0.1:8188看到工作台界面就说明服务正常。如果打不开先看终端日志有没有报错再确认端口是否被占用。换端口示例python main.py --listen 127.0.0.1 --port 82884.3 加载基础模型与 LoRA在工作台里添加 Checkpoint Loader 节点选择你下载的基础模型。再添加 LoraLoader 节点选择桑多涅的角色 LoRA。连接方式是从 Checkpoint Loader 的 MODEL 输出接到 LoraLoader 的 MODEL 输入再从 LoraLoader 的 MODEL 输出接给采样器。角色 LoRA 如果没有现成的开源资源可以考虑自己采集几十张角色全身图做训练但训练素材必须来自合法渠道并且要注意版权边界。这里不展开训练教程只提醒一点训练 LoRA 用的图片数量、标注质量、学习率会直接影响角色还原度效果需要多次实验才能稳定。5. 功能测试与效果验证5.1 文生图测试先做最小可行性测试。输入一组最简提示词确认环境能跑通。positive: sandrone, genshin impact, official style, upper body, looking at viewer, detailed face negative: lowres, bad anatomy, bad hands, extra fingers, blurry, watermark在采样器节点设置步数 20采样器选择 Euler a尺寸 512x768种子随意。点击 Queue 执行第一次出图时模型加载较慢后续会快很多。判断成功的标准是能在几秒到一两分钟内输出一张正常的角色图脸部无明显畸形整体构图符合预期。如果输出全黑或报错优先查 VAE 是否缺失、显存是否爆了、模型文件是否损坏。5.2 加入角色 LoRA 做一致性测试配置 LoRA 节点后把权重控制在 0.7 到 0.9 起步。权重太低角色特征不明显权重太高容易过拟合导致画面脏。连续生成 4 到 8 张图把种子固定只微调提示词里的表情、动作、背景观察角色脸部是否保持稳定。这个环节的意义在于验证 LoRA 是否真正“锁住”了角色而不是每张图都换一个人。判断标准多张图之间的发型、瞳孔颜色、服装核心元素保持基本一致就可以进入批量阶段。5.3 图生图与局部重绘测试图生图适合把一张构图不错的图拿来改细节。把角色图传入 Load Image 节点用 Image Resize 控制目标尺寸再用 VAE Encode 把图转成潜空间输入采样器。局部重绘用 Mask 控制修改区域适合修正脸部崩坏、衣服褶皱不自然、饰品结构错误等问题。操作方法导入原图画一个覆盖要修改区域的 mask选择 “Inpaint” 节点让采样器只重绘 mask 区域其余部分保持原样。这里有一个经验局部重绘的 denoise 强度设置在 0.4 到 0.6 之间比较合适太高会把原图结构改乱太低则修不掉瑕疵。5.4 分辨率与细节测试确认基础流程没问题后把分辨率逐步提高。512x768 能跑通后再试 768x1152、1024x1536。显存不够时用 Hires FixWebUI或 Upscale 节点ComfyUI先出低分辨率图再做高清放大而不是直接硬拉大分辨率。每次改分辨率后要注意显存占用和出图耗时变化这个数据会直接影响后面的批量参数设计。6. 批量出图与参数调优批量任务是这套流程真正拉开效率差距的地方。ComfyUI 支持在 API 模式下通过脚本反复调用工作流SD WebUI 也有--api模式。批量任务的核心是把变与不变分开模型、LoRA、采样器、尺寸设为固定值提示词、种子、LoRA 权重设为循环变量。6.1 API 启动与调用ComfyUI 加参数启动# 开启 API 模式允许脚本访问工作流接口 python main.py --listen 127.0.0.1 --port 8188 --enable-cors-header查询接口状态curl http://127.0.0.1:8188/system_stats返回 JSON 中包含设备信息和显存情况能正常返回就说明接口服务可用。6.2 Python 批量任务脚本下面给一个通用批量脚本模板。它读取一个提示词列表逐条替换工作流中的文本节点然后提交到 ComfyUI 的任务队列。实际使用时要先在图上面板里导出自己的 workflow JSON再替换脚本中的节点 ID。import json import uuid import requests COMFYUI_URL http://127.0.0.1:8188 # 提示词列表每条记录是一个出图批次 prompts [ { name: sandrone_neutral, positive: sandrone, genshin impact, official style, upper body, neutral expression, negative: lowres, bad anatomy, bad hands, extra fingers, blurry, watermark, seed: 1001, lora_weight: 0.8, }, { name: sandrone_serious, positive: sandrone, genshin impact, official style, upper body, serious expression, dark background, negative: lowres, bad anatomy, bad hands, extra fingers, blurry, watermark, seed: 1002, lora_weight: 0.85, }, ] def build_workflow(item): # 这里必须替换成 ComfyUI 里导出的真实工作流 workflow { 3: { inputs: { text: item[positive], }, class_type: CLIPTextEncode }, 4: { inputs: { text: item[negative], }, class_type: CLIPTextEncode }, 6: { inputs: { seed: item[seed], steps: 20, cfg: 7.0, sampler_name: euler, scheduler: normal, }, class_type: KSampler } } return workflow def submit_prompt(workflow): prompt_id str(uuid.uuid4()) payload { prompt: workflow, client_id: prompt_id, } resp requests.post(f{COMFYUI_URL}/prompt, jsonpayload, timeout30) resp.raise_for_status() return resp.json() for item in prompts: wf build_workflow(item) try: result submit_prompt(wf) print(fsubmitted: {item[name]} - {result}) except Exception as exc: print(ffailed: {item[name]} - {exc})这段脚本的思路是逐条提交、逐条打印结果适合跑几十个批次的批量出图。如果批量很大建议在脚本里加一个 sleep 间隔避免请求过密导致任务队列堆积。另外要控制steps、batch_size和lora_weight三个关键参数。步数从 20 起步批量数建议先用 1 验证单张质量确认稳定后再提 batch size。6.3 批量任务架构建议批量出图不是简单地把循环写长就完事还要考虑几个工程问题。一是失败重试单张图可能因为显存波动或网络超时失败脚本里要记录失败任务并在全部跑完后重新提交。二是输出命名建议用“角色_表情_服装_种子编号”的结构命名比如sandrone_serious_1002.png方便后续筛选。三是目录分离输入素材、LoRA、输出结果分别放不同文件夹批量任务结束后直接按目录打包避免混在一起。7. 资源占用与性能观察资源占用是整个本地部署最需要实际测量的部分。先看怎么观察Windows 下用任务管理器查看显存Linux 下用nvidia-smi。以nvidia-smi为例重点看显存占用和显卡利用率两列nvidia-smi----------------------------------------------------------------------------- | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ... ... ... ... ... ... ... | | 0 0 0 1234 C python.exe 5120MiB | -----------------------------------------------------------------------------看到类似5120MiB这样的数字就是当前进程占用的显存。要在同一配置下记录不同分辨率、不同步数的显存差异形成一张自己的“参数与显存对照表”。比如同一模型512x768 步数 20 可能只占 4GB 左右1024x1024 步数 30 可能翻倍。但具体数值要按本机环境测不同模型文件、不同 LoRA 数量、不同扩展都会影响。更稳妥的做法是每换一个模型就重新测一轮不要沿用旧参数。性能方面有几个明显规律分辨率对显存的影响通常大于步数因为分辨率直接决定潜空间张量的尺寸批量数每加 1显存占用近似线性增加CFG 太高会拖慢采样速度SDE 类采样器比原来的 Euler 要慢但细节表现不同。降低显存占用有几个常用手段开启--lowvram或--medvram启动参数让模型分块加载使用 FP16 精度降低 batch size先用低分辨率出图再用放大模型补细节。要注意的是这些手段会牺牲部分速度或画质需要在“能跑”和“跑得好”之间找平衡。进程残留也值得注意。批量任务中断后显卡显存可能被未退出的进程占用下次启动直接报 OOM。处理方式# 查看残留进程 tasklist | findstr python # 按 PID 结束残留进程替换成实际 PID taskkill /PID 12345 /F8. 常见问题与排查方法问题现象可能原因排查方式解决方案启动后页面打不开端口被占用或服务未启动检查终端日志用netstat -ano查端口换端口启动如--port 8288出图全黑或花屏VAE 缺失或文件损坏查看采样器输出日志检查 VAE 文件大小下载对应模型的 VAE替换文件后重启启动时报 CUDA 错误显卡驱动与 PyTorch CUDA 版本不匹配运行nvidia-smi看驱动版本对比 PyTorch 要求更新驱动或重装带对应 CUDA 版本的 PyTorch出图时显存不足分辨率、批次数、LoRA 过多nvidia-smi观察显存占用缩分辨率、降 batch、开 lowvram角色一致性差LoRA 权重低、提示词冲突固定种子做多组权重对比调 LoRA 权重到 0.7-0.9简化提示词API 调用返回失败服务未开启 API 模式或地址写错curl 访问/system_stats加--api/--enable-cors-header检查地址批量任务一直卡住队列堆积或单任务死循环查看任务队列和 GPU 占用减少并发加超时杀掉残留进程重启出图质量不稳定提示词太弱、采样器不合适对同一种子换不同采样器测试记录每组合选稳定组合作为默认参数最容易踩的三个坑是模型文件不完整导致出图异常、端口冲突导致服务起不来、批量任务没加失败重试导致中途中断。这三类问题都能通过日志和进程检查快速定位关键是养成“先看日志再问原因”的排查习惯。9. 最佳实践与使用建议把这套流程用得更顺有几个工程化建议可以提前做。第一第一次跑通流程时只用最小参数。模型、LoRA、提示词全部用最简配置步数 20分辨率 512x768单张出图。先把“能不能跑”压实再谈画质和效率。第二维护一套最小可运行配置。把“基础模型 LoRA 采样器 固定提示词模板”保存成一套参数文件每次换新环境、换新显卡先把这套配置跑通再往里面加复杂功能。这套配置就是你整个流程的“基准线”。第三目录管理提前规划。建议按这样的结构组织sandrone-project/ ├── checkpoints/ # 基础模型 ├── loras/ # 角色 LoRA ├── inputs/ # 参考图、姿势图、mask 图 ├── outputs/ # 最终出图 │ ├── raw/ # 原始出图不覆盖 │ ├── upscaled/ # 高清放大后 │ └── chosen/ # 筛选出的可用图 └── logs/ # 批量任务日志第四批量任务一定要加日志和失败重试。就算批量脚本写得再完整显卡压力一大也会偶发出错。脚本把成功、失败、超时三种结果分开记录跑完后看日志决定是否补跑。第五接口服务要限制访问范围。--listen 127.0.0.1默认只有本机能访问如果确实需要局域网内其他机器调用也要注意服务开放后的访问控制接口无鉴权时不要直接暴露到公网。第六版权和授权必须前置。涉及原神角色桑多涅的生成图只在个人学习和平台允许的同人展示范围内使用。任何涉及人脸、真人声音、特定画师个人风格模仿的素材都要先确认肖像权、隐私权、版权授权拿不准就不做。发布和商用之前还要做一次效果复核确认图片没有明显模仿官方素材的痕迹。10. 总结与下一步这套“C108 すずら 原神 桑多涅”需求的本地出图方案最值得尝试的点是用一套开源的 AI 绘画环境把特定角色的同人出图做成可控、可批量、可复用的流程。它的核心不是某个花哨功能而是“角色一致性”和“批量效率”的组合LoRA 负责锁住角色脚本负责批量推进ComfyUI 或 WebUI 负责把两者串起来。上手后最先应该验证的是文生图的基础流程。用最简提示词、20 步、512x768 跑一张图出来确认环境没问题再逐步加 LoRA、调权重、测试图生图和局部重绘。最容易踩的坑在三个位置模型文件路径放错、显存参数估算过高、批量脚本缺少失败重试。这几个坑都能提前规避。后续可以继续扩展的方向一是给角色 LoRA 做多角度、多服装版本建一个桑多涅素材库二是把批量脚本升级成带队列状态和输出预览的小工具接进自己的内容生产流程三是加入 ControlNet用姿势骨架图控制角色动作把出图范围从“半身立绘”扩展到“全动态姿势”四是如果角色授权条件允许再把流程拓展到更复杂的分镜和漫画辅助创作。先跑通最小流程再逐步加控制环节这个思路比一上来就追求完美配置要靠谱得多。建议把这篇的部署步骤和排查表格收藏备用下次换环境、换显卡、换模型时可以直接对照操作。