Files
serverAppConfigs/serverAppConfigs-docs/Dankclaw/ComfyUI Qwen-Image Workflows.md
T
Frank 327e78b950 docs(vault): destroy the dead weight — 53 pages and the change diary
The vault was 155 pages / 31,210 lines, most of it measurement ledgers for
payloads that no longer run. A throughput figure for a runtime nobody operates is
not a record: AI moves faster than the vault, so the number is wrong before
anyone reads it, and a wrong number in a runbook gets believed. Per the new
purpose test in `AGENTS.md` → *Documentation Policy*, it is destroyed.

Gone (`.AGENTTRASH/20261019-destruction/`, KILL-LIST.txt is the manifest):
- the `frank-medium` endpoint and its five era pages, `frank-npu`, FastFlowLM,
  the ikllama/kingjones/dealign/frank-redo eras, the ling/swift15/freetoken/ubatch
  campaign pages, qwen3.8 spec-matrix and strix-optimizations, the two
  "Running Qwen3.6 …" pages;
- the whole `Pipeline Parallelism/` folder (no live script passes a pipeline flag)
  and the multi-device/x4-pair/hybrid/offload experiment pages;
- every vLLM page — no vLLM endpoint exists on this fleet;
- `LLM/deployment.md` (`Architecture/Deployment Flow.md` is the test-referenced
  owner) and the external surveys (SGLang, Lemonade, llama.cpp forks/diff,
  self-hosted app census, the TTS survey) that were obsolete by construction;
- `log.md`, 2,380 lines. Git holds the chronology; a causal law belongs to the
  page that owns the thing it governs, never to a diary.

Survivors: 101 pages, 17,542 lines, 0 OKF violations, 0 unresolved links. Eras
tables keep the window, payload, runtime, reason and rollback pointer; the rate
columns are blanked. The live shapes stay verbatim — those numbers are what the
deployer and `models.yml` consume.
2026-10-19 10:56:37 -07:00

7.9 KiB
Raw Blame History

type, description, tags, timestamp
type description tags timestamp
howto Proven Qwen-Image text-to-image workflows on Dankclaw: the recipes, the API call shape, and which models to add next.
dankclaw
comfyui
qwen-image
2026-10-05

ComfyUI Qwen-Image Workflows

Two ready-to-load text-to-image workflows for the Qwen-Image 2.1 payload already on Dankclaw, both proven end-to-end on 2026-10-05 by POSTing to the live API on port 8188 and verifying the rendered PNG (the renders are still on disk: qwen21-art_00001_.png 22:41 and qwen21-text_00001_.png 22:44, ls -l /home/dank/comfyui-data/output/ 2026-10-18). The repo copies are the source of truth; the host copies under /home/dank/comfyui-data/workflows/ are for convenience and are byte-identical today (md5sum matches both files, 2026-10-18).

What is on disk

Sizes are GiB, measured ls -l on the host 2026-10-18 (all files dated 2026-09-21).

Path (under /home/dank/comfyui-data/models/) Size Role
diffusion_models/qwen_image_2.1_int8_convrot.safetensors 6.8 GB (7,256,783,064 B) The one the workflows use — int8-convrot quant, ComfyUI-core native
diffusion_models/qwen_image_2.1_bf16.safetensors 13.3 GB (14,230,280,616 B) Full-precision fallback
diffusion_models/qwen-image-2.1-Q8_0.gguf (+ -arch) 7.1 GB each (7,591,551,648 / 7,591,551,680 B) GGUF alternative (needs ComfyUI-GGUF custom node, present in custom_nodes/)
text_encoders/qwen3vl_8b_w4a8.safetensors 5.9 GB (6,312,105,364 B) The one the workflows use — 4-bit-weights/8-bit-act Qwen3-VL 8B encoder
text_encoders/qwen3vl_8b_int8_convrot.safetensors 8.7 GB (9,350,798,360 B) Mid quant
text_encoders/qwen3vl_8b_bf16.safetensors 16.3 GB (17,534,334,616 B) Full precision
vae/qwen_image_2.1_vae_bf16.safetensors 645 MB (675,509,688 B) 2.1 VAE (used)
vae/qwen_image_vae.safetensors 243 MB (253,806,246 B) Smaller VAE

No LoRAs are on disk yet, and models/lora/ / models/controlnet/ do not exist — see Recommended additions.

The workflows

