Protoface Grok Imagine Video 1.5 · Image to Video
Give Grok Imagine a Still and Get Motion Back — No Video Model on Your Disk
- video
- files
- run id
You've got an image you like. You want it to move. The local answer in 2026 is Wan or LTX on a card with enough VRAM to hold the whole thing, a five-to-ten-minute render for six seconds of footage, and a folder of weights you had to pick between quantisations of. The other answer is this node: wire the image in, write a sentence about the camera, and let xAI's Grok Imagine Video 1.5 do it remotely.
I won't pretend that's the same trade - you're paying per clip and your frames leave the machine. But for six seconds of footage the comparison keeps landing in Grok's favour on speed and polish, and people are blunt that it's cheap for what it is. The local-video threads usually contain someone saying the honest version: you can get close, and it'll cost you an evening and a hot GPU.
What it does
Grok Imagine Video 1.5 is a closed xAI model - no weights, no local option, which is exactly the case where an API node is the right tool rather than a lazy one. This particular task is video.animate: one image in, one short video out, with the motion described in text.
Protoface itself is a thin adapter. The pack generates its node classes from a bundled catalog at import (44 models, 95 tasks at 0.1.0), and the 632138a16e53e760 on the end of the class name is a hash of this model, this task, this schema. Old schema versions get archived and stop accepting new submissions, so if your saved workflow grows an [Archived] node, that's why - pick the current one and recover the result with Resume Run.
Inputs that matter
image is the star and it's a dynamic input with two usable modes. Image takes a wire from Load Image, an IMAGE from a local sampler, or anything else that outputs images. References takes a Protoface Asset Reference or a reused result asset - that's how you chain a previous job without re-uploading the file.
One image, not a batch. The adapter's own error message is expects one asset; split the image/audio batch first, which is what you'll see if you forgot your Load Image was set to a four-image batch. Split it, or use Batch Images → and feed them one at a time.
prompt describes motion, not content: camera moves, subject action, pacing. The image is already supplying what's in frame, so "slow dolly in, she turns her head toward the window, steam rising" does more than a paragraph re-describing the scene.
resolution gives you 480p, 720p, 1080p, default 720p, and duration is an integer from 1 to 15 seconds, default 6. Both of those are direct cost levers - remember this is metered.
Notice what isn't here: there's no aspect_ratio. In image-to-video the output takes its shape from your still, so you decide framing by choosing or generating the source image at the right proportions. There's also no seed. generation_id is a billing identity, not a randomness control - keep it fixed to reuse or resume the same paid job, increment it for a new one. request_scope is auto-assigned and isn't a secret; you only supply it in headless setups.
Outputs are video as a native VIDEO socket, a files list of the original assets, and a run id. The video socket goes straight into core's Save Video or a VideoHelperSuite combine node, no conversion node in between - that's the nicest part of this pack, it speaks Comfy's native media types instead of handing you a file path.
Install
ComfyUI 0.41.0+ and Python 3.10+. Manager → search Protoface → install protoface-nodes, restart, reload the browser. Or manually:
git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git custom_nodes/protoface
python -m pip install -r custom_nodes/protoface/requirements.txt
Requirements are httpx, jsonschema, Pillow, av - PyAV is the one doing real work here, because it's what wraps the returned MP4 into a native video object. Install with ComfyUI's interpreter. Then click Protoface in the lower-right corner and paste your API key; for servers use PROTOFACE_API_KEY or PROTOFACE_API_KEY_FILE instead.
Things that go wrong
The key is held in memory only and vanishes when the server restarts. Re-enter it before you debug anything else.
Long clips are where this gets expensive; 15 seconds at 1080p is not a test render. Iterate at 480p and short durations, then rebuild the prompt at full length.
If a job times out or your browser drops, don't touch generation_id. Preserve the scope and the id and requeue, or use Resume Run with the run id - the pack journals the request before it submits and reuses its idempotency key, so you don't buy the same clip twice. Increment it and you absolutely will.
And a straight one: Reddit has zero threads about this pack as of the last corpus pull. There's no crowd-sourced troubleshooting to lean on yet, so keep PROTOFACE_STATE_DIR (default ~/.cache/protoface-comfyui) intact if you're chasing a lost job - that directory is the recovery record.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text description of the desired motion, camera movement, and scene. | |
| image | COMBO | A public URL, a data URI, or an asset id. | |
| resolution | COMBO | 720p | Output video resolution. |
| duration | INT | 61–15 | Output video duration in seconds. |
| generation_id | INT | 00–9007199254740991 | Keep fixed to reuse/resume this paid job. Increment for a fresh paid generation; independent of the model seed. |
| request_scope | STRING | Automatically assigned per node. Headless clients must supply a stable unique workflow/node ID. This is not a secret. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| files | PROTOFACE_FILE | — |
| run id | STRING | — |