DOGMA ChooseCategories 1.0.22
The gate where you veto the mask list
- categories
- previews
- selected_categories
- selection_report
The whole DOGMA pipeline is an automatic-detailer loop: something detects regions, each region gets its own masked inpaint pass, and the results are pasted back over an untouched master image. This node is the part of that loop that stops and asks you a question. It takes the category bundle and the preview strip that came out of the mask stage, and it makes you decide which categories actually earn a render pass - optionally with a different denoise for each one.
If you have used the Impact Pack, this is the "filter your SEGS" step, except the filter is you clicking checkboxes in a popup. That is not a downgrade. Automatic detailing's classic failure is that a detector unhelpfully masks something it decided was interesting, and a re-render of a region that did not need one just burns time and can make the image worse.
How it works
ChooseCategories is a pass-through that rewrites selection state. In auto mode (manual off) it simply selects every category that the mask stage flagged as active, and everything downstream renders. In manual mode it saves each category preview as a PNG, registers a pending selection under a random token, pushes a dogma-category-choice event to the ComfyUI frontend, and then sits there polling - checking for an interrupt every 200 ms - until something POSTs to the pack's /dogma/categories/select route. Your picks are validated server-side: unique integer IDs, all of them inside the allowed set, denoise values finite and between 0 and 1.
Its IS_CHANGED returns NaN when manual is on, which is the pack's way of saying "never cache this node." Good. You want a manual gate to fire every queue, not replay a cached answer from three runs ago.
Inputs that matter
- categories (
DOGMA_CATEGORIES) - the bundle from the mask node, carrying the per-instance masks and stable target IDs. - previews (
IMAGE) - the preview batch that the same mask node produces. Wire thecategory_previewsoutput here. The popup shows these images; without them the chooser has nothing to display. - manual - off means "take everything," on means "wait for my click."
- default_denoise (0.3) - the value every selected category starts with. In the popup you can override it per category, and the override is what Phase3Crops stamps into the individual render jobs.
Outputs are selected_categories, which goes straight into a crops node, and selection_report, a plain string. Read the report. It lists each selected category with its denoise and whether that value was custom or default, and if nothing is selected it says so explicitly instead of silently returning an empty result.
Install
Install through ComfyUI Manager (search DOGMA Nodes), or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/axior/ComfyUI-DOGMA-Nodes
Only Python dependency is scipy>=1.10, from the pack's requirements.txt. Restart ComfyUI afterwards. Note that this node is a frontend-coupled one: it needs the pack's JavaScript extension loaded, because that is what draws the category popup and talks to the select route.
Where people get burned
Running it headless. The popup is a browser feature. Queue this from the API or from a script with no frontend attached and the node waits. Forever. Press cancel if you do it by accident - the polling loop checks for interruption, so the node does abort cleanly.
Mixing node generations. This is the V1.0.22 chooser, and it writes denoise_by_target into the bundle. DOGMAPhase3CropsV122 reads exactly that key off the selection. Feed a selection from the older V111 chooser into a V122 crops node and you get a KeyError, not a graceful fallback. Wire nodes from the same version and the whole family behaves.
Ignoring the report. When the report says no categories were selected, phase 3 passes the input through untouched. That will look like "the render did nothing" if you did not read the string.
There is no community footprint for this pack to lean on here - the name "DOGMA Nodes" returns nothing in the Reddit corpus and the impressions are flat zero - which is exactly why the report strings and the source are the documentation.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| categories | DOGMA_CATEGORIES | — | |
| previews | IMAGE | — | |
| manual | BOOLEAN | false | — |
| default_denoise | FLOAT | 0.300–1 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| selected_categories | DOGMA_CATEGORIES | — |
| selection_report | STRING | — |