DOGMA Sector Plan v27 — Object-Centric Targets
Finite object caps, and a prompt that guarantees zero detections
- plan_preview
- category_1
- sam_prompt_1
- sam_threshold_1
- category_2
- sam_prompt_2
- sam_threshold_2
- category_3
- sam_prompt_3
- sam_threshold_3
- category_4
- sam_prompt_4
- sam_threshold_4
- category_5
- sam_prompt_5
- sam_threshold_5
- category_6
- sam_prompt_6
- sam_threshold_6
What changed from v26.1, and why you'd care
DOGMASectorPlanV27 keeps everything about v26.1's text-safe normalization and changes one thing: the instance caps and thresholds in the SAM prompts. In v26.1, a vehicle slot asked for car:220,automobile:220 - up to 220 car detections. In v27, that becomes car:80,automobile:80,bus:12,truck:16,van:24,motorcycle:16,bicycle:16.
The author's own comment in the class explains the reasoning: v27's SAM caps are "intentionally finite because local refinement only keeps a handful of complete object groups." That's the whole philosophy of this generation of the pack. A 4K street scene run through a generous detector can return hundreds of instances; group them into region crops and you get a crop count nobody wants to sample. Capping detections per class keeps the crop budget bounded, and the thresholds move up slightly (0.13–0.18 depending on category) so a marginal "maybe that's a car" doesn't win a slot.
If you're coming from Impact Pack's SEGS workflow, this is the opposite instinct. There, more detections is more coverage. Here, detection count is the cost model.
The placeholder trick
Empty slots in v27 don't emit an empty string. They emit:
nonexistent_placeholder_object_xyz:1 threshold 0.50
That's deliberate. Feeding an empty prompt to a text-prompted detector can make it fall back to "everything" or return an error; feeding it a nonsense noun at a high threshold makes it return nothing, cleanly, which is what an unused slot should do. It's a two-line hack and it's the kind of thing you only learn by watching a detector misbehave on blank input.
The categories it knows
v27 carries the full canonical table, extended past v26.1: vehicles, people, street furniture, architectural details, faces, hands, animals, furniture, machinery, clothing, products. Unknown categories still work - they're sanitized and passed through as {your_words}:80 at threshold 0.18, so camper van becomes camper van:80. And the text-safe rule still applies: anything containing sign, billboard, poster, lettering, logo or license plate normalizes to __none__ and never reaches the mask stage.
Inputs and outputs
Same shape as v26.1. planner_text is forceInput and multiline - there's no widget, so wire it. Up to three real categories land in slots 2, 3 and 4; slots 1, 5 and 6 stay __none__.
Each slot emits category_N (the normalized name, which is what you key per-category settings off), sam_prompt_N (feed a SAM/GroundingDINO-style detector), and sam_threshold_N (feed that detector's threshold input). plan_preview is the full textual dump - slot number, category, prompt, threshold - and it's how you debug a planner that seems to do nothing.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/axior/ComfyUI-DOGMA-Nodes
Or ComfyUI Manager → DOGMA Nodes. Restart. No Python dependencies beyond what ComfyUI already has (requirements.txt is a one-line comment), no checkpoints, no keys. You'll need a SAM detector node from another pack to turn sam_prompt_N into actual masks.
Gotchas worth knowing
- The thresholds here are tuned for one specific detector family - the
class:countprompt format is GroundingDINO-style. Feed them to a different detector and the numbers won't mean what they meant in DOGMA's own graphs. Start at the values and adjust. - Blank-looking output usually means your planner text used broad words.
sky,road,wall,backgroundare filtered out on purpose;shop signis filtered out for a different reason. - This pack has no community coverage to lean on. There are zero reddit threads naming it, and the README covers the WAN VACE prep and sampler nodes rather than the semantic detailer half - so the class comments are your documentation. They're unusually good, at least.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| planner_text | STRING | — |
Outputs (19)
| Name | Type | Description |
|---|---|---|
| plan_preview | STRING | — |
| category_1 | STRING | — |
| sam_prompt_1 | STRING | — |
| sam_threshold_1 | FLOAT | — |
| category_2 | STRING | — |
| sam_prompt_2 | STRING | — |
| sam_threshold_2 | FLOAT | — |
| category_3 | STRING | — |
| sam_prompt_3 | STRING | — |
| sam_threshold_3 | FLOAT | — |
| category_4 | STRING | — |
| sam_prompt_4 | STRING | — |
| sam_threshold_4 | FLOAT | — |
| category_5 | STRING | — |
| sam_prompt_5 | STRING | — |
| sam_threshold_5 | FLOAT | — |
| category_6 | STRING | — |
| sam_prompt_6 | STRING | — |
| sam_threshold_6 | FLOAT | — |