Kling V2.1 Master Text to Video
5000 characters of prompt, no image required
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
When you have nothing to start from
Every other Kling node in this pack assumes you already made a frame - you generated it locally, you upscaled it, you picked it out of an old project. This one doesn't. Prompt only, no image socket, and it renders the clip.
That makes it the cheapest way to find a shot: generate a batch of candidate moves, pick the one that actually works, then rebuild it as image-to-video for control over the opening frame. KIE_Next_kling_v2_1_master_text_to_video_4fe4bc61, under KIE Next / Video / Kling.
Same ground rules. Kling is Kuaishou's closed model with no downloadable weights, so there's no local alternative and the call has to leave the machine. It goes to KIE.ai - a third-party reseller with its own account, credit balance and key, not ComfyUI's official Partner Nodes. That distinction matters for exactly two reasons: your inputs leave the machine, and every clip costs money.
The inputs
- prompt - up to 5000 characters, and unlike the newer omni nodes this one rewards length. The shipped default is a full paratrooper-scene paragraph with camera direction baked in: "a team descends into enemy territory, as they pass through clouds, the camera switches to a slow pan above the battlefield…". That's the register to write in. Say where the camera is, what it does, and one clear thing that happens.
- duration -
5or10seconds. - aspect_ratio -
16:9,9:16,1:1. - negative_prompt - up to 500 characters, default
blur, distort, and low quality. Fine as-is. This is a hint to the provider, not the conditioning channel you'd push around locally. - cfg_scale - 0 to 1, default 0.5. Lower tracks the prompt more loosely, higher hugs it tighter. Nudge down if renders look stiff; there's no benefit in slamming it to 1.0.
- timeout_seconds - 1200 seconds. callback_url - leave it empty.
No seed. If you're used to control_after_generate and re-rolling until you get the take you want, recalibrate: there's no seed input on this node, so variety comes from the prompt, and each attempt is a paid call.
Mechanism
The node builds {"model": "kling/v2-1-master-text-to-video", "input": {...}}, POSTs it to KIE's createTask, then polls the task record until it reports success, with the interval growing from about 2.5 seconds toward a 15-second cap. Rate limits and transient 5xx responses are retried with backoff inside the client. The finished MP4 is archived under output/KIE-Results/videos/ and returned as a native ComfyUI VIDEO - so it can go straight into a local interpolation, upscale or save node.
The whole thing blocks. Plan your queue accordingly, and don't hammer Generate.
Outputs
video is the wire to use. Then url (the KIE-hosted link), all_urls_json, task_id, raw_json (the provider's own account of a failure - always read it before posting a bug), and credits_consumed / credits_left. Both credit values print on the node after a successful run, which turns "is ten seconds worth it" into an arithmetic question instead of a guess. credits_left shows -1 when the balance lookup fails; the clip is still fine.
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. The key is checked against KIE before it replaces an existing one, lives in Comfy's user config area rather than your workflow, and comes back as a masked fingerprint plus a ✅ CONNECTED row with your balance. Servers can set KIE_API_KEY instead, which takes priority. Dependencies are requests, Pillow, numpy, PyYAML - no model downloads, since nothing runs locally. Manager install works where the pack is registered, and there's a ZIP plus a Windows one-click installer in the repo's dist/.
Practical notes and traps
It's a V2.1 node, so expect V2.1 behaviour. That's not a bug - it's the point. The 2.1 line is older, cheaper and, for many shots, entirely good enough. If you want native audio, or multi-shot planning, or 4K, use the 3.0 Omni nodes instead; they cost a lot more.
Don't fight a wrong aspect ratio in the prompt. Pick the box you want from the dropdown. Prompting "vertical video" changes nothing.
On timeouts: a 10-second render on a busy queue can outlast a short patience setting. Raise timeout_seconds instead of re-submitting - the second submission is a second bill.
Missing node right after install? The pack generates its model nodes from KIE's documentation index at startup and re-syncs at most once a day. First launch gives you a bootstrap set; the rest arrive after the sync and a frontend reload. Restart, then look again.
KIE task ... failed is the provider saying no. The reason is in the exception message and in raw_json. If it's a person or a brand it objects to, no amount of reprompting fixes it - that's a closed model applying its own policy, and there's nothing local to patch.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | First-person view from a soldier jumping from a transport plane — the camera shakes with turbulence, oxygen mask reflections flicker — as the clouds part, the battlefield below pulses with anti-air fire and missile trails. | The text prompt describing the video you want to generate (Max length: 5000 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 | Elements to avoid in the generated video (Max length: 500 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 | — |