DOGMA v43 High-Recall Scene Plan
Tuned to find the tiny stuff
- preview
- category_1
- sam_prompt_1
- kind_1
- threshold_1
- category_2
- sam_prompt_2
- kind_2
- threshold_2
- category_3
- sam_prompt_3
- kind_3
- threshold_3
- category_4
- sam_prompt_4
- kind_4
- threshold_4
- category_5
- sam_prompt_5
- kind_5
- threshold_5
- category_6
- sam_prompt_6
- kind_6
- threshold_6
There's a specific failure this version was written for: a VLM looks at a wide city street, mentions "cars" in passing, and your segmentation pass returns two of the nine cars in frame. The distant ones are 30 pixels tall, half-occluded, and slightly melted - which is precisely the population you were trying to repair in the first place.
High-Recall Scene Plan is the planner for that job. Same six slots, same two inputs as v42, but the selection rules and thresholds are pushed toward catching more.
What it does
Three passes over the text, like v42: parse explicit GROUP/CATEGORY pipe lines first, then pattern-scan the whole response for categories (people, cars, bus, trucks, buildings, grass, trees, sky, road, water, animals, furniture, machinery, products, clothing, food), then fill gaps from a context-derived fallback list. project_context steers only that last stage.
Where it differs is the caps: three vehicle-category slots (up from two), two vegetation slots, one for everything else. So a scene with cars, buses and trucks can get all three reparsed as separate passes instead of being folded into one cars group. Then each slot gets a canonical spec from a fixed table - cars get car, bus gets bus, trees get tree, and the thresholds come out low: 0.06 for people, 0.07 for cars, 0.08 for bus/trucks/animals/trees/sky/water/grass, 0.09–0.10 for the rest.
The preview output labels each row's origin - QWEN for parsed/scanned, FALLBACK for invented, INACTIVE for padded slots - and this is the version that started printing origins, which is why it's worth keeping visible.
Empty slots get none plus the placeholder concept nonexistent_placeholder_object_xyz, kind OBJECT and threshold 0.50, so they contribute nothing.
Inputs and outputs
inventory_text and project_context (multiline STRING each). Out: preview plus six repeats of category_N, sam_prompt_N, kind_N, threshold_N.
The kind values matter downstream: buildings is STRUCTURE, grass, sky, road and water are SURFACE, but trees comes out as OBJECT here - while the v44 planner's table calls trees a SURFACE. The family isn't perfectly self-consistent across generations, and the DOGMA crop nodes do branch on kind (SURFACE masks are cropped as large connected regions rather than per-instance patches), so if tree crops are behaving oddly, that's why.
Install
Manager → search DOGMA Nodes → install → restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/axior/ComfyUI-DOGMA-Nodes
Zero dependencies, zero models - requirements.txt is the line "No external dependencies", and this node is regex over a string. It registers under DOGMA/v43. You'll still need a VLM to write the inventory and a segmenter to consume it; SAM 3 via ComfyUI's native nodes or a community pack is the usual pairing, and note that the sam_prompt values here are plain concept phrases (not the concept:weight notation the pack's older planners use), so read your segmenter's docs if it expects something else.
DOGMA Nodes is by axior, the studio arm of a Milan production team running commercial work through heavy ComfyUI mask chains - where "find all nine cars" is the difference between a clean plate and an embarrassing one.
Where it goes wrong, and how to tell
Fallback traffic is high. This version would rather over-plan than plan nothing, so on an image where the VLM was terse you can get three or four FALLBACK rows. They're harmless when nothing matches (empty mask, wasted pass) but they will find objects the VLM didn't report. Watch the preview.
Too many masks, not enough passes. Six categories is six segmentation calls, six crop batches and six edit passes. High recall is expensive; that's the trade this version makes explicitly, and it's why the pack also ships DOGMASAMMaskCheckpointV12 to babysit VRAM between passes.
Thresholds disagree with your segmenter. v43 runs 0.06–0.10; v42 runs 0.16–0.22 and v44 drops to 0.02–0.06. If v43 gives you empty masks where v44 gives you dense ones, your segmenter's confidence semantics are on the other side of the pack's assumptions. Try the neighbour version instead of hand-editing strings.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| inventory_text | STRING | — | |
| project_context | STRING | — |
Outputs (25)
| Name | Type | Description |
|---|---|---|
| preview | STRING | — |
| category_1 | STRING | — |
| sam_prompt_1 | STRING | — |
| kind_1 | STRING | — |
| threshold_1 | FLOAT | — |
| category_2 | STRING | — |
| sam_prompt_2 | STRING | — |
| kind_2 | STRING | — |
| threshold_2 | FLOAT | — |
| category_3 | STRING | — |
| sam_prompt_3 | STRING | — |
| kind_3 | STRING | — |
| threshold_3 | FLOAT | — |
| category_4 | STRING | — |
| sam_prompt_4 | STRING | — |
| kind_4 | STRING | — |
| threshold_4 | FLOAT | — |
| category_5 | STRING | — |
| sam_prompt_5 | STRING | — |
| kind_5 | STRING | — |
| threshold_5 | FLOAT | — |
| category_6 | STRING | — |
| sam_prompt_6 | STRING | — |
| kind_6 | STRING | — |
| threshold_6 | FLOAT | — |