Nodes/Save Image To Webdav/Save Image to WebDAV
ComfyUI Node

Save Image to WebDAV

Push your finished renders straight to a WebDAV server — NAS, Nextcloud, whatever

By goldwins520·Created about a year ago·Updated about a year ago· 2
Save Image to WebDAV
  • image
  • image
webdav_urlhttp://example.com/webdav/
save_local_when_failfalse
webdav_usernameusername
webdav_passwordpassword
async_uploadfalse

This is an output node with a very specific job: instead of just dropping your render into ComfyUI's output folder, it encodes the image to PNG and uploads it to a WebDAV server using your credentials. WebDAV is the old-but-everywhere protocol that Nextcloud, ownCloud, Synology's Web File Station, and most NAS boxes speak natively. If you run a Synology on your LAN or pay for a Nextcloud instance, this turns "generate, then manually sync the output folder" into "everything just lands on the server."

Let's be honest about the audience first. WebDAV save nodes barely register in the ComfyUI community - you won't find a flood of reddit threads about them. This is a niche utility for a specific kind of setup: a GPU box that generates, a phone or laptop or script that collects. If that's you, it saves you a real chore every single run.

How it works

The mechanism is refreshingly simple, and it's all in one file. The node takes your IMAGE tensor - the tooltip says "Single image or multi images," so a batch of frames is fine - converts each one to a PIL image, encodes it to PNG in memory, then does an HTTP PUT with basic auth (your username/password) to:

{webdav_url}/YYYY-MM-DD/YYYYMMDD_HHMMSS_<random 3-digit>.png

So the server side gets a tidy date-folder structure and timestamped filenames. If the PUT fails, it retries up to three times, three seconds apart. If it's still dead and you've enabled save_local_when_fail, the image is written to output/upload-fail/ instead, so you don't lose a render to a flaky connection. That's the whole pipeline - no file staging on disk, no external services.

The inputs that matter

You'll touch maybe three of these:

  • webdav_url - the base URL of your server. The default is literally http://example.com/webdav/, so the first thing you do is replace it. Most setups end with a slash; keep it that way.
  • webdav_username / webdav_password - plain HTTP basic auth. Change both from the username/password placeholders.
  • save_local_when_fail - set it to Yes while you're getting the URL right. It's your safety net.

The other two: async_upload fires the upload on a background thread, and image is the render itself. The output is also an IMAGE, passed through untouched, so you can chain it into a preview or another save node and this stays out of your way.

Installing it

No requirements.txt, no model downloads, no pip dependency dance. The code only imports requests, PIL, and numpy - all of which ComfyUI already ships with. You install via ComfyUI Manager (search "Save Image To Webdav") or:

cd ComfyUI/custom_nodes
git clone https://github.com/goldwins520/Comfyui_saveimg2webdav

then restart ComfyUI. In a world where the ecosystem's #1 complaint is dependency hell, this pack is the rare clean install. It's also tiny and fairly young - a single-commit project from May 2025 - so expect exactly what you see in the README and nothing more.

Gotchas and troubleshooting

  • Your password is in your workflow file. The username and password are plaintext string inputs, so they get baked into the workflow JSON. The author's README carries an unusually blunt warning about not sharing outputs - the real leak vector is sharing a workflow that contains this node. If you share, strip the credentials first.
  • async_upload returns before the upload finishes. The queue can show "done" while a background thread is still pushing bytes. If you quit ComfyUI mid-upload, that image is gone. Keep it off unless you genuinely need the UI to not block.
  • Filenames are timestamps, not prompt names. Fine for archiving, mildly annoying if you wanted organized-by-prompt output.
  • Use https outside your LAN. Basic auth sends your credentials with every request, so plain http:// is fine on your home network and a bad idea over the internet.
  • If upload fails and save_local_when_fail is off, you just get console errors. The render is not saved anywhere. That's the footgun that bites people on the first run - flip the toggle on until you trust the server.

If your workflow is "generate on one box, everything lands on the server," this is the node. Set the URL, set the credentials, and let it run.

CategoryImage/WebDAV

Inputs (6)

NameTypeDefaultDescription
imageIMAGESingle image or multi images
webdav_urlSTRINGhttp://example.com/webdav/
save_local_when_failBOOLEANfalse
webdav_usernameSTRINGusername
webdav_passwordSTRINGpassword
async_uploadBOOLEANfalse

Outputs (1)

NameTypeDescription
imageIMAGE