Grimoire Params
Load a model and hand out every sampler setting from one node
- MODEL
- CLIP
- VAE
- sampler_name
- scheduler
- steps
- cfg
- seed
- width
- height
- stop_at_clip_layer
- batch_size
- denoise
- upscale_by
The all-in-one that makes your prompt app the driver's seat
Grimoire Params is the heavyweight of the comfyui-grimoire-bridge pack. Where Grimoire Slot lets an external app fill your prompt, this node lets it take over the generation settings too: checkpoint, VAE, sampler, scheduler, steps, CFG, seed, resolution, denoise, hires factor. It loads the checkpoint itself and then hands every one of those values out as outputs, so you wire them into a KSampler and EmptyLatentImage the way you'd wire a context bus - one source of truth instead of values typed into a dozen widgets.
It's the node that makes the "Replaces the separate CheckpointLoader + KSampler + EmptyLatentImage setup" claim real, with one honest caveat: it replaces the loader and the hand-typed parameter wiring. The KSampler and EmptyLatentImage nodes still have to exist in your graph - this node just feeds them everything. Same deal as rgthree's context pattern: fewer places to update, but you're trusting one node to hold all the values.
How it works
The bridge keeps a gen_params dict, filled when grimoire (or anything else) POSTs to /pb/set-gen. On each execution the node merges those values over the widget defaults - anything grimoire sent wins, anything it didn't stays at what you set. It loads the checkpoint via ComfyUI's own loader, swaps in an external VAE if you picked one instead of Automatic, validates the sampler and scheduler against the ones ComfyUI actually knows, and emits everything downstream.
The inputs that matter
You'll set most of these like you would on a normal loader and KSampler, but four deserve a look:
- checkpoint - a filename from your
models/checkpointsfolder. This is the one grimoire will override, so it's also the source of the pack's sneakiest trap (below). - vae -
Automatic(use the checkpoint's bundled VAE) or the name of a standalone VAE file. - sampler_name / scheduler - full ComfyUI lists, defaults
euler/normal. For SDXL-lineage models, DPM++ 2M with Karras is the safer habit if you're not sure. - clip_skip - default 2. Note the quirk: the input is called
clip_skip, but the output is namedstop_at_clip_layer. Same value, two names; the output name is just what a KSampler expects.
The outputs
MODEL, CLIP, and VAE go where the loader's would - CLIP into a CLIP Text Encode, VAE into the decoder, MODEL into KSampler. Then a long tail of typed values: sampler_name, scheduler, steps, cfg, seed, denoise for the KSampler; width, height, batch_size for EmptyLatentImage; and upscale_by, a hires factor the pack doesn't apply for you - you'd convert that to an input on a LatentUpscale node if you're building a hires pass.
Installing it
No pip dependencies, no model downloads, no requirements.txt:
cd ComfyUI/custom_nodes
git clone https://github.com/omamesamba-del/comfyui-grimoire-bridge.git
Restart ComfyUI, look under PromptBuilder for Grimoire Params, and in grimoire enable Settings → Generation → Send Gen Settings.
Where people get burned
- The checkpoint fallback is a silent wrong-model trap. If grimoire sends a checkpoint filename you don't have, the node quietly loads your first checkpoint from the folder instead. No error, no warning - you just generate with a model you didn't pick. Keep your model names in sync with what grimoire sends.
- It only outputs; it doesn't sample. New users wire it up and expect an image. You still need KSampler + EmptyLatentImage + VAE Decode + a conditioning, like any workflow.
- In-memory params. Restart ComfyUI and grimoire's settings are gone; the node falls back to its widgets.
- Another write door.
/pb/set-genis unauthenticated like the rest of ComfyUI's API. On localhost it's fine; exposed to the internet, anyone can silently swap your model and parameters.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| checkpoint | STRING | — | |
| vae | STRING | — | |
| sampler_name | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | normal | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| steps | INT | 201–150 | — |
| cfg | FLOAT | 7.00–30 | — |
| seed | INT | 00–18446744073709550000 | — |
| width | INT | 83264–8192 | — |
| height | INT | 121664–8192 | — |
| clip_skip | INT | 21–12 | — |
| batch_size | INT | 11–64 | — |
| denoise | FLOAT | 1.000–1 | — |
| upscale_by | FLOAT | 2.001–8 | — |
Outputs (14)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |
| VAE | VAE | — |
| sampler_name | euler,euler_cfg_pp,euler_ancestral,euler_ancestral_cfg_pp,heun,heunpp2,exp_heun_2_x0,exp_heun_2_x0_sde,dpm_2,dpm_2_ancestral,lms,dpm_fast,dpm_adaptive,dpmpp_2s_ancestral,dpmpp_2s_ancestral_cfg_pp,dpmpp_sde,dpmpp_sde_gpu,dpmpp_2m,dpmpp_2m_cfg_pp,dpmpp_2m_sde,dpmpp_2m_sde_gpu,dpmpp_2m_sde_heun,dpmpp_2m_sde_heun_gpu,dpmpp_3m_sde,dpmpp_3m_sde_gpu,ddpm,lcm,ipndm,ipndm_v,deis,res_multistep,res_multistep_cfg_pp,res_multistep_ancestral,res_multistep_ancestral_cfg_pp,gradient_estimation,gradient_estimation_cfg_pp,er_sde,seeds_2,seeds_3,sa_solver,sa_solver_pece,ddim,uni_pc,uni_pc_bh2 | — |
| scheduler | simple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal | — |
| steps | INT | — |
| cfg | FLOAT | — |
| seed | INT | — |
| width | INT | — |
| height | INT | — |
| stop_at_clip_layer | INT | — |
| batch_size | INT | — |
| denoise | FLOAT | — |
| upscale_by | FLOAT | — |