Nodes/ComfyUI-PixlStash/PixlStash Video Saver
ComfyUI Node

PixlStash Video Saver

Your clips stop being loose files in temp

By Pikselkroken·Created 6 months ago·Updated about 22 hours ago· 16
PixlStash Video Saver
  • video
  • pixlstash_project
  • pixlstash_set
  • pixlstash_character
  • picture_ids
  • video
◄filename_prefixvideo/comfyui►
◄format▾►
◄save_workflowtrue►

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 required VIDEO wire 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 a crf quality value where re-encoding is supported. auto pairs 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 - default video/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 in output/? 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.

CategoryPixlStash

Inputs (7)

NameTypeDefaultDescription
videoVIDEOThe video to save.
filename_prefixSTRINGvideo/comfyuiPrefix for the generated video filename.
formatCOMBOThe output container. Auto uses MP4 for Auto/H.264 and WebM for AV1. The others select a specific container.
save_workflowBOOLEANtrueEmbed the ComfyUI workflow and prompt JSON into the video's metadata before uploading.
pixlstash_projectoptPIXLSTASH_PROJECTAssign the video to this project at import time.
pixlstash_setoptPIXLSTASH_SETAdd the video to this set after import.
pixlstash_characteroptPIXLSTASH_CHARACTERAssign the video to this character after import.

Outputs (2)

NameTypeDescription
picture_idsSTRING—
videoVIDEOThe input video, unchanged.