DOGMA Semantic Plan v16 — Concrete Categories
The original five-slot planner, and its forbidden-word list
- 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
What it is
The first planner in the DOGMA semantic detailer line: free text in, five slots of category / sam_prompt / sam_threshold out. If you're writing a workflow from scratch today you'd probably start at v21 or v27, but v16 is worth understanding because its rules are the foundation every later version inherits, and because its per-category SAM prompts are the most specific ones in the pack.
How the parsing works
Two things happen to your planner_text, in this order.
Cleaning. Lines are split on newlines and commas, so cars, people, windows and three separate lines parse the same way. Bullets, numbering (1., 1), 1 -) and backticks are stripped. If a line contains -, ->, => or : , everything after the separator is discarded - which is how you can paste a VLM's answer like vehicles: three cars and a van and have it survive as vehicles. Each category is truncated to 64 characters.
Filtering. Then the forbidden list runs, and it's the interesting part. These words get a line thrown out entirely:
deformed object, malformed object, artifact(s), detail(s), scene,
background, foreground, image quality, blur, noise, restoration,
signage, text, letter, billboard, logo
Read that list and you can see the argument the author was having with their own VLM. Ask a vision model "what should be repaired?" and it says "details, artifacts, background, blur." None of those are objects. A SAM prompt of detail:30 detects nothing useful, and a mask labelled "background" is a licence to regenerate the whole frame. So the planner refuses them. The last five entries are the text protection that later versions formalized: text is a non-target, always.
The rest of the list is deduplication (case-insensitive) and a cap of five categories, padded with none.
The SAM prompts
Each surviving category goes through a family classifier and comes back with a prompt and threshold tuned per family - and v16 is where the per-keyword specificity lives. architecture doesn't get one generic prompt; it checks the category string and hands back cathedral:30, church:30, bridge:30, skyscraper:30, door:35, window:60, wall:25, room:20, interior:20, or the broad fallback building:24,facade:12 at 0.29. Street furniture checks for lamp, traffic light, bench, bollard, bus shelter. Animals check dog, cat, horse, bird, fish, insect. Roads check floor, pavement, sidewalk, curb, crosswalk, track, terrain, ground. Sky has a special case: cloud:24 if you mentioned clouds, otherwise sky:12,cloud:18 at the loosest threshold in the table (0.32).
Anything the classifier can't place keeps its own words: camper van becomes camper van:30 at 0.24. The comment says why - "Unknown categories stay useful: use the exact simple noun phrase, not an 'other' super-category."
An empty slot emits nonexistent_placeholder_object_xyz:1 at threshold 0.50, so a detector returns nothing rather than everything.
Inputs and outputs
planner_text - STRING, multiline, forceInput. No widget; it has to be wired.
Outputs: plan_preview first (a formatted per-slot dump: category, prompt, threshold) and then five groups of category_N, sam_prompt_N, sam_threshold_N. Wire the prompt and threshold into your detector, and the category into the settings node that decides region sizes for that sector. There are exactly five real slots here - no legacy padding, unlike the six-slot v21+ layout.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/axior/ComfyUI-DOGMA-Nodes
Or ComfyUI Manager → DOGMA Nodes. Restart, then search for it under DOGMA/Semantic Detailer. No dependencies, no weights, no accounts.
Gotchas
- The comma splitting will surprise you if one of your categories contains a comma.
shoes, hatsis two categories; a comma inside a real category name is not something the parser distinguishes. - Broad words are not in the forbidden list here -
road,grass,skyall pass and get real prompts. Those get filtered in the v26/v27 planners. If you feed v16 a VLM's full scene inventory, you'll get five slots of landscape instead of the objects you wanted. - No community tutorials exist for the pack at all (zero reddit threads name it), and the README covers only the WAN VACE prep nodes and DOGMA samplers. The docstrings are the documentation, and they're terse.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| planner_text | STRING | — |
Outputs (16)
| 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 | — |