Camera Switcher (Multi-Video Director)
Cut Between Up to 8 Cameras Automatically
- video_1
- video_2
- video_3
- video_4
- video_5
- video_6
- video_7
- video_8
- video
- cut_log
If you generate a scene from several camera angles and then want a finished video that cuts between them like a real production, the naive approach is soul-crushing: splice clips by hand, align frame counts, keep track of which take is which. AnotherCameraSwitcher is the "director" node that does it for you - feed it up to eight video streams and it assembles one timeline, cutting to a different camera every N seconds. Think of it as a poor-man's multi-cam switcher living inside ComfyUI.
It's part of AnotherUtils (marcoc2/ComfyUI-AnotherUtils), the utility grab-bag by marcoags. Pure tensor juggling, no models. The pitch is simple: generate 3–4 versions of a scene (different angles, different prompts), feed them all in, get a single coherent clip that looks edited rather than stitched.
How it works
The node treats the first video as the timeline's master: total length is video_1's frame count, and every other input must match its resolution. Cuts happen every switch_every_seconds (converted to frames via your fps), and the camera shown in each segment is chosen by a seeded random number generator - with avoid_repeat on, it won't pick the same camera twice in a row, which is what stops the edit from feeling like a strobe light. The cut_log output tells you exactly which camera played each segment, which you'll want for keeping your sanity across runs.
The inputs
video_1- required, the master timeline and the one that defines length.video_2…video_8- optional, the other cameras. Leave unconnected and they're ignored.switch_every_seconds- cut cadence (default 2s). Short = frantic coverage; long = patient.fps- the frame rate of your inputs, used to convert seconds to frames. Trust it or the cuts land at the wrong time.seed- the randomness of the cut pattern.avoid_repeat- on by default; the reason your edits don't look like a broken music video.
What comes out
video- the assembledIMAGEbatch, same length asvideo_1.cut_log- a string listing which camera is on screen for each segment.
Installing it
Same drill as the rest of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/marcoc2/ComfyUI-AnotherUtils.git
Restart ComfyUI, or search "AnotherUtils" in ComfyUI Manager. No models.
Where people get burned
The hard requirement nobody reads: all input videos must be the same resolution, and none can be shorter than the longest cut plan requires. The node validates resolution and raises a clear error, but mismatched lengths just produce empty segments, so normalize lengths first (the pack's VideoAutoSyncHStack is handy for that, or just crop). Also, every camera must have at least as many frames as the longest segment it might be asked to serve - with avoid_repeat, a short clip keeps getting skipped, and your edit starts favoring the long takes. And the seed is the creative control here: change it and the whole cut pattern reshuffles, so if you like a cut, write the seed down.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| video_1 | IMAGE | — | |
| switch_every_seconds | FLOAT | 2.00.1–300 | Cut to a different camera every N seconds |
| fps | FLOAT | 24.01–120 | Frames per second of the input videos |
| seed | INT | 00–4294967295 | — |
| avoid_repeat | BOOLEAN | true | Avoid picking the same camera twice in a row |
| video_2opt | IMAGE | — | |
| video_3opt | IMAGE | — | |
| video_4opt | IMAGE | — | |
| video_5opt | IMAGE | — | |
| video_6opt | IMAGE | — | |
| video_7opt | IMAGE | — | |
| video_8opt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | IMAGE | — |
| cut_log | STRING | — |