DOGMA v39.2 Global + Local Controls
One node holding both halves of a Klein run
- sampler
- steps
- denoise
- cfg
- local_denoise
- info
Every DOGMA workflow has at least two sampling passes. There's the global one that makes or remakes the whole frame, and there's the local one that rebuilds individual crops. They want completely different settings, and in most graphs those settings live in two different KSampler nodes nobody remembers to keep in sync.
This node is the single source of truth for both. Five widgets in, six outputs out, and one of the outputs is a SAMPLER object you wire straight into the sampler.
The defaults are the whole point
Look at what it ships with:
| input | default | range |
|---|---|---|
| sampler_name | euler | ComfyUI's normal sampler list |
| steps | 4 | 1–20 |
| denoise | 1.00 | 0.10–1.00 |
| cfg | 1.0 | 0–5 |
| local_denoise | 0.25 | 0.10–0.50 |
That's a distilled-model configuration, and specifically it's the FLUX.2 Klein 9B distilled recipe: four steps, CFG 1, euler. The community settled on exactly those numbers - the standard advice is "Klein 9B is distilled for 4 steps, more steps won't improve quality" and "CFG 1, higher values break the output on distilled models." The author's own sampler nodes in this pack are built around the same split, with three variants for the 4–6 step distilled build and three for the 20–50 step base model.
So a graph wired through this node is telling you: global pass at full noise, four steps, no CFG, euler. Then the local_denoise output - 0.25 - is the opposite end of the dial, for the crop passes where you want the source crop to survive. That's roughly the low end of the conventional inpainting guidance (0.3–0.6 for moderate changes), pushed down deliberately, because the whole DOGMA pitch is reconstructing real detail rather than replacing content wholesale.
What each output does
- sampler (
SAMPLER) - resolved through ComfyUI's own sampler registry, so it's a real sampler object usable withSamplerCustom/SamplerCustomAdvancedand any sigmas source, including a hand-drawn curve. That's a bigger deal than it sounds: it means this node is compatible with custom-scheduler graphs, not just KSampler Advanced. - steps (
INT), denoise (FLOAT), cfg (FLOAT) - the global pass's three numbers. Wire each into the sampler's converted input, or into aBasicScheduler/KSamplerthat has that widget turned into an input socket. - local_denoise (
FLOAT) - the crop pass's denoise. Same idea; feed whichever node runs the local rebuild. - info (
STRING) - a one-line echo likeGLOBAL euler/4 step/denoise 1.00/CFG 1.0 | LOCAL denoise 0.25. Nothing consumes it. It exists so you can see the settings a loaded workflow is actually using without opening five nodes.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/axior/ComfyUI-DOGMA-Nodes
Or ComfyUI Manager → DOGMA Nodes, or comfy node install comfyui-dogma-nodes. The pack needs no pip step whatsoever - the repo's requirements.txt contains a comment, pyproject.toml declares dependencies = [], and the code imports torch, numpy and ComfyUI's sampler APIs. Nothing to download. The pack is MIT, but note that's the code: Klein 9B weights are non-commercial, so check the licence of the checkpoint you're actually running before you sell anything this produces.
Where people get burned
Steps caps at 20. That's fine for the distilled build and wrong for the base model, which the same pack's README says wants 20–50 steps. If you're on DOGMA_klein_basemodel_* samplers, you cannot express the settings you need here - raise the widget's max in the Python or put your steps somewhere else.
denoise at 1.0 is not a mistake. For a global generation pass it's correct. If you're using this node purely as a local-repair control block and wonder why everything comes back rewritten, check which output went into which sampler: 1.0 in a repair pass will regenerate the whole tile.
sampler_name is ComfyUI's stock list, not the DOGMA samplers. Those (the DOGMA_klein_* family) appear in the normal sampler dropdowns after a restart, but they're a different thing - they're the samplers, this is the control block. Picking euler here and DOGMA_klein_distilled_BALANCED there is a legitimate combination; picking both in the same node isn't possible.
Reading the info line as documentation. It's genuinely useful for auditing someone else's workflow, but it reports what's set, not what ran. A sampler with a converted denoise input wired from elsewhere can still be fed something other than what this node says.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| sampler_name | COMBO | euler | 50 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +44 |
| steps | INT | 41–20 | — |
| denoise | FLOAT | 1.000.1–1 | — |
| cfg | FLOAT | 1.00–5 | — |
| local_denoise | FLOAT | 0.250.1–0.5 | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| sampler | SAMPLER | — |
| steps | INT | — |
| denoise | FLOAT | — |
| cfg | FLOAT | — |
| local_denoise | FLOAT | — |
| info | STRING | — |