Required Model (obvpm)
The name says optional, the input isn't
- input
- model
The class is called ModelOptionalGate, and its display name is "Required Model". Neither is wrong - it's the optional-gate family's black sheep, and the point of it is the opposite of the others.
It does one thing: pass a MODEL through. input is a required input, so a queue attempt with nothing connected is refused before the run starts. That's the whole feature.
Why a passthrough is worth a node
Because "where did the model go" is a genuinely annoying class of debugging in a large graph. The usual failure is a chain of nodes that each tolerate an optional model, so a missing loader doesn't error where the mistake is - it errors somewhere downstream, or worse, doesn't error at all and the run produces something subtly untrained. Pushing the requirement up front turns a mystery into a red box on a node with "Model" written on it.
The second use is legibility. A named junction on a model wire gives a graph a landmark: everything that takes the model can be described as "after the model gate," and you can collapse or nest around that. For a pack whose whole pitch is keeping workflows tidy, this is the plumbing equivalent of a labelled shelf.
Inputs and outputs
Minimal by design. input (required, MODEL) in; model (MODEL) out. There's no on_empty, no present output, no options at all - unlike its siblings, which all take an on_empty toggle because they exist to handle absence gracefully. This one exists to refuse it.
The source is four lines. If the input somehow arrives as None anyway, it returns an ExecutionBlocker, so the failure is a clean stop rather than a None handed downstream - but in normal use validation gets there first, and that's the behaviour you'll see: ComfyUI won't let you queue.
Where it fits with the rest of the family
- Use Required Model when the model must exist and you want to know immediately if it doesn't.
- Use Optional Any or one of the typed gates when the branch is genuinely conditional - the reference you sometimes load, the audio track you sometimes generate, the second pass you sometimes run.
- Use a Lazy Switch when the choice between two models should also decide which sampling work happens, since only the selected branch executes.
The one thing to be careful about: don't reach for this hoping to conditionally skip a model. It can't skip anything. It's a clamp on a required dependency, and it does that one job without ceremony, which is exactly what you want from a node you'll forget is in the graph six months from now.
Install
Manager, search comfyui-obvpm, or:
cd ComfyUI/custom_nodes
git clone https://github.com/chanon/comfyui-obvpm
Restart ComfyUI afterwards. No Python dependencies - the pack's pyproject.toml declares none on purpose, because everything it imports is already in ComfyUI's own requirements - and no models to download. Every node in the pack is suffixed (obvpm) in the menu, so obvpm in the node search lists all of them.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| input | MODEL | The model to pass through. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | The model passed through. |