TS Video Saver
H.264 to share, ProRes to edit, EXR to master
- images
- audio
- video
- hdr_image
- video
- path
Saving video in ComfyUI usually means fighting encoder flags in a node that assumes you already know what a -crf 18 is. TS Video Saver refuses to play that game: format and quality are named in words, not encoder flags. MP4/H.264 from draft up to lossless. MP4/H.265 - roughly half the size at the same quality, with an optional 10-bit. MOV/ProRes with the usual Proxy through 4444 XQ profiles. Pick the words, get the file, and the node plays the result right in its own body.
The design philosophy is the nice part here. Audio gets muxed in the same pass, into the same file - no temporary WAV, no second ffmpeg run, no duplicate audio sitting on disk. Encoding shows its progress on the node the way sampling does, because a long clip takes minutes and a silent node during that time looks frozen. And the player remembers whether you turned sound on.
The inputs that matter
fps- frame rate of the saved file, 24 default.filename_prefix- where to save, relative to the output folder; subfolders are created for you. Date tokens work anywhere in the path -%date:yyyy-MM-dd%and%date:hhmmss%- as do ComfyUI's own%year% %month% %day% %hour% %minute% %second% %width% %height%. Example from the tooltip:videos/my-run/my-run-%date:yyyy-MM-dd%_%date:hhmmss%.format- the container and codec dropdown, in words.encoder-softwareby default. Hardware encoding is much faster and noticeably worse at the same file size, so the node never chooses it for you - flip it on only when you've seen the quality and accepted the trade.save_metadata- embeds the prompt and workflow into the file the way PNGs carry them, on by default.preview-autoshows the result in the node, making a small H.264 proxy when the saved format isn't playable in a browser (ProRes isn't). Turn it off if you don't need the in-node player.
The optional inputs cover the real wiring cases: images for frames, audio for a track (trimmed or padded to the video's length), and video to re-save an existing video instead of frames - it streams straight from the file, so nothing is held in memory. The outputs are video (the saved file as a VIDEO reference) and path (the full path, handy for feeding a filename string somewhere).
The HDR/EXR branch
The fourth format is an EXR sequence - one scene-linear float32 (or 16-bit half) file per frame in its own folder, written from the hdr_image socket without touching the range. That socket exists because ordinary IMAGE inputs get clamped to 0..1 long before the saver sees them, so the HDR master from TS LTX HDR Decode needs its own path. The sequence carries no audio, and a small H.264 proxy is written in the same pass so the node still has something to play. If you're not doing the pack's LTX HDR path, you'll never touch this input - but if you are, this is the node that gets your scene-linear master out without flattening it.
Installing it
Part of comfyui-timesaver: ComfyUI Manager → search Timesaver, or
cd ComfyUI/custom_nodes
git clone https://github.com/AlexYez/comfyui-timesaver
cd comfyui-timesaver
python -m pip install -r requirements.txt
then restart ComfyUI. No system ffmpeg required - the pack's imageio-ffmpeg dependency ships a static binary.
Gotchas
The hardware-encoder temptation is the big one: it's so much faster, and at the same file size it's visibly worse. Use it for drafts, not finals. Second, remember ProRes won't play in a browser - if the preview looks missing, that's expected, the proxy is what you're watching. And if a long encode looks stuck, look at the progress on the node before you panic; a 10-minute clip at 4K takes minutes, and that's normal.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| fps | FLOAT | 24.000.01–240 | Frame rate of the saved file. |
| filename_prefix | STRING | video/TS | Where to save, relative to the output folder. Subfolders are created for you. Date tokens work anywhere in the path — %date:yyyy-MM-dd% and %date:hhmmss% (yyyy yy MM M dd d hh h mm m ss s), as do ComfyUI's own %year% %month% %day% %hour% %minute% %second% %width% %height%. Example: videos/my-run/my-run-%date:yyyy-MM-dd%_%date:hhmmss% |
| format | COMBO | Container and codec. Quality is written in words, not encoder flags. | |
| encoder | COMBO | software | Hardware encoding is much faster but noticeably worse at the same file size, so it is never chosen for you. |
| save_metadata | BOOLEAN | true | Embed the prompt and workflow into the file, the way PNGs carry them. |
| preview | COMBO | auto | auto shows the result in the node, making a small H.264 proxy when the saved format is not playable in a browser. |
| imagesopt | IMAGE | Frames to save. Leave empty when a video is connected instead. | |
| audioopt | AUDIO | Audio track. Trimmed or padded to the length of the video. | |
| videoopt | VIDEO | Re-save an existing video instead of frames. Streams straight from the file, so nothing is held in memory. | |
| hdr_imageopt | TS_LTX_HDR_IMAGE | Scene-linear master from TS LTX HDR Decode. Used by the EXR sequence format, which writes it without touching the range. Ordinary IMAGE inputs are clamped to 0..1 before they get here, which is why the master needs its own socket. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | The saved file, as a VIDEO reference. |
| path | STRING | Full path of the saved file. |