Nodes/comfyui-obvpm/Required Model (obvpm)
ComfyUI Node

Required Model (obvpm)

The node that refuses to queue instead of failing quietly

By chanon·Created about a month ago·Updated a day ago· 42
Required Model (obvpm)
  • input
  • model

ComfyUI's failure modes come in two flavours, and the worse one is the delayed error. You queue, wait ninety seconds, and then get a message from a node forty links downstream that a MODEL was None, or (equally annoying) no message at all and a workflow that runs to completion having generated nothing. Model loaders are the most common source, because a checkpoint you forgot to wire up is invisible on a canvas that's already busy.

Required Model (obvpm) is the smallest node in the pack, and it exists purely to move that error earlier. It takes a MODEL and passes it through. The input is required, so the graph refuses to queue with nothing connected - the error lands on this node, at the top of the graph, where you can see the empty socket.

Inputs and output

  • input - required MODEL. The model to pass through.
  • model - the model passed through.

That's it. No settings, no boolean, no outputs to think about. If you've been around other gate nodes you're looking for the on_empty toggle - there isn't one, because the whole design is that an empty input is a queue-time error rather than something to route around.

It's the deliberate counterpart to the pack's Optional family (Optional Image / Audio / Latent / Any), which all take an optional input and offer a mute-or-bypass decision for missing values. This one is the "no, really, this must exist" version.

Where it belongs

At the head of the model chain. Checkpoint Loader → Required Model → everything else. Now the checkpoint is a named, visible step instead of a wire you can miss.

On the join between two pipelines. The Lazy Switch family and the optional gates can route None around a graph quite happily. If the thing arriving downstream is supposed to be a real model, put this node on the wire and let it be strict: values that should never be absent become loud failures at a place you can reason about.

As documentation. Two of these on a graph say "these two inputs are mandatory" faster and more honestly than a group title does. When a fan of optional branches feeds one consumer, this node is the line between "might not be there" and "must be".

There's one behavioural subtlety from the source: if the node is handed a None at runtime, it returns an ExecutionBlocker, which skips everything downstream silently rather than raising a stack trace mid-run. So the "loud" part is the queue-time check on the missing socket; the runtime path stays consistent with the rest of the pack's gating behaviour.

Install

ComfyUI Manager → search comfyui-obvpm, or:

cd ComfyUI/custom_nodes
git clone https://github.com/chanon/comfyui-obvpm

Restart ComfyUI. It appears under obvpm/gates; a node-menu search for obvpm lists the whole pack, which is quicker than remembering the category. No Python dependencies, nothing to download - the pack declares none on purpose. All class ids picked up the (obvpm) suffix in 0.2.0 after a collision with another pack's Bundle node, and pre-0.2.0 workflows migrate automatically when opened.

Is it worth a node?

Honestly? For a two-node test workflow, this is overkill - you'd see the empty socket. It earns its place in the graphs people actually run: big reference-image pipelines, LoRA stacks, video workflows with three model loaders, or anything assembled from someone else's template where you can't see the far end of the wire. A model that fails to load is one of the most expensive classes of mistake in terms of wall-clock time, and this is a two-second node that makes it a two-second mistake instead.

Categoryobvpm/gates

Inputs (1)

NameTypeDefaultDescription
inputMODELThe model to pass through.

Outputs (1)

NameTypeDescription
modelMODELThe model passed through.