🎬🖼️AGSoft Images To Video
Turn a batch of frames into an actual slideshow with motion
- audio
- video_path
- duration_seconds
- duration_timecode
- file_size_mb
- width
- height
- fps
- frames_est
🎬🖼️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, orcustom) and how mismatched images fit (letterbox,crop,stretch).ken_burns- the difference between a slideshow and a video.encoder_mode-autoprefers NVENC; forcecpuif 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_path → ComfyUI/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.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| output_name | STRING | slideshow.mp4 | Output filename. The extension is kept as entered (.mp4 by default). --- Имя итогового файла. Расширение сохраняется как введено (по умолчанию .mp4). |
| output_path | STRING | Output directory. If empty, ComfyUI/output is used. --- Папка сохранения. Если пусто, используется ComfyUI/output. | |
| inputs_count | COMBO | 2 | Number 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_duration | FLOAT | 3.00.1–60 | Display duration of each slide in seconds (global for all slides). --- Длительность показа каждого слайда в секундах (глобально для всех слайдов). |
| output_fps | COMBO | 30 | Output frame rate. --- Частота кадров результата. |
| resize_mode | COMBO | first_image | How 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_mode | COMBO | letterbox | letterbox = fit with black bars. crop = fill and crop center. stretch = stretch. --- letterbox = вписать с чёрными полосами. crop = заполнить и обрезать центр. stretch = растянуть. |
| custom_width | INT | 00–8192 | Custom width for resize_mode=custom. 0 = fallback. |
| custom_height | INT | 00–8192 | Custom height for resize_mode=custom. 0 = fallback. |
| transition_type | COMBO | fade | Transition type between slides. cut = hard cut. random = random per junction. --- Тип перехода между слайдами. cut = жёсткая склейка. random = случайный на каждом стыке. |
| transition_duration | FLOAT | 0.80–10 | Transition duration in seconds. 0 = cut mode. Clamped if longer than a slide. --- Длительность перехода в секундах. 0 = режим cut. Ограничивается, если длиннее слайда. |
| ken_burns | COMBO | off | Enable Ken Burns (smooth zoom/pan) on the static slides. --- Включить Ken Burns (плавный zoom/pan) на статичных слайдах. |
| kb_motion | COMBO | in | Ken Burns motion. in/out = zoom in/out; pan_* = panning; random = random per slide. --- Движение Ken Burns. in/out = наезд/отъезд; pan_* = панорама; random = случайно на каждый слайд. |
| kb_zoom_start | FLOAT | 1.001–3 | Ken 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_end | FLOAT | 1.301–3 | Ken Burns end zoom (used by in/out motions). --- Конечный зум Ken Burns (для движений in/out). |
| audio_mode | COMBO | fit | fit = trim audio or pad with silence to match the video length. loop = repeat the audio track across the whole video length. --- fit = обрезать аудио или добить тишиной под длину видео. loop = зациклить трек на всю длину видео. |
| audio_volume | FLOAT | 1.000–2 | Voiceover volume multiplier. 1.0 = original. --- Множитель громкости озвучки. 1.0 = оригинал. |
| audio_fade_in | FLOAT | 0.00–60 | Voiceover fade-in in seconds. / Появление озвучки в секундах. |
| audio_fade_out | FLOAT | 0.00–60 | Voiceover fade-out in seconds. / Затухание озвучки в секундах. |
| encoder_mode | COMBO | auto | auto = NVENC if available, otherwise CPU. nvenc = force NVENC. cpu = force libx264. --- auto = NVENC, если доступен, иначе CPU. nvenc = принудительно NVENC. cpu = принудительно libx264. |
| quality_preset | COMBO | balanced | Encoding quality preset. / Пресет качества кодирования. |
| audioopt | AUDIO | Optional voiceover from Load Audio. If not connected, the output has no audio. --- Опциональная озвучка из Load Audio. Если не подключено — выход без звука. |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| video_path | STRING | — |
| duration_seconds | FLOAT | — |
| duration_timecode | STRING | — |
| file_size_mb | FLOAT | — |
| width | INT | — |
| height | INT | — |
| fps | FLOAT | — |
| frames_est | INT | — |