Video Frame Deleter
Your AI video has five nightmare frames — cut them without leaving ComfyUI
- images
- IMAGE
Video models are genuinely good these days - right up until frame 84 of 121, where the subject's face melts into a Picasso and stays that way for four frames. Re-rolling the whole generation to fix four bad frames is a waste of GPU. Hauling the clip into a separate video editor and back is a workflow smell. FrameDeleter (shown in the node list as "Video Frame Deleter") is the middle path: a node that pauses your queue, shows you every frame, lets you mark the ones that ruin the clip, and hands the cleaned batch to whatever comes next.
It sits in the Video Processing category, in the same spot you'd expect a trim tool. Wire it between your video loader and whatever consumes the frames, run the queue, and the node takes over the screen.
How it works
The clever part is that this isn't a filter that runs and forgets - it's a pause point. When execution reaches it, the backend saves each frame as a temporary JPEG (fd_*.jpg in ComfyUI's temp directory), streams the filenames to the frontend over the WebSocket, and then blocks on a threading event while the JS renders a full scrubber UI right on the node. Scrub, step with Prev/Next, mark frames with ❌ Drop Frame (red ticks on the track show where your cuts land). When you hit 🚀 Confirm Cuts & Resume, the frontend POSTs the dropped frame indices to /frame_deleter/confirm, the backend wakes up, and returns images[to_keep].
That last part is worth spelling out: the output is the original tensor batch, sliced - not the compressed JPEGs. Those temp files exist purely so you can look at the frames; quality 85 JPEG previews never touch your final video.
Three details the source gets right:
- Non-destructive. Nothing is committed until you confirm. Cancel the queue mid-review and the original batch passes through untouched.
- Preview mode is frontend-only. The "Preview Cut Result" toggle remaps the scrubber onto just the surviving frames, so you can play the output as it'll actually look - no extra data round-trips to the backend.
- It always re-runs.
IS_CHANGEDreturnsNaN, the same "always-rerun" trick described in the node-plumbing docs, so ComfyUI can never serve you a cached batch and silently skip your interaction.
Temp files are cleaned up on a background thread (with retries for Windows file locks), and any stale fd_*.jpg from a crashed session gets swept at startup.
The one input and one output
There's exactly one of each, which makes this blessedly simple:
- images (IMAGE) - feed it the decoded frames from a video loader, like the
IMAGEoutput of a Load Video or VHS-style loader. - IMAGE output - wire it into a Video Combine / save node, or straight into a preview.
The catch, if there is one: it works on images, not latents. In a native latent-space video workflow you'll need a VAE decode before it and an encode after - two extra nodes, no way around it.
Installing it
ComfyUI Manager: search "FrameDeleter". Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/aw-leigh/comfyui-frame-deleter
Then restart ComfyUI. There's no requirements.txt, no model downloads, no torch sub-dependencies - it's numpy, Pillow, and aiohttp, all of which ship with a standard ComfyUI install. (One note: the README's own clone URL says aw-leigh/frame-deleter - a stale repo name. The live one is the URL above.)
Where people get burned
- Dropping every frame - say, by selecting all and confirming - raises a clear error rather than silently passing the full batch through. Re-run and keep at least one frame.
- It pauses your queue, on purpose. Don't fire off a long batch and walk away expecting it to finish; the run stops dead at this node until you confirm.
- Heavy cuts look janky. Carving out a big chunk makes a visible jump in motion; if you drop a run of frames, follow with a frame-interpolation pass to smooth the transition. Light single-frame trims are fine on their own.
If you generate video locally, this is one of those tiny zero-dependency nodes you'll be glad exists the first time a render comes back 90% great. It won't fix the whole clip - but it costs nothing to keep installed for the day one of your renders inevitably melts.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |