Protoface Kling 3.0 Pro · Image to Video
Motion that starts where your frame left off
- video
- files
- run id
Animate a frame, then decide where it ends
Kling's whole reputation is movement. Where a lot of video models produce something that drifts pleasantly, Kling produces things that happen - a head turns, a coat swings, a hand reaches. For image-to-video that's the difference between a living photo and a cinemagraph.
This is Kling 3.0 Pro's image-to-video task in Protoface, the beta pack wrapping hosted models as native ComfyUI nodes. Paid per generation, remote, no local weights. Your first frame goes in; a clip comes out. Optionally you also set where it should end.
The workflow that makes this node shine: generate your key frame with whatever image model you trust - Nano Banana, Qwen-Image-Edit, a local FLUX run - then animate it here. You're using each model for what it's actually best at instead of asking one to do both.
How it works
Same shared adapter as everything in the pack: schema-derived controls, validation before submission, media upload (content-hashed and cached), an intent journal in SQLite so a crash doesn't double-charge, submit, poll, download, native VIDEO.
Notice that prompt on this node is a media-style control rather than a plain text box - Default / Set / Null. That's because Kling accepts either a single prompt or a multi-shot prompt list, and the pack models the exclusivity properly: provide exactly one of prompt or multi_prompt. Set prompt for the straightforward case; use the multi-shot helper nodes when you want the clip divided into shots.
generation_id is the paid-request switch. Fixed = reuse or resume. Incremented = spend.
The inputs that matter
image is the start frame, and it does most of the work. A clean, well-lit frame with an obvious subject will animate far better than a busy one. It's a media input with native Image mode, plus a References mode for asset ids and reused results.
end_image is optional and worth using: set both ends and Kling interpolates toward your target. It's media-style, so leaving it on Default means the field isn't sent at all.
prompt - describe the motion, not the picture. And if you're writing multi-shot, the tooltip mentions the reference syntax: <element_1>, <image_1>, <video_1> style tags let you point at a specific element, image or video inside the prompt. That's how a multi-shot sequence keeps a consistent subject.
duration defaults to 5 s as a combo. cfg_scale (default 0.5) is Kling's prompt-adherence dial: up means tighter to your prompt and less model improvisation, down means more freedom. sound and negative_prompt are omitted by default - turn them on deliberately.
Outputs
video (native VIDEO, list), files (PROTOFACE_FILE list of every original download), run id (string, for Protoface Resume Run). Video jobs are long; the run id is the one thing that gets your money back if the tab dies.
Install
Manager → search Protoface → install protoface-nodes → restart → reload the browser. Manual, from the ComfyUI directory:
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
ComfyUI 0.41.0+ and Python 3.10+; use the interpreter your install runs on (the Desktop managed env, or python_embeded/python.exe on Windows portable). Then click Protoface in the lower-right and enter a key from your Protoface account.
Where people get burned
Setting both prompt and multi_prompt. Validation failure. One or the other.
Frames with mismatched aspect ratios. If your start frame is square and you've asked for 16:9 elsewhere in the graph, don't expect consistency to sort itself out - the input image sets the geometry.
Not reading which controls are omitted by default. sound and negative_prompt are Default, meaning they're not sent. A "the audio didn't generate" question is usually answered by the sound control being on Default.
Treating an interrupted run as free. Cancellation is best effort, no refund implied. Check the run in your account, then recover with the run id rather than queueing a fresh paid job.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | COMBO | Text prompt for video generation. Either prompt or multi_prompt must be provided, but not both. Specify a element, image, or video in the format of<<<>>, such as<<element_1>>>,<<<image_1>>>,<<<video_1>>>. Provide exactly one of: multi_prompt, prompt. | |
| image | COMBO | A public URL, a data URI, or an asset id. | |
| duration | COMBO | 5 | The duration of the generated media in seconds. |
| cfg_scale | FLOAT | 0.50–1 | Flexibility in video generation; The higher the value, the lower the model's degree of flexibility, and the stronger the relevance to the user's prompt. |
| end_image | COMBO | A public URL, a data URI, or an asset id. | |
| multi_prompt | COMBO | List of prompts for multi-shot video generation. If provided, divides the video into multiple shots. Provide exactly one of: multi_prompt, prompt. | |
| negative_prompt | COMBO | The negative prompt for the generation. | |
| shot_type | COMBO | customize | Shot type for the generation. |
| sound | COMBO | Whether sound is generated simultaneously when generating a video. | |
| 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 | — |