DOGMA v44 Source-Grounded Scene Plan
If the model didn't see it, it doesn't get planned
- 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
The v42 and v43 planners shared a design assumption: a plan with too few groups is a catastrophe, so when the VLM under-reports, fill the gaps from the project context. v44 deletes that. Its name is the thesis - a slot exists only if the source text supports it.
This is the version to reach for when you've been burned by a fallback. Invented rows don't fail loudly. They produce a mask with nothing in it most of the time, and occasionally they find something the VLM missed and schedule a generative edit in a region nobody asked about. For archival or commercial work where an unrequested edit is worse than a missed detail, that's the wrong default.
How it works
Two passes over the VLM text:
Explicit lines first. Anything with a pipe whose first field is GROUP or CATEGORY: field two is canonicalised through a matcher that folds synonyms into a fixed vocabulary - person/people/pedestrian/human/crowd become people, automobile/sedan/hatchback/passenger vehicle become cars, lorry/van become trucks, foliage/bush/shrub become trees.
Then a keyword scan of the whole response, so malformed prose still yields categories - but only categories. Nothing is added from project_context; the parameter exists for the downstream edit instructions, not for guessing.
Selection is then ordered deliberately: up to four objects first (people, cars, bus, trucks, animals, furniture, machinery, products, clothing, food), then one structure (buildings), then one surface (grass, trees, sky, road, water) to fill the six. Objects win because they're the things that break - a melted car is a defect, a slightly soft sky is not.
Each category carries its own spec: canonical segmentation phrase, kind, and threshold. The thresholds are the headline change: 0.020 for people and cars, 0.025 for bus and trucks, 0.035 for animals, 0.040 for grass/trees/road, 0.045 for furniture/machinery/products/clothing/food, 0.050 for buildings, 0.060 for sky. An order of magnitude looser than v42's 0.16–0.22, which is the "high recall" half of the pack's ongoing argument with itself.
Inputs and outputs
inventory_text and project_context, both multiline STRING. Outputs: preview plus six rows of category_N, sam_prompt_N, kind_N, threshold_N. The preview tags each row SOURCE-EVIDENCE or INACTIVE - there's no FALLBACK tag because there are no fallbacks.
Install
Manager → search DOGMA Nodes → install → restart ComfyUI. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/axior/ComfyUI-DOGMA-Nodes
No Python dependencies, no model files, nothing to configure beyond the pack itself - it's pure text handling. Registered in DOGMA/v44. The path to a working pipeline is: VLM writes inventory → this node plans → segmenter produces masks → crop nodes cut regions → an edit model repairs → a stitch node composites. Every one of those is a separate install; this node is the one with no moving parts.
DOGMA Nodes is axior's, from the studio arm of a Milan production team doing commercial AI work with heavy masked-inpaint chains. The version history reads like a studio arguing with itself about false positives, which is what you'd expect from people shipping to clients.
What to expect
Fewer slots filled. On a clean landscape you may get two or three active groups and the rest INACTIVE. That's correct behaviour, not a parse failure.
Empty first run. Because nothing is invented, a lazy VLM prompt means an almost-empty plan. The fix is upstream: use the pack's instruction text (DOGMAV52SceneInstruction) which demands families be included "even when tiny, partially occluded, touching, overlapping, distorted or only partly visible", and which tells the model not to use sky, haze, fog, text, logos, signs or defects as editable groups.
Low thresholds are a commitment. At 0.020 your segmenter will accept a lot of confident-but-wrong picks - reflections, windows, costume jewellery. If you see masks on things that aren't cars, you're seeing the recall setting work as designed; the protection is downstream, in the mask-normalising and kind-aware nodes, not here.
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 | — |