🔱 Artha Gemini Motion
Get a real description of a video, frames and all
- images
- response
Artha Gemini Motion is the video-description node in the Artha pack, and the trick it pulls is quietly impressive: ComfyUI doesn't have a native "video" tensor that Gemini can swallow, but it does have image batches, and a video is just a batch of frames. So this node takes your frames, sends them to Gemini as a sequence, and gets back a rich description of what's actually happening - motion, cuts, subject movement, all of it. If you've ever needed to caption a generated video, write a prompt from an existing clip, or turn a source video into text for a regeneration workflow, this is the node.
The description spells out the one caveat up front: if your video is too large, the built-in resizer can bring it down to a reasonable size before the API call.
What you set
images- the required IMAGE input. This is your video as a batch of frames, the way any video-in-ComfyUI setup produces them (VHS, VideoHelperSuite, or a Load Video node feeding a frame sequence).text_prompt- what you want described. Defaults to "Describe this video in detail," but you can ask for specifics: "describe the camera movement" or "list the scene changes."resize- the built-in resizer, with optionsNone,480p,360p,240p. This is your valve for keeping the request under API limits - smaller frames means fewer pixels per frame for Gemini to chew through.system_instruction- optional; if you leave it blank the node loads its own motion agent prompt.- The pack's usual
api_key,model(gemini-2.5-flash),max_tokens,temperature.
The single output is response - a plain string describing the video. Route it into a display node (Artha Gemini Markdown or Response) to read it, or straight into a prompt encoder if you're regenerating.
How it behaves
Each frame in the batch is converted to a PIL image and resized if you picked one of the presets, then the whole sequence is passed to Gemini's generate_content as an image list. One detail to know: the node strips * and # characters from the response, so what comes back is clean prose rather than markdown artifacts. It also loads a motion-specific system prompt automatically unless you override it, which is why the defaults produce useful results without you writing an instruction.
The practical notes
Frame count and resolution are the two dials that matter. A long video at high resolution is the classic way to blow through the API's request limits - use the resize presets and consider not feeding every single frame. If response comes back empty, that's the pack's standard failure signature: error printed to the ComfyUI console, empty string returned. Key resolution is the pack standard too - api_key field, then api.json, then GEMINI_API_KEY.
One more thing worth knowing: this node is vision-only, so there's no offline mode. Every run is a paid Gemini call, which means a 600-frame video could mean a pricey request. Trim your frame count and resize before you hit it, not after your bill arrives.
Install
Shared with the rest of the 🔱 pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Cyrostar/ComfyUI-Artha-Nodes
cd ComfyUI-Artha-Nodes
pip install -r requirements.txt
Restart ComfyUI, or install "Artha" via ComfyUI Manager. Get a key from Google AI Studio - this node genuinely needs one.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| images | 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. Higher values increase randomness. |
| system_instructionopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| response | STRING | — |