🎬 Agnes Image-to-Video
Animate Any Image by Handing Its URL to Agnes
- config
- images
- audio
- url
Turn a still image into a moving one - clouds drifting, water flowing, a portrait glancing up - without running a single video diffusion pass on your machine. Agnes_Image2Video is the pack's chain-closer: give it a public image URL plus a motion prompt, and it returns the finished clip as ComfyUI frames, the extracted audio, and the original video URL.
The catch is right there in the input: image_url has to be a public URL. The Agnes API can't see your local files. That's why the pack also ships Agnes_ImageToURL (uploads a local image and returns a URL) and why Agnes_Text2Image returns a url output alongside its IMAGE - this node is designed to sit at the end of either chain:
LoadImage → Agnes_ImageToURL → Agnes_Image2Video → VHS_VideoCombine
Agnes_Text2Image → [url] → Agnes_Image2Video → VHS_VideoCombine
How it works
This is an async cloud job wearing a synchronous face. The node POSTs to {base_url}/videos with the model agnes-video-v2.0, the image URL, prompt, a num_frames parsed from the duration preset, frame_rate, and num_inference_steps. The API answers with a task ID, and the node then polls {base_url}/videos/{task_id} every ten seconds until the job completes - up to a hard 15-minute ceiling. When it lands, the node downloads the mp4 into ComfyUI's output/ directory, decodes every frame with OpenCV into a [N, H, W, C] tensor batch, and extracts the audio track into the AUDIO format that VideoHelperSuite (VHS) understands.
In plain terms: the node will freeze your graph for minutes while the video cooks. That's normal. It's a cloud queue, not a local sampler.
The inputs that matter
config- from Agnes_Config.image_url- must start withhttp. Connect Agnes_Text2Image'surlor Agnes_ImageToURL's output, or paste a hosted URL.prompt- describe the motion, not the scene. The default ("clouds drifting, water flowing") is a fine starting point; your job is to say what should move and how.duration- five presets from3.4s (81 frames)to13.4s (321 frames). The frame counts follow the 8n+1 pattern video models like, and the node enforces it.frame_rate- 12 to 60, default 24.
Optional: negative_prompt (defaults to a generic "blurry, low quality" list), seed (-1 = random), and num_inference_steps (10–100, default 30 - more steps, better quality, slower).
Install
Same pack, same ritual - ComfyUI Manager or:
cd ~/ComfyUI/custom_nodes
git clone https://github.com/Watchcats211/ComfyUI_AgnesAI_Nodes.git
Restart, and you'll also want ComfyUI-VideoHelperSuite installed, because that's how you turn the images + audio outputs into a previewable mp4 inside ComfyUI. The node itself depends on torch, numpy, opencv-python (for frame decoding), and optionally imageio-ffmpeg as a fallback for audio extraction - all things a normal ComfyUI already has or can get easily.
Common issues
- Blank video out. If
image_urlis empty or doesn't start withhttp, the node skips gracefully and returns an empty 64×64 frame batch plus empty audio. A missing or expired upload from Agnes_ImageToURL produces exactly this - watch the console for "[Agnes] Image-to-Video skipped". - "It's frozen, is it hung?" Probably not. Check the console: it prints
[Agnes] [elapsed] status (progress%)while polling. If a 13.4s clip is grinding, that's a cloud queue with a long line. - No audio track. Some generated clips come back silent. The node's audio extraction handles it - it just prints that no audio was found and returns a placeholder.
- It costs money/credits per clip. Unlike a local model, every run spends your Agnes balance. A 321-frame clip is the expensive end of the range; don't treat the longest duration as the default.
That last point is the real personality of this node: it's convenience, not ownership. You trade local control and free re-runs for never downloading a video model. For one-off animating of a nice image, that's a fair swap - and the pack gives you every piece of the chain to make it painless.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| config | AGNES_CONFIG | Agnes configuration from Agnes_Config node | |
| image_url | STRING | Public image URL. Connect from Agnes_Text2Image's 'url' output, or paste a URL. | |
| prompt | STRING | The scene comes to life with gentle motion, clouds drifting, water flowing | Describe the motion you want in the video |
| duration | COMBO | 5.0s (121 frames) | Video duration |
| frame_rate | INT | 2412–60 | Frames per second |
| negative_promptopt | STRING | blurry, low quality, distorted, deformed | What to avoid in the video |
| seedopt | INT | -1-1–2147483647 | Random seed (-1 for random) |
| num_inference_stepsopt | INT | 3010–100 | Inference steps (more = better quality, slower) |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |
| url | STRING | — |