Si vienes de fal, Replicateo WaveSpeed
Cómo llevar las llamadas a Seedance 2.0 y Qwen-Image a /v1: autenticación, ids de modelo, cada campo, tareas asíncronas y webhooks, y lo que no se traslada.
No es solo cambiar la URL base
En ninguna de las tres basta con cambiar la URL base y la clave. Cada solicitud también cambia en estos puntos:
- La clave:
Authorization: Bearercon una clave que empieza porsk_test_osk_live_. - El id del modelo va en el cuerpo como
model, y un solo id cubre texto, primer fotograma y referencias. - Un encabezado
Idempotency-Keyen cada solicitud de generación. - Un límite de precio:
max_credits, o unquote_iddePOST /v1/quotes. - El resultado es una tarea: consulta
GET /v1/jobs/{id}o recibe nuestro webhook firmado.
- fal
- La más parecida a la nuestra: la mayoría de los nombres de campo de Seedance son los de fal. Además, renombra
image_urlsareference_image_urls, envíadurationcomo número y pasafal_webhookal cuerpo comowebhook_url. - Replicate
- Saca los campos de
input. Además, renombraimageaimage_url,reference_imagesareference_image_urlsywebhookawebhook_url. - WaveSpeed
- Además, renombra
imageaimage_urlyreference_imagesareference_image_urls, y pasastandard_webhookal cuerpo comowebhook_url. Lee los resultados deGET /v1/jobs/{id}.
Autenticación
Adónde van las solicitudes y cómo se autentican.
| Plataforma | URL base | Encabezado de autenticación |
|---|---|---|
| Pershot | https://api.pershot.app/v1 | Authorization: Bearer $API_KEY |
| fal | https://queue.fal.run | Authorization: Key $FAL_KEY |
| Replicate | https://api.replicate.com/v1 | Authorization: Bearer $REPLICATE_API_TOKEN |
| WaveSpeed | https://api.wavespeed.ai/api/v3 | Authorization: Bearer $WAVESPEED_API_KEY |
El acceso a la API para desarrolladores requiere aprobación previa: pídelo en el estudio, en Claves de API. La clave se muestra una sola vez. Una clave de desarrollador gasta el saldo de la API para desarrolladores, y la misma clave sirve como encabezado Bearer en el servidor MCP.
Ids de modelo
Los de ellos van en la URL; el nuestro va en el cuerpo como model. Un solo id nuestro cubre texto, primer fotograma y referencias: deciden los campos que envías.
| Nuestro | fal | Replicate | WaveSpeed | Notas |
|---|---|---|---|---|
seedance-2.0-fast | bytedance/seedance-2.0/fast/text-to-videobytedance/seedance-2.0/fast/image-to-videobytedance/seedance-2.0/fast/reference-to-video | bytedance/seedance-2.0-fast | bytedance/seedance-2.0-fast/text-to-videobytedance/seedance-2.0-fast/image-to-video | Un solo id para texto, primer fotograma e imágenes de referencia. |
seedance-2.0-mini | bytedance/seedance-2.0/mini/text-to-videobytedance/seedance-2.0/mini/image-to-videobytedance/seedance-2.0/mini/reference-to-video | bytedance/seedance-2.0-mini | bytedance/seedance-2.0-mini/text-to-video | Un solo id para texto, primer fotograma e imágenes de referencia. |
qwen-image-2512 | fal-ai/qwen-image-2512 | qwen/qwen-image-2512 | wavespeed-ai/qwen-image/text-to-image-2512 | Los mismos pesos abiertos. |
qwen-image-2512-lightning | fal-ai/qwen-image-2512/lora | ninguno | ninguno | Nuestro nivel Lightning de 4 pasos. fal lo ejecuta como LoRA en su endpoint /lora; no encontramos un modelo Lightning listo para usar en Replicate ni en WaveSpeed. |
qwen-image-edit-2511 | fal-ai/qwen-image-edit-2511 | qwen/qwen-image-edit-2511 | wavespeed-ai/qwen-image/edit-2511 | Los mismos pesos abiertos. |
qwen-image-edit-2511-lightning | fal-ai/qwen-image-edit-2511/lora | ninguno | ninguno | Nuestro nivel Lightning de 4 pasos. fal lo ejecuta como LoRA en su endpoint /lora; no encontramos un modelo Lightning listo para usar en Replicate ni en WaveSpeed. |
- Para agentes de IA
- Texto plano para agentes de IA: entradas, valores admitidos, cada precio y un ejemplo de solicitud
seedance-2.0-fastseedance-2.0-miniqwen-image-2512-lightningqwen-image-2512qwen-image-edit-2511-lightningqwen-image-edit-2511
Seedance 2.0, campo por campo
Nuestros nombres siguen los de fal cuando fal tiene el campo, y las notas indican dónde difieren. Los campos van en el nivel superior del cuerpo JSON; Replicate los envuelve en input.
| Nuestro | fal | Replicate | WaveSpeed | Notas |
|---|---|---|---|---|
model | en la URL | en la URL | en la URL | Un solo id en el cuerpo para texto, primer fotograma y referencias. El de ellos va en la URL. |
prompt | prompt | prompt | prompt | El mismo texto sirve tal cual. |
duration | duration | duration | duration | Un número entero de 4 a 15, predeterminado 5. fal lo envía como cadena y ofrece auto; Replicate usa -1 para automático. Aquí no hay duración automática. |
resolution | resolution | resolution | resolution | 480p o 720p, predeterminado 720p. WaveSpeed también ofrece 1080p y 4k; aquí las resoluciones más altas son el paso aparte enhance. |
aspect_ratio | aspect_ratio | aspect_ratio | aspect_ratio | 16:9, 9:16 o 1:1, predeterminado 16:9. Sin auto, adaptive, 4:3, 3:4 ni 21:9. |
generate_audio | generate_audio | generate_audio | generate_audio | El mismo significado, activado de forma predeterminada. El precio es el mismo, activado o desactivado. |
image_url | image_url | image | image | El primer fotograma. Mismo nombre que en fal; Replicate y WaveSpeed lo llaman image. No se combina con imágenes de referencia. |
reference_image_urls | image_urls | reference_images | reference_images | Hasta 9 imágenes, @image1, @image2 en el prompt. Distinto de fal, que lo llama image_urls. |
seed | ninguno | seed | ninguno | Se acepta y no se usa: Seedance 2.0 no admite semilla. fal y WaveSpeed no lo incluyen. |
quote_id | ninguno | ninguno | ninguno | Nuevo: envía exactamente uno de quote_id o max_credits. Una tarea nunca cuesta más. |
max_credits | ninguno | ninguno | ninguno | Nuevo: envía exactamente uno de quote_id o max_credits. Una tarea nunca cuesta más. |
webhook_url | fal_webhookcadena de consulta | webhook | standard_webhookcadena de consulta | En el cuerpo. Distinto de fal, que recibe fal_webhook en la cadena de consulta. |
end_user_id | end_user_id | ninguno | ninguno | El mismo nombre que en fal. Para cuentas de desarrollador aprobadas (el acceso requiere aprobación previa): tu propio id de usuario, visible en el uso. |
project_id | ninguno | ninguno | ninguno | Solo nuestro, opcional: proyectos y enrutamiento de proveedores. |
shot_id | ninguno | ninguno | ninguno | Solo nuestro, opcional: proyectos y enrutamiento de proveedores. |
routing_preference | ninguno | ninguno | ninguno | Solo nuestro, opcional: proyectos y enrutamiento de proveedores. |
enhance | ninguno | ninguno | ninguno | Solo nuestro, opcional: una ampliación con IA después del render, con la etiqueta AI Enhanced. |
Idempotency-Keyencabezado | ninguno | ninguno | ninguno | Nuevo y obligatorio: la misma clave dentro de 24 horas devuelve la misma tarea. |
Sus campos de Seedance sin equivalente aquí. Si se envían tal cual, se rechazan como campos desconocidos (400 invalid_request).
- fal
end_image_urlvideo_urlsaudio_urlsbitrate_modecodec- Replicate
last_frame_imagereference_videosreference_audios- WaveSpeed
last_imagereference_videosreference_audiosenable_web_search
Qwen-Image, campo por campo
Nuestro cuerpo de imagen es más pequeño que el suyo: un tamaño y una relación de aspecto en lugar de píxeles libres, una imagen por tarea y sin ajustes del sampler.
| Nuestro | fal | Replicate | WaveSpeed | Notas |
|---|---|---|---|---|
model | en la URL | en la URL | en la URL | Cuatro ids en el cuerpo: Image Mini e Image Fast, cada uno para generar y para editar. |
prompt | prompt | prompt | prompt | El mismo texto sirve tal cual. |
size | image_size | ninguno | size | 1K o 2K, predeterminado 1K. Junto con la relación de aspecto fija un tamaño, de hasta 2048 px por lado. Sin ancho y alto libres. |
aspect_ratio | image_size | aspect_ratio | size | 16:9, 9:16 o 1:1, predeterminado 1:1. No cambia el precio. |
image_url | image_urls | image | images | Solo modelos de edición: exactamente una imagen de origen, como URL. Los de ellos aceptan una lista. |
seed | seed | seed | seed | El mismo significado. |
quote_id | ninguno | ninguno | ninguno | Nuevo: envía exactamente uno de quote_id o max_credits. Una tarea nunca cuesta más. |
max_credits | ninguno | ninguno | ninguno | Nuevo: envía exactamente uno de quote_id o max_credits. Una tarea nunca cuesta más. |
webhook_url | fal_webhookcadena de consulta | webhook | standard_webhookcadena de consulta | En el cuerpo. Distinto de fal, que recibe fal_webhook en la cadena de consulta. |
end_user_id | ninguno | ninguno | ninguno | Solo nuestro, opcional, para cuentas de desarrollador aprobadas (el acceso requiere aprobación previa): tu propio id de usuario, visible en el uso. |
project_id | ninguno | ninguno | ninguno | Solo nuestro, opcional: proyectos y enrutamiento de proveedores. |
shot_id | ninguno | ninguno | ninguno | Solo nuestro, opcional: proyectos y enrutamiento de proveedores. |
routing_preference | ninguno | ninguno | ninguno | Solo nuestro, opcional: proyectos y enrutamiento de proveedores. |
Idempotency-Keyencabezado | ninguno | ninguno | ninguno | Nuevo y obligatorio: la misma clave dentro de 24 horas devuelve la misma tarea. |
Sus campos de Qwen-Image sin equivalente aquí. Si se envían tal cual, se rechazan como campos desconocidos (400 invalid_request).
- fal
negative_promptnum_inference_stepsguidance_scalenum_imagesoutput_formataccelerationenable_safety_checkersync_modeloras- Replicate
negative_promptstrengthwidthheightguidancenum_inference_stepsgo_fastoutput_formatoutput_qualitydisable_safety_checkerlora_weightslora_scale- WaveSpeed
widthheightoutput_formatenable_base64_outputenable_sync_mode
Tareas asíncronas y webhooks
Las cuatro ejecutan las tareas en segundo plano. Así llama cada una a los pasos:
| Paso | Pershot | fal | Replicate | WaveSpeed |
|---|---|---|---|---|
| Crear | POST /v1/videos/generationsPOST /v1/images/generations202 → { id: "job_…" } | POST https://queue.fal.run/<endpoint id>→ request_id, status_url, response_url | POST /v1/models/{owner}/{name}/predictions{ "input": { … } } | POST /api/v3/<model id>→ data.id |
| Consultar | GET /v1/jobs/{id} | GET status_urlGET response_url | GET /v1/predictions/{id} | GET /api/v3/predictions/{id}/result |
| Estados | queuedprocessingsucceededfailedcancelledunknown | IN_QUEUEIN_PROGRESSCOMPLETED | startingprocessingsucceededfailedcanceled | createdcompletedfailedcancelledtimeoutdeleted |
| Webhook | webhook_url (body) | ?fal_webhook=… | webhook (body)webhook_events_filter | ?standard_webhook=…?webhook=… (legacy) |
| Firma | X-Signature: t=…,v1=…HMAC-SHA256, whsec_…X-Event-Id | X-Fal-Webhook-SignatureED25519, JWKS | webhook-idwebhook-timestampwebhook-signature | webhook-idwebhook-timestampwebhook-signature |
| Reintentos de entrega | Después de 1 min, 5 min, 30 min, 2 h y 6 h. Una respuesta 2xx en 10 segundos cuenta como entregada. | Hasta 31 reintentos, mientras no caduque el resultado guardado. | Puede reintentar: gestiona los duplicados. | Hasta 3 reintentos. |
| Archivos de salida | Enlaces firmados válidos durante 24 horas; vuelve a leer la tarea para obtener uno nuevo. Los archivos se conservan 12 meses. | Siguen tu configuración de caducidad de medios. | Se eliminan al cabo de una hora en las predicciones hechas mediante la API. | Se conservan hasta 7 días. |
| Esperar en una sola llamada | No hay: cada tarea es asíncrona. Por MCP, wait_for_job espera hasta 60 segundos. | POST https://fal.run/<endpoint id> | Prefer: wait=n | enable_sync_mode |
El cuerpo de nuestro webhook es la propia tarea, y la firma es nuestra: el código que verifica sus webhooks rechazará los nuestros. Cómo verificar los nuestros
Idempotencia
Cada solicitud de generación necesita un encabezado Idempotency-Key, de 1 a 255 caracteres ASCII visibles. La misma clave dentro de 24 horas devuelve la misma tarea con HTTP 200, así que un reintento después de un tiempo de espera agotado nunca crea ni cobra una segunda tarea.
Ninguna de las tres documenta una clave de idempotencia para crear tareas (2026-10-22): fal sugiere eliminar duplicados de webhooks por request_id, y WaveSpeed pide enviar una sola vez y buscar la tarea antes de volver a enviarla. Dale a cada tarea una clave y reutilízala en cada reintento.
Lo que no es compatible
Si se envían tal cual, estos fallan o se rechazan aquí:
- Sus bibliotecas cliente (fal_client, replicate, wavespeed) no llaman a /v1. Usa HTTP directo, el documento OpenAPI o el servidor MCP.
- Sus formas de respuesta: aquí una tarea es un Job con
outputs[].url, no un resultado de fal, una predicción de Replicate ni un envoltoriodatade WaveSpeed. - Últimos fotogramas: fal
end_image_url, Replicatelast_frame_image, WaveSpeedlast_image. - Videos y audio de referencia: fal
video_urlsyaudio_urls, Replicate y WaveSpeedreference_videosyreference_audios. - Una duración o relación automática, las relaciones 4:3, 3:4 y 21:9, y los renders en 1080p o 4K. Aquí las resoluciones más altas son un paso aparte,
enhance, con la etiqueta AI Enhanced. - Un primer fotograma junto con imágenes de referencia. Replicate también lo rechaza.
- Esperar el resultado en una sola llamada (fal.run,
Prefer: waitde Replicate,enable_sync_modede WaveSpeed): aquí cada tarea es asíncrona. - Varias imágenes por tarea, salida en PNG o WebP, ancho y alto libres, varias imágenes de origen para una edición, LoRA y ajustes del sampler.
- Su verificación de webhooks: nuestras entregas llevan
X-Signature, un HMAC-SHA256 con tu secreto whsec_, no la firma ED25519 de fal ni el encabezadowebhook-signature. - Pagar después de usar: los créditos son prepagados, cada tarea tiene un límite y una tarea por encima de
max_creditsse rechaza, no se cobra. - Enlaces de salida de larga duración: los nuestros duran 24 horas. Vuelve a leer la tarea para obtener uno nuevo.
Antes y después
La misma solicitud de Seedance 2.0 Fast con un primer fotograma, tal como la documenta cada plataforma, y luego en /v1. El límite de precio sale de nuestro motor de precios.
curl -X POST https://queue.fal.run/bytedance/seedance-2.0/fast/image-to-video \
-H "Authorization: Key $FAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Slow dolly-in on a ceramic mug on a wooden table, morning window light",
"image_url": "https://example.com/first-frame.jpg",
"duration": "5",
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true
}'curl https://api.pershot.app/v1/videos/generations \
-H "Authorization: Bearer $API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-fast",
"prompt": "Slow dolly-in on a ceramic mug on a wooden table, morning window light",
"image_url": "https://example.com/first-frame.jpg",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true,
"max_credits": 34
}'Los precios son los nuestros
Aquí cada tarea se cotiza en créditos antes de ejecutarse (1 US$ = 100 créditos) y nunca cuesta más que su cotización o max_credits.
Lo que cobran fal, Replicate y WaveSpeed está en sus propias páginas. Nuestras páginas de comparación muestran sus precios publicados de Seedance 2.0, cada uno con la fecha en que se consultó.
| Modelo | 480p, por segundo | 720p, por segundo |
|---|---|---|
Seedance 2.0 Fastseedance-2.0-fast | 0,031 US$ | 0,067 US$ |
Seedance 2.0 Miniseedance-2.0-mini | 0,020 US$ | 0,042 US$ |
| Modelo | 1K, por imagen | 2K, por imagen |
|---|---|---|
Qwen-Image-2512 · Lightning 4-stepqwen-image-2512-lightning | 1 cr | 3 cr |
Qwen-Image-2512qwen-image-2512 | 2 cr | 6 cr |
Qwen-Image-Edit-2511 · Lightningqwen-image-edit-2511-lightning | 2 cr | 4 cr |
Qwen-Image-Edit-2511qwen-image-edit-2511 | 3 cr | 10 cr |
Fuentes
Sus nombres de campo y su comportamiento tal como los mostraban sus páginas públicas el 2026-10-22. Revisa su documentación antes de cambiar:
- fal
- fal.ai/models/bytedance/seedance-2.0/fast/text-to-video/llms.txtfal.ai/models/bytedance/seedance-2.0/fast/image-to-video/llms.txtfal.ai/models/bytedance/seedance-2.0/fast/reference-to-video/llms.txtfal.ai/models/fal-ai/qwen-image-2512/llms.txtfal.ai/models/fal-ai/qwen-image-edit-2511/llms.txtfal.ai/docs/model-apis/model-endpoints/queuefal.ai/docs/model-apis/model-endpoints/webhooks
- Replicate
- replicate.com/bytedance/seedance-2.0-fast/llms.txtreplicate.com/qwen/qwen-image-2512/llms.txtreplicate.com/qwen/qwen-image-edit-2511/llms.txtreplicate.com/docs/reference/httpreplicate.com/docs/topics/webhooks/verify-webhook
- WaveSpeed
- wavespeed.ai/models/bytedance/seedance-2.0-fast/text-to-videowavespeed.ai/models/bytedance/seedance-2.0-fast/image-to-videowavespeed.ai/models/wavespeed-ai/qwen-image/text-to-image-2512wavespeed.ai/models/wavespeed-ai/qwen-image/edit-2511wavespeed.ai/docs/submit-taskwavespeed.ai/docs/how-to-use-webhookswavespeed.ai/docs/verify-webhookswavespeed.ai/docs/data-retention-policy