🎬⏱️AGSoft Video Freeze Frame
Hold a frame so the viewer actually sees it
- video
- video_path
- duration_seconds
- duration_timecode
- file_size_mb
- width
- height
- fps
- frames_est
🎬⏱️AGSoft Video Freeze Frame does one thing: plays a video up to a chosen moment, holds that frame for a while, then carries on. It's the classic emphasis edit - the "let's pause so the viewer registers what just happened" beat - and while it sounds trivial, doing it cleanly in a node graph is usually more annoying than it should be. This node is one widget.
It re-encodes the video to insert the hold (you can't stream-copy a pause), so it's not the fastest node in the pack, but for a single freeze it's plenty quick.
The two numbers that matter
freeze_time- the moment in the source video (seconds) where the frame freezes.freeze_duration- how many seconds the frozen frame is held before the clip resumes.
That's essentially the whole job. The source is the optional video input (priority) or video_path. output_name sets the filename, output_path the folder (empty = ComfyUI/output).
The only knobs beyond that are the encoding controls shared across the pack: encoder_mode (auto prefers NVENC, else CPU; force cpu if NVENC misbehaves) and quality_preset (fast / balanced / quality).
Outputs
The standard pack video set: video_path (STRING), duration_seconds, duration_timecode, file_size_mb, width, height, fps, frames_est - note the duration outputs will show the source length plus the freeze, which is a handy sanity check that the hold landed.
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 models, no extra deps - it drives the FFmpeg binary ComfyUI bundles (or a system ffmpeg on PATH).
Two small cautions. First, freeze_time beyond the end of the clip is a no-op or an error depending on how the source is cut, so keep it inside the footage. Second, if you want a longer hold on a still that's already static (a slide, a title card), you're usually better off setting the slide duration in the slideshow nodes - the freeze node is for video that's actually moving.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| output_name | STRING | freeze_frame.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. | |
| video_path | STRING | Path to the source video. Used only if video input is not connected. --- Путь к исходному видео. Используется, только если вход video не подключен. | |
| freeze_time | FLOAT | 1.00–86400 | The moment (seconds) where the frame freezes. --- Момент (в секундах), где кадр замирает. |
| freeze_duration | FLOAT | 1.00.1–60 | How long (seconds) the freeze frame is held. --- Сколько секунд держать стоп-кадр. |
| 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. / Пресет качества кодирования. |
| videoopt | VIDEO | Optional source video from ComfyUI. Has priority over video_path. --- Опциональное исходное видео из ComfyUI. Имеет приоритет над video_path. |
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 | — |