PixlStash Video Saver
Your clips stop being loose files in temp
- video
- pixlstash_project
- pixlstash_set
- pixlstash_character
- picture_ids
- video
What it actually is
You render a five-second clip, it lands in output/ as AnimateDiff_00042.mp4, and three weeks later you have four hundred of those and no idea which one had the good hand-roll. That's the problem PixlStash Video Saver exists to solve - but only if you've already bought into PixlStash.
PixlStash is a self-hosted picture/video manager from the same author (Pikselkroken, pixlstash.dev): it imports your renders, reads ComfyUI's embedded metadata back out, sorts them by project, set and character, and can hand a workflow back to ComfyUI. This pack is the bridge. The Video Saver is ComfyUI's Save Video node with a library instead of a folder - same format and codec options, same metadata embedding, plus the option to file the result under a project, set or character on the way in.
If you're not running a PixlStash server, stop here; this node has nothing for you. If you are, it's the difference between "my clips are somewhere" and "my clips are findable."
How it works
It encodes the video with ComfyUI's own writer - same containers, codecs and encoding options - but into ComfyUI's temp directory rather than output/, then uploads the file to PixlStash's async import endpoint and polls the task until it completes. The vault names files by content hash, so an identical clip you saved before is recognised as a duplicate instead of stored twice.
The metadata story is the interesting part. With save_workflow on (the default), the node embeds the same workflow and prompt payloads ComfyUI's SaveImage writes into a PNG, except into the video container. Per image-io-metadata.md, that convention is the whole reproducibility story in this ecosystem: the file is the project file. Here, a clip in your vault gives the graph that made it straight back.
One naming oddity: the output is called picture_ids, because videos live in PixlStash's picture library. Live with it.
The inputs that matter
video- the requiredVIDEOwire from your sampler/decode chain.format- a nested dropdown: a container (auto, mp4, webm, others), under it a codec (auto, H.264, AV1), under that an encoding mode with acrfquality value where re-encoding is supported.autopairs H.264 with MP4 and AV1 with WebM, same as Save Video. Defaults are fine; the trap is that WebM doesn't offer H.264, because it can't hold it.filename_prefix- defaultvideo/comfyui. It's a subfolder-capable prefix for the working file in temp (video/comfyui_00001_.mp4), not the name in PixlStash, which hashes.save_workflow- leave it on unless you have a reason not to.pixlstash_project/pixlstash_set/pixlstash_character- optional context wires. The loaders pass their context downstream, so a Set Loader at the top sets the saver at the bottom with no extra wiring. Project is applied at import time; set and character right after.
Outputs: picture_ids - a comma-separated string of the newly imported IDs, and empty when the vault already had that exact file. That's a dedupe success, not a failure. video passes the input straight through unchanged, so the node can sit mid-chain as Save Video does.
Installing it
Manager, search ComfyUI-PixlStash, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/Pikselkroken/ComfyUI-PixlStash.git
Dependencies are light - requests and Pillow, both already in any ComfyUI environment. The gguf note in the README is for the model-shelf loaders, not this node, so ignore it. You do need a recent ComfyUI: the pack is written against the V3 backend node API (see comfyui-node-plumbing.md on why a pack with no NODE_CLASS_MAPPINGS is new, not broken), and this node's nested dynamic combos ask for 0.20.0 or newer.
Then Settings › PixlStash: server URL, API token, Verify SSL. Credentials are read at runtime and never written into workflow JSON, so shared workflows don't leak your token.
Where people get burned
- "URL and API Token are required." You skipped the settings step. Every node in the pack fails this way, with that exact message.
- 403 on save. A read-scope or resource-scoped share token. Savers need read-write ("ALL") scope.
- "needs PixlStash X or newer." The pack checks the server version before its first request and refuses politely. This node's floor is PixlStash 1.2.
- Timeouts on long clips. The encoded file is read into memory and posted in one request on a fixed 30-second timeout, so a fat clip on a slow link gets
PixlStash: request timed out. Shorten the clip, or run the server closer. - "ComfyUI could not write this video as webm with the h264 codec." Pick a codec the container can hold.
- Can't find the file on disk. It's in ComfyUI's
temp/, because the node only needs it long enough to upload. Want a durable copy inoutput/? Keep a plain Save Video node in parallel. - Multi-user mode. ComfyUI can't tell a node which user submitted the prompt, so the pack refuses rather than risk using someone else's token. One single-user instance per PixlStash user.
Verdict: near-useless standalone, genuinely useful inside a PixlStash workflow. It's a bridge node, and a well-behaved one - same wires as Save Video, so dropping it in costs you nothing.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | The video to save. | |
| filename_prefix | STRING | video/comfyui | Prefix for the generated video filename. |
| format | COMBO | The output container. Auto uses MP4 for Auto/H.264 and WebM for AV1. The others select a specific container. | |
| save_workflow | BOOLEAN | true | Embed the ComfyUI workflow and prompt JSON into the video's metadata before uploading. |
| pixlstash_projectopt | PIXLSTASH_PROJECT | Assign the video to this project at import time. | |
| pixlstash_setopt | PIXLSTASH_SET | Add the video to this set after import. | |
| pixlstash_characteropt | PIXLSTASH_CHARACTER | Assign the video to this character after import. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| picture_ids | STRING | — |
| video | VIDEO | The input video, unchanged. |