Nodes/comfyui-AGSoft/🎬🖼️AGSoft Images To Video
ComfyUI Node

🎬🖼️AGSoft Images To Video

Turn a batch of frames into an actual slideshow with motion

By Art-xmaster·Created about a year ago·Updated a day ago· 24
🎬🖼️AGSoft Images To Video
  • audio
  • video_path
  • duration_seconds
  • duration_timecode
  • file_size_mb
  • width
  • height
  • fps
  • frames_est
output_nameslideshow.mp4
output_path
inputs_count2
image_duration3.0
output_fps30
resize_modefirst_image
fit_modeletterbox
custom_width0
custom_height0
transition_typefade
transition_duration0.8
ken_burnsoff
kb_motionin
kb_zoom_start1.00
kb_zoom_end1.30
audio_modefit
audio_volume1.00
audio_fade_in0.0
audio_fade_out0.0
encoder_modeauto
quality_presetbalanced

🎬🖼️AGSoft Images To Video is the node that finally makes something watchable out of a stack of stills. Feed it a few images and it renders a slideshow with real FFmpeg xfade transitions, an optional Ken Burns zoom/pan, and - the part that's easy to underestimate - a voiceover that actually lines up with the video.

The workflow this slots into: generate keyframes with an image model (or a storyboard), then turn them into a video asset instead of a folder of PNGs. It's also how you make a montage out of your best generations without leaving the graph.

How it works

inputs_count grows that many image_1..image_N inputs (up to 100). A batch on any single input expands into multiple slides, which is a nice touch - load a folder of frames into one input and they all become slides. Each slide shows for image_duration seconds (default 3), and slides are joined with transition_type - a long list of FFmpeg xfade effects (plus cut for hard cuts and random per junction) over transition_duration.

The Ken Burns bit is where this node punches above its weight: with ken_burns on, each static slide gets a smooth zoom/pan (kb_motion: in/out, the four pan_* directions, or random per slide), driven by kb_zoom_start/kb_zoom_end. It renders at 2x supersampling to keep the motion jitter-free - that's the difference between a pro-looking push-in and a pixel-shimmering amateur zoom.

The audio handling is the other selling point. Connect a voiceover on the optional audio input and the node renders the video first, then aligns the audio to its real length in a fast second pass (video copied, not re-encoded). No desync, no dead silence at the tail. audio_mode is fit (trim/pad to the video) or loop (repeat across it), with audio_volume and fade in/out on top.

The inputs that matter

  • image_duration + transition_type/transition_duration - the rhythm of the piece.
  • resize_mode / fit_mode - how output resolution is picked (first_image, max_size, min_size, or custom) and how mismatched images fit (letterbox, crop, stretch).
  • ken_burns - the difference between a slideshow and a video.
  • encoder_mode - auto prefers NVENC; force cpu if you hit NVENC errors.

Outputs

The standard pack video set: video_path (STRING), duration_seconds, duration_timecode, file_size_mb, width, height, fps, frames_est. Empty output_pathComfyUI/output.

Install

Part of the comfyui-AGSoft pack. ComfyUI Manager → search "comfyui-AGSoft" → Install → restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/Art-xmaster/comfyui-AGSoft

Restart. No model downloads - it's pure FFmpeg tooling on top of ComfyUI's bundled binary (or a system ffmpeg on PATH).

Want the same thing but with the images loaded straight from a folder instead of wired as image inputs? That's the "From Dir" sibling.

CategoryAGSoft/Video

Inputs (22)

NameTypeDefaultDescription
output_nameSTRINGslideshow.mp4Output filename. The extension is kept as entered (.mp4 by default). --- Имя итогового файла. Расширение сохраняется как введено (по умолчанию .mp4).
output_pathSTRINGOutput directory. If empty, ComfyUI/output is used. --- Папка сохранения. Если пусто, используется ComfyUI/output.
inputs_countCOMBO2Number of image inputs (image_1..image_N), up to 100. A batch on an input expands into several slides. --- Число входов изображений (image_1..image_N), до 100. Батч на входе раскрывается в несколько слайдов.
image_durationFLOAT3.00.1–60Display duration of each slide in seconds (global for all slides). --- Длительность показа каждого слайда в секундах (глобально для всех слайдов).
output_fpsCOMBO30Output frame rate. --- Частота кадров результата.
resize_modeCOMBOfirst_imageHow to choose the output resolution. first_image = first image size. max_size/min_size = extremes. custom = custom_width/height. --- Как выбирать разрешение результата. first_image = по первому изображению. max_size/min_size = экстремумы. custom = вручную.
fit_modeCOMBOletterboxletterbox = fit with black bars. crop = fill and crop center. stretch = stretch. --- letterbox = вписать с чёрными полосами. crop = заполнить и обрезать центр. stretch = растянуть.
custom_widthINT00–8192Custom width for resize_mode=custom. 0 = fallback.
custom_heightINT00–8192Custom height for resize_mode=custom. 0 = fallback.
transition_typeCOMBOfadeTransition type between slides. cut = hard cut. random = random per junction. --- Тип перехода между слайдами. cut = жёсткая склейка. random = случайный на каждом стыке.
transition_durationFLOAT0.80–10Transition duration in seconds. 0 = cut mode. Clamped if longer than a slide. --- Длительность перехода в секундах. 0 = режим cut. Ограничивается, если длиннее слайда.
ken_burnsCOMBOoffEnable Ken Burns (smooth zoom/pan) on the static slides. --- Включить Ken Burns (плавный zoom/pan) на статичных слайдах.
kb_motionCOMBOinKen Burns motion. in/out = zoom in/out; pan_* = panning; random = random per slide. --- Движение Ken Burns. in/out = наезд/отъезд; pan_* = панорама; random = случайно на каждый слайд.
kb_zoom_startFLOAT1.001–3Ken Burns start zoom (1.0 = no zoom). For pan modes a minimum of 1.2 is enforced. --- Начальный зум Ken Burns (1.0 = без зума). Для pan принудительно не меньше 1.2.
kb_zoom_endFLOAT1.301–3Ken Burns end zoom (used by in/out motions). --- Конечный зум Ken Burns (для движений in/out).
audio_modeCOMBOfitfit = trim audio or pad with silence to match the video length. loop = repeat the audio track across the whole video length. --- fit = обрезать аудио или добить тишиной под длину видео. loop = зациклить трек на всю длину видео.
audio_volumeFLOAT1.000–2Voiceover volume multiplier. 1.0 = original. --- Множитель громкости озвучки. 1.0 = оригинал.
audio_fade_inFLOAT0.00–60Voiceover fade-in in seconds. / Появление озвучки в секундах.
audio_fade_outFLOAT0.00–60Voiceover fade-out in seconds. / Затухание озвучки в секундах.
encoder_modeCOMBOautoauto = NVENC if available, otherwise CPU. nvenc = force NVENC. cpu = force libx264. --- auto = NVENC, если доступен, иначе CPU. nvenc = принудительно NVENC. cpu = принудительно libx264.
quality_presetCOMBObalancedEncoding quality preset. / Пресет качества кодирования.
audiooptAUDIOOptional voiceover from Load Audio. If not connected, the output has no audio. --- Опциональная озвучка из Load Audio. Если не подключено — выход без звука.

Outputs (8)

NameTypeDescription
video_pathSTRING
duration_secondsFLOAT
duration_timecodeSTRING
file_size_mbFLOAT
widthINT
heightINT
fpsFLOAT
frames_estINT