DOGMA ProposeCategories v1.0.12
The version that stops crashing on a chatty VLM
- proposal
- presence_prompt
- report
If you only read one line: this is DOGMA ProposeCategories v1.0.11 with the JSON crash fixed. Same inputs, same three outputs, same category-cleaning rules. The difference is entirely in how it survives a model that won't shut up.
The bug it exists to fix
The 1.0.11 planner parsed its inventory by finding the first [ and the last ] and handing the slice to json.loads. Give that a VLM that repeats itself - one line per visible person, say, ten people deep - and the response gets truncated mid-array. The last bracket is now a nested one, the slice is invalid JSON, and json.loads raises JSONDecodeError instead of doing anything useful. That's not a hypothetical; it's the failure the 1.0.12 changelog names directly as the cause of a phase-3 failure in a real workflow.
The v1.0.12 parser stops guessing. It reads the first outer JSON payload with a real streaming decoder, and if that fails it scans for complete {...} objects - brace depth tracked, quoted strings and escapes respected - keeping the ones that parse and ignoring the truncated tail. There's a third path, too: if the model ignored your instructions and emitted pipe-delimited lines (category | target noun | visible location), those are read directly, with bad rows logged as warnings rather than silently invented. Bounded at 65,536 characters and 128 records, so a runaway generation can't eat your RAM.
What changed upstream of it
The proposal node is only half the change. DOGMABoundedPlannerV112 - the node that actually talks to ModernVLM - now asks for a compact category | noun | location inventory, one line per type not per instance, capped at 320 generated tokens. If the output came back malformed or repetitive it makes one recovery call at 192 tokens on the same worker, with a "look again, distinct types only" prompt, and merges by preferring fresh categories while keeping valid originals. The worker is released in a finally, so cancellation or a model error doesn't leave an 8B model parked in VRAM.
It also reports. The planner's status text rides along inside planner_text behind a DOGMA_STATUS: marker, and ProposeCategories v1.0.12 picks that up and prepends it to report, along with any parser warnings. You get RECOVERY / PARTIAL INVENTORY POSSIBLE: … in your face rather than a mystery empty plan.
The inputs and outputs
Identical to v1.0.11 - planner_text in (forced STRING input), and out:
proposal(DOGMA_PLAN) →DOGMA VerifiedPlan8 v1.0.12.presence_prompt(STRING) → your VLM → back aspresence_text. The instruction is line-based now (id | present|absent|uncertain | evidence), which pairs with the v1.0.12 presence parser instead of the JSON one v1.0.11 wanted.report(STRING) → status, warnings, then the parsed JSON. Read it. It's the cheapest debugging you'll do all day.
Install
Manager, search DOGMA Nodes; or:
cd ComfyUI/custom_nodes
git clone https://github.com/axior/ComfyUI-DOGMA-Nodes
Restart afterwards. scipy>=1.10 is the only pip requirement, but the full planner chain needs comfyui_vlm_nodes (for ModernVLM) plus a current ComfyUI with SAM 3 and lazy-input support.
Honest caveats
Two things worth knowing before you trust it. First, the zero-categories case is handled but not fixed: if the model genuinely proposes nothing usable, SAM, captioning and diffusion are skipped and you get a reason in the report - which is the right behaviour and also a dead workflow. Second, the pack's own changelogs are unusually blunt that this release was validated with mocked model calls: CPU regressions for the parser, static checks for the wiring, "no real GPU planner or full scene generation was performed." The parsing logic is well tested; whether your VLM produces a clean inventory is still on your VLM. Pick v1.0.12 over v1.0.11 every time, though - the only difference between them is the failure modes you avoid.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| planner_text | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| proposal | DOGMA_PLAN | — |
| presence_prompt | STRING | — |
| report | STRING | — |