TUTU Stream 8K 360 Video Upscale
The 8K 360 video upscale that won't OOM your machine
- images
- upscale_model
- audio
- video_path
This is the terminal node of the ComfyUI-Tutu-360VR-Tools pack: the thing that turns your outpainted 4K equirect frame batch into an actual MP4 you can play in a headset. "TUTU Stream 8K 360 Video Upscale" takes a sequence of frames, upscales every one with a standard ComfyUI upscale model, and streams the result straight into FFmpeg. What you get back is a file path and a preview PNG of the first frame.
The pitch is memory. An 8K equirect frame is 8640×4320 - roughly 37 million pixels, 100MB+ as a float tensor, per frame. Hold a few hundred of those in a batch and you're not running out of VRAM, you're running out of system RAM. This node never builds the 8K batch: it upscales one frame, hands it to FFmpeg's stdin, and moves on. The peak footprint is one frame plus whatever your GPU card can take.
How it actually works - three mechanisms worth knowing:
- Tiled upscaling. Each frame is split into overlapping tiles (
tile_sizedefault 512,tile_overlap32) so an ESRGAN-style model like 4x-UltraSharp runs happily on a mid-range GPU. If it hits an OOM mid-run, it automatically halves the tile size and retries before it ever crashes the whole queue. - Seam protection. Before upscaling, the frame is padded horizontally with a circular wrap (
seam_padding, default 32) - a copy of the opposite edge, so the upscaler never sees a hard discontinuity at the 0°/360° seam. The padding is cropped off after. This is the node quietly doing the thing that makes a 360 result actually wrap cleanly, and it's why you wouldn't just use a plain upscale-and-save node. - Encoder autodetect. It probes for NVIDIA NVENC (
h264_nvenc) at runtime and falls back tolibx264if it's missing, so you get hardware encoding when you have it and a working CPU path when you don't. Even dimensions are enforced - H.264 needs them, and the node will refuse odd target sizes rather than hand FFmpeg a broken stream.
Inputs you'll actually set. upscale_model is the big one - you need a real model, and the published workflow uses 4x-UltraSharp.pth, which the KB's upscaling doc confirms as the community favorite clean pixel upscaler. Drop it in ComfyUI/models/upscale_models/. target_width/target_height default to 8640×4320 (true 2:1 8K), and honestly that's overkill unless you're on a high-end headset - most 360 viewing is fine at 4K, and halving those numbers roughly quarters your workload. Match frame_rate to your source (24 default). crf 17 is the quality dial (lower = better, bigger file). And encoder/preset: pick h264_nvenc if you're on an NVIDIA card, leave preset at veryfast unless you want to wait longer for slightly smaller files.
One nice touch: there's an optional audio input. LTX 2.3 generates synchronized audio natively, so you can pipe it in and the node will mux it into the MP4 (AAC, 192k) instead of shipping a silent clip. If you leave it out, you get a silent video - mux the audio in your editor instead.
Installing. This is one of three nodes in ComfyUI-Tutu-360VR-Tools. ComfyUI Manager (search the pack title) or:
cd ComfyUI/custom_nodes
git clone https://github.com/zhaotututu/ComfyUI-Tutu-360VR-Tools.git
Restart, then get the model:
# 4x-UltraSharp.pth into ComfyUI/models/upscale_models/
Troubleshooting. The one hard requirement is FFmpeg on your PATH - it uses shutil.which("ffmpeg") and falls back to imageio-ffmpeg if you have that. If you see "FFmpeg is required", install it and restart. The README's warning is the one that catches people: the upstream 4K batch still lives in system RAM, because ComfyUI held onto it to hand you this node. Streamed output saves you the extra 8K batch, not the whole problem - if you're tight on RAM, lower the source frame cap earlier in the workflow. And remember tile_overlap must be smaller than tile_size, or it throws before you even start.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| upscale_model | UPSCALE_MODEL | — | |
| target_width | INT | 8640256–16384 | — |
| target_height | INT | 4320128–8192 | — |
| frame_rate | FLOAT | 241–120 | — |
| tile_size | INT | 512128–1024 | — |
| tile_overlap | INT | 320–128 | — |
| seam_padding | INT | 320–128 | — |
| filename_prefix | STRING | TUTU_8K_360VR_Outpaint | — |
| encoder | COMBO | 2 options: h264_nvenc, libx264 | |
| crf | INT | 170–51 | — |
| preset | COMBO | 4 options: veryfast, faster, fast, medium | |
| audioopt | AUDIO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_path | STRING | — |