DOGMA v39 Global Controls
DOGMA v39 Global Controls
- sampler
- steps
- denoise
- cfg
- mid_strength
- detail_strength
- info
When your workflow has eleven crops going through the same sampler and you change steps from 4 to 6, do you want to do that eleven times? No. This node is the plumbing-layer answer: Primitive nodes, but for the five numbers a tiled pass actually cares about, with the sampler object built for you.
It exists because DOGMA workflows are the worst possible case for duplicated settings. A restored frame can be one global pass plus twelve per-object passes, and every one of them needs the same steps, denoise, CFG and detail strengths or they won't match at the seam.
What it is
The plumbing layer is ComfyUI's least-written-about population - value nodes, switches, reroutes, context buses - and its whole purpose is fighting two problems: repetition and illegibility. This node is squarely the first. It's a value node that hands out a sampler object rather than a name, plus four numbers, plus a pair of strengths from the pack's own vocabulary.
The output types tell the story: SAMPLER, then INT, FLOAT, FLOAT, FLOAT, FLOAT, then a STRING receipt. That SAMPLER conversion is the one real trick - comfy.samplers.sampler_object(name) turns the dropdown's string into the object type that SamplerCustomAdvanced and friends expect, so you can fan one SAMPLER out to every sampling node in a graph instead of setting the dropdown on each one.
How it works, and why it's v39
The defaults are the giveaway. steps 4, cfg 1.0, denoise 1.0 - that is the 4-step distilled FLUX.2 Klein profile, and the whole pack is built around Klein as the re-render model. sampler_name defaults to euler with the full ComfyUI sampler list behind it (fifty entries), and steps is capped at 20, which is a deliberate ceiling: this is a detail pass on a crop, not a full render, and the moment you're at 30 steps you've usually got a prompt problem rather than a sampler problem.
The two pack-specific outputs are mid_strength (default 0.28, range 0–1) and detail_strength (default 0.82, range 0–1.2). They aren't standard ComfyUI anything. They're the strengths consumed by the pack's detail-injection nodes - the ones that split a generated image into low/mid/high frequency bands and transplant the mid and high bands onto the source under a drift guard. Note the asymmetry in the ranges: detail_strength can exceed 1, which means "push the generated micro-detail harder than a straight copy." That's occasionally useful and mostly a way to produce crunchy halos, so start at the default.
info (STRING) is a formatted readout: sampler, steps, denoise, CFG and both strengths. Cheap, and worth wiring to a preview - in a large graph, the receipt on the controls node is how you check what settings the run actually used rather than what you think you set.
What you wire
sampler, steps, denoise and cfg go into your sampling nodes - SamplerCustomAdvanced takes the SAMPLER, and the rest go into whatever scheduler/sampler control you use. mid_strength and detail_strength go into the detail-injection nodes, where they're the two dials that decide how much generated texture is allowed into the master. Nothing else consumes them.
One sibling is worth knowing about: DOGMAGlobalTestControlsV351 does the same fan-out for the pack's 2x2 tile test lab, and adds a seed and a center_power output for the aligned-noise and tile-combine nodes. If you're running the quick test harness rather than a full frame, that's the controls node you want.
Install
ComfyUI Manager → search DOGMA Nodes (publisher axior), then restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/axior/ComfyUI-DOGMA-Nodes
# restart ComfyUI
No dependencies to install - requirements.txt says so in one line, and pyproject.toml declares an empty dependency list - and no model files ship with the pack. The Klein checkpoint you're sampling with is your own download.
Common issues
Converting a widget to an input is the usual friction here: steps and denoise on your sampler nodes are widgets by default, so you have to right-click each one and convert it before this node's outputs have somewhere to land. That's core ComfyUI behaviour, not something this pack can fix, and it's the step people skip before concluding the node "doesn't connect."
Also: denoise and image-to-image are one of those places where two settings do the same thing in different ways. This node hands out a denoise value, and the pack also has DOGMALatentByDenoiseV351, which switches between an empty latent and a source latent depending on that same number. If you wire the denoise from here into the latent selector as well as your sampler, full-noise and img2img become one dial across the whole graph, which is almost always what you wanted.
Inputs (6)
| 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 | — |
| mid_strength | FLOAT | 0.280–1 | — |
| detail_strength | FLOAT | 0.820–1.2 | — |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| sampler | SAMPLER | — |
| steps | INT | — |
| denoise | FLOAT | — |
| cfg | FLOAT | — |
| mid_strength | FLOAT | — |
| detail_strength | FLOAT | — |
| info | STRING | — |