image.md: replace the "evaluated and dropped (cloud-only)" note with the lane write-up — local Krea2 landed in ComfyUI v0.26.0 (#14589); aesthetic/stylized, aligned (Z-Image stays the uncensored pick). README: 11→12 lanes, +Krea row, image-lane count 3→5. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EfF565T9eSLaqGzidyJ1Pm
13 KiB
Image Studio — chat-driven stills (HiDream-O1 · Ideogram-4 · Chroma · Z-Image)
The image side of Club 3090 AI Studio. Type a rough idea in Open WebUI; the
"director" LLM crafts it; ComfyUI renders a still. Four lanes share one pipe + one director,
all single-device on GPU0 (they run in either gpu-mode — including alongside a video
render, since the video DiT's weights sit on GPU1). Pick by intent:
| Lane | Model | Best at | Prompt style | Notes |
|---|---|---|---|---|
✨ Image (HiDream-O1) |
HiDream-O1-Image-Dev-2604 fp8 | top-quality general / photoreal (AA #1 single-model open-weight) | natural language | native 2048², ~15 GB, ~3–4 min |
🖼️ Image |
Ideogram-4 fp8 | design / logo / text / typography | structured JSON (director-crafted) | safety-trained; ~18.5 GB @1024² |
🔓 Image (Chroma) |
Chroma1-HD fp8 | uncensored photoreal / illustration | natural language + negative + real CFG | ~9 GB; the "Sulphur for stills" |
🔓 Image (Z-Image) |
Z-Image-Turbo fp8 | uncensored, fast photoreal / general | natural language | ~7 GB, ~25 s (8-step cfg=1); Lumina2 encoder; the quick uncensored lane |
Refine any of them by replying with the change ("monochrome", "tighter crop", "at night", "flat vector style") — the director evolves the previous prompt and regenerates. No approval gate.
Architecture
Browser
│ "a logo for a coffee shop" · "a photoreal red fox at dusk"
▼
┌──────────────────────────────────────────────────┐
│ Open WebUI :8080 (the front-end) │
│ image lanes: ✨ HiDream-O1 · 🖼️ Ideogram-4 · 🔓 Chroma │
└───────┬──────────────────────────────────┬───────┘
(1) │ craft the prompt (2) │ render the still
▼ ▼
┌──────────────────────────┐ ┌───────────────────────────┐
│ Director :8090 │ │ ComfyUI :8188 │
│ qwen3.5-4b · GPU0 ~4.6GB │ │ HiDream-O1 / Ideogram-4 / │
│ idea → Ideogram JSON │ │ Chroma · single-device GPU0│
│ caption · or HiDream / │ │ → .png │
│ Chroma prose │ └─────────────┬─────────────┘
└──────────────────────────┘ ▼
┌───────────────────────────┐
OWUI's native 🖼️ button → │ Gallery :8189 │
image-shim :8191 rewrites the │ nginx over /output — │
plain text into an Ideogram │ links survive ComfyUI down │
JSON caption, then → ComfyUI └─────────────┬─────────────┘
▼ 🖼️ link back in chat
Browser (reply "monochrome" to refine)
All three image lanes are single-device on GPU0 (the video DiT, when present, lives on GPU1) and coexist with the director. See README.md for the full studio substrate.
✨ HiDream-O1 (top-quality / photoreal)
The ✨ Studio · Image (HiDream-O1) lane renders on HiDream-O1-Image-Dev-2604 fp8 — a 9B
pixel-level unified transformer (Qwen3-VL backbone; no separate VAE / text encoder; the model
works directly in a pixel-and-token space). On Artificial Analysis
it's the #1 single-model open-weight text-to-image (Elo 1189). It takes a rich
natural-language prompt, so the director crafts a vivid descriptive paragraph. The Dev-2604
build is distilled: 28-step, CFG-off (no negative prompt — everything lives in the
positive description). It renders at its native 2048×2048 (the node snaps smaller requests
up), single-device on GPU0 ~15 GB, ~3–4 min/image on a 3090 (sdpa attention — flash-attn
isn't built for sm_86). Heaviest + slowest of the image lanes — the trade for top quality. Not
subject to image_max_edge (fixed 2048²).
No native ComfyUI support (unlike Ideogram-4). Its nodes (HiDream O1 Model Loader / Conditioning / Sampler) come from the third-party
Saganaki22/HiDream_O1-ComfyUIcustom node, cloned byservices/comfyui/entrypoint.sh(+ an idempotent transformers-5 compat patch); weights viadownload_hidream_o1.sh.
🖼️ Ideogram-4 (design / logo / photo / art)
The 🖼️ Studio · Image lane renders on Ideogram-4 fp8 — single-device on GPU0
(~18.5 GB @1024²), so it runs in either gpu-mode (no switch needed to make an image).
The director crafts a JSON caption, not prose. Ideogram-4 is trained on structured JSON
captions (high_level_description, a style_description block, and a
compositional_deconstruction with background + per-object elements). Hand it off-schema plain
text and it denoises to a gray "Image blocked by safety filter" placeholder — its built-in
fallback, not a real safety judgement (it fires on a plain "a red apple"). So the image director
outputs the JSON caption; the pipe validates it and falls back to wrapping your text in a minimal
caption if needed. Measured: plain text → 100% blocked; the same prompt as a JSON caption → clean
render (~80 s warm @1024²).
The lane is category-aware: the director infers logo / poster / UI-mockup / photo /
illustration and fills the JSON with the levers that matter (logos → vector/flat/negative
space/1–2 colours; photos → camera + lens, depth of field; etc.). Want visible text/lettering? Ask
for it in quotes. Defaults 1024×1024, 20 steps; the long edge is capped at image_max_edge (1024)
so it coexists with the director on GPU0 (2048² + director = OOM; raise the cap and stop the
director for 2K stills).
🔓 Chroma (uncensored)
The 🔓 Studio · Image (Chroma) lane renders on Chroma1-HD fp8 — a Flux-based,
de-distilled, trained-uncensored model (~9 GB, single-device GPU0). Unlike Ideogram, Chroma
takes a rich natural-language prompt (no JSON), supports a negative prompt, and uses real
CFG — so the director crafts a vivid descriptive paragraph (the uncensored qwen honours intent
without sanitising). The encoder (t5xxl_fp16) and VAE (Flux ae.safetensors) are shared with the
Flux ecosystem (already on disk), so only the Chroma DiT is model-specific. Defaults 1024×1024, 26
steps, cfg 3.5. The uncensored stills lane — Ideogram remains the choice for text/logos; Chroma
for unrestricted photoreal/illustration. Validated clean (~72–80 s warm).
Why a separate model instead of "un-censoring Ideogram": Ideogram-4's safety is trained into the weights (no abliterated variant; diffusion abliteration isn't a drop-in). The image shim only removes Ideogram's false-positive blocking of neutral prompts — genuine moderation stays. So uncensored stills get their own model (Chroma), exactly as Sulphur is the uncensored video lane. Capability is in the weights; the infra is content-neutral.
🔓 Z-Image-Turbo (uncensored · fast)
The 🔓 Studio · Image (Z-Image) lane renders on Z-Image-Turbo fp8 — Alibaba's 6B,
Apache-licensed, permissively-trained text-to-image model (~7 GB, single-device GPU0). It's the
fast uncensored lane: an 8-step cfg=1 turbo schedule renders a coherent 1024² still in ~25 s
(vs Chroma's ~75 s and HiDream's ~3–4 min). Native ComfyUI nodes — the text encoder is a Qwen3-4B
loaded via CLIPLoader type lumina2; VAE is the shared Flux ae.safetensors. Natural-language
prompt (the director crafts prose, same as Chroma). Use it when you want an uncensored still now;
reach for Chroma when you want real-CFG/negative control, HiDream for top-quality.
The 🎨 Studio · Image (Krea 2) lane renders on Krea 2 Turbo fp8 — a 12B dense DiT (~18 GB,
single-device GPU0, coexists with the director like the Ideogram lane). The earlier "dropped,
cloud-only" verdict was pin-specific: native local Krea2 detection landed in ComfyUI
v0.26.0 (#14589) — older pins only exposed
the cloud Krea2ImageNode. It now loads via native nodes: UNETLoader for the DiT, CLIPLoader
type krea2 for the Qwen3-VL-4B text encoder, and the Qwen-Image VAE. Natural-language
prompt (director prose, like Chroma/Z-Image), 8-step cfg=1 turbo schedule (~40 s/1024²). It's
aligned, not uncensored — its draw is the aesthetic / stylized look, so Z-Image stays the
uncensored fast pick. Requires the v0.26.0 ComfyUI pin.
Quality ceiling & the optional HQ upgrade path (parked)
The image lanes ship the fast / distilled checkpoints (Z-Image-Turbo, HiDream-O1-Dev). They look great, and we're keeping them — but if a no-compromise quality tier is ever wanted, the lever is the model variant, not settings or resolution. Measured on this rig (2026-06-24):
- Tuning a distilled model is a dead end. Z-Image: 8 vs 16 steps,
res_multistepvsdpmpp_2m, shift 3 vs 6 → all visually identical. HiDream-O1-Dev: thenegative_promptis a no-op (it's guidance-distilled), andnoise_scaleis a calibrated constant, not a knob — dropping it 7.5→5.0 produced a blank image. So don't chase steps / sampler / shift / negative / noise for these. - The real lever = the non-distilled sibling (both are separately-released checkpoints):
Lane Ships HQ variant Fits our 24 GB card? Z-Image Turbo · 8-step · no CFG Z-Image base · 50-step · real CFG ✅ yes — same 6B arch; ~14–16 GB w/ director, like HiDream-O1. Clean drop-in, ~5–6× slower HiDream O1-Dev · 28-step distilled HiDream-I1-Full · 50-step · real CFG ⚠️ not at 2048² — 17B + 4 encoders (incl. Llama-3.1-8B) + CFG vs only ~9.7 GB headroom (HiDream-O1 peaks at 14.9 GB w/ director). Needs the director off GPU0 + 1024²/DisTorch
Status: parked, not wired. Z-Image base is the clean future win (fits, no layout change); HiDream I1-Full needs VRAM gymnastics for an incremental gain over the already-excellent Dev lane. The director-placement lever (free 4.5 GB off GPU0) is what would make the heavy variant feasible — i.e. the same lever that matters for video.
Native image button (via the image shim)
OWUI's built-in 🖼️ image button (on a chat message) also renders Ideogram-4 stills — but it sends
plain text to the image engine, which trips the same "blocked by safety filter" placeholder,
and OWUI's own image-prompt-generation can't help (it returns {"prompt":"<string>"} and nesting
the Ideogram JSON inside that string defeats the task models).
The fix is services/studio/image-shim/ (:8191): a transparent ComfyUI reverse-proxy.
OWUI's COMFYUI_BASE_URL points at it (imagegen.env), with OWUI's image-prompt-generation turned
off. The shim proxies every ComfyUI call (incl. the /ws progress socket) straight through —
except POST /prompt, where it reads the plain-text prompt node, asks the director (qwen :8090)
for a rich Ideogram-4 JSON caption, and rewrites the node before forwarding. The escaping is done in
Python (reliable). Blast radius = image generation only — title/tag task-generation is untouched.
gpu-mode ai-studio starts the shim and the director. If the shim is down, point
COMFYUI_BASE_URL back at :8188 (plain text then hits the placeholder) or use the
Studio · Image lane.
VRAM / GPU split
All three image lanes render on GPU0 and coexist with the ~4.6 GB director. Ideogram ~18.5 GB
@1024² + director ≈ 23 GB (fits; 2048² would OOM with the director resident). HiDream is fixed at
2048² (~15 GB) + director ≈ 20 GB. Because ComfyUI holds both cards in ai-studio, you can do
video and a ≤1024² image in the same scene with no switch.
Models (obtain separately → /mnt/models/comfyui/models/...)
| File | ComfyUI dir | Lane |
|---|---|---|
HiDream-O1-Image-Dev-2604-FP8/ (drbaph; complete folder) |
diffusion_models/ |
HiDream-O1 — needs HiDream_O1-ComfyUI node |
ideogram4_fp8_scaled.safetensors (+ _unconditional_), qwen3vl_8b_fp8_scaled, flux2-vae |
diffusion_models/, text_encoders/, vae/ |
Ideogram-4 |
Chroma1-HD-fp8mixed.safetensors (Comfy-Org/Chroma1-HD_repackaged) |
diffusion_models/ |
Chroma (uncensored) |
t5xxl_fp16.safetensors + Flux ae.safetensors |
text_encoders/, vae/flux/ |
Chroma (shared with Flux ecosystem) |