π SS Images to Video Combiner by SamSeen
Turning parallax frames into mp4, webm, or gif without fighting ffmpeg
- images
- audio
- video_path
Every parallax pipeline ends the same way: you've got a batch of frames sitting in a tensor and you need an actual video file. That's this node's entire job. It's the last stop in the SSParallaxX flow - feed it the frames output from Parallax_Generator_by_SamSeen, pick mp4/webm/gif, and get a file on disk plus the path to it. Simple, terminal, and it does exactly one thing well.
How it works
Under the hood it's refreshingly honest: the node dumps your image batch to temp PNGs, then hands them to ffmpeg. mp4 gets libx264 with yuv420p at crf 23 (a sane quality/size default), webm gets libvpx-vp9, and gif uses the two-pass palettegen/paletteuse trick so colors don't come out banded. If you feed in an audio input it writes the waveform to a WAV with scipy and muxes it in, ending on the shorter stream.
That ffmpeg detail is the single most important thing about this node, because ffmpeg is not pip-installable and is not in the pack's requirements.txt. The node finds it via which/where, a binary sitting in the pack folder, or imageio. On most Linux boxes it's already there; on a fresh Windows install it often isn't, and you'll hit RuntimeError: ffmpeg not found. Install it (winget install ffmpeg, apt install ffmpeg, your pick) and restart.
Inputs
images: the IMAGE batch to encode - whatever you're turning into a video.frame_rate(default 30): passed straight to ffmpeg. For parallax, 24β30 is the sweet spot.filename_prefix(defaultSS_Video): the file lands in ComfyUI/output asSS_Video_00001.mp4, counter auto-incrementing so you never overwrite.format:mp4,webm, orgif. GIF is the trap - 120 high-res frames produce a chunky file, so reach for webm unless you genuinely need GIF.save_output: false writes to the temp dir instead of output.audio(optional): an AUDIO tensor to lay under the video.
Output: video_path, a STRING. Since this is an output node you can't chain anything off it - it's the end of the line, which is exactly what you want from a render step.
Gotchas
The pack's custom web UI adds an Upload button to this node too, and it accepts video files. Ignore it for that purpose: the node consumes an IMAGE sequence, not a video. Generate frames (the parallax node, a VHS node, whatever) and wire the batch in - don't try to feed it an mp4.
For a seamless loop with the parallax node: Forward mode swings through a full ellipse so it loops cleanly; Bounce makes a natural back-and-forth. Either way, 30fps and 120 frames is about four seconds of smooth motion.
Install
Same pack, same steps as the rest of SSParallaxX - ComfyUI Manager β search "SSParallaxX", or:
cd ComfyUI/custom_nodes
git clone https://github.com/MrSamSeen/SSParallaxX.git
cd SSParallaxX
pip install -r requirements.txt
Then restart and look under "π SamSeen". One heads-up shared with the whole pack: the author migrated the repo to SamSeenX in late 2025 and main is currently stripped of code, so if a fresh clone comes back empty, pin an older commit or install via Manager. And remember the ffmpeg requirement - it's the one dependency the requirements file won't save you from.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | β | |
| frame_rate | INT | 301β240 | β |
| filename_prefix | STRING | SS_Video | β |
| format | COMBO | mp4 | 3 options: mp4, webm, gif |
| save_output | BOOLEAN | true | β |
| audioopt | AUDIO | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_path | STRING | β |