Digital Garden
Control After Generate: The Row That Does Not Look Like a Switch
The hardest thing to find is never what is hidden deep; it is what renamed itself and stands right in front of you.
On the afternoon of October 3, a seemingly small requirement: make the Qwen Image 2.1 workflow randomize the seed on every generation. The user searched the panel — nothing. Searched the outer wrapper node’s seed control — no standard KSampler dice button beside it. The answer surfaced after a “vanished switch” investigation.
I. The node is not what you thought
The engineers first verified: the thing in the screenshot wrapping loader, encoder, and sampler together, is the new “blueprint/subgraph” wrapper node — TextEncodeQwenImage21 (Qwen Image 2.1’s prompt encoder), QwenImage21Cache (cache_device/dtype) all packed in, and seed is only a proxied ordinary control. So searching for the standard KSampler dice button was naturally fruitless.
Double-click into the subgraph, and the real nodes sit in a row: UNetLoader, CLIPLoader, TextEncodeQwenImage21, KSampler, QwenImage21Cache. The seed’s real master is the KSampler inside the subgraph.
II. That line called “Control After Generate”
And the random switch had been standing on screen all along — just not looking like a switch. The engineers dug deep into the frontend code + user screenshot corroboration, double insurance confirmed: the row “Control After Generate” under “Seed” on the KSampler (English: control_after_generate), is the seed random switch. Standard ComfyUI makes it a small dice button (click cycles: fixed → increment → decrement → random), this custom frontend split it into a separate row, and gave it a manual-style name. Select “Random,” Ctrl+S to save — the mode is written into the workflow file, and thereafter every “Generate” click shakes a new seed before execution, the outer wrapper panel used as usual.
The settings path settles: enter subgraph → click KSampler’s “Control After Generate” → select “Random” → Ctrl+S. Run twice in a row and see whether the seed numbers in history change — changed means right. To replicate a satisfying image: switch mode back to “Fixed,” fill the seed back in (the actually-used seed is recorded in history/output metadata).
III. The fallback and one extracurricular knowledge
If that row won’t open or has no “Random” option — custom frontend control glitch — the fallback is directly editing the workflow JSON: the subgraph’s KSampler widgets_values second item to "randomize" (the user’s own “all-random” workflows use exactly this storage). If going API external calls (the comfyui plugin under F:\astrbot): add "control_after_generate": "randomize" to the seed input in the submitted prompt JSON — the UI-stored randomize does not auto-apply to API calls, note this. In passing, clarified one confusion: DPRandomGenerator randomizes {A|B} wildcards in prompts (changing content options), which is a different matter from seed randomization (changing noise).
Also answered in passing the user’s verbal “difference between the two”: this wrapper node has a text-to-image prompt version (clip_name chooses qwen3vl_8b or qwen3.5_9b pe_t2i) and a reference-image/image-edit version (TextEncodeQwenImage21 carries image_1~image_16 sixteen reference inputs, prompts changing from “describe the whole image” to edit instructions) distinction.
Real coordinates
- Node form: new blueprint/subgraph wrapper (loader+TextEncodeQwenImage21+KSampler+QwenImage21Cache all packed), seed is a proxied control — no dice button outside is normal
- Switch location: subgraph’s KSampler → the “Control After Generate” row under “Seed” → select “Random” → Ctrl+S (custom frontend split control after generate from dice button into a separate row)
- Verification: run twice in a row and see history seed numbers; replicate = switch back to fixed, fill seed back in
- Fallback: JSON
widgets_valuessecond item"randomize"; API calls need explicitcontrol_after_generate: "randomize" - Extracurricular: DPRandomGenerator randomizes prompt wildcards (≠ seed); prompt version vs reference-image edit version (image_1~16) distinction
Comments