R45 Final Master / Optional Editor Gate
The one node that decides whether your H3 editor pass ever runs
- cine_linx
- video_path
- editor_enabled
- report
There's a specific kind of ComfyUI annoyance that this node solves, and it isn't a rendering problem. It's that adding an optional finishing branch to a big workflow usually means paying for it on every run - the editor decodes the master, you wait, you export, and it produces a file you didn't want because you were happy with the direct master.
R45 Final Master / Optional Editor Gate is a lazy switch with three outputs and no visible settings. Its entire job is: return the path you actually want, and make sure the branch you don't want is never evaluated.
What it is
One required input, cine_linx. Two optional STRING inputs, direct_video_path and editor_video_path - both lazy, both meant to be wired rather than typed. Three outputs: video_path (STRING, the winner), editor_enabled (BOOLEAN, what it decided), and report (STRING, a one-line explanation of the route).
It's a terminal output node, so it runs and it prints that report into the node's UI text. On a workflow this size, that report is the cheapest debugging tool in the graph: it tells you which route was taken and whether a master path exists yet, without you clicking through six panels.
How it works
The gate reads a named setting, h3_editor_enabled, out of the bus - walking the nested settings/resources/payload dicts rather than requiring the value at a fixed address, because Settings PRO configurations differ by version. It's append-only and defaults to off in R45. Then it looks at the shotplan's task mode and picks.
Two details that make it work:
Lazy inputs. check_lazy_status requests exactly one of the two paths, the one matching the decision. The other branch's nodes are never evaluated. That's how the Video Editor and its lazy exporter become genuinely optional rather than merely unused - the graph doesn't decode, doesn't render, doesn't touch ffmpeg.
No caching. The node's IS_CHANGED returns float("nan"), which in ComfyUI means "never equal to anything, even myself" - so the gate re-runs every queue pass. All the plumbing you need to know about ComfyUI's execution model sits in that one trick: True == True, so returning "I changed" is useless; NaN is the idiom that actually forces execution. If a gate like this got cached, your first-pass decision would freeze and you'd be stuck on whichever route you ran at 3am.
The doc that ships with R45 is explicit about the ordering, and it matters: with the editor off, H3 generates every chunk the mode requires, the normal delivery/checkpoint chain assembles the final programme, and the gate requests the direct master. With the editor on, the same normal assembly still happens first, and only then does the gate request the editor branch. Editing is downstream of delivery, not a replacement for it. No chunk joins, seams or audio stitching change either way.
If the shotplan's task mode is the reference-image one, the gate returns an empty path with editor_enabled = False and a report saying the video delivery is idle. Nothing to deliver, nothing to gate.
What you actually configure
Nothing on this node. The switch lives in the H3 Settings PRO surface, as h3_editor_enabled. That's the design: the decision travels with the project, not with a widget you might forget to flip back.
The other thing you configure is downstream - your Video Editor branch stays wired to editor_video_path, and your direct master stays wired to direct_video_path. Keep both links in place permanently. If you unplug the editor branch to "disable" it, you've solved the performance problem by deleting a feature.
Install
Part of IAMCCS-nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
Restart, hard-refresh. Or ComfyUI Manager → IAMCCS Nodes. Exactly one copy in custom_nodes - the README warns duplicates cause stale node definitions and frontend routes, which on a gate node shows up as routes resolving oddly.
No requirements.txt in the repo. You need ComfyUI 3.0.0+ and your own H3 models; the pack ships no weights. The editor branch it gates has its own dependencies if you use it (ffmpeg for export, plus whatever your editor manifest media needs).
Common issues
Editor output never appears even though it's enabled. Check editor_enabled in the report first. If it's False, the setting didn't make it into the bus - usually because Settings PRO upstream is a different instance from the one feeding this gate, or the workflow is a pre-R45 topology where the flag doesn't exist. The node's own comment is that missing means legacy, and legacy means off.
Direct master comes out instead of the edit. Same cause from the other direction: this gate doesn't infer intent, it reads a flag. A topology copied from an R44 graph will happily keep producing direct masters forever.
video_path is empty. The report says "waiting", which means the branch was requested but hasn't produced a path. In a queued multi-chunk run that's normal on early passes; it's only a problem if it's still empty on the final pass.
A slow graph that shouldn't be slow. If you've replaced this gate with a plain passthrough, or wired both paths as normal inputs, you're back to evaluating both branches. Lazy won't save you from a non-lazy node.
Where it fits
This is a delivery-tail node. Shotboard → Settings PRO → H3 branch → delivery/checkpoint chain → this gate → either the direct master path or the Video Editor → R45 Video Editor Exporter · Lazy for the actual file. The R45 Universal workflow is built around it, and it's the least glamorous node in that workflow by a wide margin, which is usually a sign it's doing the important work.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| cine_linx | IAMCCS_SUPERNODE_LINX | — | |
| direct_video_pathopt | STRING | — | |
| editor_video_pathopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video_path | STRING | — |
| editor_enabled | BOOLEAN | — |
| report | STRING | — |