Nodes/ComfyUI-ZFRNodes/Simple Image Generator
ComfyUI Node

Simple Image Generator

The whole t2i/i2i pipeline in one node — no wiring, no sampler chain

By zfrsgtcu·Created 3 months ago·Updated 2 months ago· 31
Simple Image Generator
  • reference_image
  • image
  • log
prompt
unet_name
vae_name
clip_name
clip_typeflux2
lora_name
lora_strength1.00
trigger_words
width960
height1200
steps8
cfg1.0
guidance3.5
denoise1.00
sampler_nameeuler
schedulersimple
seed0
seed_moderandom
reference_megapixels1.00
reference_size_modescale_to_megapixels

If you're tired of dragging out the same ten-node stack - checkpoint loader, CLIP encoder, latent node, sampler, VAE decode - every time you want a picture, Simple Image Generator is the node that says "no." It collapses a full text-to-image pipeline into one node with a prompt box and a set of sampler widgets. The author's pitch was exactly this: add the node, type your prompt, get your output. No checkpoint loader, no CLIP encode, no latent node, no sampler chain.

It's from ComfyUI-ZFRNodes, the same pack as Story Frame Generator, and it shares that node's DNA - same Flux2-style conditioning, same loaders, same sampler defaults (8 steps, cfg 1.0, guidance 3.5, euler/simple, the distilled-Klein recipe). It's the single-image little sibling, and honestly it's the node you'll reach for when you just want a clean render without ceremony.

One node, two modes

The clever bit is that the same node does both text-to-image and image-to-image, and which mode you're in is decided entirely by whether reference_image is connected.

  • No reference_image → text-to-image: empty latent, denoise 1.0, output at your width×height (default 960×1200).
  • reference_image connected → image-to-image: the reference is VAE-encoded and injected into the positive conditioning via Flux2's ReferenceLatent, then a new image is sampled. You're now editing that image rather than dreaming a fresh one.

This matters more than it sounds. The 2026 answer to character consistency stopped being "encode the character at generation time" and became "generate once, then edit that image" - identity is preserved because the model is looking at the reference while it works. This node is that pattern in its simplest form: keep the reference connected, change the prompt, get the same subject in a new pose or scene.

Inputs worth touching

The required list is the standard model-vocabulary: prompt, unet_name, vae_name, clip_name, clip_type (the list is pulled live from ComfyUI, ~28 types), optional lora_name/lora_strength/trigger_words, then width, height, steps, cfg, guidance, denoise, sampler_name, scheduler, seed, and seed_mode (random or fixed).

The optional ones are where the i2i magic lives: reference_megapixels (default 1.0) and reference_size_mode - scale_to_megapixels, fit_width_height, or stretch_width_height. If you've been fighting stretched references, fit_width_height is your friend; the multiple-reference sibling uses aspect-preserving sizing too, so nothing gets squashed.

Outputs are just image and log. The log is a plain string you can wire to a Show Text node to see what actually ran (mode, size, seed).

Install and notes

Via ComfyUI Manager (search "ComfyUI-ZFRNodes") or:

cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/zfrsgtcu/ComfyUI-ZFRNodes.git

Restart ComfyUI fully after installing - the frontend script needs registering, and a browser refresh won't cut it. Dependencies are only numpy, torch, and Pillow, all already in ComfyUI; the pack downloads nothing. You supply a Flux2-compatible model (flux-2-klein is the tested pairing), its VAE, and text encoder.

One honest caveat: this is a convenience node, not a new model. Everything it can do, a hand-wired graph can do - this just saves you the wiring and the mistakes. It runs locally, needs no API key, and if you feed it a rough idea through an LLM prompt-enhancer node first, you've got a very comfortable little pipeline. For multi-reference work - say, a product plus a character in one shot - step up to Simple Image Generator (Multiple) in the same pack.

Categoryzfr-nodes

Inputs (21)

NameTypeDefaultDescription
promptSTRING
unet_nameCOMBO0 options:
vae_nameCOMBO0 options:
clip_nameCOMBO0 options:
clip_typeCOMBOflux228 options: stable_diffusion, stable_cascade, sd3, stable_audio, mochi, ltxv, +22
lora_nameCOMBO1 options: None
lora_strengthFLOAT1.00-10–10
trigger_wordsSTRING
widthINT96064–8192
heightINT120064–8192
stepsINT81–200
cfgFLOAT1.00–30
guidanceFLOAT3.50–100
denoiseFLOAT1.000–1
sampler_nameCOMBOeuler44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBOsimple9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
seedINT00–18446744073709550000
seed_modeCOMBOrandom2 options: random, fixed
reference_imageoptIMAGE
reference_megapixelsoptFLOAT1.000.1–16
reference_size_modeoptCOMBOscale_to_megapixels3 options: scale_to_megapixels, fit_width_height, stretch_width_height

Outputs (2)

NameTypeDescription
imageIMAGE
logSTRING