DOGMA v36 Positive Target Prompt
Stop telling the model what's broken — give it a target instead
- prompt
- info
Here's a nasty habit of diffusion models: if you tell them what's wrong, they'll sometimes helpfully render it. "Fused, malformed wheel spokes" is a description of a defect in your head and a positive prompt in the model's. DOGMALocalPromptV36 exists to make that impossible.
The idea: positive target state
Instead of a defect report, this node wants a description of the correct end state. It expects the VLM to answer in the form STATE: …, strips that prefix, and then builds:
RESTORE EXISTING CARS TO THIS POSITIVE TARGET STATE: <your description>.
Keep exact count, identity, position, scale, orientation, occlusion and true focus.
Preserve supported real wear, dirt, paint, text and logos. Change only the masked target.
That last sentence is doing real work. Restoration isn't the same as regeneration: on a scanned photo or a grubby street scene, the dirt and paint is the subject. A prompt that only says "clean, coherent detail" invites the model to sand off weathering it should have kept.
The safety net is a word list
The node scans the VLM's answer for damage vocabulary - damage, damaged, broken, malformed, fused, destroyed, wrong, missing, bent, tilted - plus the destructive verbs (remove, delete, erase, add, create, invent, replace, rewrite). Find any of those and it refuses to use the sentence at all, returning a bare PRESERVE CARS. instead.
Anything over 150 characters gets truncated. Outputs are prompt and info.
The catch, and it's yours to fix
That filter is only useful if the question you're asking your VLM changes too. If your in-graph VLM node is still instructed to "describe defects in this crop", it will write damaged, fused, wrong - every one of them a tripwire - and v36 will preserve every single crop in your batch. You'll get a fast run and a completely unedited image.
So the pair to actually wire is: a VLM instruction that asks "describe what this region should look like when correct, in one short sentence starting STATE:", feeding this node. That's a different mental model from the usual captioning job, and it's the reason this node isn't just "v34 with different words".
category is a STRING you wire from the planner as usual. prompt goes to the local pass's text encode; info tells you which branch fired.
What to pair it with
DOGMALocalSafetyGateV36 - same version number, same philosophy. The prompt node refuses to phrase a defect; the gate refuses to let a wildly-changed crop survive. Together they cap how much a local pass can rewrite, which is exactly the failure mode the detailing literature names as the one that makes detailers worse: not a failed edit, a confident one that changed the thing you liked.
Install
ComfyUI Manager → search DOGMA Nodes, or:
cd ComfyUI/custom_nodes
git clone https://github.com/axior/ComfyUI-DOGMA-Nodes
Restart ComfyUI. Nothing to pip install and nothing to download for the node itself. The workflow still needs a FLUX.2 Klein checkpoint and a vision-language model to do the actual work - the pack is pure glue over ComfyUI's sampler and model-management APIs.
Where it bites
The 150-character limit means you want one short clause from the VLM, not a paragraph describing a clean car. Long answers get cut mid-sentence, and a half-sentence target state is worse than a short one.
Second, this node rewrites what the model is told, not how strongly it's applied. If your local pass is running at 0.5 denoise, a beautiful positive target state will still be interpreted loosely. Keep the denoise in the 0.3–0.4 band that inpainting conventionally wants and let the prompt do its work.
Third, the preserve prefix is a contract. The gates downstream (DOGMALocalResultGateV34, DOGMALocalResultGateV35) switch the crop back to the original the moment the prompt starts with PRESERVE . If you sandwich this node between two text nodes of your own, that contract silently stops working.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| category | STRING | — | |
| vlm_instruction | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| info | STRING | — |