🖼️ Agnes Image-to-URL
Your Local Image, Uploaded, Because the Cloud Can't See Your Hard Drive
- image
- url
Here's the awkward thing about image-to-video through a cloud API: the API lives on someone else's servers, and those servers can't read a file path on your machine. Agnes image-to-video expects a public URL it can download, and nothing you generate locally in ComfyUI has one. Agnes_ImageToURL is the bridge - it takes any ComfyUI IMAGE, uploads it somewhere public, and hands you back a URL the API can fetch.
It exists for one workflow: Agnes_ImageToURL → Agnes_Image2Video. Without this step, image-to-video is a non-starter unless you already have a URL from somewhere else (like Agnes_Text2Image's url output, which is why that node also returns one).
How it works
Mechanically it's simple and honest about it. The node takes the first frame of whatever IMAGE batch you connect (so if you feed it a video's worth of frames, it only uploads frame 0), converts it to a PNG in memory, and POSTs it to storage.to's anonymous upload endpoint. Three retries with a short backoff, then it returns the public URL as a plain STRING. That's the whole node.
The one optional input is filename_prefix (default agnes_i2v_source) - it only names the temporary uploaded file, and it's sanitized for safety. Rename it if you want the remote file identifiable, otherwise leave it alone.
Install and dependencies
Same pack, same install - ComfyUI Manager search "AgnesAI", or:
cd ~/ComfyUI/custom_nodes
git clone https://github.com/Watchcats211/ComfyUI_AgnesAI_Nodes.git
Then restart ComfyUI. This node needs numpy and Pillow to encode the PNG, both already present in any working ComfyUI. If they're somehow missing, it prints a warning and returns an empty string.
What to watch out for
- Your image leaves your machine. Uploading to
storage.tomeans the image now lives on a third-party anonymous file host, at least temporarily. If you're working with something private, think before you run this. This is the one privacy gotcha in the pack and it's easy to miss because the upload is invisible. - Empty URL = the rest of the chain silently fails. If the upload throws, the node returns
""with a console message. Agnes_Image2Video checks for a URL that doesn't start withhttp, prints "skipped", and hands you empty placeholders - so a blank URL upstream tends to look like a blank video downstream. Watch the console. - Short-lived links. The URLs are meant to be consumed while they're fresh, in the same run. Don't save the workflow and expect to re-run it next week - by then the image is likely gone.
It's a utility node with a single purpose, and it does that one thing cleanly. You'll reach for it exactly when you want to animate a locally generated image, which is precisely when it saves you from manually hosting a file. Nothing more, nothing less.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | Connect any ComfyUI image output here | |
| filename_prefixopt | STRING | agnes_i2v_source | Used only for the temporary uploaded filename |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| url | STRING | — |