DiffusionGemma Branch Generation Gate
Same validation as the Generation Gate, but it only shoots its own branch
- prompt
- status
- ready
When you're comparing two models side by side - LTX versus H3, or two takes of the same prompt - the last thing you want is one branch's failed validation killing the other branch's render. The plain DiffusionGemma Generation Gate raises an error that aborts the whole queue. DiffusionGemma Branch Generation Gate runs the identical validation logic but packages the failure differently: it blocks only the branch it sits on and lets independent ready branches keep going.
This is the comparison-workflow version of the Director fail-safe. Same Director pipeline (Context Hub → Target Profile → CoT Generator → JSON Splitter), same gates, but here the final check is polite enough to be diagnosable instead of fatal.
How it works
The gate deep-copies the Generation Gate's inputs, so the surface is familiar: prompt, ready_for_generation, metadata_json, and validation_policy (strict / warn_and_continue, where the warn policy only ever waives MiniMax-H3-validator nits, never Grounding Guard or non-H3 failures). The difference is in what comes out:
prompt- the validated text, or anExecutionBlocker(None)when validation failed. Only nodes consuming this socket are prevented from running; anExecutionBlockerdoesn't error the queue.status- a string explaining the outcome. On a block it spells out the failure and, usefully, reminds you that an unchanged blocked branch needs onerefreshon its CoT Generator to retry. When everything's fine: "DiffusionGemma branch is ready for generation."ready- a boolean you can use to drive other logic.
The README's wiring rule is worth taking literally: connect only the gate's prompt output to that branch's sampler, and connect status to a Preview Any (or Show Text) node so a silently blocked branch stays visible. If you wire the wrong branch's output, or route around the blocker, you've quietly undone the fail-closed design.
Why not just use the Generation Gate twice?
Because both would raise on the first bad branch and cancel your shared queue. The branch gate exists precisely so a comparison graph can produce partial results: one branch renders, the other shows you exactly why it didn't, and you fix one thing instead of replaying everything. It's the same reasoning as the "compare by running branches in parallel, not by editing one graph" workflow style people use for A/B model tests.
Where its isolation ends
Read the README's caveat closely: this gate isolates packet-validation failures only. An uncaught sampler, CUDA, or out-of-memory error downstream can still abort a shared queue, because that's the execution engine, not the gate. If you genuinely need one branch's OOM to not take down the other, queue LTX and H3 as separate Run Branch jobs instead of relying on this node.
Installing it
Part of the exportAnything/ComfyUI-DiffusionGemmaPromptBuilder pack - install once, get all 55 nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/exportAnything/ComfyUI-DiffusionGemmaPromptBuilder
or find DiffusionGemma Prompt Builder in ComfyUI Manager and restart. Realistically, if you're here you've already got the CoT Generator, the model, and the JSON Splitter running - this node adds no model or VRAM cost of its own. It's pure validation logic on top of data the pipeline already produced.
Common issues
- The queue reports success but no media came out of one branch. That's the
ExecutionBlockerworking as intended. Look at the branch'sstatustext - it will say the branch produced no output and explain the fix (usually: selectrefreshonce on that branch's CoT Generator, queue, then return it toreuse). - You see a stale-looking prompt on the blocked branch. The JSON Splitter exposes
candidate_ltx_prompt/candidate_negative_promptdiagnostics that update even when validation blocks - those are for Preview Any inspection and must never be wired into a generator. Route previews through the branch gate's status or those candidate sockets, never a raw generator input. - If a whole side-by-side is silently failing, check that you haven't connected the branch gate's output to the wrong model's sampler - that mistake defeats the entire purpose.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| ready_for_generation | BOOLEAN | false | — |
| metadata_jsonopt | STRING | — | |
| validation_policyopt | COMBO | strict | Strict blocks every validator failure. Warn and continue permits a non-empty MiniMax-H3 candidate when every remaining failure comes from the MiniMax-H3 validator; Grounding Guard and non-H3 failures always remain blocking. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| status | STRING | — |
| ready | BOOLEAN | — |