From klingai-pack
Adds camera movements (pan, tilt, zoom, roll, dolly) to Kling AI text-to-video and image-to-video APIs via Python requests. For creating cinematic shots.
How this skill is triggered — by the user, by Claude, or both
Slash command
/klingai-pack:klingai-camera-controlThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Add controlled camera movements to text-to-video and image-to-video generation using the `camera_control` parameter. Supports pan, tilt, zoom, roll, and dolly. Available on v1.6+ models.
Add controlled camera movements to text-to-video and image-to-video generation using the camera_control parameter. Supports pan, tilt, zoom, roll, and dolly. Available on v1.6+ models.
Supports: POST /v1/videos/text2video and POST /v1/videos/image2video
"camera_control": {
"type": "simple", # "simple" = one movement axis
"config": {
"horizontal": 0, # Pan: -10 (left) to 10 (right)
"vertical": 0, # Tilt: -10 (down) to 10 (up)
"zoom": 0, # Zoom: -10 (out) to 10 (in)
"roll": 0, # Roll: -10 (CCW) to 10 (CW)
"pan": 0, # Dolly: -10 (left) to 10 (right)
"tilt": 0, # Dolly: -10 (down) to 10 (up)
}
}
Rule: For type: "simple", only ONE field in config can be non-zero.
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 below",
"duration": "5",
"mode": "professional",
"camera_control": {
"type": "simple",
"config": {"horizontal": 5, "vertical": 0, "zoom": 0, "roll": 0, "pan": 0, "tilt": 0}
},
})
response = requests.post(f"{BASE}/videos/text2video", headers=get_headers(), json={
"model_name": "kling-v2-6",
"prompt": "Close-up of a tiger's face, intense eyes, jungle background",
"duration": "5",
"mode": "professional",
"camera_control": {
"type": "simple",
"config": {"horizontal": 0, "vertical": 0, "zoom": 7, "roll": 0, "pan": 0, "tilt": 0}
},
})
response = requests.post(f"{BASE}/videos/text2video", headers=get_headers(), json={
"model_name": "kling-v2-6",
"prompt": "A skyscraper, starting from the base looking up, glass and steel",
"duration": "5",
"mode": "standard",
"camera_control": {
"type": "simple",
"config": {"horizontal": 0, "vertical": 8, "zoom": 0, "roll": 0, "pan": 0, "tilt": 0}
},
})
response = requests.post(f"{BASE}/videos/text2video", headers=get_headers(), json={
"model_name": "kling-v2-master",
"prompt": "Walking through a dark forest, trees on both sides, moonlight filtering through",
"duration": "5",
"mode": "standard",
"camera_control": {
"type": "simple",
"config": {"horizontal": 0, "vertical": 0, "zoom": 0, "roll": 0, "pan": 0, "tilt": 5}
},
})
# Animate a landscape photo with a slow zoom out
response = requests.post(f"{BASE}/videos/image2video", headers=get_headers(), json={
"model_name": "kling-v2-1",
"image": "https://example.com/landscape.jpg",
"prompt": "Gentle wind, clouds moving slowly",
"duration": "5",
"camera_control": {
"type": "simple",
"config": {"horizontal": 0, "vertical": 0, "zoom": -5, "roll": 0, "pan": 0, "tilt": 0}
},
})
Important: For image-to-video, camera_control is mutually exclusive with image_tail, dynamic_masks, and static_mask.
| Shot Type | Config Field | Value | Description |
|---|---|---|---|
| Pan right | horizontal | 5-8 | Slow pan, good for landscapes |
| Pan left | horizontal | -5 to -8 | Reveal from right to left |
| Tilt up | vertical | 5-8 | Upward reveal (buildings, trees) |
| Tilt down | vertical | -5 to -8 | Downward motion |
| Zoom in | zoom | 5-10 | Focus on subject, dramatic |
| Zoom out | zoom | -5 to -10 | Reveal, establishing shot |
| Dutch tilt | roll | 3-5 | Unsettling, artistic angle |
| Push in | tilt | 3-5 | Dolly forward (depth effect) |
| Pull back | tilt | -3 to -5 | Dolly backward (reveal) |
| Value Range | Effect |
|---|---|
| 1-3 | Subtle, barely perceptible |
| 4-6 | Moderate, natural-feeling |
| 7-8 | Strong, dramatic |
| 9-10 | Maximum, may feel unnatural |
Recommendation: Start at 4-6 for most cinematic shots. Go higher for dramatic reveals or action sequences.
| Error | Cause | Fix |
|---|---|---|
400 invalid camera config | Multiple non-zero values in simple mode | Set only one field to non-zero |
| Jerky motion | Value too high | Reduce to 4-6 range |
| No visible movement | Value too low (1-2) | Increase to 3+ |
| Mutual exclusivity error | Combined with masks/image_tail | Use only camera_control OR masks |
npx claudepluginhub ia23a-lachnita/claude-code-plugins-plus-fix-skills --plugin klingai-pack5plugins reuse this skill
First indexed Jul 10, 2026
Controls camera movements in Kling AI video generation for cinematic pans, tilts, zooms, and dolly moves. Trigger with phrases like 'klingai camera'.
Designs cinematic image and video prompts with shot language, camera movement, lighting, lens choices, and color grade. Uses genmedia CLI for model routing and execution.
Generates short AI videos from text or images via 7 backends (Minimax, Kling, Veo, Hunyuan, Pixverse, Grok, Seedance) with zero API setup. Use for text-to-video, image-to-video, or reference-based generation.