本地跑 Stable Diffusion:ComfyUI + 模型管理 + 工作流复用

起因

想生成产品配图,又不想把数据传 Midjourney / DALL-E。Stable Diffusion 是
开源文生图模型,本地一张 8GB+ 显存的卡能跑。
WebUI 老牌但 UI 笨重;ComfyUI 用 node-based 工作流(像 Blender 的节点编辑器),
更适合复杂 pipeline + 跨实验复用。

解决方案

装 ComfyUI

git clone https://github.com/comfyanonymous/ComfyUI
cd ComfyUI
uv venv --python 3.12
source .venv/bin/activate

# CUDA 12.x
uv pip install torch torchvision --index https://download.pytorch.org/whl/cu124
uv pip install -r requirements.txt

# 起服务
python main.py --listen 0.0.0.0 --port 8188
# 浏览器打开 http://localhost:8188

第一次进去是空白画布。

装模型

ComfyUI 的目录结构:

ComfyUI/models/
├── checkpoints/    # 基础模型 (.safetensors)
├── loras/          # LoRA 微调(风格 / 角色)
├── vae/            # VAE 解码器
├── controlnet/     # ControlNet 模型
├── upscale_models/ # 超分模型
└── embeddings/     # textual inversion

civitai.com 或 HuggingFace 下:

cd models/checkpoints
# SDXL 1.0 base(6.5 GB)
wget https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors

# 流行的写实风:Juggernaut XL(7 GB)
# 流行的二次元:Pony Diffusion XL(7 GB)
# 流行的快出图:SDXL Turbo(lightning 版,4 步出图)

第一个工作流

ComfyUI 默认工作流:Load Checkpoint → CLIP Text Encode (Prompt) →
CLIP Text Encode (Negative) → Empty Latent Image → KSampler → VAE Decode
→ Save Image.

右键画布 → Add Node → 选模块拖入。Connect 各节点 output → input。

prompt 例:

positive: a serene Japanese garden with cherry blossoms,
          golden hour, ultra detailed, 8k
negative: ugly, blurry, watermark, low quality

KSampler 参数:

  • steps: 20-30(普通模型)/ 4-8(Turbo / Lightning)
  • cfg: 7(普通) / 1-2(Turbo)
  • sampler_name: dpmpp_2m_sde / euler_ancestral
  • scheduler: karras / normal

Queue Prompt 跑一次。

工作流保存 / 分享

Save (JSON) 把整个 graph 存成 .json
团队里"哪个工作流出图最好" → JSON 文件共享,对方 Load 即可复现。

ComfyUI 还把生成的 PNG 嵌入了 metadata:图片本身包含生成它的完整 workflow。
拖任意 PNG 到 ComfyUI 画布 → 自动还原工作流。神奇。

LoRA 风格切换

Load Checkpoint → Load LoRA → CLIP Text Encode → ...

Load LoRA 节点选 pony_anime_v3.safetensors,strength 0.7,
风格立刻切到该 LoRA 训练的风格。多个 LoRA 可以串联。

ControlNet(按草图 / 边缘 / 姿态约束)

Load Image → Canny Edge → Apply ControlNet (Advanced)
                                ↓
Load Checkpoint → ... → KSampler (with controlnet conditioning) → ...

可以从一张参考图提取边缘 / 姿态 / 深度,让生成图保持同样构图。
广告 / 产品设计常用:用线稿生成 100 种渲染风格。

批量生成

KSamplerbatch_size 设 4 → 一次跑出 4 张。
Save Image 节点自动命名 00001.png00002.png

Queue Prompt 多次连续跑:

Queue → 队列 5 → 跑完 5 批 = 20 张图

跑久后图片在 ComfyUI/output/

效果

  • 本地 RTX 4090:SDXL 1024×1024 单图 ~5s(30 steps),batch 4 ~15s
  • SDXL Lightning:~1.5s 单图
  • 月生成量 1k+ 张零成本
  • 工作流文件版本化,"上次客户喜欢的那个风格" 一键复现
  • 同组设计师共享 lora + 工作流 json,统一风格

性能 tips

  • --lowvram flag 启动:8GB 卡能跑 SDXL(变慢但能跑)
  • --use-pytorch-cross-attention:xformers 不兼容时的替代
  • VAE FP16--fp16-vae 减半解码显存
  • TAESDmodels/vae_approx/ 预览快但质量低,调试用

与 WebUI / API 对比

A1111 WebUI ComfyUI 商业 API
UI 表单 Node graph Prompt only
工作流复用 极强
ControlNet / Inpaint 部分
复杂 pipeline 极易 不行
学习曲线 极低
性能 更好(无 Gradio overhead) N/A

简单文生图选 WebUI;任何"图 → 处理 → 再处理 → 多阶段"的工作流选
ComfyUI。

踩过的坑

  1. CUDA OOM 但 nvidia-smi 显示有显存:PyTorch caching allocator
    碎片。--gpu-only 全部组件放 GPU,或者 --cpu-vae 把 VAE 移 CPU
    (VAE decode 慢但省 2GB)。

  2. 首次加载某 model 极慢:safetensors 文件几 GB,第一次读盘 + 装入
    GPU。后续 cache 命中秒级。

  3. 不同 model 的最佳 prompt 不一样:SDXL 跟 SD 1.5 prompt 风格完全
    不同。每个 model 看 civitai 上的"showcase prompt"参考。

  4. negative prompt 误用:写过多 negative(比如 "bad anatomy, ugly,
    blurry, low quality, worst quality, ...")反而效果差。3-5 个核心
    negative 就够。

  5. 生成的图有水印 / artifact:训练数据里有 watermark 的 model
    常产出"假水印"。换 model 或在 prompt 加 (watermark:1.5) 进 negative。

精确评价 共 0 人评价
可复现性
可复现 · 0 不可复现 · 0
文风
文风流畅 · 0 文风晦涩 · 0
立场
支持 · 0 反对 · 0

登录后即可对本帖作出评价。

评论区 0 条 · 所有人可在此交流

登录后参与评论。

还没有评论,来说两句。