The Last Step Nobody Automates: Batch Frame Interpolation and Upscaling to 4K120
Every pipeline ends the same way and most people still do it by hand. This episode packages that last step into seven ComfyUI flows: four single-video tasks and three batch runs that chew through a folder overnight. The stack is GIMM for interpolation, plus FlashVSR, SeedVR2 and LTX-2 for upscaling.
Evidence note: this episode ships no workflow JSON - the graphs are inside the deployed image. All numbers below are the author's on-screen values from the recording, not graph reads.
When this is useful
- You generate clips with Seedance 2.0 and need them to look finished rather than draft.
- You have a folder of videos, not one, and you want the queue to run while you sleep.
- You are deciding which of four upscalers fits a given clip.
The stack, and why each piece is there
| Component | Role | Author's note |
|---|---|---|
| GIMM | frame interpolation | described as close to top-tier among open techniques |
| FlashVSR | upscale | built on Wan |
| SeedVR2 | upscale | targets a longest-side value |
| LTX-2 | upscale | no trained model for video upscaling yet; included because the author thinks it is promising |
That last row is the interesting one: a component is shipped precisely because nobody has trained it properly yet, on the bet that video upscaling is where LTX-2 pays off.
Step by step
- Deploy the mirror, pick a 48GB 4090, and wait for the instance to come up.
- Open JupyterLab, start a terminal, paste the start command. If your card has more than 48GB, remove the low-VRAM flag first.
- When the address appears, click through into ComfyUI and open the workflow panel.
- Choose one of four single-video flows for a one-off, or one of three batch flows for a folder.
- Set the one meaningful knob for that flow: interpolation multiple, upscale factor, or longest side.
- Run. For batch flows, verify the folder path, the increment field and the batch count before starting.
- Collect results from the ComfyUI
outputdirectory in JupyterLab.
Four single-video flows
- GIMM interpolation. Load a video, run. The one knob is the interpolation multiple; 2 means double the frame count.
- FlashVSR upscale. Load, run. Adjust the scale factor: 2x, 3x or 4x, with 4x the ceiling.
- SeedVR2 upscale. Load, run. Adjust the longest-side value; the shipped value is 2560.
- LTX-2 video-to-video. In practice another upscaler. Load, run, adjust the longest side.
Three batch flows
These exist for automation: point them at a folder, and they queue every video in it.
- Create a folder (the author names his
test1) and upload as many videos as you want. - Shorten the filenames. This is the failure mode the author calls out explicitly: clips produced by 小云雀 often carry very long names and will error. Rename them to something short, like
1352. - Open a terminal, copy the folder's path, paste it into the flow's folder field.
- Set the increment value. It defaults to 0 and must be reset to 0 before a run.
- Set the interpolation multiple and the upscale multiple.
- On FlashVSR specifically, the flow pre-scales to 1024 before multiplying: a multiple of 2 yields 2048, a multiple of 4 yields 4096.
- Set the batch count to the number of files. Ten videos means batch count 10, which queues ten tasks.
- Run. It keeps going in the background, which is the point for overnight jobs.
- Collect results from the
outputfolder under the ComfyUI directory in JupyterLab.
The SeedVR2 batch caveat
Same structure, one extra trap. Seedance output is typically 30 fps, so no frame-rate change is needed. If you load other footage at 29.97 fps, normalise it to an integer in the video loader, because the flow multiplies the rate and a non-integer base produces errors.
Deployment notes
- Rent a 48GB 4090 for the best value; 5090 and 4090 are cheaper overnight. The author used an A800 because he was stress-testing.
- The start command includes a low-VRAM switch. If your card has more than 48GB (48 itself excluded), you can drop it.
- Registration through the link adds platform credit after identity verification.
Parameter basis
No JSON exists for this episode, so this is a transcription of the on-screen values:
| Item | Value |
|---|---|
| Interpolation multiple | 2 (2x), adjustable |
| FlashVSR scale | 2x / 3x / 4x, max 4x |
| FlashVSR pre-scale | 1024, then multiply (2 → 2048, 4 → 4096) |
| SeedVR2 longest side | 2560 |
| Batch increment field | defaults to 0, must be 0 |
| Batch count | number of files in the folder |
| Typical Seedance frame rate | 30 fps |
| Non-integer frame rate case | 29.97 fps, normalise before multiplying |
| Suggested GPU | 48GB 4090 (author tested on A800) |
Limits
- No downloadable graphs. Seven flows live inside the image; the episode folder has no JSON.
- Filename length is a real failure. Long names error out; this is a platform quirk, not a model limit.
- LTX-2 upscaling is unproven. The author says nobody has trained it for this yet, so it is included on potential, not on results.
- 4K120 is the target, not a measured spec. The episode title states it; the recording documents the multipliers and pre-scale chain, not per-clip timings or quality scores.
- Batch flows need integer frame rates. 29.97 fps inputs are a documented error source.
Episode resources
- Mirror (with referral code): https://www.compshare.cn/images/7oKVc778yl8g?referral_code=A7fTQUYY9lCDFJwA6MMvoq
- RunningHub workflow: none for this episode
- YouTube: https://youtu.be/XIkd2Rq8Y8I
- Bilibili: https://www.bilibili.com/video/BV1YTZ1BtEHK/