Generación de vídeo

Los modelos de vídeo responden como tareas, no con una única respuesta. POST /v1/videos devuelve un id de tarea con "status": "queued", y GET /v1/videos/{task_id} informa del progreso hasta que la tarea llega a completed o failed. Al completarse, el archivo resultante es la URL firmada de metadata.url; incluye un parámetro Expires, así que descargue el archivo en lugar de guardar el enlace. Una tarea fallida trae el código y el mensaje del proveedor en error.code y error.message, lo que suele bastar para ver qué campo faltaba en la solicitud. POST /v1/video/generations llega al mismo handler, para los clientes ya escritos con esa ruta.

POST /v1/videos
curl https://api.chinaapi.ai/v1/videos \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan2.7-i2v",
    "prompt": "the cat turns and walks toward the camera",
    "input_reference": "https://example.com/first-frame.jpg",
    "size": "1280*720",
    "duration": 5
  }'

# {"id":"task_9f2c...","task_id":"task_9f2c...","object":"video",
#  "model":"wan2.7-i2v","status":"queued","progress":0}
GET /v1/videos/{task_id}
curl https://api.chinaapi.ai/v1/videos/task_9f2c... \
  -H "Authorization: Bearer $CHINAAPI_KEY"

# {"id":"task_9f2c...","object":"video","model":"wan2.7-i2v",
#  "status":"completed","progress":100,
#  "metadata":{"url":"https://.../output.mp4?Expires=..."}}
Texto a vídeo

wan2.7-t2v

Solo model y prompt son obligatorios. Sin size ni duration, la pasarela envía 1280*720 con cinco segundos.

Imagen a vídeo

wan2.7-i2v

Anime una imagen fija. input_reference recibe la URL de una imagen accesible públicamente y se convierte en el primer fotograma; envíe size y duration con ella.

Referencia a vídeo

wan2.7-r2v

Construye un vídeo a partir de material de referencia. input_reference acepta una imagen de referencia; para enviar varias usa images, y video_url añade un vídeo de referencia — las referencias se cuentan juntas, hasta cinco. No envíes input_reference e images a la vez, porque la pasarela conserva solo input_reference.

Edición de vídeo

wan2.7-videoedit

Edite un clip existente a partir de un prompt. video_url recibe el vídeo de origen, que debe tener entre 2 y 10 segundos en MP4 o MOV, y size define la salida.

Vídeo de 30 segundos

doubao-seedance-2-5-260628

Las imágenes de referencia van en images, y input_reference admite una sola; si envías ambas, se conservan las dos. La duración va en seconds o duration, y los parámetros del proveedor van en metadata, donde resolution es 480p o 720p.

Seedance 2.0

doubao-seedance-2-0-260128

Misma forma de petición que doubao-seedance-2-5-260628, incluidas las reglas de role para metadata.content. doubao-seedance-2-0-fast-260128 y doubao-seedance-2-0-mini-260615 cambian calidad por velocidad y coste, y la línea 2.0 exige al menos una referencia de imagen o vídeo, mientras que la 2.5 también acepta solo audio.

Kling 3.0

kling-v3

El primer fotograma va en image; esta familia nunca lee input_reference. mode vale std por defecto y duration, 5 segundos. El resto lo lleva metadata: image_tail para un fotograma final, sound con on u off (off por defecto), además de negative_prompt, cfg_scale y camera_control.

Gama económica

kling-3.0-turbo

Envía prompt para texto a vídeo, o añade image y la pasarela construye el array contents que espera el proveedor. El tamaño vive bajo metadata.settings: resolution es 720p o 1080p, duration va de 3 a 15 segundos, y aspect_ratio es 16:9, 9:16 o 1:1. El audio siempre viene incluido y no tiene interruptor.

Referencia multiimagen

kling-v3-omni

Generación guiada por varias imágenes de referencia a la vez. Todos los parámetros viven en metadata, y no existe un campo resolution: el nivel de calidad es mode. Mira el ejemplo completo más abajo.

Audio nativo

MiniMax-H3

Toma los campos propios de la pasarela y arma la carga del proveedor por ti: image o input_reference pasa a ser el primer fotograma, images pasan a ser imágenes de referencia, y video_url pasa a ser un vídeo de referencia. size elige 768P o 2K y duration es un entero de 4 a 15. Las peticiones solo de texto necesitan un metadata.ratio explícito distinto de adaptive.

Hailuo

MiniMax-Hailuo-2.3

Junto con MiniMax-Hailuo-2.3-Fast y MiniMax-Hailuo-02. Estos solo leen prompt, duration y size del nivel superior; toda imagen pasa por metadata, como first_frame_image, last_frame_image o subject_reference.

Gama 480P

happyhorse-1.1-t2v

Junto con happyhorse-1.1-i2v y happyhorse-1.1-r2v. Los campos coinciden con los de la familia wan2.7prompt, input_reference, size, duration — y aquí el 480P sí tiene precio, así que 832*480 se acepta donde wan2.7 lo rechaza. Varias referencias van en metadata.input.media, porque el ensamblado automático que dispara el campo images es exclusivo de wan2.7-r2v.