Both are API-format JSON (ComfyUI 0.37 loads them via the UI's Load dialog too): dankclaw/comfyui/workflows/ in the repo, /home/dank/comfyui-data/workflows/ on the host. Node chain in both:

UNETLoader (int8_convrot) ──┐
CLIPLoader (qwen_image, w4a8) ─┤ CLIPTextEncode pos/neg
VAELoader (2.1 bf16) ────────┤
EmptySD3LatentImage ─────────┴─ KSampler ─ VAEDecode ─ SaveImage

Common sampler settings: cfg 1.0 (Qwen-Image 2.1 expects CFG-free sampling), sampler_name: euler, scheduler: simple, denoise: 1.0, seed fixed in the file (1930 in the art workflow, 2026 in the text one) — read from dankclaw/comfyui/workflows/*.json node 9.

Node class_types in both files: CLIPTextEncode ×2, UNETLoader CLIPLoader, VAELoader, EmptySD3LatentImage, KSampler, VAEDecode SaveImage (ids 3–11).

Workflow File Shape Steps Made for
Art qwen-image-2.1-t2i-art.json 1024×1024 20 General illustration/prose prompts
Legible text qwen-image-2.1-t2i-legible-text.json 832×1216 25 Posters, captions, any in-image text

Legible-text prompt recipe

Qwen-Image 2.1 is one of the best open-weight text renderers, but only if the prompt is written for it:

  1. Quote the exact strings: large bold white text reading "SOLIDARITY OF THE SOVIET COMPUTER SYSTEMS" — quoted text is rendered literally.
  2. Describe layout, not vibes: say centered / below it / large vs small, the typeface family (sans-serif), and the color.
  3. Say what NOT to draw: end with no other words, no watermark.
  4. Keep the negative side on misspelled, warped letters, extra text (already in the workflow).
  5. More steps help text: the text workflow uses 25 vs 20.

Verified render: SOLIDARITY OF THE SOVIET COMPUTER SYSTEMS + DANKCLAW DANKSERVER EST 2026 came back crisp and correctly spelled at 832×1216 (qwen21-text_00001_.png, 953,254 B — still on disk, ls -l /home/dank/comfyui-data/output/ 2026-10-18). One caveat from the same render: a shorter secondary line is where misspellings creep in — proofread the first render before shipping.

Driving it from the API

ComfyUI 0.37 requires the graph wrapped in a prompt key — a bare {node-id: node} body gets {"error": {"type": "no_prompt"}} (verified 2026-10-05):

curl -s -X POST http://127.0.0.1:8188/prompt -H 'Content-Type: application/json' \
  -d "$(python3 -c 'import json;print(json.dumps({"prompt": json.load(open("dankclaw/comfyui/workflows/qwen-image-2.1-t2i-art.json"))}))')"
# -> {"prompt_id": "...", ...}
curl -s http://127.0.0.1:8188/history/<prompt_id>   # status.status_str == "success"

Outputs land in /home/dank/comfyui-data/output/. The queue is FIFO — the two workflows above ran back-to-back unattended.

Note: the container's UI-saved workflows live in the ephemeral /opt/ComfyUI/user layer and do NOT survive an image rebuild — the unit mounts only models, input, output, custom_nodes and the healthcheck file (podman inspect comfyui 2026-10-18; dankclaw/comfyui/quadlet/comfyui.container:48-52) — hence the host-side workflows/ dir and the repo copy.

Quantized preferred, sized for the 8060S iGPU (GTT-backed — /system_stats reports 122.4 GB of device VRAM on cuda:0, curl http://127.0.0.1:8188/system_stats 2026-10-18; the RTX 3090 is frank-zealot's). All repos verified 2026-10-05 and all four still resolve today (huggingface.co/lightx2v/Qwen-Image-Lightning huggingface.co/unsloth/Qwen-Image-Edit-2511-GGUF huggingface.co/Comfy-Org/Qwen-Image-DiffSynth-ControlNets huggingface.co/QuantStack/Wan2.2-TI2V-5B-GGUF, 2026-10-18). None are on disk yet: models/ holds no lora/, controlnet/ or Wan/Edit file (ls -R 2026-10-18).

# What Repo Grab Size Why
1 Lightning 8-step LoRA (T2I speed) lightx2v/Qwen-Image-Lightning qwen_image_lightning_8steps_*.safetensors (LoRA) ~1–2 GB 20 steps → 8 with a LoraLoader node; 2–3× faster renders on the iGPU, negligible quality loss
2 Qwen-Image-Edit-2511 GGUF (image editing) unsloth/Qwen-Image-Edit-2511-GGUF Q4_K_M (~13.2 GB) or Q4_0 (~11.9 GB) ~12–13 GB Unlocks img2img "edit this photo" workflows — a capability class the fleet has zero of; Q4 keeps it iGPU-friendly
3 DiffSynth ControlNets (structure control) Comfy-Org/Qwen-Image-DiffSynth-ControlNets split_files/model_patches/ canny + depth ~2–3 GB each Pose/edge/depth-guided layouts — pairs with the legible-text workflow for exact poster composition. The QwenImageDiffsynthControlnet node is already in the running ComfyUI (GET http://127.0.0.1:8188/object_info/QwenImageDiffsynthControlnet → 200, 2026-10-18)
4 Wan 2.2 TI2V-5B GGUF (first video model) QuantStack/Wan2.2-TI2V-5B-GGUF Q4/Q5 GGUF (~6–8 GB) ~6–8 GB T2V+I2V in one dense 5B model; the gentlest on-ramp into video generation, runs in ComfyUI core (wan is in this build's CLIPLoader type enum — GET http://127.0.0.1:8188/object_info/CLIPLoader 2026-10-18)

Placement: #1 → models/lora/ (create it), #2 → models/diffusion_models/ #3 → models/controlnet/ (create it), #4 → models/diffusion_models/. Fetch with scripts/download-frank-*.sh discipline (-f + byte-count + sha256 checks) or a plain hf download with the token in the environment — never on the command line.

Skip list: the original city96/Qwen-Image-gguf conversions (superseded by the 2.1 files already on disk), and any BF16 of #2/#4 (the iGPU does not need them at GTT capacity, and they double the disk bill).

See Also