Nodes/DOGMA Nodes/DOGMA VerifiedPlan8 v1.0.12
ComfyUI Node

DOGMA VerifiedPlan8 v1.0.12

Same veto, now with the audit trail attached

By axior·Created 6 months ago·Updated 16 days ago· 2
DOGMA VerifiedPlan8 v1.0.12
  • proposal
  • 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
  • category_7
  • sam_prompt_7
  • sam_threshold_7
  • category_8
  • sam_prompt_8
  • sam_threshold_8
◄presence_text—►
◄sam_threshold0.40►
◄planner_status—►

VerifiedPlan8 v1.0.12 does what v1.0.11 does - take proposed categories plus an independent visual presence check and emit only the ones a model actually saw - with three changes, all of them about being able to tell why a slot came out empty.

What's different

A line format instead of JSON. v1.0.12 parses presence answers as lines: id | present|absent|uncertain | visible evidence. The matching v1.0.12 proposal node asks for exactly that. It's a lower-variance format for a small model to hit than a JSON array, and more importantly it degrades honestly: a line that doesn't match the shape is reported as invalid presence row ignored rather than being coaxed into the plan. Duplicate or missing ids, verdicts that aren't one of the three, empty evidence - all rejected with a named warning.

planner_status, a new optional input. The v1.0.12 planner writes a status line into its inventory text - how many categories, how many model calls, whether a recovery pass ran, any parser warnings. Wire that into this node and it gets prepended to plan_preview, along with this node's own parse warnings. So one string tells you the whole story: which categories were proposed under what conditions, which survived, and which were skipped because the model said uncertain.

The preview keeps both halves. No more reading a clean list and wondering whether a quiet parse failure ate half the slots.

The accept rules are unchanged and worth restating because they're the point of the node: a category survives only on an exact present verdict with non-empty evidence and a unique integer id. uncertain is a skip, and a model that answers twice for the same id voids that category.

The inputs and outputs

  • proposal (DOGMA_PLAN) - from DOGMAProposeCategoriesV112.
  • presence_text (STRING) - the VLM's numbered presence lines.
  • sam_threshold (FLOAT, default 0.4) - the detection threshold applied to every accepted slot.
  • planner_status (STRING, optional) - the planner's own diagnostics, folded into the preview.
  • plan_preview (STRING) - planner status, parse warnings, then category: CONFIRMED / SKIPPED (verdict) - evidence per proposal.
  • category_1 … category_8, sam_prompt_1 … sam_prompt_8, sam_threshold_1 … sam_threshold_8 - eight triples for eight search nodes. Rejected slots carry none and an empty prompt.

Install

Manager → search DOGMA Nodes, or:

cd ComfyUI/custom_nodes
git clone https://github.com/axior/ComfyUI-DOGMA-Nodes

Restart after installing. scipy>=1.10 is the only Python requirement the pack installs; the planner chain above this node needs comfyui_vlm_nodes (for ModernVLM), and the search nodes below it need a ComfyUI with SAM 3. The whole 1.0.12 planning line is opt-in - you load the workflow that uses it, rather than it changing how older graphs behave.

Practical notes

The threshold is per-slot but not per-category. All eight sam_threshold_i outputs carry the same number, so if you want a gentler threshold on your "sky" slot and a stricter one on "people," you're overriding them at the individual search nodes. That's fine, just don't expect the planner to do per-category tuning.

Two ids pointing at one category can't happen here. Deduplication of canonical synonyms (person/people) is done in the proposal node upstream, one category type per slot, up to eight. By the time you get here the slots are unique; the presence check's job is only to throw away the ones that aren't real.

And keep the caveat in view. This is a probabilistic check, and the pack says so in the release notes: missing, uncertain, malformed or duplicate verdicts cannot confirm a category, but a confident wrong present still gets through. The pass you should never skip is the mask audit downstream - DOGMA ReviewBatch v1.0.14 with its reason strings is the version that tells you when a confirmed category produced a bad mask. If a slot is empty and you can see the object, the report tells you whether it was the planner's parser, the presence check or the search budget. Read it top to bottom before you change a widget.

CategoryDOGMA/v1.0.12

Inputs (4)

NameTypeDefaultDescription
proposalDOGMA_PLAN—
presence_textSTRING—
sam_thresholdFLOAT0.400.05–0.9—
planner_statusoptSTRING—

Outputs (25)

NameTypeDescription
plan_previewSTRING—
category_1STRING—
sam_prompt_1STRING—
sam_threshold_1FLOAT—
category_2STRING—
sam_prompt_2STRING—
sam_threshold_2FLOAT—
category_3STRING—
sam_prompt_3STRING—
sam_threshold_3FLOAT—
category_4STRING—
sam_prompt_4STRING—
sam_threshold_4FLOAT—
category_5STRING—
sam_prompt_5STRING—
sam_threshold_5FLOAT—
category_6STRING—
sam_prompt_6STRING—
sam_threshold_6FLOAT—
category_7STRING—
sam_prompt_7STRING—
sam_threshold_7FLOAT—
category_8STRING—
sam_prompt_8STRING—
sam_threshold_8FLOAT—