Nodes/UIIIAIII Toolkit/Agnes Keyframe Animation (agnes-video-v2.0)
ComfyUI Node

Agnes Keyframe Animation (agnes-video-v2.0)

Two images, one believable transition

By uiiiaiii·Created 23 days ago·Updated 10 days ago· 0
Agnes Keyframe Animation (agnes-video-v2.0)
  • image1
  • image2
  • video
◄promptGenerate a smooth cinematic transition between the keyframes, maintaining visual consistency and natural camera movement►
◄ratio16:9►
◄resolution720p►
◄duration5s►
◄frame_rate24►
◄negative_prompt►
◄seed0►
◄num_inference_steps0►
◄poll_interval5►
◄max_wait_time600►

Hand it a start frame and an end frame, get the motion in between. That's the classic animation problem - keyframes plus tweening - and doing it with a video model instead of a curve editor gets you the messy, organic version of the in-between: the camera drifts, fabric settles, light changes, instead of everything morphing on a straight line.

This is the third Agnes video node in UIIIAIII Toolkit, and the one that maps most directly onto real work: a before/after pair, a product rotating, a character changing expression, a location at two times of day. If you've been paying for Kling or Veo for exactly this job, this is a free-tier substitute for the simple case.

It's also the node where the naming oversells slightly. "Keyframe animation" suggests a timeline of many frames; the node takes exactly two, both required. Two keyframes is enough for a lot, and not enough for a walk cycle.

Inputs

Required:

  • prompt - what happens between the frames. It ships with a sensible default you can leave alone: "Generate a smooth cinematic transition between the keyframes, maintaining visual consistency and natural camera movement." Overwrite it when you want a specific beat ("she turns her head toward the window as the light fades").
  • image1 - keyframe 1, the start.
  • image2 - keyframe 2, the end.
  • ratio - 16:9, 9:16, 1:1, 4:3, 3:4.
  • resolution - 480p, 720p, 1080p.
  • duration - 3s / 5s / 10s / 18s.
  • frame_rate - 1–60, default 24.

Optional: negative_prompt, seed (non-zero is passed through, 0 means unspecified), num_inference_steps (0 = API default), poll_interval, max_wait_time (default 600 seconds).

Output: video (VIDEO) - with the usual fallback to a video_path string on ComfyUI builds that predate the video type.

Fair warning on ratio and resolution: in keyframe mode the pack doesn't send width/height at all, because the upstream spec derives output dimensions from the supplied frames. So the clip takes its shape from your two images, and the two dropdowns mostly sit there looking important. Make image1 and image2 the same size and the aspect you want before this node and you'll never think about it again.

How it works

Both frames get encoded as PNG data URIs. The task is created in a distinct mode rather than as a plain image-to-video call - the pack sets a keyframes mode with the images as an array, alongside your frame count and frame rate - then it polls the job and downloads the result. You'll see "Keyframe 1/2 encoded…", then job status text, then a download step, all reported in the node.

The pack validates frame counts against the API's 8n+1 rule with a 441-frame ceiling, which the duration presets (81/121/241/441 frames) already satisfy. Frame rate is sent as you set it, so the preset label is really about frame count: 121 frames is five seconds at 24fps and about two seconds at 60.

Two-minutes-of-your-life realism: these jobs are slow and the queue is blocked while the node polls. A 1080p 10-second transition is the kind of thing you start and go do something else during. Bump max_wait_time if you're going long; the default is 10 minutes and it goes to an hour.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/uiiiaiii/UIIIAIII_Toolkit.git
# restart ComfyUI

Or find UIIIAIII Toolkit in ComfyUI Manager. Nothing to download: the pack's only real dependency is requests>=2.28.0, and the API returns a finished MP4 which the node wraps as a VIDEO. If you already installed the pack for anything else - the Qwen nodes, the category manager - you already have this.

Key: get one at platform.agnes-ai.com and put it in Settings → UIIIAIII Toolkit → ① Node API. It lands in config.json inside the pack folder, in plaintext, and that file outranks the AGNES_API_KEY environment variable for these nodes. "API Key not found" while an env var is set is usually this.

What actually goes wrong

Frames of different sizes. The API infers dimensions from the frames; mismatched inputs are how you get a squeezed or letterboxed result. Resize first.

A visible jump or a crossfade instead of motion. The model interpolates plausibly, not physically. If the two frames differ in content rather than state (different person, different scene), you get a dissolve, and no prompt will fix that. Keep the frames recognisably the same subject and place.

"Keyframe image encoding failed." A bad tensor on either socket - most often a MASK. Both inputs want IMAGE.

The transition is dull. The default prompt asks for "natural camera movement" and a stable scene; that's the safe default, not the limit. Say what should change - "the sun drops, shadows lengthen, she smiles at the end" - and the model has something to work with.

No progress for a while. Connection-level poll failures are retried silently rather than aborting the job, so brief silences are normal. A real failure shows up as a timeout error naming the video id.

CategoryUIIIAIII Toolkit/Agnes

Inputs (12)

NameTypeDefaultDescription
promptSTRINGGenerate a smooth cinematic transition between the keyframes, maintaining visual consistency and natural camera movementDescribe the transition between keyframes
image1IMAGEKeyframe 1 (start frame, required)
image2IMAGEKeyframe 2 (end frame, required)
ratioCOMBO16:9Video aspect ratio
resolutionCOMBO720pVideo resolution preset
durationCOMBO5sVideo duration
frame_rateINT241–60Video frame rate (1-60)
negative_promptoptSTRINGNegative prompt describing what to avoid
seedoptINT00–18446744073709550000Random seed (0 means not specified)
num_inference_stepsoptINT00–200Inference steps (0 uses the default value)
poll_intervaloptINT51–60Task polling interval (seconds)
max_wait_timeoptINT60060–3600Maximum wait time (seconds)

Outputs (1)

NameTypeDescription
videoVIDEO—