ComfyUI Node

Ultimate Sampler Grid (Generator)

Burn through every sampler, scheduler, CFG and LoRA combo in one run

By JasonHoku·Created 8 months ago·Updated about a month ago· 101
Ultimate Sampler Grid (Generator)
  • optional_model
  • optional_clip
  • optional_vae
  • optional_positive
  • optional_negative
  • optional_latent
  • dashboard_html
configs_json[{"sampler": "euler", "scheduler": "normal", "steps": 20, "cfg": 7.0}]

You know the ritual: you pick DPM++ 2M Karras because the internet said so, run one image, squint, change the sampler, run another, squint harder. Half an hour later you've compared three settings and learned almost nothing. UltimateSamplerGrid is the node that ends that loop. It's the engine of the Ultimate Auto Sampler Config Grid Testing Suite: you hand it a JSON config describing the combinations you want, and it generates every single one in a single run - every sampler × every scheduler × every CFG × every LoRA - then hands the whole batch off to the suite's dashboard so you can actually compare the results.

The name is doing a lot of work, but the core idea is simple: a Cartesian product of settings, run back to back. Want to see euler vs dpmpp_2m vs dpmpp_2m_sde across karras vs normal at 20 and 30 steps? That's 2×2×2, and the node burns through all eight images without you touching the canvas again. Grid testing is a real, long-standing community habit - the classic advice is to farm seeds and settings at low steps, then narrow in - and this is that habit turned into a one-click operation.

How it works

The one required input is configs_json, a JSON array where each object is a config and any field can be a single value or an array. Arrays get expanded into all their combinations (via the pack's config_utils.py), so this one node generates the whole grid:

[
  {
    "sampler": ["euler", "dpmpp_2m"],
    "scheduler": ["normal", "karras"],
    "steps": [20, 30],
    "cfg": [7.0, 8.0]
  }
]

That's 16 images. Use "*" for the sampler or scheduler to pull in every available option. Model, LoRA, denoise, resolution, prompt - all of it can be array-ified. Results are saved to ComfyUI/output/benchmarks/{session_name}/images/ with a manifest.json beside them, which is what lets the dashboard and the resume logic work.

The smart-caching bit is what makes grids of hundreds of images tolerable. The node skips model and LoRA reloads when consecutive runs share resources, and it batches work so it isn't constantly unloading and reloading checkpoints. Stop a run halfway and re-queue with overwrite_existing off and it skips already-generated images instead of starting over.

The inputs that matter

  • configs_json - the whole run lives here. The tooltip says it plainly: it carries all run settings, prompts, models and LoRAs, typically wired from the suite's UltimateConfigBuilder node. Without the builder, you type the JSON yourself.
  • optional_model, optional_clip, optional_vae - connect these for Flux, SD3, Z-Image and other non-standard architectures that need a real loader upstream. When connected, the node ignores its internal model selection and uses yours.
  • optional_positive / optional_negative - pre-encoded conditioning, for when you've already built your prompts in CLIP nodes.
  • optional_latent - for img2img or upscaling pipelines; latent dimensions are preserved.

One output: dashboard_html, which you wire into the Ultimate Grid Dashboard node's input. That's the entire point of the pack - generate here, view there.

Installing

Via ComfyUI Manager (search ComfyUI-Ultimate-Auto-Sampler-Config-Grid-Testing-Suite), or:

cd ComfyUI/custom_nodes/
git clone https://github.com/JasonHoku/ComfyUI-Ultimate-Auto-Sampler-Config-Grid-Testing-Suite.git

Restart ComfyUI. Dependencies are light for what it does - the shipped requirements.txt is just diffusers and piexif - and there are no model downloads. The author launched this on r/comfyui in early 2026 and it landed well; it's been actively updated since.

Where people get burned

  • OOM on big grids - lower vae_batch_size (it's carried through _session_settings from the builder) to 1–2 on 8GB cards.
  • "mat1 and mat2 shapes cannot be multiplied" - that's an architecture mismatch, usually a Flux/SD3 checkpoint with only some optional inputs connected. Connect all of them, and check LoRA compatibility.
  • "Session not found" - session_name must match a folder inside ComfyUI/output/benchmarks/.
  • Resume isn't resuming - keep overwrite_existing set to false or it regenerates everything.

Watch your grid size before you queue it: 3 samplers × 3 schedulers × 3 steps × 3 CFG is 81 images, and folder expansion of models or LoRAs multiplies that fast. Start small, confirm the setup works, then unleash it.

Categorysampling/testing

Inputs (7)

NameTypeDefaultDescription
configs_jsonSTRING[{"sampler": "euler", "scheduler": "normal", "steps": 20, "cfg": 7.0}]Configs JSON (typically wired from UltimateConfigBuilder). Carries all run settings, prompts, models, LoRAs, etc. via _session_settings.
optional_modeloptMODEL
optional_clipoptCLIP
optional_vaeoptVAE
optional_positiveoptCONDITIONING
optional_negativeoptCONDITIONING
optional_latentoptLATENT

Outputs (1)

NameTypeDescription
dashboard_htmlSTRING