本地AI绘画实战:基于Stable Diffusion的特定风格图像生成工作流
这次我们来看一个在本地 AI 图像生成领域非常实用的项目,它不是一个全新的模型,而是一套围绕特定风格(如“黑色latex胶衣修女”、“防毒面具”、“黑白配色”等)进行高效、高质量生成的工作流或提示词工程实践。对于想要稳定产出此类风格化图像的创作者来说,核心痛点往往不是模型能力,而是如何通过精确的提示词、模型选择与参数配置,在有限的硬件资源下实现风格一致、细节到位且可控的批量生成。
本文将直接切入主题,拆解实现这类特定美学图像的技术路径。我们会重点关注:使用哪些开源模型组合性价比最高、显存门槛如何、如何构建可复用的提示词模板、以及如何通过ComfyUI或Stable Diffusion WebUI进行批量任务处理。无论你是想用于个人艺术创作、概念设计,还是学习提示词工程,这篇文章都将提供一套从环境准备到成品输出的完整可落地方案。
1. 核心能力速览
| 能力项 | 说明 |
|---|---|
| 核心目标 | 稳定生成“黑色胶衣”、“修女”、“防毒面具”、“黑白配色”、“充气头套”等高度风格化、细节丰富的图像。 |
| 技术栈 | 基于 Stable Diffusion 系列模型(如 SD 1.5, SDXL)及其衍生模型,配合 LoRA、Textual Inversion 等微调技术。 |
| 推荐硬件 | 最低: 4GB 显存(可运行基础模型,分辨率较低)。推荐: 8GB 及以上显存(可流畅运行 SDXL 或搭配多个 LoRA,支持 512x768 或更高分辨率)。 |
| 启动方式 | 通过 Stable Diffusion WebUI 或 ComfyUI 启动,两者均支持一键启动脚本或 Docker 部署。 |
| 主要功能 | 1.文生图: 通过精细提示词生成目标图像。 2.图生图: 基于草图或参考图进行风格化重绘。 3.批量生成: 使用固定参数和种子,批量产出同一主题的不同变体。 4.风格控制: 集成 ControlNet(如 Canny, Depth)精确控制构图、姿态。 |
| 是否支持 API | 是。WebUI 和 ComfyUI 均提供 API 接口,可集成到自动化流程中。 |
| 是否支持批量任务 | 是。两者均原生支持,可通过脚本或工作流进行目录批量处理。 |
| 适合场景 | 概念艺术创作、角色设计、风格化素材库构建、提示词工程学习、本地化可控内容生产。 |
2. 适用场景与使用边界
这个技术方案主要适合以下几类用户:
- 数字艺术家与概念设计师:需要快速产生特定美学(如赛博朋克、暗黑风格、时尚摄影)的灵感草图或成图。
- 独立游戏/动漫开发者:用于生成角色设定图、宣传素材,尤其是在预算有限的情况下。
- AI 绘画爱好者与研究者:希望深入理解提示词、模型微调(LoRA)、以及 ControlNet 如何协同工作,以实现高度可控的图像生成。
- 内容创作者:在确认所有生成内容符合平台规范且为原创的前提下,用于制作个性化的背景、插图。
重要使用边界与合规提醒:
- 版权与肖像权:生成图像中若包含近似真人肖像或受版权保护的特定角色元素,需谨慎评估使用风险。用于商业用途前,务必确认其原创性。
- 内容安全:生成内容需符合法律法规与公序良俗。在使用涉及“面具”、“胶衣”等元素的提示词时,应聚焦于艺术表达,避免产生令人不适或违规的内容。
- 素材授权:如果使用图生图功能,请确保输入的参考图片拥有合法的使用权或为原创作品。
- 技术边界:当前模型对极度复杂的光影(如胶衣高光)、精细的服饰纹理(如 latex 材质)以及复杂配饰(如防毒面具的管线)的生成存在极限,可能需要多次迭代或后期处理。
3. 环境准备与前置条件
在开始之前,请确保你的本地环境满足以下基础要求:
- 操作系统: Windows 10/11, Linux 或 macOS(Apple Silicon 机型可通过特定方式运行,但本文以 Windows/NVIDIA GPU 环境为主)。
- Python: 版本 3.10.x。这是 Stable Diffusion WebUI 和 ComfyUI 最兼容的版本。
- Git: 用于克隆仓库。
- 显卡驱动: 确保已安装最新版的 NVIDIA 显卡驱动(针对 NVIDIA GPU 用户)。
- CUDA 工具包(推荐): 虽然 WebUI 安装脚本通常会处理,但预先安装与显卡驱动匹配的 CUDA 版本(如 11.8 或 12.1)可以避免一些问题。
- 磁盘空间: 至少准备 20GB 可用空间,用于存放基础模型、LoRA 模型及生成图片。
关键检查点:
- 打开命令提示符,输入
python --version确认 Python 版本为 3.10.x。 - 输入
nvidia-smi(NVIDIA 用户)查看显卡型号和驱动版本,并确认 CUDA 版本信息。
4. 安装部署与启动方式
我们将以Stable Diffusion WebUI (Automatic1111)为例进行部署,因为它对新手更友好,社区资源丰富。ComfyUI 的部署流程类似,但更偏向工作流节点式操作。
4.1 安装 Stable Diffusion WebUI
克隆仓库:打开终端(如 PowerShell),切换到你希望安装的目录。
cd D:\AI_Projects git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git cd stable-diffusion-webui运行启动脚本:
- Windows 用户直接双击运行
webui-user.bat。 - 首次运行会自动创建 Python 虚拟环境、安装所有依赖(包括 PyTorch 和 CUDA 绑定)。这个过程耗时较长,取决于网络速度。
- 如果遇到网络问题,可能需要配置国内镜像源。可以在
webui-user.bat中设置环境变量。
- Windows 用户直接双击运行
下载基础模型:
- 启动脚本运行成功后,程序会尝试下载一个默认模型,但通常我们需要自己准备更优质的模型。
- 前往 Civitai 或 Hugging Face 等平台,下载一个适合真实系或动漫风格的 SD 1.5 或 SDXL 基础模型(例如
realisticVisionV60B1_v51、sd_xl_base_1.0.safetensors)。 - 将下载的
.safetensors模型文件放入stable-diffusion-webui/models/Stable-diffusion/目录下。
访问 WebUI:
- 安装完成后,终端会显示类似
Running on local URL: http://127.0.0.1:7860的信息。 - 在浏览器中打开此地址,即可看到 WebUI 界面。
- 安装完成后,终端会显示类似
4.2 安装关键扩展:LoRA 与 ControlNet
要实现“黑色胶衣修女”这类特定风格,仅靠基础模型和提示词是不够的,需要借助 LoRA 和 ControlNet。
安装 LoRA 模型:
- 在 Civitai 等社区搜索与 “latex”、“leotard”、“cyberpunk fashion”、“mask”、“nun” 等关键词相关的 LoRA 模型。
- 下载
.safetensors格式的 LoRA 文件,将其放入stable-diffusion-webui/models/Lora/目录。 - 在 WebUI 中刷新模型列表即可看到。
安装 ControlNet 扩展:
- 在 WebUI 的 “Extensions” 标签页,点击 “Available”,加载扩展列表。
- 找到 “sd-webui-controlnet”,点击 “Install”。
- 安装后重启 WebUI。你还需要在 “Extensions” -> “Installed” 中点击 “Apply and restart UI”。
- ControlNet 模型(如
control_v11p_sd15_canny.pth)通常会在首次使用时自动下载,也可手动下载后放入stable-diffusion-webui/extensions/sd-webui-controlnet/models/。
5. 功能测试与效果验证
环境就绪后,我们开始针对目标风格进行生成测试。
5.1 基础文生图测试:构建核心提示词
测试目的:验证仅通过提示词能否触发生成目标元素(胶衣、面具、修女头饰)。
- 选择模型:在左上角选择你下载的基础模型(如
realisticVisionV60B1_v51.safetensors)。 - 输入提示词 (Prompt):
(masterpiece, best quality, ultra-detailed), 1girl, solo, a nun in a sleek black latex bodysuit, wearing a gas mask, (black and white color scheme), standing in a dimly lit cathedral, dramatic lighting, (intricate details on the latex:1.2), (steampunk aesthetic:0.8)- 说明:使用括号
()增强权重,(keyword:1.2)表示权重 1.2 倍。前半部分描述画面质量,中间是核心主体描述,后半部分是环境和风格。
- 说明:使用括号
- 输入负面提示词 (Negative Prompt):
(worst quality, low quality:1.4), (bad anatomy), (deformed, distorted, disfigured:1.3), poorly drawn, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, jpeg artifacts, signature, watermark, username, blurry, (mutated hands and fingers:1.4), (poorly drawn hands:1.4), (mutation:1.3), (ugly:1.2)- 说明:负面提示词用于排除常见低质量特征,对提升出图稳定性至关重要。
- 设置参数:
- 采样方法 (Sampler): DPM++ 2M Karras 或 Euler a(速度快,效果不错)。
- 迭代步数 (Steps): 20-30。
- 图片尺寸 (Width/Height): 512x768 或 768x512(根据你的显存调整,8G显存可尝试 768x768)。
- 生成批次 (Batch count): 先设为 1。
- 点击“Generate”:观察生成结果。此时可能只有部分元素符合预期(例如有了修女和胶衣的感觉,但面具细节或胶衣质感不佳)。
5.2 集成 LoRA 进行风格强化
测试目的:使用专门的 LoRA 模型来强化“latex胶衣”或“防毒面具”的质感和风格一致性。
- 在生成按钮下方,找到 “Show extra networks” 图标(或按右下角红色图标),切换到 “Lora” 标签页。
- 点击你之前放入的 LoRA 模型(例如
latex_fashion_lora.safetensors)。这会在提示词框中自动添加一段触发词,如<lora:latex_fashion_lora:1>。 - 调整提示词:你可能需要根据 LoRA 的说明,在正面提示词中加入该 LoRA 特定的触发词(例如
latex_suit)。 - 调整 LoRA 权重:
<lora:latex_fashion_lora:0.8>中的0.8是权重。通常从 0.6-0.8 开始测试,权重太高可能导致图像过饱和或扭曲。 - 再次点击生成。对比之前的结果,观察胶衣的光泽感、紧身度和材质表现是否显著提升。
5.3 使用 ControlNet 控制构图与姿态
测试目的:确保人物姿态、构图符合要求,避免随机生成导致的主体偏差。
- 在 WebUI 中展开 “ControlNet” 折叠面板。
- 上传参考图:可以是一张简单的人物姿势草图、剪影,或者一张希望模仿构图的照片。
- 启用 ControlNet:勾选 “Enable”。
- 选择预处理器和模型:
- 预处理器 (Preprocessor): 选择
canny(提取线稿)或depth(提取景深图)。 - 模型 (Model): 选择对应的
control_v11p_sd15_canny或control_v11p_sd15_depth。
- 预处理器 (Preprocessor): 选择
- 控制权重:保持 “Control Weight” 在 0.8-1.2 之间,“Starting Control Step” 和 “Ending Control Step” 可以控制 ControlNet 在生成过程的哪个阶段起作用。
- 结合 LoRA 和精炼后的提示词再次生成。此时生成的人物姿态将与参考图高度相似,但穿着、风格由你的提示词和 LoRA 决定。
5.4 图生图与局部重绘测试
测试目的:对已有生成结果进行微调,例如更换头套样式、调整面具颜色。
- 将一张满意的生成图发送到 “图生图 (img2img)” 标签页。
- 局部重绘 (Inpaint):
- 使用画笔工具涂抹只想修改的区域,例如人物的头部。
- 在提示词中只描述你想修改的内容,例如
inflatable hood, glossy black latex。 - 设置合适的 “Denoising strength”(重绘强度,0.4-0.7),然后生成。模型将只重绘蒙版区域,并与原图融合。
6. 接口 API 与批量任务
当你需要将生成能力集成到自动化流程或进行大规模素材生成时,API 和批量功能就至关重要。
6.1 启动 API 服务
Stable Diffusion WebUI 默认在启动时即开启了 API。你可以在启动命令中添加--api参数以确保启用。API 文档地址通常是http://127.0.0.1:7860/docs。
6.2 使用 Python 调用文生图 API
以下是一个基础的调用示例,用于生成一张目标图像:
import requests import json import io from PIL import Image url = "http://127.0.0.1:7860/sdapi/v1/txt2img" payload = { "prompt": "(masterpiece, best quality), 1girl, black latex nun, gas mask, monochrome", "negative_prompt": "(worst quality, low quality:1.4), bad anatomy", "steps": 20, "width": 512, "height": 768, "cfg_scale": 7, "sampler_name": "Euler a", "seed": -1, # -1 表示随机种子 "override_settings": { "sd_model_checkpoint": "realisticVisionV60B1_v51.safetensors" # 指定模型 }, "alwayson_scripts": { "ControlNet": { "args": [ { "input_image": "", # 这里需要将参考图转换为 base64 字符串 "module": "canny", "model": "control_v11p_sd15_canny" } ] } } } # 如果需要使用 LoRA,在 prompt 字段中加入 LoRA 语法 # payload["prompt"] = "<lora:latex_fashion:0.7>, (masterpiece...)" # 如果需要使用多个 LoRA,可以叠加。 response = requests.post(url, json=payload, timeout=300) r = response.json() # 保存图片 for i, img_base64 in enumerate(r['images']): image = Image.open(io.BytesIO(base64.b64decode(img_base64.split(",",1)[0]))) image.save(f'output_{i}.png') print(f"Image saved as output_{i}.png")6.3 实现批量任务
批量任务的核心是循环调用 API并管理好不同的生成参数(如随机种子、细微变化的提示词)。
- 目录批量处理:WebUI 的 “文生图” 标签页自带 “从目录读取提示词” 功能。你可以创建一个文本文件,每行包含一组提示词和参数,然后进行批量生成。
- 脚本化批量生成:编写一个 Python 脚本,读取一个 CSV 或 JSON 配置文件,其中每一行定义了一组生成参数(提示词、尺寸、种子、使用的 LoRA 等),然后循环调用上述 API。
import csv import time def generate_from_config(config_row): # config_row 是一个字典,包含 prompt, negative_prompt, seed 等 payload.update(config_row) # 更新基础 payload response = requests.post(url, json=payload, timeout=300) # ... 处理响应和保存图片,可以用 seed 或序号命名文件 time.sleep(1) # 避免请求过于频繁 with open('batch_config.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: generate_from_config(row) - 使用队列系统:对于更复杂的生产环境,可以考虑使用 Redis 或 RabbitMQ 等消息队列来管理生成任务,实现任务的持久化和分布式处理。
7. 资源占用与性能观察
本地部署 AI 绘画,性能监控是关键。
显存占用观察:
- 任务管理器 (Windows):在“性能”选项卡中选择 GPU,查看“专用 GPU 内存”的使用情况。
- nvidia-smi 命令:在终端输入
nvidia-smi -l 1可以每秒刷新一次显存和 GPU 利用率。 - 典型占用:
- SD 1.5 模型 (512x512):无 ControlNet 时,4G 显存可勉强运行,6G 较流畅,8G 可开启高清修复 (hires.fix)。
- SDXL 模型 (1024x1024):建议 8G 显存起步,10-12G 更佳。
- 启用 ControlNet:每个启用的 ControlNet 单元会增加 0.5-1.5G 的显存开销。
- 启用多个 LoRA:通常增加不多,几十到几百 MB。
降低显存占用的技巧:
- 使用
--medvram或--lowvram参数启动 WebUI:在webui-user.bat的COMMANDLINE_ARGS变量中添加。这会牺牲一些速度来换取更低的显存占用。 - 降低分辨率:这是最有效的方法。从 512x512 开始测试。
- 使用 CPU 卸载:某些优化方案(如
--opt-split-attention)可以将部分计算卸载到 CPU,但生成速度会大幅下降。 - 关闭不必要的预览和缓存:在 WebUI 设置中关闭 “Live previews” 等选项。
- 使用
生成速度:生成速度受显卡算力、图片尺寸、迭代步数影响。一张 512x512、20 步的图片,在 RTX 3060 (12G) 上大约需要 2-5 秒。
8. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 启动 WebUI 时报错,提示缺少模块或 CUDA 错误 | 1. Python 版本不对。 2. 依赖安装失败。 3. CUDA 版本与 PyTorch 不匹配。 | 查看终端报错信息。运行python --version和nvidia-smi确认环境。 | 1. 确保使用 Python 3.10.x。 2. 尝试在 webui-user.bat中设置set COMMANDLINE_ARGS=--skip-torch-cuda-test跳过 CUDA 检查,或重新安装匹配的 PyTorch。3. 使用 --reinstall-torch参数启动。 |
| 生成图片时显存不足 (OutOfMemoryError) | 1. 分辨率设置过高。 2. 同时启用了过多功能(如多个 ControlNet)。 3. 模型本身较大(如 SDXL)。 | 观察任务管理器中的显存使用峰值。 | 1. 降低生成图片的宽高。 2. 依次关闭 ControlNet、高清修复等功能测试。 3. 使用 --medvram参数启动。4. 考虑升级显卡或使用云 GPU。 |
| 生成的图片没有出现预期的元素(如没有面具) | 1. 提示词权重不够或描述不清。 2. 模型或 LoRA 未正确加载。 3. 负面提示词过于强势。 | 1. 检查提示词拼写和语法。 2. 在 WebUI 的 “Settings” -> “Show extra networks” 中确认模型已加载。 3. 尝试简化负面提示词。 | 1. 增强关键词权重,如(gas mask:1.3)。2. 尝试使用更具体的 LoRA 模型。 3. 使用图生图,以一张有面具的图片为参考。 |
| 图片质量差,有扭曲或多余肢体 | 1. 迭代步数太少。 2. 提示词不够详细。 3. 模型本身能力有限。 | 检查采样步数(Steps)是否低于 20。查看生成的图片细节。 | 1. 增加 Steps 到 25-30。 2. 在正面提示词开头加入质量标签 (masterpiece, best quality, ultra-detailed)。3. 使用更强大的基础模型或负面提示词嵌入 (Negative Embedding)。 |
| ControlNet 效果不明显或导致图片崩坏 | 1. 预处理器选择错误。 2. 控制权重过高或过低。 3. 参考图本身不清晰。 | 分别观察预处理器输出的“预览图”和生成结果。 | 1. 根据控制目标(姿态/轮廓/景深)选择合适的预处理器。 2. 调整 “Control Weight” (0.8-1.2) 和 “Starting Control Step”。 3. 提供一张高对比度、主体清晰的参考图。 |
| API 调用返回错误或超时 | 1. WebUI 服务未运行或崩溃。 2. 请求负载过大或格式错误。 3. 生成时间过长。 | 检查 WebUI 终端窗口是否正常运行。使用简单参数测试 API。 | 1. 重启 WebUI 服务。 2. 简化请求的 JSON 数据,确保格式正确。 3. 增加 API 调用的超时时间 ( timeout参数)。 |
9. 最佳实践与使用建议
为了更高效、稳定地使用这套工作流,建议遵循以下实践:
建立项目文件夹体系:
/My_AI_Art_Project ├── /inputs # 存放参考图、草图 ├── /models # 存放基础模型、LoRA、ControlNet模型(可软链接到WebUI目录) ├── /configs # 存放提示词模板、参数设置的JSON文件 ├── /outputs # 按日期或主题分类存放生成结果 └── /scripts # 存放批量生成、后处理等Python脚本提示词工程模板化:将常用的质量标签、风格前缀、负面提示词保存为模板。例如,创建一个
base_positive.txt和base_negative.txt,每次生成时复制并添加具体描述。善用“X/Y/Z 图表”功能:WebUI 的 “Script” 下拉菜单中的 “X/Y/Z plot” 功能,可以帮你系统性地测试不同模型、LoRA 权重、采样器对最终效果的影响,是优化参数的利器。
种子 (Seed) 的妙用:当生成一张满意的图片后,固定其种子值 (
Seed),然后微调提示词或其他参数(如CFG Scale),可以产生一系列风格一致又略有变化的图像,非常适合构建角色设定集。合规与备份:
- 定期备份你的
stable-diffusion-webui目录下的config.json文件,它保存了你的所有UI设置。 - 对生成的内容进行审核和分类,特别是计划对外分享或商用时。
- 记录下每次成功生成的关键参数(模型、LoRA、提示词、种子、ControlNet 图),形成你自己的“配方库”。
- 定期备份你的
通过以上步骤,你不仅能够生成“黑色latex胶衣修女”这类特定图像,更重要的是掌握了一套可复用的、工程化的本地AI绘画工作方法。从环境搭建、提示词打磨、模型微调,到批量处理和API集成,这套流程可以迁移到任何你感兴趣的风格主题上。