ComfyUI + FLUX — image generation
What it is. ComfyUI is a node-graph UI for diffusion models — you wire up a workflow (model loader → text encoders → sampler → decoder → save) and run it. FLUX.1-schnell is the model: 12B parameters, 4-step inference (~5-15 seconds per image on the right GPU), Apache 2.0, top-tier quality for most styles. Together they replace your DALL·E spend with unlimited free generation.
Where it lives
| Location | URL | Auth |
|---|---|---|
| sps-srv1 service (shared) | https://comfy.sandpointstudios.ltd |
CF Access (Google SSO, @sandpointstudios.ltd) |
| sps-srv1 LAN | http://vigil-server:8188 |
None |
| laptop | cd C:\Users\twist\AppData\Local\ComfyUI; run.bat → http://localhost:8188 |
None |
Models stored at /backup/comfyui-flux/models/ on sps-srv1 (auto-mounted into the container). Laptop models go in C:\Users\twist\AppData\Local\ComfyUI\ComfyUI\models\ once you download them.
When to use ComfyUI/FLUX vs. DALL·E
Use ComfyUI/FLUX when: - Generating multiple variations to pick from (free; DALL·E charges per image) - Need consistent characters/style across many images (LoRAs solve this; DALL·E doesn't) - Brand-specific art (you can train a LoRA on existing assets for style consistency) - Workflows you can save and rerun: "card art for Right Bower" with the same prompt template across 24 cards
Keep using DALL·E when: - One-off hero image for a marketing page (DALL·E's "AI website look" handles certain compositional styles FLUX struggles with — the auto-rendered "abstract concept" type) - Speed matters more than quality control (DALL·E is faster than FLUX-on-2060S right now)
The current GPU caveat
sps-srv1 ComfyUI is currently pinned to the RTX 2060 SUPER (8 GB) because the prebuilt image's PyTorch doesn't support Blackwell sm_120. The RTX 5090 (32 GB) is idle. Until that's resolved: - FLUX schnell fp8 (the model on disk) won't actually run — it needs ~12 GB - Workaround: download
flux1-schnell-Q4_K_S.gguf(~6 GB) fromcity96/FLUX.1-schnell-ggufon HF; use aUnetLoaderGGUFnode instead ofUNETLoader. Owed follow-up. - Laptop ComfyUI doesn't have this problem — torch 2.11+cu128 on the 5080 supports Blackwell fully. The 16 GB VRAM fits FLUX schnell fp8 directly.
3 recipes
1. Generate a Wyrdlyre character portrait (browser, sps-srv1)
- Go to
https://comfy.sandpointstudios.ltd, sign in with@sandpointstudios.ltdGoogle account - Top-right menu → Workflow → Open → load
/backup/comfyui-flux/workflows/flux-schnell-template.json(or drag the file in) - In the CLIPTextEncode node, replace the placeholder text with your character prompt: "A weathered halfling rogue with auburn hair tied back, leather armor, leaning on a polished oak quarterstaff, soft tavern lamplight, oil-painting style, character portrait, head and shoulders"
- Click Queue Prompt (top right)
- Output saves to
/backup/comfyui-flux/output/on sps-srv1; you also see a preview in the SaveImage node
2. Batch-generate 24 card images for Right Bower (script)
import requests, json, time
with open("flux-schnell-template.json") as f:
workflow = json.load(f)
cards = [
("hearts", "ace"), ("hearts", "king"), ("hearts", "queen"), ...
]
for suit, rank in cards:
workflow["4"]["inputs"]["text"] = (
f"playing card art, {rank} of {suit}, art-nouveau border, "
"stylized illustration, no text, vibrant colors"
)
workflow["6"]["inputs"]["seed"] = hash((suit, rank)) % (2**32) # deterministic
workflow["8"]["inputs"]["filename_prefix"] = f"rightbower-{suit}-{rank}"
r = requests.post("http://vigil-server:8188/prompt", json={"prompt": workflow})
r.raise_for_status()
time.sleep(15) # let it generate before queuing next
This is the workflow JSON pattern — load template, mutate the prompt + filename, POST to /prompt.
3. Iterate on a prompt (laptop, browser)
run.batfromC:\Users\twist\AppData\Local\ComfyUI\→ browser opens tohttp://localhost:8188- Load the same template JSON
- Right-click any node → Properties to tweak. The fastest iterations:
- Change the seed (KSampler node) → different composition, same prompt
- Add
--ar 9:16style portrait/landscape by changing EmptyLatentImage width/height - Add a negative prompt by duplicating the CLIPTextEncode and wiring it to KSampler's
negativeinput
Laptop generation: ~10-15 seconds per image on the 5080.
Gotchas
- The node UI is intimidating at first. Always start from the template workflow; don't try to build from scratch. Right-click empty space → "Add Node" if you need to extend.
- Models on sps-srv1 ≠ models on laptop. They're independent installs. Either keep model files in sync via
scpor accept they're separate. - Output piles up.
/backup/comfyui-flux/output/will grow. Periodically prune viassh teagan@vigil-server 'find /backup/comfyui-flux/output -mtime +30 -delete'. - The schnell variant uses CFG=1.0 and only 4 steps. Don't crank steps up "for quality" — schnell is distilled to be terminal at 4 steps; more degrades it. (FLUX.1-dev is the non-schnell variant that wants 20-50 steps, but it's HF-gated and not currently installed.)
- FLUX is bad at text in images. Don't expect readable signs / labels. Use Inkscape/Figma for compositions that need real text.
- NSFW / faces of specific real people: FLUX schnell has weak guardrails compared to DALL·E — be deliberate. (Not a "you can't do X" warning — a "you can, so own the choice" one.)