Guide du modèle

API Kling Motion Control : faire copier une vidéo par un personnage

Kling Motion Control place le personnage d'une image dans le mouvement d'une vraie vidéo. Ce guide explique quoi envoyer, comment fonctionne la facturation à la seconde et comment appeler Kling 3.0 et 2.6 Motion Control via une seule API.

Ce que fait le contrôle du mouvement

Kling Motion Control prend deux éléments : l'image d'un personnage et la vidéo d'une personne en mouvement. Il produit un nouveau clip dans lequel le personnage de l'image exécute le mouvement de la vidéo, avec le même rythme, les mêmes gestes et le même langage corporel. C'est ce qui permet de réaliser des tendances de danse, des vidéos de mascottes et des porte-parole de produits qui bougent comme un vrai acteur, sans filmer le personnage lui-même.

Revana propose deux versions :

Comparatif des versions de Kling Motion Control
ModèleIdentifiant du modèleRésolutionPrix par secondeRoutes
Kling 3.0 Motion Controlkling-3.0-motion-control720p, 1080p$0.13 en 720p, $0.17 en 1080pdeux routes
Kling 2.6 Motion Controlkling-2.6-motion-control720p, 1080p$0.07 en 720p, $0.12 en 1080pdeux routes

Kling 3.0 est le modèle le plus récent. Kling 2.6 coûte environ moitié moins en 720p : il vaut donc la peine d'être testé d'abord sur vos images.

Quoi envoyer

  • image_url : le personnage, idéalement en pied, face à la caméra, sur un fond uni. C'est lui qui apparaît dans le résultat.
  • video_url : le clip de mouvement. Une seule personne, bien visible, avec une caméra stable, donne les meilleurs résultats. Le résultat suit sa durée.
  • resolution : 720p ou 1080p. Envoyez-le à chaque fois.
  • prompt : facultatif, pour décrire le décor ou des détails absents de l'image.

Les deux fichiers doivent être des liens que l'API peut récupérer. Pour envoyer un fichier depuis votre ordinateur, téléversez-le d'abord avec POST /v1/uploads (clips jusqu'à 50 Mo) et utilisez le lien renvoyé ; il reste valable 14 jours.

Comment le contrôle du mouvement est facturé (octobre 2026)

Le prix est à la seconde de vidéo, et la durée est définie par votre clip de mouvement, arrondie à la seconde entière supérieure. Un clip de danse de 7,4 secondes est facturé comme 8 secondes.

Coût de Kling Motion Control selon la durée du clip
ModèleRésolutionClip de 5 sClip de 10 sClip de 15 s
Kling 3.0 Motion Control720p$0.65$1.30$1.95
Kling 3.0 Motion Control1080p$0.85$1.70$2.55
Kling 2.6 Motion Control720p$0.35$0.70$1.05
Kling 2.6 Motion Control1080p$0.60$1.20$1.80

Découpez le clip de mouvement pour ne garder que la partie dont vous avez besoin avant de l'envoyer : chaque seconde supplémentaire est facturée. Définissez max_cost_usd sur le maximum que vous comptez payer pour la durée de votre clip, et une tâche qui coûterait plus cher est refusée au lieu d'être exécutée. Une tâche en échec ne coûte rien, et le crédit est prépayé à partir de $10 sans abonnement ; voir la page des tarifs.

Créer un clip avec contrôle du mouvement

Envoyez POST /v1/generations avec les deux liens, puis interrogez jusqu'à ce que la tâche soit succeeded ou failed. Avec un clip de mouvement de 10 secondes en 720p, cela coûte $1.30.

cURL
export REVANA_API_KEY="sr_live_..."

# 1. Submit the job (returns 202 with the generation id)
curl https://api.revana.si/v1/generations \
  -H "Authorization: Bearer $REVANA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling-3.0-motion-control",
    "input": {
      "prompt": "The mascot dances on a sunny rooftop, city skyline behind.",
      "image_url": "https://example.com/mascot-full-body.png",
      "video_url": "https://example.com/dance-10s.mp4",
      "resolution": "720p"
    },
    "max_cost_usd": 1.6
  }'

# 2. Poll with the id from step 1 until status is "succeeded" or "failed"
curl https://api.revana.si/v1/generations/gen_01JC2V8K5T \
  -H "Authorization: Bearer $REVANA_API_KEY"
Python
import os
import time

import requests

API = "https://api.revana.si/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}

resp = requests.post(f"{API}/generations", headers=HEADERS, json={
    "model": "kling-3.0-motion-control",
    "input": {
        "prompt": "The mascot dances on a sunny rooftop, city skyline behind.",
        "image_url": "https://example.com/mascot-full-body.png",
        "video_url": "https://example.com/dance-10s.mp4",
        "resolution": "720p",
    },
    "max_cost_usd": 1.6,
})
resp.raise_for_status()
job = resp.json()

while job["status"] in ("queued", "running"):
    time.sleep(5)
    job = requests.get(f"{API}/generations/{job['id']}", headers=HEADERS).json()

if job["status"] == "succeeded":
    print(job["output"]["urls"], job["cost_usd"])
else:
    print("Failed:", job["error"])
Node.js
// Node 18 or later. Save as generate.mjs and run: node generate.mjs
const API = "https://api.revana.si/v1";
const headers = {
  Authorization: `Bearer ${process.env.REVANA_API_KEY}`,
  "Content-Type": "application/json",
};

const res = await fetch(`${API}/generations`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    model: "kling-3.0-motion-control",
    input: {
      prompt: "The mascot dances on a sunny rooftop, city skyline behind.",
      image_url: "https://example.com/mascot-full-body.png",
      video_url: "https://example.com/dance-10s.mp4",
      resolution: "720p",
    },
    max_cost_usd: 1.6,
  }),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
let job = await res.json();

while (job.status === "queued" || job.status === "running") {
  await new Promise((r) => setTimeout(r, 5000));
  job = await (await fetch(`${API}/generations/${job.id}`, { headers })).json();
}

if (job.status === "succeeded") console.log(job.output.urls, job.cost_usd);
else console.error("Failed:", job.error);
Réponse
{
  "id": "gen_01JC2V8K5T",
  "model": "kling-3.0-motion-control",
  "status": "succeeded",
  "output": {
    "urls": [
      "https://cdn.revana.si/g/gen_01JC2V8K5T/0.mp4"
    ],
    "duration_s": 10
  },
  "cost_usd": 1.3,
  "attempts": 1,
  "error": null,
  "created_at": "2026-10-28T10:14:02Z",
  "completed_at": "2026-10-28T10:15:31Z"
}

Obtenir un résultat propre

  • Accordez les cadrages. Un personnage en pied avec un clip de danse en pied fonctionne bien mieux qu'un portrait tête et épaules avec un clip en pied.
  • Une seule personne qui bouge. Utilisez un clip où une seule personne bouge. Les foules et les coupes brouillent le mouvement à copier.
  • Caméra stable. Une caméra fixe ou à déplacement lent garde l'arrière-plan stable.
  • Faites des brouillons en 720p. Vérifiez le transfert du mouvement sur Kling 2.6 en 720p, puis rendez la version retenue en 1080p sur Kling 3.0.

Pour les modèles de texte vers vidéo et d'image vers vidéo de Kling, voir le guide de l'API Kling 3.0. Les deux modèles de contrôle du mouvement sont sur la page des modèles, avec chaque champ dans la documentation. Obtenez une clé API pour les essayer.

Questions fréquentes

Combien coûte Kling Motion Control ?

En octobre 2026, Kling 3.0 Motion Control coûte $0.13 la seconde en 720p et $0.17 en 1080p. Kling 2.6 Motion Control coûte $0.07 et $0.12. La durée est définie par votre clip de mouvement.

De quoi Kling Motion Control a-t-il besoin ?

Une image de personnage dans image_url, un clip de mouvement dans video_url et une résolution de 720p ou 1080p. Un prompt est facultatif.

Quelle est la durée d'une vidéo Kling Motion Control ?

Celle du clip de mouvement que vous envoyez. Vous êtes facturé à la seconde, arrondie à la seconde entière supérieure.

Quelle est la différence entre Kling 3.0 et Kling 2.6 Motion Control ?

Kling 3.0 est le modèle le plus récent. Kling 2.6 coûte moins cher par seconde. Les deux acceptent les mêmes entrées et proposent le 720p et le 1080p.

Puis-je téléverser ma propre vidéo de mouvement ?

Oui. Téléversez-la avec POST /v1/uploads (vidéo jusqu'à 50 Mo) et passez le lien renvoyé dans video_url.

Essayez Kling Motion Control avec une seule clé

Une seule clé API pour les deux modèles de contrôle du mouvement et tous les autres modèles de vidéo et d'image. Crédit prépayé à partir de $10, facturé uniquement pour les clips livrés.