Nodes/SSParallaxX/πŸ‘€ SS Images to Video Combiner by SamSeen
ComfyUI Node

πŸ‘€ SS Images to Video Combiner by SamSeen

Turning parallax frames into mp4, webm, or gif without fighting ffmpeg

By SamSeenXΒ·Created about a year agoΒ·Updated 9 months agoΒ· 0
πŸ‘€ SS Images to Video Combiner by SamSeen
  • images
  • audio
  • video_path
β—„frame_rate30β–Ί
β—„filename_prefixSS_Videoβ–Ί
β—„formatmp4β–Ί
β—„save_outputtrueβ–Ί

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 (default SS_Video): the file lands in ComfyUI/output as SS_Video_00001.mp4, counter auto-incrementing so you never overwrite.
  • format: mp4, webm, or gif. 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.

CategoryπŸ‘€ SamSeen

Inputs (6)

NameTypeDefaultDescription
imagesIMAGEβ€”
frame_rateINT301–240β€”
filename_prefixSTRINGSS_Videoβ€”
formatCOMBOmp43 options: mp4, webm, gif
save_outputBOOLEANtrueβ€”
audiooptAUDIOβ€”

Outputs (1)

NameTypeDescription
video_pathSTRINGβ€”