Upload Image (from Tensor)
Upload the image your SD pipeline just made, straight from the tensor
- animon_key
- image
- IMAGE_ID
The node that connects local generation to cloud video
This is the upload node for the case where your first frame doesn't exist as a file yet - it's a tensor, fresh out of your local SD pipeline. Animon Upload Image (from Tensor) takes a ComfyUI IMAGE, converts it to PNG bytes in memory, uploads it to Animon, and returns an IMAGE_ID you can feed straight into Start-End to Video.
It's the bridge between the local and cloud halves of the workflow. The README's example literally shows it chained after LoadImage as an alternative to uploading files directly: LoadImage → Animon Upload Image (from Tensor). But its real home is the end of a generation chain - KSampler → VAE Decode → this node → Start-End to Video - where saving and reloading a file would be pure waste.
How it works
The node converts the input IMAGE tensor to a PIL image (tensor_to_pil), then to an in-memory PNG buffer, then calls Animon's files.create with purpose="video_generation" and returns the server's file ID. All the work is done in memory - nothing touches your disk, nothing gets re-encoded into a lossy intermediate. The image input is a plain IMAGE tensor, and the output is the ANIMON_IMAGE_ID that the interpolation node wants.
One thing worth knowing: the conversion path is capped at 6000 × 6000 pixels in the source. Anything your local pipeline produces will upload fine; it's just a sanity ceiling on the tensor-to-PIL conversion rather than something you'll normally hit.
Installing and the honest trade-off
Pack-standard install: ComfyUI Manager → search ComfyUI-Animon → restart, Key node wired in, no extra models. If you cloned manually, pip install -r requirements.txt covers it (just openai and decord).
The trade-off is where you use it. This node is ideal when the frame comes from your own diffusion - you're only ever a few nodes from the IMAGE_ID. If you already have the image as a file on disk, Upload Image (from File) is simpler and gives you the same IMAGE_ID. The other thing to remember: this is still an upload to a cloud service, so it costs time on your connection and the generation it feeds is a paid API call. Uploading the same tensor twice is wasted effort - hold onto the IMAGE_ID and reuse it, exactly like the README's tip about reusing IDs when start and end frames match.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| animon_key | ANIMON_KEY | — | |
| image | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE_ID | ANIMON_IMAGE_ID | — |