What covers Kling 4's headline features today, and how to stay swappable
Updated 2026-10-02
Kling 4.0 is announced but not callable through any host in our catalog. If your project needs longer clips, more control than a single start image, or reference-driven generation, you do not have to wait. This article maps each reported Kling 4.0 capability to what VideoRouter's documentation shows as available today, and shows how to structure your code so a later switch is a configuration change. Where VideoRouter's documentation does not show a capability, we say so rather than guess.
Mapping the reported features
| Reported Kling 4.0 feature | What you can do today | How well documented |
|---|---|---|
| Longer clips (30 s reported) | Kling Motion Control with input_video_url: output matches the reference video's length, up to 30 seconds. Otherwise stitch segments. | Documented for Motion Control only. We cannot point to a catalog model documented as generating a 30-second clip from a text prompt alone. |
| Multimodal reference | Reference-to-video via input_references, input_video_references and input_audio_references, on models that support them. | Documented in the API reference, with per-model caps. |
| Many keyframes | One start image via start_image_url, then chain segments, using the last frame of one clip as the start of the next. | The chaining technique is a workaround, not a feature. end_image_url is documented as rejected with a 400 on every model right now. |
Long clips: three real options
- Motion Control for performance-driven clips. Send
start_image_urlplusinput_video_urltokling/motion-control-pro/novita(or the-stdid). The output length follows your reference video, up to 30 seconds, and no prompt is required. This suits character-driven content where the motion already exists in a reference clip. It does not generate motion from text. - Segmenting. Generate several clips at a model's supported length and join them. Keep each segment's prompt consistent, and use the final frame of one segment as
start_image_urlfor the next to reduce visible seams. Expect some drift in identity and lighting over many segments. - Check the model page for the family you prefer. VideoRouter's documentation gives no documented maximum duration for most catalog models, so we make no claim. Open each model's page for its accepted range before you design around a length.
Reference-driven generation today
The API takes reference files in three arrays. input_references holds up to nine image entries (model-dependent cap). input_video_references and input_audio_references hold up to three each on models that support them. VideoRouter's documentation shows:
- The Kling O3 (omni) model page lists reference image, video and audio inputs, and VideoRouter's notes record a verified reference-to-video mode for the Replicate-hosted omni row.
- A Seedance 2.0 reference-to-video row on one host is recorded with limits of nine images, three videos and three audio files.
- Kling v3 pages list reference image, video and audio as inputs; host support varies.
A call takes either start/end images or reference files, not both, except the Motion Control carve-out. Plan around that: a reference-driven job and an image-driven job are different request shapes.
Designing so Kling 4 is a config change
The point is to isolate everything model-specific. In practice:
# config.py
VIDEO_PROFILES = {
"draft": {"model": "kling-v3.0-std", "max_secs": 15},
"final": {"model": "kling-v3.0-pro", "max_secs": 15},
"long": {"model": "kling-v3.0-pro", "max_secs": 15}, # swap here when a longer model is callable
}
def build_request(profile, prompt, secs, start_image=None):
cfg = VIDEO_PROFILES[profile]
secs = min(secs, cfg["max_secs"]) # never assume duration; clamp per model
body = {"model": cfg["model"], "prompt": prompt, "duration_secs": secs}
if start_image:
body["start_image_url"] = start_image
return body
Four habits make this work:
- Model id in config. One edit, one deploy.
- Per-model capability limits in config. Maximum duration, supported input modes, and resolution come from configuration, so a longer model only needs a new entry. The 15-second figure above is VideoRouter's recorded Kling 3.0 limit; confirm it on the model page you use.
- A segmenter that is optional. If your pipeline stitches today, make stitching a function of
max_secs. When the cap rises, the same code produces fewer segments. - A baseline set. Save prompts, inputs, outputs and rates from today's runs. When a new model appears, replay the same set and compare.
Expect that a new model may introduce new request fields, for example for keyframes. Keep the request builder in one place so adding a field is a local change.
A note on stitching quality
If you stitch segments to approximate a long clip, treat the join as the weak point. Reusing the last frame of one segment as the start of the next keeps composition continuous but does not guarantee continuity of lighting, character detail or motion speed. Two things help: keep the camera move consistent across segments, and cut on a natural change of shot rather than pretending the output is one take. If you have a reference clip that already contains the motion you want, Motion Control sidesteps the problem for character-driven content because the reference supplies the timing.
What not to do
- Do not hard-code a clip length as a constant in business logic.
- Do not wait on an unannounced date to ship; Kling 3.0 and the models above cover real use cases now.
- Do not guess a Kling 4 model id into production code. If you probe for one, do it read-only against the model list, as described in the monitoring guide.
The live price table shows what current Kling models cost across hosts, the status comparison lists what is reported versus confirmed, and the quickstart has the base request. To start building, create a key.
Frequently asked questions
Can I generate 30-second clips today?
VideoRouter's documentation shows Kling Motion Control producing output up to 30 seconds when you supply a reference video via input_video_url. For prompt-only generation, check each model page for its accepted duration, or stitch segments.
What can I use for reference-driven video now?
Models that support input_references, input_video_references and input_audio_references, including the Kling O3 family. Limits vary by model, and a call takes references or start/end images, not both.
How do I prepare for switching to Kling 4?
Keep the model id and per-model limits such as maximum duration in configuration, and centralise request building so adding a new field is a local change.
Is end_image_url available for keyframe control?
The API reference currently says end_image_url is rejected with a 400 on every model. Check a model page for any change.
Keep reading
- How to Prepare Your Integration for the Kling 4.0 API
- Kling 3 vs Kling 4: What Is Reported vs What Is Confirmed
- How to Monitor the Kling 4.0 API Launch (Script + Test Plan)
VideoRouter puts it next to dozens of other video and image models behind one API key, so you can compare providers, prices and fail over automatically. Compare providers on VideoRouter →