Protoface Pika 2.2 · Image to Video
The cheapest way to make a still move
- video
- files
- run id
What it's good at
Animating an image you already like. You put a still in, add a prompt describing the motion, and five seconds later you have a clip. Pika's niche has always been fast, cheap, slightly-stylised motion rather than photoreal cinema - the kind of thing you use for a social post, a looping product shot, or a quick beat in an animatic.
Compared to the Hailuo or MiniMax nodes in this pack, this is the low-stakes option. Cheaper, less ambitious, and it actually exposes duration and size instead of fixing them. If you're learning what these video APIs feel like before committing real budget to a hero shot, start here.
The usual disclaimer applies and it's not decoration: this is a network call with your key attached. Your image leaves your machine, the filter is Pika's, and each queue is money. Nothing runs locally, so a Pika node in a workflow adds zero VRAM pressure - which also makes it the one way to animate something on a laptop with a 6GB card.
The inputs
image is the still to animate - Load Image, straight in. One asset per call; batches get rejected by the adapter with "expects one asset; split the image/audio batch first."
prompt describes motion and camera. The frame already establishes the scene, so spend your words on verbs: "she turns to camera, hair moves, slow push in."
duration is a picker defaulting to 5 - choose from the listed values.
size is a pixel picker here, defaulting to 1280*720. Worth flagging because this pack is inconsistent by design: some nodes use size for aspect ratio, this one means actual dimensions. Read the tooltip before you assume.
generation_id and request_scope close it out. Fixed generation_id = reuse or resume the same paid job; incremented = new generation, and there's no seed field so you can't re-roll the same clip on purpose. request_scope is auto-assigned in the UI and must be supplied by hand in headless workflows.
Outputs
video - a native VIDEO and a list, so several results flow into Save Video or Video Combine without a loop node. files holds the untouched originals as PROTOFACE_FILE (this is what Protoface Save File writes), and run id is the string that identifies the job in your Protoface account - also the input to Protoface Resume Run when a run needs recovering.
Install
cd ComfyUI/custom_nodes
git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git protoface
python -m pip install -r protoface/requirements.txt
ComfyUI 0.41.0+, Python 3.10+, and the four dependencies httpx, jsonschema, Pillow, av>=14. Manager users can skip the clone: search Protoface, install protoface-nodes, restart ComfyUI, reload the browser. Then the Protoface button in the lower-right, and your key.
There are no model files to fetch - that's the whole idea - so if a tutorial tells you to download something for this node, it's about a different pack.
Where people get bitten
Framing. Pika animates what it's given, including a bad crop, so do your reframing before you queue rather than paying for a clip you'll crop in post.
Portrait vs landscape. size defaults to 1280x720 (landscape); feeding a portrait still and leaving the default gets you a letterboxed or stretched result faster than you'd expect.
And the recovery pattern that matters on every node in this pack: browser disconnect or timeout means a job that still exists. Requeue with the same generation_id, or resume with run id - don't increment the ID, and don't delete ~/.cache/protoface-comfyui, which is where the record of the submission lives. Cancels are best effort; there's no refund promise attached to hitting stop.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The positive prompt for the generation. | |
| image | COMBO | A public URL, a data URI, or an asset id. | |
| duration | COMBO | 5 | The duration of the generated media in seconds. |
| size | COMBO | 1280*720 | The size of the generated media in pixels (width*height). |
| 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 | — |