KY Upload Files
POST your generated media straight out of the graph
- input_video
- input_image
- input_audio
- response_json
Normally when a ComfyUI workflow finishes, the output sits in your output/ folder and that's the end of the pipeline - a person, or a separate script, has to go fetch it. KY_Uploads skips that handoff: it takes whatever you generated (video, image, audio, or a blob of JSON) and POSTs it directly to a URL you give it, with whatever headers you need for auth. It turns the last node in your graph into the delivery step instead of just the finish line.
It ships in ComfyUI-KYNode, a small utility pack from a dev going by "yorkane" that's mostly built around exactly this pattern - getting ComfyUI's outputs talking to something outside ComfyUI. It's genuinely obscure; there's basically no community chatter about it to draw on, so what follows is grounded in the node's own schema rather than war stories from Reddit.
How it works
You point it at one or more upload endpoints, optionally attach headers (an API key, a bearer token, whatever your receiving server wants), and connect one of its media inputs. On execution it uploads the file and gives you back whatever the server responded with, as a string, so you can inspect it or parse it downstream. There's no model here and nothing to configure beyond "where does this go and how do I authenticate" - it's a thin HTTP client wearing a ComfyUI node.
Inputs and outputs that matter
Two required fields, both plain multiline text boxes:
upload_urls- the destination address(es). Multiline suggests you can list more than one endpoint and fan the same upload out to all of them in a single run.headers- custom request headers, most commonly an auth token for whatever service you're pushing to.
Everything else is optional, and you only need to connect one of these depending on what you're sending:
input_video,input_image,input_audio- the actual media, wired straight from a Save/Load node upstream.input_json- a text blob if what you're sending is structured data rather than a file.local_file_path- a path on disk instead of a wired-in tensor, for when the file already exists somewhere on the executor's filesystem.
The single output is response_json - whatever the destination server sent back. Wire this into a JSON-parsing node or a debug output if you need to confirm the upload actually landed, or to pull an ID or a hosted URL out of the response.
How to install it
Via ComfyUI Manager: search "ComfyUI-KYNode", install, restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/yorkane/ComfyUI-KYNode
Restart afterward. The README doesn't mention any special Python dependencies for this node, so a plain clone is the whole install - no models, nothing to download.
Common issues & troubleshooting
Nothing happens / no request goes out. All the media inputs are optional, so it's easy to wire the node up, fill in upload_urls, and forget to actually connect a video, image, audio, JSON string, or local path. Without one of those five, there's nothing to upload.
Upload fails and you don't know why. Check response_json first - that's the node's only feedback channel, and it should carry whatever error the receiving server sent back (bad auth, wrong content type, endpoint down). Don't skip wiring it up "for now"; it's your only debugging tool when this node misbehaves.
It works locally but not when the workflow runs remotely. If your workflow executes on a hosted GPU rather than your own machine - which is the normal case if you're running this via an API or a cloud service instead of a local install - then upload_urls has to point somewhere genuinely reachable from that remote worker. A URL on your home network or localhost will fail from there even though it'd work fine on your own desktop.
Headers format is unclear. The README doesn't spell out the exact syntax for the headers field, and there's no tooltip on it either. If your auth header isn't being picked up, try the common convention - one Header-Name: value pair per line - and check response_json for a 401/403 to confirm whether the server even saw it.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| upload_urls | STRING | — | |
| headers | STRING | — | |
| input_videoopt | VIDEO | — | |
| input_imageopt | IMAGE | — | |
| input_audioopt | AUDIO | — | |
| input_jsonopt | STRING | — | |
| local_file_pathopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| response_json | STRING | — |