CoachBate Upscale and Frame Interpolator TensorRT
The 'RIFE' node that quietly dropped RIFE for FILM
- images
- audio
- interpolation_states
- filenames
- output_fps
This is the node you wire at the end of a video workflow when "save it bigger and smoother" needs to be one step, not three. Feed it your decoded frames plus an AUDIO stream, and it TensorRT-upscales every frame, interpolates up to a higher frame rate with Google's FILM, muxes the audio, and writes a finished H.264/H.265 MP4. The kicker: it never holds the whole video in VRAM or RAM at once, so a long 720p→4K job won't quietly kill your machine on the last chunk.
It comes out of CoachBate/ComfyUI-CoachBate, an alpha-stage quality-of-life pack built for CoachBate's own shot-by-shot LTX-2.3 production. "For my own production" is doing real work here: it collapsed his upscale → interpolate → Video Combine chain into one button. It's opinionated, it's young, and it assumes you already have the TensorRT machinery running.
The name is a lie (mostly)
Class name says Rife. The README, the node title, and the code all say FILM. What happened: this node started life driving yuvraj108c's RIFE-TensorRT interpolation, and somewhere along the way CoachBate swapped it for ComfyUI's native frame-interpolation nodes - FrameInterpolate from comfy_extras.nodes_frame_interpolation, using film_net checkpoints. The old RIFE controls are still in the schema for backward compatibility with saved workflows, but the code deletes them on execution and never loads a RIFE nodepack. No RIFE pack required. If you see stale rife_* widgets you can't find on the node face - that's why; they're serialized but hidden.
So the real pipeline is: upscale each frame chunk with UpscalerTensorrt (from ComfyUI-Upscaler-Tensorrt), then interpolate between adjacent upscaled frames with FILM, then stream each completed frame straight to FFmpeg. Only two upscaled frames plus their generated middle frames exist in memory at a time. The node auto-sizes passes from your actual RAM - it reserves at least 8 GiB for the system, runs the whole video in one pass when it safely can, and overlaps passes by a frame so every source pair gets interpolated exactly once.
The inputs that actually matter
imagesandaudioare both required. Audio is the one that trips people up - wire in aLoad Audioor whatever AUDIO your pipeline produced, or the node won't run. It replaces a separate Video Combine step, so delete that if you had one downstream.upscale_model- whatever TensorRT upscale engine you have, e.g.4x_foolhardy_Remacri_ExtraSmoother. It's downloaded/built lazily on first execution, which is why your first run takes forever and later ones don't.rife_multiplier(default 2) - despite the name, this is your FILM multiplier: output intervals per source interval. Set it to 1 to skip interpolation entirely and just get upscaled frames at source FPS. Bonus: at 1, the FILM checkpoint isn't even loaded.resize_to-none/FHD/2k/4k, orcustomto revealresize_width/resize_height.source_fps,playback_mode-preserve durationraises the output FPS to match the extra frames;slow motionkeeps source FPS and just stretches playback.codec,pixel_format,crf- H.265 is the default; 10-bityuv420p10leis the default pixel format (8-bityuv420pis the broadly-compatible choice); CRF 16, lower = better quality and bigger file.
Outputs are filenames (a VHS_FILENAMES value pointing at the saved MP4 - feed it to a preview or file node) and output_fps (the exact FPS FFmpeg used, handy when anything downstream needs the real duration).
Installing it
Through ComfyUI Manager, search "CoachBate", or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/CoachBate/ComfyUI-CoachBate.git
Then restart ComfyUI; the node lives under CoachBate → video in Add Node. The real dependencies:
- ComfyUI-Upscaler-Tensorrt - required, not bundled.
- ComfyUI-VideoHelperSuite (VHS) - also required; the node flat-out errors without it ("requires ComfyUI-VideoHelperSuite"). It does the FFmpeg encoding and muxing.
- A FILM checkpoint in your
frame_interpolationmodel folder -film_net_fp16.safetensorspreferred,film_net_fp32.safetensorsalso works. Native frame-interpolation nodes ship with current ComfyUI, so no extra nodepack needed. - An NVIDIA RTX GPU with working TensorRT. Non-negotiable.
Where people get burned
The interpolation_model dropdown defaults to "No FILM model found" - that's literal. Run with a multiplier above 1 and no FILM checkpoint on disk and the node raises a clear error telling you to put one in frame_interpolation. Drop the .safetensors in (ComfyUI Manager's model installer can fetch it), restart, and the dropdown populates.
First-run slowness is expected, not a hang: TensorRT engine build happens lazily at execution, and RIFE/TensorRT tooling is famously "a bit tricky to get up and running" before it becomes blazing fast. The author tuned this for a 32 GB RTX 5090 - on smaller cards, long 4K jobs can still strain VRAM even with chunking, and pingpong mode writes a temporary cache to your system temp drive, which needs free space plus a safety reserve. If the source already runs at a frame rate you like, leave rife_multiplier at 1 and treat this as a pure streaming TensorRT upscaler.
Inputs (30)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| audio | AUDIO | — | |
| upscale_model | COMBO | 1 options: 4x_foolhardy_Remacri_ExtraSmoother | |
| upscale_precision | COMBO | 2 options: fp16, fp32 | |
| resize_to | COMBO | 4 options: none, FHD, 2k, 4k | |
| resize_width | INT | 38401–8192 | — |
| resize_height | INT | 21601–8192 | — |
| rife_model | COMBO | 1 options: rife49_ensemble_True_scale_1_sim | |
| rife_precision | COMBO | 2 options: fp16, fp32 | |
| rife_resolution_profile | COMBO | small | 3 options: small, medium, large |
| rife_custom_min_dimension | INT | 38464–4096 | — |
| rife_custom_opt_dimension | INT | 72064–4096 | — |
| rife_custom_max_dimension | INT | 131264–4096 | — |
| rife_multiplier | INT | 21–16 | FILM intervals per source interval. Set to 1 to bypass FILM and preserve source FPS. |
| rife_batch_size | INT | 11–16 | — |
| clear_cache_after_n_frames | INT | 1001–1000 | — |
| keep_rife_model_loaded | BOOLEAN | false | Compatibility setting; streaming manages engine lifetime automatically. |
| source_fps | FLOAT | 24.000.01–240 | — |
| playback_mode | COMBO | preserve duration | 2 options: preserve duration, slow motion |
| codec | COMBO | 2 options: H.265 / HEVC, H.264 / AVC | |
| pixel_format | COMBO | 2 options: yuv420p10le, yuv420p | |
| crf | INT | 160–51 | — |
| filename_prefix | STRING | CoachBate_TensorRT | — |
| save_output | BOOLEAN | true | — |
| save_metadata | BOOLEAN | true | — |
| pingpong | BOOLEAN | false | — |
| trim_to_audio | BOOLEAN | false | — |
| interpolation_model | COMBO | No FILM model found | 1 options: No FILM model found |
| multiplier_listopt | STRING | — | |
| interpolation_statesopt | INTERPOLATION_STATES | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| filenames | VHS_FILENAMES | — |
| output_fps | FLOAT | — |