Nodes/Trent Nodes/Control Overlay Rodeo
ComfyUI Node

Control Overlay Rodeo

Check your depth, canny and pose maps before you queue the sampler

By TrentHunter82·Created 11 months ago·Updated a day ago· 42
Control Overlay Rodeo
  • images
  • depth
  • hed
  • canny
  • pose
  • images
◄fps24.000►
◄max_preview_size1024►
◄layer_settings{"original": {"on": true, "opacity": 1.0, "blend": "normal"}, "depth": {"on": false, "opacity": 1.0, "blend": "normal"}, "hed": {"on": true, "opacity": 1.0, "blend": "screen"}, "canny": {"on": true, "opacity": 1.0, "blend": "screen"}, "pose": {"on": true, "opacity": 1.0, "blend": "screen"}}►

ControlNet work has a boring failure mode that eats hours. You run a preprocessor over a 121-frame clip, wire it into the sampler, wait ten minutes, and then find out the depth pass lost the subject around frame 63. Control Overlay Rodeo (it's under Trent/Video) is a player that sits inside your graph so you can eyeball that stack first.

What you actually get

The node takes your source batch plus up to four control-map batches - depth, hed, canny, pose - and plays them back composited in the node's own canvas. Toggles, opacity sliders and blend-mode dropdowns sit in the node face, along with Play/±1, a scrubber, a loop checkbox and an Expand button that goes full-screen (Space, arrows, Esc). It's all browser-side, so toggling a layer is instant.

That's the pitch, and it's a good one. Preprocessors are the least-validated part of the conditioning chain: everyone treats canny, depth and pose as solved plumbing, then wonders why an arm melted. Normally you rewire and re-queue to compare them.

How it works

Two halves, and knowing which half you're looking at saves confusion.

The Python side resizes every frame of every connected layer down to max_preview_size on the long edge and writes it to your temp folder as a JPEG (temp/control_overlay_rodeo/<id>/<layer>_00000.jpg). The JS extension loads those into memory and composites the enabled layers on a canvas each animation frame. Then the node returns the real mix as an IMAGE batch, computed in torch at source resolution with the same layer order and blend math.

So the preview is downscaled JPEGs while the output is a full-res tensor, calculated twice from the same settings. That's why layer changes show in the canvas instantly but only land in images on the next queue - and since it's an output node it always re-runs, so one queue is enough.

Two things about the mix itself. Layer order is fixed: original first, then depth, hed, canny, pose, connected ones only. Frame count comes from the longest input and any shorter layer holds its last frame, so a single still pairs fine with a 121-frame pose batch. Everything is upscaled bilinearly to the images resolution, and alpha is dropped - an RGBA output only contributes three channels.

Inputs and outputs that matter

  • images - required. The source batch; it sets output resolution and the frame-count baseline.
  • fps - preview playback only, 1–120, default 24. Nothing downstream reads it.
  • max_preview_size - default 1024 on the long side. Lower writes and loads faster; 0 means full resolution. Output is full res either way.
  • Optional: depth, hed (soft edge / lineart), canny, pose (any rendered pose map - DWPose, OpenPose).
  • layer_settings - a hidden JSON string widget written by the in-node controls, and saved with the workflow (which is why an old graph can reload with layer states you don't remember).
  • Output: images, one IMAGE batch.

Defaults: original on with normal blend, hed/canny/pose on with screen - screen drops their black backgrounds out so edges stack over the picture. depth ships off, on normal, and that's on purpose: enable it as-is and an opaque grayscale map covers everything. Move depth to screen/lighten or pull its opacity down.

One trick: a single layer on at opacity 1.0 with normal blend outputs that layer upscaled to source resolution, which makes the node a pass-through repackager for a depth pass.

Installing it

Via ComfyUI Manager, search "Trent Nodes" and install. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/TrentHunter82/TrentNodes.git
cd TrentNodes
pip install -r requirements.txt

Then restart ComfyUI. The pack's requirements.txt is long - transformers, psd-tools, timm, omegaconf, opencv, transnetv2-pytorch, the VLM SDKs - because other nodes need them. This one imports only torch, PIL and ComfyUI's own comfy.utils/folder_paths, so if pip is fighting you over an unrelated package, this node isn't the reason.

Where it goes wrong

The manager install has history. The author's own r/comfyui post from February 2026: the repo was renamed on day one, both names landed in the registry, and Manager flagged it unsafe. He says it's fixed, but if Manager refuses or installs nothing, that's the known cause - clone by hand. (The registry has no review or signature model, so "unsafe" flags are heuristic noise, not an audit.)

No player, just a box? The UI is a JS extension. Restart after installing and hard-refresh the tab before assuming it's broken.

Temp files pile up, and the output lags. Nothing deletes those JPEG directories - a 200-frame batch with four control layers is 1,000 files under ComfyUI/temp/. Drop max_preview_size to 512–768 if you run this constantly (it only affects written previews) and clear old control_overlay_rodeo/ folders occasionally. And whatever images feeds gets the state from the next queue, not the layer you just toggled.

CategoryTrent/Video

Inputs (8)

NameTypeDefaultDescription
imagesIMAGESource image or frame batch (the Original layer)
fpsFLOAT24.0001–120Playback rate for the preview
max_preview_sizeINT10240–8192Longest side of the preview frames (0 = full resolution). Lower is faster to write and load. The output is always full resolution.
layer_settingsSTRING{"original": {"on": true, "opacity": 1.0, "blend": "normal"}, "depth": {"on": false, "opacity": 1.0, "blend": "normal"}, "hed": {"on": true, "opacity": 1.0, "blend": "screen"}, "canny": {"on": true, "opacity": 1.0, "blend": "screen"}, "pose": {"on": true, "opacity": 1.0, "blend": "screen"}}Layer toggles, opacity and blend, set by the in-node controls
depthoptIMAGEDepth map batch
hedoptIMAGEHED / soft edge / lineart batch
cannyoptIMAGECanny edge batch
poseoptIMAGERendered pose batch (DWPose, OpenPose, ...)

Outputs (1)

NameTypeDescription
imagesIMAGE—