Protoface Kling 3.0 Pro · Text to Video
Multi-shot storyboards from one node
- video
- files
- run id
Kling, and the feature nobody else has
Kling built its reputation on motion - the models that make a figure actually move rather than drift. Kling 3.0 Pro is the current generation, and this node is its text-to-video task, via Protoface, the beta pack that puts hosted models on the ComfyUI canvas. Paid per generation, remote, no weights.
The thing that makes this node more than "Kling in a box" is multi_prompt. Instead of one prompt for one clip, you build a list of shots - each with its own prompt segment and duration - and the model renders them as a single cut sequence. For anyone who's been rendering three separate clips and stitching them in a video editor, that's a real workflow change.
The catch is equally real: the shot durations have to add up to duration, and getting that arithmetic wrong is the number one error on this node.
How it works
Everything runs through the pack's shared adapter: schema-derived controls, payload validation, upload, journal, submit, poll, download, native VIDEO. The multi-shot control isn't a text box - it's a list input that takes typed helper nodes. You search the model name plus "Shot", connect one helper per shot, and set the control to Set. Same mechanism the pack uses for Kling transitions and keyframe lists.
generation_id is the paid-request identity, separate from any seed. Keep it fixed to reuse/resume; increment to buy another generation.
The inputs that matter
prompt vs multi_prompt is an exclusive choice - the tooltip spells it out: provide exactly one of them, not both. Single prompt for one continuous shot; multi-shot when you want cuts.
duration defaults to 5 seconds and is a combo, not a free number. This is the budget your shot list has to sum to.
cfg_scale (default 0.5, range 0–1) is worth understanding, because it's not the CFG you know from a local sampler. Higher values reduce the model's flexibility and bind it more tightly to your prompt; lower values let it improvise. If your clips keep ignoring the prompt, this goes up. If they look stiff, this comes down.
shot_type defaults to customize - the mode that lets your multi-prompt list drive the structure.
sound is media-style (Default omits it entirely), so audio is an opt-in here rather than something baked into the run.
negative_prompt likewise defaults to omitted. aspect_ratio is 16:9 out of the box; change it before you render, not after.
Outputs
video (native VIDEO, list), files (PROTOFACE_FILE list of originals), run id (string). If you're chaining - into Extend, into another Protoface video input, into an editor - files is the honest source of what the provider actually returned.
Install
Manager → search Protoface → install protoface-nodes → restart → reload the browser. Manual:
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+, using ComfyUI's interpreter. Then click Protoface in the lower-right corner and paste a key from your Protoface account. The helper shot nodes only exist once the pack's frontend has loaded, so if searching "Shot" finds nothing, reload the browser rather than reinstalling.
Where people get burned
Shot durations that don't sum to duration. Instant validation failure, and the message will point at the field. Do the arithmetic before you build the list.
Setting both prompt and multi_prompt. Mutually exclusive by contract. Pick one.
Expecting the shot helpers to appear like normal nodes. They're generated from the model's schema, so they show up under Protoface/Structured Controls - search the model name plus "Shot" rather than browsing for Kling.
Chasing a reroll without incrementing generation_id. You'll get the recorded job. Deliberate: it's what stops a crashed run from becoming two charges.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The positive prompt for the generation. | |
| duration | COMBO | 5 | The duration of the generated media in seconds. |
| aspect_ratio | COMBO | 16:9 | The aspect ratio of the generated video. |
| 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. |
| multi_prompt | COMBO | List of multi-prompt shot segments for the generation. | |
| 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 | — |