Text2Video
Pure text-to-video from KLing, with real camera control
- client
- url
- video_id
This is the flagship node in the pack: no starting image, no reference photo, just a prompt in and a video out. It's the mode people mean when they compare KLing against Google Veo, Runway, or Pika in the "which paid video service is actually good" conversation - and it's the harder mode to get right, since without an anchor image the model has to invent composition, subject, and motion all at once from text alone. If you already have a specific starting frame in mind, Image2Video (elsewhere in this pack) is usually the more reliable path; reach for Text2Video when the shot itself, not just the motion, needs to come from the model.
How it works
Same async pattern as the rest of the pack - your prompt and settings go to KLing's servers, a video job renders there, and the node polls (at the rate set on the upstream Client) until a result comes back. There's no local sampler or schedule to tune; what you're really doing here is writing a good request, not configuring a render.
The inputs and outputs that matter
Required: model (kling-v1, kling-v1-6, kling-v2-master, kling-v2-1, kling-v2-1-master) and prompt.
The optional fields carry most of the actual control:
negative_prompt- steer away from unwanted elements.cfg_scale(0–1) - prompt adherence strength.mode-stdorpro;prois the higher-fidelity, higher-cost tier.aspect_ratio-16:9,9:16, or1:1. Notably narrower thanImage2Video's aspect ratio list, since there's no source image dictating an odd ratio here.duration-5or10seconds.camera_control_type(None,simple, or named presets likedown_backandforward_up),camera_control_config(which axis - horizontal, vertical, pan, tilt, roll, zoom), andcamera_control_value(-10 to 10) - KLing's real camera-motion system, the same one available onImage2Video. Worth checking KLing's own docs for which model/mode combinations actually honor camera control before relying on it in a prompt-only shot.
Outputs are url (the finished video) and video_id - chain the id into Video-Extender, Video2Audio, or Lip-Sync further down the pack without re-uploading anything.
Installing it
ComfyUI Manager: search ComfyUI-KLingAI-API, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/KwaiVGI/ComfyUI-KLingAI-API
cd ComfyUI-KLingAI-API && pip install -r requirements.txt
No local model weights - a Client node with a valid KLing AI API key wired in, region-matched via area, is what actually runs this.
Common issues
Pure text-to-video is the mode most prone to "that's not what I asked for" results, since there's no image anchoring composition - tighter, more concrete prompts (subject, setting, specific action, camera framing in words) tend to land closer to what you want than short, vague ones. Test cheap: a std mode, 5-second run to check the prompt is landing before committing to pro mode, 10 seconds, and camera control stacked together, since every combination of those settings is a separate billed call against your KLing account. And, as with every node in this pack, a request that seems to hang or fails outright almost always traces back to the Client node - bad credentials, a region mismatch on area, or an empty account balance, not something broken in Text2Video itself.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| client | KLING_AI_API_CLIENT | — | |
| model | COMBO | 5 options: kling-v1, kling-v1-6, kling-v2-master, kling-v2-1, kling-v2-1-master | |
| prompt | STRING | — | |
| negative_promptopt | STRING | — | |
| cfg_scaleopt | FLOAT | 0.50–1 | — |
| modeopt | COMBO | 2 options: std, pro | |
| aspect_ratioopt | COMBO | 3 options: 16:9, 9:16, 1:1 | |
| durationopt | COMBO | 2 options: 5, 10 | |
| camera_control_typeopt | COMBO | 6 options: None, simple, down_back, forward_up, right_turn_forward, left_turn_forward | |
| camera_control_configopt | COMBO | 6 options: horizontal, vertical, pan, tilt, roll, zoom | |
| camera_control_valueopt | FLOAT | 1-10–10 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| url | STRING | — |
| video_id | STRING | — |