Nodes/Continuity/Continuity Screen Pass
ComfyUI Node

Continuity Screen Pass

Your AI video's phone screen, but with the real file on it

By roadmaus·Created 3 months ago·Updated 6 days ago· 135
Continuity Screen Pass
  • reel
  • reel
  • debug
◄screens_data—►
◄seed0►
◄report_to►
◄debugfalse►

You probably won't drag this node onto the canvas

ContinuityScreenPass lives in Continuity/internal and is flagged dev-only - the author's way of saying hands off. The pack's render loop writes it into the graph whenever a shot carries a screen, so if you use ComfyUI-Continuity normally it's already in your workflow and you've never seen it. Dev mode makes it appear in the search. Read on anyway: when a screen comes out wrong, this is the node that's wrong.

The trick it implements: video models are bad at screens. Ask H3 for a woman holding a phone with a chat thread on it and you get a plausible rectangle of grey mush - geometry fine, text soup. So Continuity doesn't let the model draw the content. The model gets a flat key-colour placeholder with markers, as just another reference picture, plus a sentence saying "the phone in her hand shows @phone-1". After decode this node finds that placeholder in every frame and warps the real file onto its four corners. Pixel for pixel, so the text stays sharp even on a fast, low-res render - the KB's post-processing rule in a video-shaped hat: the model gives you composition, a deterministic pass gives you the pixels.

How the mechanism works

Two walks over each pass. The first tracks - key the placeholder by colour, take the largest marked connected component, fit four corners, group the frames into shots - so cut decisions and smoothing happen over the whole pass before anything is drawn. Cuts the model invents mid-shot get found, not smoothed across.

The second composites, sixteen frames at a time, writing back through a path that leaves the pass's audio alone. Content is resampled to roughly twice the largest size the screen reaches, never past the tracker's own size, then warped on, matted against the tracker's marker mask, shaded, despilled and grained. Whatever crosses in front of the screen stays in front of it - the matte holds those pixels out.

Failure is loud, not silent: find the placeholder in fewer than half a pass's frames and that screen is left as rendered, with the reason on the face of whichever node report_to points at and in the log. A frame where the screen is lost borrows corners from its neighbours in the same shot. And the pass runs last on the reel - after the family's finishing pass, ReDetail and the DLSS 5 refiner, both of which re-draw frames and would soften text that's meant to be the file's own.

The inputs that matter

  • reel - the finished MMC_REEL, a custom type of the pack's own; nothing outside the pack produces or consumes it.
  • screens_data - {part index: [screen, ...]}, in the author's words "written by the render loop." Not something you type: it carries each screen's device, content file, fit and clip timing.
  • seed - feeds the random bits of the composite so a render reproduces.
  • report_to - the node id warnings are shown on. Point it at the node you're watching, or they land where you never look.
  • debug - off by default. On, it also hands out a second reel: what the pass saw, drawn over the raw render. Output 0 is the replaced reel you save, output 1 the debug view - and with the screen-debug switch on, the render keeps raw and overlay files beside the finished one.

Installing it

ComfyUI Manager, search Continuity, or:

cd ComfyUI/custom_nodes
git clone https://github.com/roadmaus/ComfyUI-Continuity

Restart. Nothing to pip install - the pack declares no dependencies, and the pass is numpy, SciPy and torch, all already in your ComfyUI environment. No weights download either; those are per-family HuggingFace pulls, listed in docs/models.md.

One trap that bites anyone who was early: the pack used to be called ComfyUI-MiniMax-Creator. If you have that folder, don't clone - git pull inside it, because GitHub redirects the old address here:

cd ComfyUI/custom_nodes/ComfyUI-MiniMax-Creator
git pull

Cloning next to it is what breaks. The node ids survived the rename so old workflows keep loading, so two folders register the same ids and you get no node in the search under either name. Delete one and restart.

Where it works, and where it doesn't

Screens ride on reference pictures, so there's only work to do on families that take them: MiniMax H3 for video; Qwen Image Edit, Flux 2 Klein, Qwen Image 2.1 and Krea 2 (with its reference adapter) for stills. Each screen eats a reference slot.

It is not on LTX 2.5, whose references ride as one sheet, and not on a pass that merges several cards. A render with no screens emits no such node at all - that's not a bug, it's the family saying it can't.

When a screen comes out wrong

The placeholder is plain green by default, and the changelog is honest about why: magenta threw a pink cast over the bezel, and white marker grids left slivers wherever H3 drew the markers slightly off. Green's cost is occlusion - with no markers it's followed by its four edges alone - so if something covers most of your screen for a long stretch, switch the pattern on Settings → Rendering → Screens.

If the screen didn't appear at all, read the warning: "found in only N of M frames" means the tracker was too small, too occluded or not visible enough. Framing problem, not a node problem.

CategoryContinuity/internal

Inputs (5)

NameTypeDefaultDescription
reelMMC_REEL—
screens_dataSTRING{part index: [screen, ...]} — written by the render loop.
seedINT00–2147483647—
report_toSTRINGThe node whose face a warning is shown on.
debugBOOLEANfalseAlso hand out what the pass saw, drawn over the raw render, as a second reel.

Outputs (2)

NameTypeDescription
reelMMC_REEL—
debugMMC_REEL—