π± Gemini Motion
Describe a video like a human who actually watched it
- image
- system_instruction
- response
Gemini Motion is the pack's video-description node - the one that takes a clip and returns a rich description of what's happening in it, including the movement and timing that a single still image can't capture. It's the video sibling of Gemini Vision, and it exists for the workflow you actually care about once you start generating motion: you made a clip, you need to know what it "is" so you can re-prompt it, extend it, or describe it for a Veo-class model.
It's part of the Artha-Gemini pack (the π± Gemini nodes), and like every node in the pack it does its thinking via Google's cloud API - no local model, no VRAM cost, just an API key.
How it works
The name is a slight lie: the input is called image, and it's a standard ComfyUI IMAGE tensor. To describe a video, you feed it the frames as a batch - the same way you'd feed frames to a VAE or an interpolation node. The node iterates over the batch, converts each frame to a PIL image, and sends the whole sequence to Gemini alongside your text_prompt (default: Describe this video in detail.).
The clever bit is the resize dropdown, which exists because Gemini API calls get expensive and slow when you upload a full-resolution batch of frames. You can downscale the shortest side to 480p, 360p, or 240p before upload - a built-in budget control. For a long clip that's the difference between a snappy call and a painfully slow one, and honestly you lose almost nothing for description purposes.
The bundled "motion" agent is tuned to describe action, timing, and movement, not just a static scene list - which is the whole point of using a motion-focused agent rather than a generic captioner. Output gets * and # characters stripped, and you get a single response string.
Inputs and outputs
- image - an IMAGE tensor, i.e. a frame batch (from a video-loader node like VHS or ComfyUI's own video tools).
- text_prompt - what to ask, default
Describe this video in detail. - resize - None / 480p / 360p / 240p. Use this for long or high-res clips.
- system_instruction (optional) - the
ARTHAINSTRUCTslot, if you want a custom agent via Gemini Instruct.
Shared API block: api_key, model, max_tokens, temperature, defaulting to gemini-2.5-flash. Output: response (STRING).
Installing it
Via ComfyUI Manager (search Artha-Gemini) or:
cd ComfyUI/custom_nodes
git clone https://github.com/Cyrostar/ComfyUI-Artha-Gemini
cd ComfyUI-Artha-Gemini
pip install -r requirements.txt
No model downloads. You need a Gemini API key from Google AI Studio - this node always makes a live call, and video calls cost more than image calls.
Where people get burned
The #1 mistake is expecting a video-file input. This node takes a frame batch, not a .mp4 path - so you must decode the video to frames first. Feed it a raw video path and nothing connects.
Second, token math. A long, high-res frame sequence is a lot of image tokens, and Gemini has input limits. The resize dropdown is your friend, but it only downscales - it doesn't drop frames. If your clip is both long and high-fps, extract fewer frames before you hit this node, or the call will fail with an input-length error.
The pack's standard gotchas apply: keep the key in api.json (gemini_api_key) or the GEMINI_API_KEY env var rather than the plain-text workflow field, and watch the bill - this is the most expensive node in the pack per run. And remember the output is a description, not a motion-spec: it's great for understanding and re-prompting a clip, but don't treat it as a technical analysis.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | β | |
| text_prompt | STRING | Describe this video in detail. | β |
| resize | COMBO | None | 4 options: None, 480p, 360p, 240p |
| api_key | STRING | API key will be visible in plain text. Consider adding your api to the api.json located inside this custom node folder. | |
| model | COMBO | gemini-2.5-flash | 5 options: gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.0-flash, gemini-2.0-flash-lite |
| max_tokens | INT | 50001β8192 | For Gemini models, a token is equivalent to about 4 characters. 100 tokens is equal to about 60-80 English words. |
| temperature | FLOAT | 0.70β2 | A temperature of 0 means only the most likely tokens are selected, and there's no randomness. Conversely, a high temperature injects a high degree of randomness into the tokens selected by the model, leading to more unexpected, surprising model responses. |
| system_instructionopt | ARTHAINSTRUCT | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| response | STRING | β |