Consejo Escribe size como el ancho y el alto unidos por un asterisco, como en 1280*720. La letra x no se acepta: 832x480 devuelve invalid size: 832x480, example: 1920*1080. duration es un número entero de segundos. Para wan2.7-i2v, wan2.7-r2v y wan2.7-videoedit, la pasarela pliega size en un nivel de resolución y el proveedor solo tiene dos, así que envía 1280*720 para 720P o 1920*1080 para 1080P. Un tamaño 480P como 832*480 no tiene precio en estos tres y o bien se rechaza de entrada, o bien se acepta y luego falla en el proveedor con InvalidParameter; una tarea fallida se reembolsa, pero el viaje de ida y vuelta se pierde igualmente. wan2.7-t2v toma el valor tal cual.
Consejo La familia Kling lee la relación de aspecto desde size mediante una tabla fija que escribe los tamaños con la letra x — 1280x720, 1920x1080, 720x1280, 1080x1920, 1024x1024, 512x512 — y todo lo que no reconoce se convierte en 1:1 sin dar error. Enviar la forma con asterisco 1280*720 a kling-v3 devuelve por tanto un vídeo cuadrado en lugar de una queja; fija metadata.aspect_ratio directamente cuando el encuadre importa.
Consejo MiniMax-Hailuo-2.3, MiniMax-Hailuo-2.3-Fast y MiniMax-Hailuo-02 descartan los campos de nivel superior image, input_reference, images y video_url sin avisar: la petición tiene éxito, pero se ejecuta como texto a vídeo y se cobra como tal. Pon la imagen en metadata.first_frame_image, añade metadata.last_frame_image para un fotograma final, y usa metadata.subject_reference para referencias de personaje. MiniMax-H3 es la excepción de esta familia y sí lee los campos de nivel superior.
kling-v3-omni · multi-image reference
curl https://api.chinaapi.ai/v1/video/generations \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling-v3-omni",
    "prompt": "the character from the references walks through a neon-lit street",
    "metadata": {
      "image_list": [
        {"image_url": "https://example.com/character.jpg"},
        {"image_url": "https://example.com/outfit.jpg"},
        {"image_url": "https://example.com/scene.jpg"}
      ],
      "mode": "std",
      "duration": "5",
      "aspect_ratio": "16:9",
      "sound": "off"
    }
  }'
GET /v1/video/generations/{task_id}
curl https://api.chinaapi.ai/v1/video/generations/task_9f2c... \
  -H "Authorization: Bearer $CHINAAPI_KEY"

# {"code":"success",
#  "data":{"task_id":"task_9f2c...","status":"SUCCESS",
#          "progress":"100%","fail_reason":"",
#          "result_url":"https://.../output.mp4"}}
Consejo Una imagen de referencia no lleva type; el campo existe solo para marcar first_frame o end_frame, y aspect_ratio es obligatorio siempre que no haya primer fotograma. mode es el nivel de calidad — std, pro o 4k — y el valor por defecto del proveedor es pro, que se cobra a 1,33x el precio de lista, mientras que 4k se cobra a 5x; envía mode de forma explícita para que el cargo sea el que esperas. duration es una cadena de "3" a "15" y sound vale off por defecto. Un vídeo de referencia va en video_list y debe fijar "refer_type": "feature": el modo de edición base se cobra según la duración del vídeo que aportas, no se puede tarifar antes del envío, y por eso se rechaza. Las imágenes de referencia también tienen un tamaño mínimo en el proveedor: un archivo del tamaño de un icono pasa el envío y luego hace fallar la tarea con Image pixel is invalid; la tarea fallida se reembolsa, pero el viaje de ida y vuelta se pierde.
Consejo Las dos rutas informan del resultado con formas distintas. GET /v1/videos/{task_id} responde en el formato de vídeo de OpenAI, donde el archivo es metadata.url y el progreso es un número. GET /v1/video/generations/{task_id} responde {"code": "success", "data": {…}}, donde el archivo es data.result_url, data.status es una palabra en mayúsculas como SUCCESS o FAILURE, data.progress es una cadena como "100%", y el fallo se explica en data.fail_reason. Consulta la misma ruta por la que enviaste.
doubao-seedance-2-5-260628 · first frame
curl https://api.chinaapi.ai/v1/videos \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2-5-260628",
    "prompt": "the subject slowly turns toward the camera",
    "images": ["https://example.com/first-frame.jpg"],
    "seconds": "5",
    "metadata": {"resolution": "480p"}
  }'
doubao-seedance-2-5-260628 · reference mode
curl https://api.chinaapi.ai/v1/videos \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2-5-260628",
    "prompt": "keep the subject from the reference image",
    "seconds": "5",
    "metadata": {
      "resolution": "480p",
      "ratio": "16:9",
      "content": [
        {
          "type": "image_url",
          "image_url": {"url": "https://example.com/reference.jpg"},
          "role": "reference_image"
        }
      ]
    }
  }'
Consejo Una imagen sin role se lee como primer fotograma y no como referencia: la salida sigue la relación de aspecto de esa imagen, enviar ratio junto a ella se rechaza con InvalidParameter.TaskTypeConstraint, y un seconds de 2 también se rechaza en ese modo, mientras 5 funciona. generate_audio vale true por defecto en el proveedor, así que el archivo vuelve con pista de audio salvo que lo pongas en false en metadata. Etiqueta cada parte de metadata.content con un role para llegar al modo de referencia completo — hasta 30 imágenes, 10 vídeos y 10 clips de audio, entrada solo de audio, y 30 segundos de una sola vez — donde ratio sí se acepta.