Save to Fanvue Vault
The upload node that doesn't leak your workflow
- images
- media_uuids
You finished the render. Now it has to get off your disk and into your Fanvue account, filed in a folder, ready for a post. That's all this node does - and the reason to use it instead of dragging a file into a browser is more interesting than the convenience.
Why not just save the PNG and upload it by hand
Because of what's inside that PNG. ComfyUI's Save Image node writes your entire graph and prompt into the file as PNG text chunks - the feature that lets someone drag an image back onto the canvas and get your workflow. On a forum, great. On a paid platform, it's a leak: prompt text, model and LoRA names, whole pipeline, sitting inside the file you just sold access to.
Save to Fanvue Vault never calls Save Image. It takes the IMAGE tensor straight from the graph, clips it to 8-bit, encodes it with Pillow, and uploads those bytes. No text chunks, no workflow, no prompt - the encoder's docstring is literally "No workflow metadata, unlike Save Image." If you publish AI content and have never thought about that, this is your reason to use the node.
How it actually works
Two things can go in, and either alone is enough. Wire an IMAGE in and each image in the batch becomes <prefix>_<date>-<time>_<n>.png, numbered from 01. Or put paths in file_paths, one per line: those upload byte-for-byte under their own names - how you push the videos, audio and GIFs your video nodes just wrote to output/.
Under the hood it's a handshake. The node asks LatentPost for an upload session, then PUTs each part of the file straight to Fanvue's storage with a presigned URL - the API key isn't in that request, and the media never routes through LatentPost's server. After the last part it polls until Fanvue reports the file ready, then files it into your vault folder.
The output is media_uuids: one Fanvue media ID per line, which is the handle a post needs. Wire it into Schedule Fanvue Post and the two nodes become one pipeline. Leave it dangling and you've just stocked your vault - a fine use on its own.
The inputs you'll actually touch
folder defaults to ComfyUI, which is nobody's idea of a good folder name - change it to the persona or project you're filing under. It's created if missing, and empty means "no folder," dropping files loose in your media library. filename_prefix is a real prefix, not a template: slashes flatten to underscores, so you can't escape into a subfolder with it.
images and file_paths are both optional, and if you connect neither you get "Nothing to upload. Connect images, or enter file paths." - the error you'll hit first when you drag the node in to look at it.
Install
Through Manager, search LatentPost for Fanvue (the pack title). Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/latentpost/comfyui-fanvue
Restart. Nothing to pip install - the dependency list is genuinely empty. Then connect your Fanvue creator account at latentpost.com/dashboard, generate a key, and paste it into Settings → LatentPost → API key. Keys live in settings, not the workflow, so sharing the graph doesn't share the key.
Do the smoke test first: example_workflows/latentpost-test.json (Templates → comfyui-fanvue) uploads two test images and schedules a subscriber post an hour out, no model needed. Delete that post on Fanvue before it fires.
Where people get burned
The path jail is real, and it's a feature. file_paths only accepts files inside ComfyUI's output, input or temp folders, resolved through symlinks and junctions - so a workflow someone emails you can't exfiltrate your Documents by pointing at ../../stuff. Flip side: pointing at your Desktop fails outright; copy it into input/. Windows' "Copy as path" quotes are tolerated, and relative paths mean inside output/.
Files in temp/ vanish. Anything previewed to temp/ gets cleaned out by ComfyUI, so queueing the same graph tomorrow gives you "File not found." Publish only what some node actually saved to output/.
Queueing twice doesn't upload twice. The node digests your inputs and the image pixels, and on a repeat returns the earlier media IDs with a note saying so. Change the seed or prefix to force a fresh upload; it forgets on restart.
--multi-user breaks it. The nodes can't tell whose key to read, so they bail with an explicit message. Drop the flag.
Uploads are metered - "Free uploads used up" means you hit the tier, and posting needs Pro on top. Caveat worth saying: this pack is new with no community track record, so you're trusting a small vendor's code. It is at least readable - a few hundred lines of dependency-free Python.
This node uploads; it doesn't post. For that, see Schedule Fanvue Post.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| folder | STRING | ComfyUI | Vault folder for the uploads, created if it doesn't exist. Leave empty for no folder. |
| filename_prefix | STRING | LatentPost | Images are named <prefix>_<date>-<time>_<n>.png. Files keep their own names. |
| imagesopt | IMAGE | Images to upload, as PNG. | |
| file_pathsopt | STRING | Files to upload, one path per line, from ComfyUI's output, input or temp folder. Relative paths are inside the output folder. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| media_uuids | STRING | Fanvue media IDs, one per line. Connect to Schedule Fanvue Post. |