VideoBasic Video Upscale with Model
Upscale a whole video without OOMing your GPU
- upscale_model
- output_video_path
If you've ever upscaled a video in ComfyUI the normal way - Load Video → Upscale Image → VideoCombine - you know the failure mode: the whole clip gets loaded into VRAM at once, and somewhere around 30 seconds of 720p the GPU just dies. That's the exact pain this node exists for. It streams. Instead of loading all frames into memory, it reads the video frame-by-frame off disk, upscales each batch with an ESRGAN-style model, and writes the result to a new file. No OOM, ever, regardless of how long the clip is.
It's the flagship node of the ComfyUI-VideoBasic pack, and it's the reason the pack exists. The author's whole pitch is solving the "load all frames at once" memory blowup, and this is the node that does the heavy lifting.
How it works
OpenCV opens the file with cv2.VideoCapture, then the node reads frames in batches of your choosing, converts them to PyTorch tensors, and runs them through comfy.utils.tiled_scale - the same tiled inference ComfyUI uses for image upscaling, here applied frame by frame. Tiles default to 512px with 32px overlap. Here's the smart bit: if it catches an out-of-memory exception, it halves the tile size and retries, down to a 128px floor, so a long clip on a small card degrades gracefully instead of crashing. It also estimates how much VRAM the model plus a batch of frames will need and calls model_management.free_memory to evict whatever else is sitting on the GPU first.
Fair warning before you get excited: it's not fast. The one person on r/comfyui I found comparing it head-to-head put it as "much slower than TensorRT" upscalers but with the deciding advantage that "running out of memory is not an issue for longer vids." That's the trade this whole pack makes - disk streaming trades speed for reliability. Also, because it's per-frame ESRGAN, you're doing the third job of upscaling (video/temporal) with a tool that has no temporal awareness: fine repeating texture like wallpaper or fabric can shimmer between frames. The KB's upscaling essay calls this the least settled of the three upscaling jobs for exactly this reason. For plain "give me more pixels and don't blow up" it's fine; for restoration-grade video you want a temporal model, not this.
The inputs that matter
Only three, and you'll touch all of them:
- upscale_model - an
UPSCALE_MODEL, so wire in the built-inUpscaleModelLoaderand pick a.pthfromComfyUI/models/upscale_models. Classic ESRGAN variants like 4x-UltraSharp or 4x-AnimeSharp are the natural fit; the example workflow uses a 4x JaNai. The scale factor is whatever the model is - the node readsupscale_model.scale. - video_path - a plain string. Get it from the pack's own
VideoBasicLoadVideonode (which just hands you a file path) or type a path in. - batch_size - frames processed per GPU pass, default 8. Raise it on a big card to go faster, drop it if you still hit memory trouble. This is the knob you'll actually fiddle with.
Output and what it wires into
The single output_video_path (a STRING) points at a new upscaled_<name>.mp4. Note where: it's written to ComfyUI's temp directory, not output. So the natural next step is the pack's VideoBasicVideoSave node, which takes that path and copies it into the output folder where the UI gallery can see it. The example workflow bundled with the repo is literally LoadVideo → UpscaleWithModel → VideoSave.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/jax-explorer/ComfyUI-VideoBasic
then restart ComfyUI. Easier: ComfyUI Manager → Install Custom Nodes → search ComfyUI-VideoBasic. The only dependency is opencv-python, which Manager installs for you from requirements.txt. No model files ship with the pack - the upscaler comes from ComfyUI's own UpscaleModelLoader.
Gotchas
- Audio is dropped. The node writes video-only frames with an
mp4vcodec, so your output clip is silent. Mux the original audio back in with ffmpeg afterwards. - Output lives in temp. It won't show up in the output gallery until you run it through a save node.
- Batch size, not tile, is your OOM lever. The node auto-shrinks tiles; if you're still at the 128px floor and hurting, lower
batch_size.
For a long clip that always died at the upscaler node, this is the one that just... finishes.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| upscale_model | UPSCALE_MODEL | — | |
| video_path | STRING | — | |
| batch_size | INT | 81–1000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output_video_path | STRING | — |