Muse Video es el modelo de video de Meta Superintelligence Labs. En APIMODELS es un único id de modelo, muse-video, en el endpoint unificado de video: envía solo un prompt para texto a video; añade una imagen como primer fotograma y el clip arranca desde esa imagen; o añade hasta cuatro imágenes de referencia y el modelo mantiene a la persona o el elemento principal sin arrancar desde ellas. Los clips duran de 4 a 30 segundos, en 720p, 16:9 (1280×720) o 9:16 (720×1280), como MP4 H.264 a 24 fps. Las duraciones, tamaños y entradas no admitidos se rechazan con un 400 antes de crear la tarea; no todas las peticiones tienen éxito, y las generaciones fallidas no se cobran. Se factura a $0.037 por segundo solicitado.
Todo lo que Muse Video acepta y todo lo que no, en una sola tabla. Revísala antes de construir sobre el modelo: solo 720p, solo horizontal o vertical, y un primer fotograma o hasta cuatro imágenes de referencia, pero no ambas cosas.
| Aspecto | Admitido | No admitido |
|---|---|---|
| Resolución | Solo 720p (resolution: "720p", u omítelo) | 1080p, 2K, 4K, 480p |
| Proporción | 16:9 horizontal a 1280×720 (por defecto) o 9:16 vertical a 720×1280 | Cuadrado 1:1, 4:3, 3:4, 21:9 y cualquier otra proporción o tamaño |
| Duración | De 4 a 30 segundos enteros; 5, 6, 8, 10, 15, 20, 25 y 30 s salen exactos, el resto sube al siguiente escalón | Menos de 4 s, más de 30 s, decimales como 8.5 |
| Imágenes | Una de dos: 1 primer fotograma, o hasta 4 imágenes de referencia que mantienen a la misma persona o elemento principal (no ambas cosas); PNG, JPEG o WebP, hasta 20 MB cada una, como URL pública o base64 | Un primer fotograma junto con imágenes de referencia, más de 4 imágenes de referencia, un último fotograma |
| Entrada de video y audio | Ninguna: las imágenes son la única entrada multimedia | Video de referencia, edición o extensión de video, entrada de audio, sincronización labial con tu propio audio |
| Sonido | Lo genera el modelo junto con la imagen; generate_audio: true se acepta | Desactivar el sonido (generate_audio: false devuelve un 400); no se garantiza sonido en cada clip |
| Otros controles | Un prompt de hasta 4000 caracteres en cualquier idioma; describe los movimientos de cámara en el prompt | negative_prompt, seed (los resultados no se pueden repetir), parámetros de control de cámara |
Los valores y campos no admitidos devuelven un 400 antes de crear la tarea y no cuestan nada; los mensajes exactos están en Errores, más abajo.
Muse Video no tiene éxito el 100% de las veces. Una petición que pasa la validación y crea una tarea todavía puede fallar:
Una tarea fallida termina en state failed con el motivo en data.failMsg, y no se cobra. Nuestras dos peticiones de prueba del lanzamiento devolvieron un clip, pero son demasiado pocas para prometer una tasa de éxito, así que no publicamos ninguna. Diseña tu flujo contando con fallos ocasionales: reintenta los errores temporales, reescribe los prompts rechazados y no des por hecho que el primer intento entregará un clip.
Un único id de modelo y un único endpoint; el modo depende de las imágenes que envíes. Los tres cuestan lo mismo.
| Modo | Qué enviar | Qué hace el modelo |
|---|---|---|
| Texto a video | Solo prompt | Todo el clip sale del prompt. |
| Primer fotograma (imagen a video) | prompt + 1 imagen en image_url (o first_frame_url, image, input_reference) | El clip arranca desde esa imagen; el prompt dice qué pasa después. |
| Imágenes de referencia | prompt + de 1 a 4 imágenes en images (o image_urls, reference_image_urls) | El modelo mantiene la persona, el elemento principal o el estilo de las imágenes, pero el clip no arranca desde ellas; la escena sale del prompt. Útil para un personaje recurrente. |
Un primer fotograma y las imágenes de referencia no pueden ir en la misma petición; enviar ambos devuelve un 400. Un array de imágenes (images, image_urls o reference_image_urls) siempre se trata como imágenes de referencia, aunque tenga un solo elemento; para enviar un primer fotograma, usa el campo de imagen única image_url.
Todas las peticiones llevan la clave API en la cabecera:
Authorization: Bearer YOUR_API_KEYhttps://api.apimodels.app/v1/video/generations·GET/v1/video/generations?task_id=# Muse Video — text-to-video. model and prompt are required; everything else is optional.
# duration: whole seconds 4-30 (default 5). aspect_ratio: 16:9 (default, 1280x720) or 9:16 (720x1280).
# Billed $0.037 per requested second: this 10 s request is $0.37.
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "muse-video",
"prompt": "An orange cat stretches on a sunny windowsill, sunlight pours in, the camera slowly pushes in",
"duration": 10,
"aspect_ratio": "16:9"
}'
# Response (async — a task is created):
# { "code": 200, "msg": "success", "data": { "taskId": "clxxx", "state": "pending", "model": "muse-video" } }
# Poll every 10-15 s until completed (result files are kept 30 days)
curl "https://api.apimodels.app/v1/video/generations?task_id=TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
# { "code": 200, "data": { "state": "completed",
# "resultUrls": ["https://r2.apimodels.app/videos/clxxx.mp4"] } }Mismo id de modelo y mismo endpoint: añade una imagen de primer fotograma. Cuesta lo mismo que texto a video. El ejemplo de Node.js usa los nombres de campo al estilo OpenAI seconds, size e input_reference, que también funcionan.
# Muse Video — image-to-video: the same request plus ONE first-frame image.
# PNG, JPEG or WebP, up to 20 MB, as a public URL or a base64 data URI.
# Same price as text-to-video. Use an image with the same orientation as the clip.
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "muse-video",
"prompt": "She turns toward the window and smiles, the curtains drift in the breeze, slow push-in",
"image_url": "https://example.com/first-frame-portrait.jpg",
"duration": 6,
"aspect_ratio": "9:16"
}'
# first_frame_url, image or input_reference work in place of image_url. Do not put a first frame in image_urls:
# an image array (images, image_urls, reference_image_urls) always means reference images, see the next example.
# Poll the returned taskId exactly as in the text-to-video example.Para mantener a la misma persona o el mismo elemento principal en varios clips, pon de 1 a 4 imágenes de referencia en images (también valen image_urls y reference_image_urls). El modelo conserva la cara y el aspecto, pero el clip no arranca desde ninguna de ellas. Menciona en el prompt "la misma persona de las imágenes de referencia" y luego describe la escena nueva. No añadas un primer fotograma a la misma petición; el precio es el mismo que el de texto a video.
# Muse Video — reference images: 1 to 4 images of the same person or subject in "images".
# The model keeps the face and look from them, but the clip does not start from any of them.
# image_urls and reference_image_urls work in place of images. Do not add a first frame to the same request.
# PNG, JPEG or WebP, up to 20 MB each, public URLs or base64 data URIs. Same price as text-to-video.
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "muse-video",
"prompt": "The same young woman from the reference images walks barefoot along a beach at sunset, smiling back at the camera, handheld vertical shot",
"images": [
"https://example.com/ref-1.jpg",
"https://example.com/ref-2.jpg",
"https://example.com/ref-3.jpg",
"https://example.com/ref-4.jpg"
],
"duration": 5,
"aspect_ratio": "9:16"
}'
# Poll the returned taskId exactly as in the text-to-video example.Una tarea pasa por pending → processing → completed o failed. Con completed, data.resultUrls[0] es el MP4; con failed, el motivo está en data.failMsg y no se cobra nada. Los clips de hasta 10 segundos suelen tardar de uno a dos minutos, y los de 15 a 30 segundos, de tres a siete; nuestras peticiones de prueba de 4 segundos en el lanzamiento terminaron en unos 1.5 minutos. Basta con consultar cada 10-15 segundos.
Para no tener que consultar, pasa callback_url en la petición de creación. Cuando la tarea llega a completed o failed, enviamos un HTTP POST (JSON) a esa URL. Si la entrega falla, se reintenta con esperas crecientes durante hasta 30 minutos, hasta que tu endpoint responda con un 2xx. La URL debe ser accesible públicamente; localhost y las direcciones privadas devuelven un 400 al crear la tarea. La consulta sigue funcionando igual.
POST {your callback_url}
Content-Type: application/json
{
"code": 200,
"msg": "success",
"data": {
"taskId": "clxxx...",
"model": "muse-video",
"state": "completed", // or "failed"
"param": "<JSON string>", // your request, JSON.parse once
"resultJson": "<JSON string> | null", // {"resultUrls": ["https://...mp4"]}, JSON.parse once
"failCode": null,
"failMsg": null
}
}| Field | Required | Type | Description |
|---|---|---|---|
| model | Sí | string | muse-video |
| prompt | Sí | string | Lo que ocurre en el clip, hasta 4000 caracteres, en cualquier idioma. También es obligatorio en imagen a video. |
| duration | No | number | string | Segundos enteros, de 4 a 30, por defecto 5; como cadena o número. También se acepta el campo seconds al estilo OpenAI. 5, 6, 8, 10, 15, 20, 25 y 30 salen exactos; los demás valores suben al siguiente escalón (tabla abajo). |
| aspect_ratio | No | string | 16:9 (por defecto, 1280×720) o 9:16 (720×1280). Cualquier otra proporción devuelve un 400. |
| size | No | string | En lugar de aspect_ratio: "1280x720" o "720x1280". Si envías los dos, deben coincidir. |
| resolution | No | string | Opcional; solo se acepta "720p", cualquier otro valor devuelve un 400. |
| image_url | No | string | El primer fotograma, una sola imagen; el clip arranca desde ella. URL pública o data URI en base64, PNG, JPEG o WebP, hasta 20 MB. También valen first_frame_url, image e input_reference. No se puede combinar con images. |
| images | No | string[] | Imágenes de referencia, de 1 a 4: el modelo mantiene la persona, el elemento principal o el estilo, pero el clip no arranca desde ellas, así que sirven para un personaje recurrente. Cada una es una URL pública o un data URI en base64, PNG, JPEG o WebP, hasta 20 MB. También valen image_urls y reference_image_urls; un array con una sola imagen sigue siendo una imagen de referencia, no un primer fotograma. No se puede combinar con un primer fotograma; más de 4 devuelve un 400. |
| generate_audio | No | boolean | Opcional; solo se acepta true. El modelo decide si un clip lleva sonido, así que true no lo garantiza; false devuelve un 400 (el sonido no se puede desactivar). |
| callback_url | No | string | Enviamos por POST la tarea terminada a esta URL; si no la pasas, consulta el endpoint GET. |
No hay entrada de último fotograma, video de referencia ni audio de referencia, ni negative_prompt ni seed: si envías alguno, recibes un 400 en lugar de que se ignore en silencio. Tampoco hay parámetros de control de cámara; describe los movimientos de cámara en el prompt.
Si pides 5, 6, 8, 10, 15, 20, 25 o 30 segundos, el clip dura exactamente eso; cualquier otro número entero sube al siguiente escalón, así que el clip nunca es más corto que lo que pagaste. Se factura por los segundos que pides, no por la duración del clip.
| duration solicitada | Duración del clip |
|---|---|
| 4 / 5 s | 5 s |
| 6 s | 6 s |
| 7 / 8 s | 8 s |
| 9 / 10 s | 10 s |
| 11–15 s | 15 s |
| 16–20 s | 20 s |
| 21–25 s | 25 s |
| 26–30 s | 30 s |
Una prueba con imágenes de referencia (2026-10-30)
Enviamos cuatro fotos de una misma mujer joven (recostada en una almohada, sonriendo, haciendo la V con los dedos y riéndose detrás de la mano) con el prompt "The same young woman from the reference images walks barefoot along a beach at sunset, smiling back at the camera, handheld vertical shot", duration 4 y aspect_ratio 9:16. En 88 segundos llegó un clip de 5.0 segundos a 720×1280 con pista de audio. Empezaba en la playa, no en ninguna de las fotos. Ella mantenía la misma cara, el mismo pelo y una ropa parecida (el top de tirantes color crema pasó a ser un vestido blanco de tirantes), y el modelo reutilizó gestos de las fotos: la V con los dedos y la risa detrás de la mano. En esos 5 segundos cambió de plano varias veces: primer plano, plano general, de espaldas, la V y otro primer plano. Se cobró exactamente igual que una petición de texto a video de 4 segundos. Es una sola prueba, no una promesa de que cada petición salga igual.
| Segundos solicitados | Duración del clip | Precio |
|---|---|---|
| Por segundo solicitado | — | $0.037 |
| 4 s | 5 s | $0.148 |
| 5 s (por defecto) | 5 s | $0.185 |
| 6 s | 6 s | $0.222 |
| 7 s | 8 s | $0.259 |
| 8 s | 8 s | $0.296 |
| 10 s | 10 s | $0.37 |
| 15 s | 15 s | $0.555 |
| 20 s | 20 s | $0.74 |
| 25 s | 25 s | $0.925 |
| 30 s | 30 s | $1.11 |
Se factura por los segundos solicitados: una petición de 4 segundos cuesta $0.148 y devuelve un clip de 5 segundos. El primer fotograma y las imágenes de referencia no cuestan nada extra: los tres modos tienen el mismo precio. Una petición rechazada con un 400 no crea tarea y no cuesta nada; las generaciones fallidas no se cobran.
Los problemas de parámetros vuelven de forma síncrona como un 400 al crear la tarea ({"code": 400, "msg": "..."}): no se crea ninguna tarea y no se cobra nada. Los textos de msg de abajo son la redacción actual; el nombre de campo entre paréntesis es el que enviaste.
| msg | Causa / solución |
|---|---|
prompt is required | Falta el prompt o solo tiene espacios en blanco. Las peticiones con primer fotograma o imágenes de referencia también necesitan prompt. |
prompt must be at most 4000 characters | El prompt supera los 4000 caracteres. Acórtalo. |
duration must be a whole number of seconds from 4 to 30 | duration (o seconds) está fuera de 4-30, tiene decimales o no es un número. Envía segundos enteros; una cadena como "10" también vale. |
muse-video outputs 720p only (resolution: 720p) | resolution llevaba 1080p u otro valor. Omítelo o envía 720p. |
muse-video supports 16:9 (1280x720) or 9:16 (720x1280) only — set aspect_ratio to 16:9 or 9:16 | Se envió otra proporción o tamaño (como 1:1 o 1920x1080), o aspect_ratio y size no coinciden. |
muse-video takes either a first frame (image_url) or reference images (images), not both | La petición llevaba un primer fotograma (image_url, first_frame_url, image o input_reference) y también imágenes de referencia (images, image_urls o reference_image_urls). Elige uno: solo el primer fotograma si el clip debe arrancar desde esa imagen, o solo las imágenes de referencia si debe mantener a la persona o el elemento principal. |
muse-video takes at most 4 reference images (images / image_urls) | El array de imágenes de referencia tiene más de 4. Deja 4 como máximo: las que mejor muestren a la persona o el elemento principal. |
muse-video does not support a last frame (last_frame_url) | Se envió un campo de último fotograma. Muse Video no admite último fotograma; quítalo. |
muse-video does not accept video or audio input (video_urls) | Se envió una entrada de video o audio. Muse Video acepta un prompt y, opcionalmente, una imagen de primer fotograma o hasta 4 imágenes de referencia. |
muse-video does not support negative_prompt — describe what you want in prompt instead | Se envió negative_prompt. Muse Video no tiene prompt negativo: quítalo y describe en prompt lo que quieres. |
muse-video does not support seed: results are not repeatable | Se envió seed. Muse Video no tiene seed y la misma petición da un clip distinto cada vez; quítalo. |
muse-video cannot turn sound off: the model decides whether a clip has sound | Se envió generate_audio: false. El sonido no se puede desactivar: omite el campo o envía true, y quita tú la pista de audio si necesitas un clip sin sonido. |
first-frame image must be PNG, JPEG or WebP; un archivo de más de 20 MB da first-frame image is larger than 20 MB. Ninguno de los dos se cobra.ffprobe -v error -select_streams a -show_entries stream=codec_name -of csv=p=0 clip.mp4: imprime aac si hay pista y nada si el clip no tiene sonido.Pruébalo en el Playground.
720p only (no 1080p, 2K, 4K or 480p), in 16:9 landscape at 1280×720 or 9:16 portrait at 720×1280 only (no square or other ratios). Length is 4 to 30 whole seconds, exact at 5, 6, 8, 10, 15, 20, 25 and 30 and rounded up otherwise. Images: either one first frame or up to four reference images that keep the same person or subject, not both; PNG, JPEG or WebP up to 20 MB each; no last frame. No video or audio input, no lip sync to your audio, no video editing or extension. Sound comes from the model, is not guaranteed on every clip and cannot be turned off. No negative_prompt, seed or camera-control parameters, and the prompt is up to 4,000 characters. Unsupported fields return a 400 before a task is created. Success is not 100%: the model can refuse content, a generation can hit a temporary error, and a clip with the wrong orientation or length is discarded. Failed tasks are not charged, and we publish no success rate.
$0.037 per requested second: 5 seconds (the default) $0.185, 8 seconds $0.296, 10 seconds $0.37, 15 seconds $0.555, 20 seconds $0.74, 30 seconds $1.11. A first frame or reference images cost nothing extra. Billing follows the seconds you request, so a 4-second request costs $0.148 and returns a 5-second clip. A request rejected with a 400 creates no task, and failed generations are not charged.
Clip lengths come in steps. Requests of 5, 6, 8, 10, 15, 20, 25 or 30 seconds come back exactly that long; any other whole number from 4 to 30 rounds up to the next step (4 → 5 s, 7 → 8 s, 11-14 → 15 s, 26-29 → 30 s), so a clip is never shorter than what you paid for. Request an exact step when the length matters.
720p only, in two shapes: 16:9 at 1280×720 (the default) or 9:16 at 720×1280, set with aspect_ratio or with size 1280x720 / 720x1280. There is no square or 1080p option; asking for one returns a 400 before a task is created. Output is an H.264 MP4 at 24 fps.
Add one first-frame image to the request as image_url (first_frame_url, image and input_reference also work): a public URL or a base64 data URI, PNG, JPEG or WebP, up to 20 MB. The clip starts from that picture and costs the same as text-to-video. Use an image in the same orientation as the clip; there is no last-frame option. Do not put the first frame in an image_urls array: any image array is read as reference images.
Yes, with reference images. Send 1 to 4 images of the person or subject in images (image_urls and reference_image_urls also work), not together with a first frame. The model keeps the face and look but does not start the clip from those pictures; the scene comes from the prompt. In one test on 2026-10-30, four photos of one young woman and a prompt about her walking along a beach at sunset gave a 5.0-second 720×1280 clip with audio in 88 seconds: the same face and hair, a similar outfit, and gestures taken from the photos. That is one test, not a guarantee. Reference images cost nothing extra, and more than 4 return a 400.
Meta describes Muse Video as generating sound together with the picture. In our launch tests the landscape clip carried an AAC audio track and the portrait clip came back silent, so if your pipeline needs audio, check each clip for an audio track. Sound cannot be turned off: generate_audio: false returns a 400.