Kling - V2.5 Turbo Text to Video Pro
The node I'd use to generate by the handful
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
The sweet spot in the Kling line
Turbo is Kling's speed tier. Pro text-to-video on Turbo is the combination that makes iterating on an idea survivable: no source image needed, decent quality, and a per-clip price you can look at without flinching. It's the node to open when you have a sentence and no frame.
KIE_Next_kling_v2_5_turbo_text_to_video_pro_e68cc0d3, in ComfyUI-KIE-Nodes-Next, under KIE Next / Video / Kling. Closed model, no weights, so the job goes out through KIE.ai - a reseller account with its own key and credits, not ComfyUI's official Partner Nodes. Your prompt leaves the machine and the clip is priced per second of video.
Inputs
- prompt - up to 2500 characters. The default is a useful template: "Real-time playback. Wide shot of a ruined city… Camera drops fast from the sky over burning streets…". Shot size, camera movement, then action. Write it in that order and you'll fight the model less.
- duration -
5or10seconds. - aspect_ratio -
16:9,9:16,1:1. - negative_prompt - up to 2500 characters here (more generous than the V2.1 nodes' 500), default
blur, distort, and low quality. Short and concrete beats a tag soup. - cfg_scale - 0 to 1, default 0.5. Lower tracks the prompt more loosely; higher hugs it. This is not the CFG of your local sampler; 0.5 is the middle, and pushing to 1.0 doesn't buy obedience.
- timeout_seconds - 1200 seconds of polling. callback_url - leave empty.
What happens when you hit Generate
The node assembles the documented request (kling/v2-5-turbo-text-to-video-pro), POSTs it to KIE's createTask, then polls the task record until it reports success - checks start around 2.5 seconds apart and back off to a 15-second ceiling. Rate-limit and 5xx responses are retried with backoff inside the client. The finished MP4 is downloaded into output/KIE-Results/videos/ and handed back as a ComfyUI VIDEO, so the node slots into a normal graph: save it, extract frames, upscale locally, or pick a frame out and feed it to an image-to-video node for a second pass.
The whole call is synchronous. The node sits there until the render lands, which is why timeout_seconds exists and why clicking Generate twice is a waste of money rather than a speedup.
Outputs
video is what you wire onward. url is the hosted link, all_urls_json the raw list, task_id for support threads, raw_json for the provider's own explanation when something dies, plus credits_consumed and credits_left - both also printed on the node after the run, which is the honest way to decide whether the next draft is worth it. credits_left reads -1 when the balance service is unavailable; that's not a failed generation.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
Restart ComfyUI, then Settings → KIE.ai Nodes Next → Connection → Paste / replace KIE.ai API key - validated against KIE before it overwrites a working key, kept out of workflow JSON, confirmed with a masked fingerprint and ✅ CONNECTED. For headless installs, exporting KIE_API_KEY works and takes priority over the saved key. Dependencies are just requests, Pillow, numpy, PyYAML; there's a ZIP and a Windows one-click installer in the repo's dist/ too.
Traps
- Writing a novel. 2500 characters is generous; the model doesn't need your backstory. One camera, one action, one look.
- Vertical video by prompt. Use the dropdown. Prompts don't reframe the render.
- Re-rolling for a different take. There's no seed input on this node. Variation comes from rewriting the prompt, and each submission is a billed job.
- Skipping the bootstrap wait. The pack generates its model nodes from KIE's documentation index at startup and re-syncs at most daily, so a brand-new install only has a handful of polished definitions until that finishes. Restart, wait, look again.
- Expecting a local escape hatch. There isn't one. Kling thinks the prompt is either acceptable or it isn't, and the refusal comes from the provider, not from anything in the pack. If that's a dealbreaker for your project, stay local - and accept that you'll be two tiers behind on motion quality, which is the trade the whole closed-video branch is built on.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Real-time playback. Wide shot of a ruined city: collapsed towers, fires blazing, storm clouds with lightning. Camera drops fast from the sky over burning streets and tilted buildings. Smoke and dust fill the air. A lone hero walks out of the ruins, silhouetted by fire. Camera shifts front: his face is dirty with dust and sweat, eyes firm, a faint smile. Wind blows, debris rises. Extreme close-up: his eyes reflect the approaching enemy. Music and drums hit. Final wide shot: fire forms a blazing halo behind him — reborn in flames with epic cinematic vibe. | The text description of the video you want to generate (Max length: 2500 characters) |
| durationopt | COMBO | 5 | The duration of the generated video in seconds |
| aspect_ratioopt | COMBO | 16:9 | The aspect ratio of the generated video frame |
| negative_promptopt | STRING | blur, distort, and low quality | Things to avoid in the generated video (Max length: 2500 characters) |
| cfg_scaleopt | FLOAT | 0.500–1 | The CFG (Classifier Free Guidance) scale is a measure of how close you want the model to stick to your prompt (Min: 0, Max: 1, Step: 0.1) (step: 0.1) |
| timeout_secondsopt | INT | 120030–7200 | — |
| callback_urlopt | STRING | Optional KIE callback URL. Leave empty for normal ComfyUI use. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| url | STRING | — |
| all_urls_json | STRING | — |
| task_id | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |