ComfyUI Node
⬡ Polyhedron Save
One output node for images, video and audio. It picks the writer from the media actually wired to it, embeds the workflow so the file can be dragged back into ComfyUI, and when it writes a clip it drops a still frame beside it as a control image - an .mp4 cannot carry a workflow, a PNG can.
⬡ Polyhedron Save
- image
- video
- audio
- mask
- path
- fps
◄filename_prefixPolyhedron►
◄media_kindauto►
◄image_formatpng►
◄image_quality100►
◄video_presetH.264 MP4 (delivery)►
◄quality17►
◄frame_rate24.00►
◄autoplayfalse►
◄pingpongfalse►
◄loop_count0►
◄trim_to_audiofalse►
◄save_metadatatrue►
◄save_outputtrue►
CategoryPolyhedron/IO
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| filename_prefix | STRING | Polyhedron | Name under ComfyUI/output/. A '/' makes a subfolder. Optional tokens are expanded here: %date:yyyy-MM-dd% / %date:hhmmss%, %width%, %height% (illegal path characters are stripped so a token can never break the path). A counter keeps files unique. |
| media_kind | COMBO | auto | auto: infer from what's wired (VIDEO -> video; IMAGE+audio/fps -> video; IMAGE alone -> image; AUDIO alone -> audio). Or force 'image' / 'video'. |
| image_format | COMBO | png | Still format. png = lossless + embedded workflow (drag back to reload). webp = smaller / optional lossless. jpg = no alpha. |
| image_quality | INT | 1001–100 | webp / jpg quality (100 on webp = lossless). png ignores this (it uses lossless compression). |
| video_preset | COMBO | H.264 MP4 (delivery) | Delivery (small, universal) vs Master (edit/archive). H.264 uses ComfyUI's own tested writer; the masters use our bundled-PyAV encoder (10-bit via a 16-bit intermediate, intra keyframes). |
| quality | INT | 170–100 | crf-style quality for the lossy presets (lower = better/larger; ~17-20 is visually lossless). ProRes/FFV1 ignore it. |
| frame_rate | FLOAT | 24.000–240 | fps when a video is built from an IMAGE batch. A wired VIDEO keeps its own rate (this is ignored then). Convertible to an input -- wire Interpolate's fps output here so interpolated frames keep their true duration. |
| autoplay | BOOLEAN | false | In-node video preview: off = show first frame with play controls (a single-frame clip never jumps). On = play automatically (muted); loops only when the clip has >1 frame. |
| pingpong | BOOLEAN | false | Append the reversed frames (forward then back) for a seamless boomerang loop. |
| loop_count | INT | 00–1000 | GIF / animated-WebP loop count (0 = loop forever). |
| trim_to_audio | BOOLEAN | false | Match the clip length to the wired audio (trim the longer of the two) so video and sound end together. |
| save_metadata | BOOLEAN | true | Embed the workflow + prompt (PNG text / MP4 metadata) so the file can be dragged back into ComfyUI. |
| save_output | BOOLEAN | true | On: write to ComfyUI/output/. Off: temp dir (preview only, keeps output/ uncluttered while iterating). |
| imageopt | IMAGE | Still(s) or video frames [N,H,W,3|4]. | |
| videoopt | VIDEO | Native VIDEO (frames + audio + fps ride through). Takes the Media Loader's `video` or `video_audio` output alike -- a `video_audio` wire carries its trimmed companion track along and it is muxed into the written clip. | |
| audioopt | AUDIO | Optional audio to mux with image frames, or to replace a wired video's audio. | |
| maskopt | MASK | Optional alpha [N,H,W] (opaque->0). Wired ALONE, the mask itself is saved as grayscale stills. Kept for png/webp stills and alpha-capable video presets (ProRes 4444). |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| path | STRING | — |
| fps | FLOAT | — |