AIO Image Generate
One node to run FLUX.2, Ideogram 4, Krea 2, and Z-Image — if the files exist
- model_settings
- lora_config
- inpaint
- model
- clip
- image 1
- image 2
- image 3
- image 4
- mask
- image
- latent
- run_info
- model_info
- pid_info
- width
- height
- inpaint_info
- image_original
The name is not a lie. AIO Image Generate is the flagship of the helto4real "AIO Image Generate" pack, and it genuinely does what the pack title promises: pick a model family, pick three model files, type a prompt, hit run. It replaces the usual wall of loaders, encoders, samplers and decoders with one node that knows how to drive four different open-weights families - FLUX.2 Klein 9B, Ideogram 4, Krea 2, and Z-Image Turbo. No API, no key, all local.
What it actually is
The node is a facade. Under the hood the pack splits everything into profiles (services/profiles.py), adapters per model family, loader backends and validation - each family brings its own default sampler, scheduler, step count and canvas size, and at execution time the node lazily composes plain ComfyUI primitives (UNET loader, CLIP encode, ksampler, VAE decode). That's why you can switch families by changing one dropdown instead of rebuilding the graph. It's also why the pack imports without loading torch or GGUF: nothing heavy happens until you actually run.
The catch is that the node resolves model files lazily at execution time - nothing is auto-downloaded. If the dropdowns are empty or a file is missing, you get a failure at run, not a friendly installer.
The inputs that matter
Most of the node is "set once and forget," but these are the ones you'll actually touch:
model_type-flux2_klein_9b,ideogram4,krea2, orz_image_turbo. This controls every default, so set it first.diffusion_model,text_encoder,vae- filename dropdowns searched acrossmodels/diffusion_models,text_encoders,clip,vae, and GGUF folders when a backend is installed. Pick the files for the family you chose.positive_prompt/negative_prompt- and here's the trap:use_zero_negative_conditioningdefaults to on, which means the negative prompt isn't used as real sampler negative conditioning on any model (most of these families don't consume negatives anyway - the flow-matching generation inverts the SDXL rules, see the KB'sconcepts.md). Turn that toggle off if you actually want a negative encoded.size mode,max side,aspect ratio,multiple value- output sizing; setmultiple valueto 16 for both Ideogram 4 and Krea 2, since both demand multiples of 16 per side.stepsandcfg- both default to0, which means "use this family's profile default" (4 steps for distilled Klein, 20 for Ideogram 4, 8 for Krea 2 / Z-Image Turbo). An explicit number overrides.seedandbatch_count- one image per seed, batch just walks seeds.second_pass_enabled- turns on a built-in upscale-then-low-denoise-refine pass, like a hires fix baked in.
The optional sockets matter a lot for building a real workflow: model_settings (from the matching settings node), lora_config (from AIO LoRA Configuration), inpaint (from AIO Inpaint), image 1–image 4 (references for Klein / Krea 2), and model/clip (externally patched models from AIO Load Pipeline Models).
The outputs and where they go
image is the main one - wire it to Preview or Save Image. You also get latent, width, height, run_info (a JSON string with what actually ran), and three bundled outputs you can't use directly: model_info, pid_info, and inpaint_info. Those need their companion nodes (AIO Model Info, AIO PID Info, AIO Inpaint Info) to unpack. This replaced older direct model/VAE/PID outputs, so if you loaded an old workflow that wired them straight into other nodes, you'll need to reconnect through the info nodes.
Installing it
ComfyUI Manager: search "AIO Image Generate" (that's the pack title) and install. Or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/helto4real/comfyui-all-on-one-image-generation-node
cd comfyui-all-on-one-image-generation-node
python -m pip install -r requirements.txt # helto-privacy + cryptography
Then restart ComfyUI; all nodes appear under AIO/Image. The Python dependencies are light - the heavy part is the model files, which you fetch yourself: Ideogram 4 wants its conditional + unconditional models plus Qwen3-VL text encoder and the FLUX.2 VAE; Krea 2 wants its own Qwen3-VL encoder and Qwen Image VAE; Klein and Z-Image use their standard ComfyUI packs.
Where people get burned
- Nothing generates because the model dropdown is empty or wrong. The node doesn't download anything. Download the family's files into the right
models/folders first. - The negative prompt does nothing. See above -
use_zero_negative_conditioningis on by default. That's intentional, not a bug. - GGUF files with no GGUF backend. Pick a
.gguffile and the node raises "no compatible GGUF backend detected" - you need ComfyUI-GGUF installed, and the pack won't silently fall back to safetensors. - Settings mismatch. Connect
FLUX.2 Klein 9B Settingswhilemodel_typeisz_image_turboand the node rejects it rather than guessing. Match the settings node to the family.
It's a young pack (every node here shows zero impressions on comfy.icu), so treat it as 0.1.0-era software: the README is detailed, the tests exist, but the community hasn't stress-tested it yet. For a single family's one-node workflow it's remarkably tidy.
Inputs (34)
| Name | Type | Default | Description |
|---|---|---|---|
| model_type | COMBO | Select the model family/profile that controls defaults, validation, and adapter behavior. | |
| diffusion_model | COMBO | Diffusion model file to load. Supports standard and GGUF model folders when available. | |
| text_encoder | COMBO | Text encoder or CLIP file used to encode the prompts for the selected model family. | |
| vae | COMBO | VAE file used to decode generated latents into the final image. | |
| positive_prompt | STRING | A luminous studio portrait, crisp details, natural color, soft light | Prompt describing what the generated image should contain. |
| negative_prompt | STRING | Prompt describing content to avoid. Some model families ignore this input by default. | |
| use_zero_negative_conditioning | BOOLEAN | true | Use zero negative conditioning. Disable to encode and use the negative prompt as real sampler negative conditioning. |
| privacy_mode | BOOLEAN | false | Encrypt prompt text in saved workflows and hide it unless the node is hovered. |
| size mode | COMBO | Choose whether output dimensions come from the aspect ratio controls or from image 1. | |
| max side | INT | 1024256–4096 | Longest output edge in pixels when using aspect-ratio sizing. |
| aspect ratio | COMBO | Output shape to use with max side when size mode is set to use aspect ratio. | |
| multiple value | COMBO | Round generated dimensions to a multiple required or preferred by the selected model. | |
| seed | INT | 00–9223372036854776000 | Random seed for generation. Reuse the same seed and settings for repeatable results. |
| batch_count | INT | 11–64 | Number of images to generate in one loaded run. Each image uses the next seed. |
| steps | INT | 00–100 | Sampling step count. Use 0 to let the selected model profile choose its default. |
| cfg | FLOAT | 0.00–20 | Classifier-free guidance scale. Use 0 to let the selected profile choose its default. |
| sampler | COMBO | Sampling algorithm. Auto lets the selected model profile choose a compatible sampler. | |
| scheduler | COMBO | Noise schedule used during sampling. Auto lets the selected model profile choose a default. | |
| pid_capture_step | INT | 00–4096 | Main sampler step to capture for PID. Use 0 to auto-select a step near the end. |
| second_pass_enabled | BOOLEAN | false | Run a low-denoise upscale img2img pass after the first generated image. |
| second_pass_steps | INT | 00–100 | Second-pass sampling steps. Use 0 to reuse the main resolved step count. |
| second_pass_denoise | FLOAT | 0.150–1 | Denoise strength for the second sampler pass. |
| second_pass_upscale_ratio | FLOAT | 1.501–8 | Scale factor applied to the first-pass image before second-pass sampling. |
| second_pass_upscale_method | COMBO | lanczos | Resize filter used to upscale the first-pass image before VAE encoding. |
| model_settingsopt | AIO_MODEL_SETTINGS | Optional settings object from a matching AIO model settings node. | |
| lora_configopt | AIO_LORA_CONFIG | Optional LoRA stack from the AIO LoRA Configuration node. | |
| inpaintopt | AIO_INPAINT_CONFIG | Optional AIO Inpaint config. When connected, supported models edit only the masked source-image area. | |
| modelopt | MODEL | Optional externally loaded or patched post-LoRA model. Connect with clip to skip internal model loading and LoRA application. | |
| clipopt | CLIP | Optional externally loaded or patched post-LoRA CLIP. Connect with model to skip internal text encoder loading and LoRA application. | |
| image 1opt | IMAGE | Optional reference image 1. Connect images in order starting with image 1. Used by Krea 2 reference img2img and FLUX.2 Klein reference workflows. | |
| image 2opt | IMAGE | Optional reference image 2. Connect images in order starting with image 1. Used by FLUX.2 Klein multi-reference workflows. | |
| image 3opt | IMAGE | Optional reference image 3. Connect images in order starting with image 1. Used by FLUX.2 Klein multi-reference workflows. | |
| image 4opt | IMAGE | Optional reference image 4. Connect images in order starting with image 1. Used by FLUX.2 Klein multi-reference workflows. | |
| maskopt | MASK | Optional mask for reference-image workflows. Connect image 1 before using a mask. |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| latent | LATENT | — |
| run_info | STRING | — |
| model_info | AIO_MODEL_INFO | — |
| pid_info | AIO_PID_INFO | — |
| width | INT | — |
| height | INT | — |
| inpaint_info | AIO_INPAINT_INFO | — |
| image_original | IMAGE | — |