Nodes/On-Set Studio/On-Set Studio -- Plate Cache
ComfyUI Node

On-Set Studio -- Plate Cache

Bake a clip into something your 3D shot can stand in front of

By IsItDanOrAi·Created 2 months ago·Updated 21 days ago· 2
On-Set Studio -- Plate Cache
  • images
  • plate_name
  • frame_count
  • fps
◄width0►
◄height0►
◄name►
◄fitfill (crop)►
◄anchorcenter►
◄every_nth_frame1►
◄overwritefalse►
◄video_path►

Weird node, clear job

This is the only node in the pack that runs before the editor rather than after it, and the only one that wants nothing wired to its outputs. Its job is to turn footage - a video file, an IMAGE batch, or a folder of stills - into a plate: a numbered sequence of PNGs on disk that On-Set Studio can drop into a 3D scene as a photographic backdrop.

Two reasons you'd want one. Camera match: you have real footage of a real location and want a staged character standing in it convincingly. The editor's vanishing-point tools put your virtual camera at the height and lens the plate implies, so the character lands on the ground at a plausible depth instead of floating in front of wallpaper. Cheating 3D with 2D: not every element of a set needs geometry. A plate is mechanically a plane carrying a photograph - an ordinary environment object with a different material.

The pay-off runs both ways: On-Set's beauty render and depth passes come out of the same camera as your plate, so real footage and synthetic control maps register with each other.

How it works

Run it once; the editor picks up the result.

ComfyUI/output/on_set_studio/plate_cache/<slug>/
    frame_00001.png
    frame_00002.png
    ...
    manifest.json

The manifest records name, slug, source, frame count, fps, output size, aspect and the fit/anchor settings. The editor reads it over the pack's own routes and lists it under Browse baked clips… in the inspector of a selected plate object.

Two behaviours to know. It won't re-bake what's already there - rerun and it hands back the existing manifest with a printed note and no work done, so tick overwrite when the source actually changed. And plates live under ComfyUI/output/on_set_studio/, which survives reinstalling custom_nodes/.

OUTPUT_NODE is True here, so it executes even with nothing plugged in downstream - the same always-runs property as Save Image, and in this case the point of the node.

Inputs that matter

Where frames come from. Either an images batch or a video_path string, which accepts a video file or a folder of stills. If both are present, images wins.

name becomes the folder slug, and the name you pick in the editor. Leave it empty and a video path donates its filename, otherwise you get a timestamp.

width / height: the good trick is to set one and leave the other at 0, which derives the missing side and can't distort anything. Leave both 0 and you keep the source size.

fit and anchor are only consulted when both dimensions are set and the requested shape differs from the source, so usually you ignore them. When you can't: fill (crop) is the default and normally right, because reframing a plate is a decision a director makes on purpose, and anchor (center, top, bottom, left, right) says which edge survives the crop. fit (pad) keeps the whole frame and gives you bars - RGBA sources pad with real transparency. stretch is for squeezing anamorphic footage back into shape; the node warns when you use it, because otherwise the result is visibly distorted and nothing downstream fixes it.

every_nth_frame thins a long clip. It also divides the stored fps, so the plate plays at the right speed - deliberate, but it means thinning 24fps footage 2× gives you 12fps, not slow motion.

Outputs

Three: plate_name (the slug), frame_count and fps. They exist so a graph can log or act on what it just baked; plate_name is the same string you'll see in the editor's list. This is one of the few nodes where leaving every output dangling is correct.

Installing it

It ships in IsItDanOrAi/ComfyUI-On-Set-Studio, so the install is the pack: ComfyUI Manager → search On-Set Studio, or

cd ComfyUI/custom_nodes
git clone https://github.com/IsItDanOrAi/ComfyUI-On-Set-Studio

then restart. Note what it deliberately doesn't install: video decoding is not a pack dependency. It tries OpenCV first, then imageio with PyAV, both imported lazily at the moment you bake a video_path. A folder of stills or an IMAGE batch needs neither, which is the flake-free path if you'd rather not touch pip. You still need a Mixamo FBX character for the rest of the pack - see the main On-Set Studio article for that and the greyed-out-Scene-tab gotcha.

When it goes wrong

"Could not decode the video. Tried: ..." Neither decoder is available, and the message names both attempts on purpose rather than blaming whichever ran last. Fix:

pip install opencv-python
# or
pip install "imageio[pyav]"

with ComfyUI's own Python. Or route frames in through images and skip decoders entirely.

The plate you rebuilt is still the old one. You didn't tick overwrite. The console says so; it just doesn't shout.

Nothing shows in the editor's baked-clips list. Check you're in the inspector for a selected plate object - the list lives on a plate, not in a global menu - and remember only one plate owns the shot at a time. If another plate claims it, press Enter Plate Mode on the one you want.

"Baked 0 frames -- check the source." An empty IMAGE batch, or a folder with no images it recognises.

One last practical note: these are PNGs and they add up. There's a delete in the editor's plate list - use it, or you'll hoard every test bake forever.

CategoryOn-Set Studio

Inputs (9)

NameTypeDefaultDescription
widthINT00–8192—
heightINT00–8192—
nameSTRING—
fitCOMBOfill (crop)3 options: fill (crop), fit (pad), stretch
anchorCOMBOcenter5 options: center, top, bottom, left, right
every_nth_frameINT11–60—
overwriteBOOLEANfalse—
imagesoptIMAGE—
video_pathoptSTRING—

Outputs (3)

NameTypeDescription
plate_nameSTRING—
frame_countINT—
fpsFLOAT—