DOGMA ImageAfterAudit v56.7
A node that does nothing, and why you need it
- image
- IMAGE
Its entire implementation is a return. It takes an image and an audit report and returns the image unchanged. It is also the node that decides whether your audit actually happens before your sampler, so don't delete it because it looks decorative.
What it's for
ComfyUI doesn't run a graph left to right. It works backwards from the output nodes and executes only what's needed, which means anything you compute but don't wire into a downstream consumer simply doesn't run. Plenty of people have built a nice VLM check step, forgotten to connect its output to anything, and then wondered why the "verification" never appeared in the logs.
Here, that hazard is specific. In the v56.7 pipeline, the image you want to restore doesn't depend on the audit at all - it's the same pixels either way. So there's nothing forcing the audit to complete before the diffusion pass starts. You end up with a graph where the SAM search, the audit sheets and the VLM verdicts all run later than they logically should, or worse, in parallel with a render that was supposed to be conditioned on their outcome.
DOGMAImageAfterAuditV567 is the fix: a deliberate dependency edge. It consumes audit_report, and it returns the image. Wire the audit chain's report into it, wire the image through it, and the engine now has to finish the audit before that image goes anywhere. Pure plumbing, zero pixels touched - the same trick as a reroute, except it exists to order execution rather than to make the canvas tidy.
How it works
There is genuinely nothing to it:
def wait(self, image, audit_report):
return (image,)
Both inputs are forceInput - you cannot type them into a widget, which is another way of saying the node is meaningless without being wired. There are no parameters, no options, no hidden behaviour. If you were hoping for a fallback "skip the diffusion if the audit failed" semantic, that lives in DOGMALazyImageV567 and DOGMAMaskAuditGateV566 instead. This node orders, it doesn't decide.
Inputs and outputs
- image - the source (or the crop set) that will flow into the restoration path.
- audit_report - any STRING that represents "the audit ran":
DOGMAFinalMasksV567's report, the search report, a stitchinfostring. Whatever you use, it must be the report whose production you're trying to force. - IMAGE out - the same image, unchanged, now downstream of the audit.
The subtle part is choosing the report. Wire it to something that itself depends on the VLM verdicts - the report from DOGMAFinalMasksV567 or from DOGMAInstanceReviewV567 - and you serialise the expensive part. Wire it to a report that's produced early in the chain (a search report, say) and you've ordered less than you think you have. The safest wiring is the report chain, so each stage's report feeds the next dependency in order.
Install
comfy node install comfyui-dogma-nodes
# or
cd ComfyUI/custom_nodes
git clone https://github.com/axior/ComfyUI-DOGMA-Nodes
pip install -r ComfyUI-DOGMA-Nodes/requirements.txt
The README's install note is the one that matters here: update through Manager (or the comfy node install line), restart ComfyUI, then load a current workflow. These version-stamped node IDs float side by side - DOGMA keeps old IDs alive so old graphs keep working - so if you're adapting an older DOGMA graph, adding this node by hand is on you. No models involved.
Gotchas
Don't bypass it to "save a node". If you delete it and route the image straight through, nothing errors and the graph looks identical; you just don't get whatever ordering guarantee you were relying on. The symptom is nondeterministic-looking behaviour - an audit appearing after a render, or a run where the diffusion pass starts before the verdicts are in.
It won't force a lazy branch to run. A lazy input that nothing requests stays unrequested; this node forces ordering among things that are being computed. If you also need the audit node to execute rather than be skipped, that's DOGMAAuditTextV567's or DOGMALazyImageV567's job.
Watch your list shapes. This node is not list-aware (INPUT_IS_LIST isn't set), so it wants a single IMAGE and a single STRING. In a per-category list flow, you either keep one of these per slot or accept the batch semantics and pass a single representative image through. It's the one node in the v56.7 set you may end up duplicating five times in a graph - which looks silly and is fine.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| audit_report | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |