Panduan model

Kling Motion Control API: buat karakter meniru video

Kling Motion Control menempatkan karakter dari satu gambar ke dalam gerakan video nyata. Panduan ini membahas apa yang dikirim, cara kerja tagihan per detik, dan cara memanggil Kling 3.0 dan 2.6 Motion Control lewat satu API.

Apa yang dilakukan motion control

Kling Motion Control menerima dua hal: gambar karakter dan video orang yang bergerak. Hasilnya klip baru di mana karakter dari gambar melakukan gerakan dari video, dengan waktu, gestur, dan bahasa tubuh yang sama. Inilah cara orang membuat tren tari, video maskot, dan juru bicara produk yang bergerak seperti aktor sungguhan tanpa memfilmkan karakternya sendiri.

Revana menyediakan dua versi:

Versi Kling Motion Control dibandingkan
ModelId modelResolusiHarga per detikRute
Kling 3.0 Motion Controlkling-3.0-motion-control720p, 1080p$0.13 pada 720p, $0.17 pada 1080pdua rute
Kling 2.6 Motion Controlkling-2.6-motion-control720p, 1080p$0.07 pada 720p, $0.12 pada 1080pdua rute

Kling 3.0 adalah model yang lebih baru. Kling 2.6 berharga sekitar setengahnya pada 720p, jadi layak diuji lebih dulu pada footage Anda.

Apa yang dikirim

  • image_url: karakternya, idealnya seluruh badan, menghadap kamera, dengan latar polos. Inilah yang muncul di hasil.
  • video_url: klip gerakan. Satu orang, terlihat jelas, dengan kamera stabil paling baik. Hasilnya mengikuti durasinya.
  • resolution: 720p atau 1080p. Kirim setiap kali.
  • prompt: opsional, untuk menjelaskan latar atau detail yang tidak ada di gambar.

Kedua file harus berupa tautan yang bisa diambil API. Untuk mengirim file dari komputer Anda, unggah dulu dengan POST /v1/uploads (klip hingga 50 MB) dan pakai tautan yang dikembalikannya; tautan berlaku selama 14 hari.

Cara motion control ditagih (Oktober 2026)

Harga dihitung per detik video, dan durasinya ditentukan oleh klip gerakan Anda, dibulatkan ke atas ke detik penuh berikutnya. Klip tari 7.4 detik ditagih sebagai 8 detik.

Biaya Kling Motion Control menurut durasi klip
ModelResolusiKlip 5 dtkKlip 10 dtkKlip 15 dtk
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

Pangkas klip gerakan ke bagian yang Anda butuhkan sebelum mengirim: setiap detik tambahan ditagih. Atur max_cost_usd ke jumlah maksimum yang Anda harapkan untuk durasi klip Anda, dan job yang akan berbiaya lebih ditolak alih-alih dijalankan. Job yang gagal tidak berbiaya, dan kredit prabayar mulai $10 tanpa langganan; lihat halaman harga.

Buat klip motion control

Kirim POST /v1/generations dengan kedua tautan, lalu lakukan polling sampai job berstatus succeeded atau failed. Dengan klip gerakan 10 detik pada 720p, biayanya $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);
Respons
{
  "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"
}

Mendapatkan hasil yang bersih

  • Samakan framing. Karakter seluruh badan dengan klip tari seluruh badan jauh lebih baik daripada potret kepala dan bahu dengan klip seluruh badan.
  • Satu penggerak. Pakai klip dengan satu orang bergerak. Keramaian dan pemotongan membingungkan gerakan mana yang ditiru.
  • Kamera stabil. Kamera terkunci atau bergerak pelan menjaga latar tetap stabil.
  • Buat draf pada 720p. Periksa transfer gerakan di Kling 2.6 pada 720p, lalu render yang terbaik pada 1080p di Kling 3.0.

Untuk model text dan image to video Kling, lihat panduan Kling 3.0 API. Kedua model motion control ada di halaman model, dengan setiap field di dokumentasi. Dapatkan kunci API untuk mencobanya.

Pertanyaan yang sering diajukan

Berapa biaya Kling Motion Control?

Pada Oktober 2026, Kling 3.0 Motion Control berharga $0.13 per detik pada 720p dan $0.17 pada 1080p. Kling 2.6 Motion Control berharga $0.07 dan $0.12. Durasinya ditentukan oleh klip gerakan Anda.

Apa yang dibutuhkan Kling Motion Control?

Gambar karakter di image_url, klip gerakan di video_url, dan resolusi 720p atau 1080p. Prompt bersifat opsional.

Berapa panjang video Kling Motion Control?

Sepanjang klip gerakan yang Anda kirim. Anda ditagih per detiknya, dibulatkan ke atas ke detik penuh.

Apa perbedaan Kling 3.0 dan Kling 2.6 Motion Control?

Kling 3.0 adalah model yang lebih baru. Kling 2.6 lebih murah per detik. Keduanya menerima input yang sama dan menawarkan 720p dan 1080p.

Bisakah saya mengunggah video gerakan sendiri?

Bisa. Unggah dengan POST /v1/uploads (video hingga 50 MB) dan berikan tautan yang dikembalikan di video_url.

Coba Kling Motion Control dengan satu kunci

Satu kunci API untuk kedua model motion control dan semua model video dan gambar lainnya. Kredit prabayar mulai $10, hanya ditagih untuk klip yang terkirim.