klingai-text-to-video
'Generate videos from text prompts with Kling AI. Use when creating videos
Allowed Tools
ReadWriteEditBash(npm:*)Grep
Provided by Plugin
klingai-pack
Kling AI skill pack - 30 skills for AI video generation, image-to-video, text-to-video, and production workflows
Installation
This skill is included in the klingai-pack plugin:
/plugin install klingai-pack@claude-code-plugins-plus
Click to copy
Instructions
Kling AI Text-to-Video
Overview
Generate videos from text prompts using the /v1/videos/text2video endpoint. Supports models v1 through v2.6, standard/professional modes, camera control, negative prompts, and native audio (v2.6+).
Endpoint: POST https://api.klingai.com/v1/videos/text2video
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
model_name |
string | Yes | Model version (see model catalog) |
prompt |
string | Yes | Video description, max 2500 chars |
negative_prompt |
string | No | What to exclude from generation |
duration |
string | Yes | "5" or "10" seconds |
aspect_ratio |
string | No | "16:9" (default), "9:16", "1:1", etc. |
mode |
string | No | "standard" (default) or "professional" |
cfg_scale |
float | No | Prompt adherence (0.0-1.0, default 0.5) |
camera_control |
object | No | Camera movement config |
callback_url |
string | No | Webhook URL for completion notification |
Complete Example — Python
import jwt, time, os, requests
BASE = "https://api.klingai.com/v1"
def get_headers():
ak, sk = os.environ["KLING_ACCESS_KEY"], os.environ["KLING_SECRET_KEY"]
token = jwt.encode(
{"iss": ak, "exp": int(time.time()) + 1800, "nbf": int(time.time()) - 5},
sk, algorithm="HS256", headers={"alg": "HS256", "typ": "JWT"}
)
return {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
# Create text-to-video task
response = requests.post(f"{BASE}/videos/text2video", headers=get_headers(), json={
"model_name": "kling-v2-6",
"prompt": "Aerial drone shot of a coral reef at golden hour, "
"tropical fish swimming through crystal clear water, "
"sun rays penetrating the surface, cinematic 4K",
"negative_prompt": "blurry, low quality, distorted, watermark",
"duration": "5",
"aspect_ratio": "16:9",
"mode": "professional",
"cfg_scale": 0.5,
})
task = response.json()
task_id = task["data"]["task_id"]
# Poll for completion
while True:
time.sleep(15)
result = requests.get(
f"{BASE}/videos/text2video/{task_id}", headers=get_headers()
).json()
status = result["data"]["task_status"]
if status == "succeed":
video = result["data"]["task_result"]["videos"][0]
print(f"Video URL: {video['url']}")
print(f"Duration: {video['duration']}s")
break
elif status == "failed":
raise RuntimeError(result["data"]["task_status_msg"])
# else: submitted/processing — keep polling
With Camera Control
# Camera movement types: pan, tilt, zoom, roll
response = requests.post(f"{BASE}/videos/text2video", headers=get_headers(), json={
"model_name": "kling-v2-6",
"prompt": "A medieval castle on a cliff at sunrise, fog in the valley",
"duration": "5",
"mode": "standard",
"camera_control": {
"type": "simple",
"config": {
"horizontal": 5, # pan right (negative = left), range -10 to 10
"vertical": 0, # tilt (negative = down, positive = up)
"zoom": 3, # zoom in (positive) or out (negative)
"roll": 0, # rotation
"pan": 0, # dolly left/right
"tilt": -2, # dolly up/down
}
},
})
Rule: Only one non-zero field in config for type: "simple".
With Native Audio (v2.6 only)
response = requests.post(f"{BASE}/videos/text2video", headers=get_headers(), json={
"model_name": "kling-v2-6",
"prompt": "A jazz band performing in a dimly lit club, saxophone solo, "
"audience clapping, warm amber lighting",
"duration": "10",
"mode": "professional",
"motion_has_audio": True, # generates synchronized audio
})
Prompt Engineering Tips
| Technique | Example |
|---|---|
| Scene + action + style | "A samurai walking through cherry blossoms, cinematic slow motion" |
| Lighting cues | "golden hour", "neon-lit", "overcast diffused light" |
| Camera language | "close-up", "wide establishing shot", "tracking shot" |
| Negative prompt | "blurry, watermark, text overlay, distorted faces" |
| Material/texture | "brushed steel", "hand-painted watercolor", "photorealistic" |
Cost Reference
| Duration | Standard | Professional |
|---|---|---|
| 5 seconds | 10 credits | 35 credits |
| 10 seconds | 20 credits | 70 credits |
Error Handling
| Error | Cause | Fix |
|---|---|---|
400 invalid prompt |
Empty or >2500 chars | Check prompt length |
400 invalid model |
Unsupported model_name |
Use valid model ID from catalog |
402 insufficient credits |
Not enough credits | Top up account |
task_status: failed |
Content policy violation or complexity | Simplify prompt, remove restricted content |