API Crear clave

Kling AIVideo

Kling 3.0 Motion Control

El personaje de tu imagen copia el movimiento de tu video.

Precio
150 crpor clip · 720p · varía con la duración o el tamaño
Tiempo habitual
≈ 5 min
Id del modelo
video.kling-3-motion

Zona de pruebas

Zona de pruebas

Imagen *

Inicia sesión para subir un archivo.

Video de referencia *

Inicia sesión para subir un archivo.

Resolución
Más ajustes
Orientación del personaje
Regístrate para ejecutarlo

Cambia los ajustes: el precio y el código se actualizan. Para ejecutarlo necesitas una cuenta.

Un resultado real de Kling 3.0 Motion Control.

# 0. Primero sube tu archivo y pon en params el id que imprime.
curl -s -X POST https://mobyvid.com/api/v1/uploads \
  -H "Authorization: Bearer $STAGLIGHT_API_KEY" -F file=@your-file | jq -r .id

# 1. Crea el trabajo. Se cobra una vez y se reembolsa si falla.
JOB_ID=$(curl -s -X POST https://mobyvid.com/api/v1/jobs \
  -H "Authorization: Bearer $STAGLIGHT_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "op": "video.kling-3-motion",
    "params": {
      "image": "med_your_upload_id",
      "reference_video": "med_your_upload_id",
      "own_footage": true,
      "prompt": "Foto de producto premium de un frasco de sérum de vidrio sobre piedra mojada, luz suave de ventana",
      "resolution": "720p"
    }
  }' | jq -r .id)

# 2. Consulta hasta que termine. Cada llamada espera hasta 30 segundos.
while :; do
  JOB=$(curl -s "https://mobyvid.com/api/v1/jobs/$JOB_ID?wait=30" -H "Authorization: Bearer $STAGLIGHT_API_KEY")
  case "$(echo "$JOB" | jq -r .status)" in queued|running) ;; *) break ;; esac
done

# 3. Descarga el resultado desde outputs[0].download_url.
DOWNLOAD_URL=$(echo "$JOB" | jq -r '.outputs[0].download_url')
curl -L -o result.mp4 "$DOWNLOAD_URL"
import os, uuid, requests

BASE = "https://mobyvid.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['STAGLIGHT_API_KEY']}"}

# 0. Primero sube tu archivo y pon en params el id que imprime.
with open("your-file", "rb") as f:
    print(requests.post(f"{BASE}/uploads", headers=HEADERS, files={"file": f}, timeout=300).json()["id"])

# 1. Crea el trabajo. Se cobra una vez y se reembolsa si falla.
r = requests.post(f"{BASE}/jobs", timeout=60,
                  headers={**HEADERS, "Idempotency-Key": str(uuid.uuid4())},
                  json={
                    "op": "video.kling-3-motion",
                    "params": {
                      "image": "med_your_upload_id",
                      "reference_video": "med_your_upload_id",
                      "own_footage": True,
                      "prompt": "Foto de producto premium de un frasco de sérum de vidrio sobre piedra mojada, luz suave de ventana",
                      "resolution": "720p"
                    }
                  })
r.raise_for_status()
job = r.json()

# 2. Consulta hasta que termine. Cada llamada espera hasta 30 segundos.
while job["status"] in ("queued", "running"):
    job = requests.get(f"{BASE}/jobs/{job['id']}", headers=HEADERS,
                       params={"wait": 30}, timeout=60).json()

# 3. Descarga el resultado desde outputs[0].download_url.
print(job["outputs"][0]["download_url"] if job["outputs"] else job["data"] or job["error"])
// Node 18 o posterior. Guárdalo como run.mjs: el await de nivel superior necesita un módulo.
const BASE = "https://mobyvid.com/api/v1";
const headers = { Authorization: `Bearer ${process.env.STAGLIGHT_API_KEY}` };

// 0. Primero sube tu archivo y pon en params el id que imprime.
// const form = new FormData(); form.append('file', yourFile);
// const { id } = await (await fetch(`${BASE}/uploads`, { method: 'POST', headers, body: form })).json();

// 1. Crea el trabajo. Se cobra una vez y se reembolsa si falla.
let res = await fetch(`${BASE}/jobs`, {
  method: "POST",
  headers: { ...headers, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({
    "op": "video.kling-3-motion",
    "params": {
      "image": "med_your_upload_id",
      "reference_video": "med_your_upload_id",
      "own_footage": true,
      "prompt": "Foto de producto premium de un frasco de sérum de vidrio sobre piedra mojada, luz suave de ventana",
      "resolution": "720p"
    }
  }),
});
if (!res.ok) throw new Error((await res.json()).error.message);
let job = await res.json();

// 2. Consulta hasta que termine. Cada llamada espera hasta 30 segundos.
while (job.status === "queued" || job.status === "running") {
  job = await (await fetch(`${BASE}/jobs/${job.id}?wait=30`, { headers })).json();
}

// 3. Descarga el resultado desde outputs[0].download_url.
console.log(job.outputs[0]?.download_url ?? job.data ?? job.error);
{
  "id": "job_19a2b3c4d5e6f7a8b9c0d1",
  "op": "video.kling-3-motion",
  "status": "queued",
  "credits": 150,
  "title": "",
  "params": {
    "image": "med_your_upload_id",
    "reference_video": "med_your_upload_id",
    "own_footage": true,
    "prompt": "Foto de producto premium de un frasco de sérum de vidrio sobre piedra mojada, luz suave de ventana",
    "resolution": "720p"
  },
  "progress": null,
  "outputs": [],
  "data": null,
  "error": null,
  "run_id": null,
  "source": "api",
  "created_at": "2026-11-06T12:00:00Z",
  "finished_at": null,
  "eta_seconds": 280
}

Cuánto cuesta

ResoluciónPrecio
720p150 cr
1080p203 cr

Estos precios son con una duración por defecto: el precio depende de la duración de tu texto o archivo, y el precio exacto aparece antes de ejecutar la tarea. La zona de pruebas muestra el precio exacto de tus ajustes. La tarea se cobra una vez al aceptarla y se reembolsa si falla. El precio se vuelve a comprobar con tu archivo antes de ejecutar.

Parámetros

NombreTipoPor defectoValores
imageobligatorioImagen media id Imagen
reference_videoobligatorioVideo de referencia media id Video
own_footageobligatorioConfirmo que el video es mío o tengo licencia para usarlo boolean
promptDescripción string Hasta 2.500 caracteres
resolutionResolución enum 720p 720p, 1080p
orientationOrientación del personaje enum video video, image

Envíalos dentro de params. Los archivos son ids de POST /api/v1/uploads. Ver la documentación

Más modelos