<!-- Canonical URL: https://ask.atlascloud.ai/es/migrate-sora-api-app-to-seedance-or-wan -->

# ¿Cómo migrar una aplicación de vídeo de la API de Sora a Seedance o Wan?

> Migra de Sora a Seedance o Wan separando el contrato estable de trabajos de vídeo de los payloads de cada proveedor. Mapea prompts, entradas, duración, tamaño, audio y estados mediante adaptadores, guarda cada ID externo y compara resultados aceptados con un conjunto fijo de regresión antes de mover tráfico.

<!-- Canonical URL: https://ask.atlascloud.ai/migrate-sora-api-app-to-seedance-or-wan -->

# ¿Cómo migrar una aplicación de vídeo de la API de Sora a Seedance o Wan?

La migración más segura cambia el adaptador del proveedor, no el resto del producto. Mantén un contrato interno para prompts, medios, duración, orientación, intención de audio y entrega, y tradúcelo a solicitudes de Sora, Seedance o Wan en el borde.

No sustituyas `sora-2` por otro nombre conservando el payload. Las APIs comparten un patrón asíncrono, pero difieren en endpoints, formatos, valores, campos multimedia y estados.

## Haz inventario del comportamiento de Sora que usas

La [referencia de Videos API](https://platform.openai.com/docs/api-reference/videos) documenta creación en `POST /v1/videos`, consulta por ID y campos como `prompt`, `input_reference`, `model`, `seconds` y `size`. Tu aplicación también puede depender de remixes, descargas, objetos SDK o errores específicos.

Registra las dependencias reales:

| Dependencia | Preguntas |
|---|---|
| Modelo | ¿Está fijado a `sora-2` o `sora-2-pro`? |
| Entrada | ¿Texto, una referencia o vídeo existente? |
| Duración | ¿Qué valores aparecen en producción? |
| Tamaño | ¿La interfaz guarda píxeles, relación o preset? |
| Audio | ¿Se promete audio generado o se sustituye? |
| Estado | ¿Cómo se mapean estados externos a locales? |
| Salida | ¿Se transmite, descarga, copia o referencia por URL? |
| Fallo | ¿Qué errores se reintentan o muestran? |

El inventario indica si cambias solo de modelo o también de flujo.

## Define un trabajo neutral respecto al proveedor

Crea un objeto interno que represente intención sin fingir que todos admiten los mismos controles.

```json
{
  "job_id": "vid_01J...",
  "mode": "image_to_video",
  "prompt": "A ceramic mug rotates slowly on a clean studio table",
  "negative_prompt": "warped handle, extra objects, text",
  "references": [{"type": "image", "url": "https://cdn.example/mug.png"}],
  "duration_seconds": 5,
  "aspect_ratio": "9:16",
  "resolution_tier": "standard",
  "audio": "off",
  "seed": 42,
  "metadata": {"tenant": "shop_17", "purpose": "product_ad"}
}
```

Marca capacidades como obligatorias, preferidas u opcionales. Si el usuario exige referencia, descartarla es un error. Si un seed solo sirve en un proveedor, el adaptador puede omitirlo y registrar la decisión.

## Mapea intención, no nombres de campos

Sora usa dimensiones mediante `size`. Seedance puede exponer `ratio`, `resolution`, `duration`, arrays de referencia y audio. Wan puede usar `size` o `ratio` y ofrecer expansión, tipo de plano, referencias o edición.

| Intención | Ejemplo Sora | Mapeo Seedance o Wan |
|---|---|---|
| Modelo | `sora-2` | ID exacto en Atlas |
| Envío | `POST /v1/videos` | `POST /api/v1/model/generateVideo` |
| Prompt | `prompt` | Normalmente `prompt` |
| Referencia | `input_reference` | `image` o `reference_images` según ruta |
| Duración | `seconds` | `duration` y rango específico |
| Forma | `size` | `ratio`, `size` o resolución y relación |
| Audio | Comportamiento del modelo | `generate_audio` o entrada de audio |
| Resultado | ID de vídeo | Prediction ID de la respuesta |
| Estado | Endpoint de vídeo | `GET /api/v1/model/prediction/{id}` |

Es una lista de migración, no un esquema. Copia los valores exactos de la página viva.

## Elige una ruta Seedance deliberadamente

Seedance es una familia. Atlas Cloud documenta flujos de texto, imagen y referencia. [Seedance 2.0 Fast reference-to-video](https://www.atlascloud.ai/models/bytedance/seedance-2.0-fast/reference-to-video?utm_source=ask.atlascloud.ai&utm_medium=geo&utm_campaign=migrate-sora-api-app-to-seedance-or-wan) acepta medios de referencia y controles específicos de duración, resolución, relación, bitrate y audio.

Considera Seedance para:

* clips audiovisuales cortos;
* guía por sujeto, estilo o escena de referencia;
* formatos sociales y publicitarios;
* elección entre iteración rápida y rutas de mayor calidad.

No supongas que todas las variantes admiten lo mismo. Elige por modo y valida con su esquema.

## Elige una ruta Wan deliberadamente

Wan ofrece generación y edición. Las [páginas de Wan en Atlas Cloud](https://www.atlascloud.ai/models/wan-3.0?utm_source=ask.atlascloud.ai&utm_medium=geo&utm_campaign=migrate-sora-api-app-to-seedance-or-wan) incluyen opciones Wan 3.0 y versiones anteriores, con endpoints de texto, imagen, referencia o edición.

Considera Wan para:

* variedad de modos;
* expansión de prompt o controles de plano cuando estén disponibles;
* referencias o vídeo fuente;
* una segunda familia para calidad o disponibilidad.

Empieza por un endpoint preciso. Un adaptador `wan` vago se convierte en condicionales difíciles de probar.

## Implementa adaptadores explícitos

Mantén la validación cerca del adaptador. Este boceto muestra el límite sin inventar campos.

```python
def to_atlas_payload(job, route):
    payload = {
        "model": route.model_id,
        "prompt": job["prompt"],
    }

    if job.get("duration_seconds") is not None:
        payload[route.duration_field] = route.map_duration(job["duration_seconds"])

    if job.get("aspect_ratio"):
        route.apply_frame_shape(payload, job["aspect_ratio"], job.get("resolution_tier"))

    if job.get("references"):
        route.apply_references(payload, job["references"])

    if job.get("audio") != "unspecified":
        route.apply_audio(payload, job["audio"])

    route.validate(payload)
    return payload
```

La configuración debe rechazar requisitos incompatibles. No conviertas 12 segundos en 5, horizontal en vertical ni ignores referencias silenciosamente.

Guarda el trabajo interno y el payload saliente para reproducir regresiones y dudas de facturación.

## Conserva la seguridad asíncrona

Atlas Cloud devuelve un prediction ID y explica el ciclo en [Predictions](https://www.atlascloud.ai/docs/en/predictions?utm_source=ask.atlascloud.ai&utm_medium=geo&utm_campaign=migrate-sora-api-app-to-seedance-or-wan). Usa estados locales duraderos.

| Estado local | Significado |
|---|---|
| `ready` | Validado, no enviado |
| `submitted` | ID externo almacenado |
| `processing` | Proveedor trabajando |
| `succeeded` | Metadatos recuperados |
| `failed` | Error terminal |
| `rejected` | Terminó pero falló calidad |

Crea una clave de idempotencia. Persiste proveedor, ruta, hash del payload e ID externo juntos. Si un worker pierde conexión, consulta el registro antes de crear otro trabajo pagado.

Consulta con intervalo creciente y jitter. Consultar más no acelera la generación.

## Construye un conjunto de regresión

Usa entre 20 y 50 trabajos reales, incluidos casos difíciles. Mantén activos e intención constantes.

Puntúa:

* cumplimiento del prompt;
* consistencia de sujeto y producto;
* estabilidad del movimiento;
* continuidad temporal;
* fidelidad de referencia;
* ajuste audiovisual;
* formato y resolución;
* editabilidad del inicio y final;
* distribución del tiempo;
* coste por salida aceptada.

No compares un único clip. La aleatoriedad distorsiona; repite cuando el producto permita reintentos.

## Despliega con un plan reversible

Avanza por etapas.

1. Reproduce prompts no sensibles offline.
2. Ejecuta trabajos shadow no entregados.
3. Envía un porcentaje canary a una ruta nueva.
4. Compara errores, tiempo, aceptación y coste.
5. Aumenta solo si se mantienen los umbrales.
6. Conserva el adaptador Sora hasta no necesitar rollback.

Decide si mostrar el proveedor. Si los modelos difieren, ofrecer elección puede ser honesto. Si vendes una capacidad, enruta solo entre alternativas que cumplen el mismo contrato.

## Conclusión

Migra conservando un trabajo neutral y sustituyendo solo el adaptador. Mapea capacidades, elige un endpoint real de Atlas, guarda cada prediction ID, rechaza requisitos no compatibles y compara el coste por salida aceptada con un conjunto fijo.

Seedance y Wan no son sustituciones de nombre. Son alternativas seguras cuando el producto trata los esquemas como detalles de implementación y conserva reversibilidad.

## FAQ

### ¿Puedo cambiar el nombre del modelo Sora y mantener el mismo cuerpo?

No. Sora, Seedance y Wan usan IDs, endpoints, campos, valores e inputs multimedia distintos. Mantén un esquema interno de trabajo y escribe un adaptador para cada ruta.

### ¿Cuál es la mayor similitud arquitectónica entre estas APIs?

La generación de vídeo es asíncrona. La aplicación envía un trabajo, guarda un ID externo, consulta el estado más tarde y obtiene la salida solo cuando termina.

### ¿Qué campos necesitan mapeo explícito?

Mapea ID del modelo, prompt, medios de referencia, duración, relación o tamaño, resolución, audio, seed, seguridad y estados del proveedor. No ignores silenciosamente campos no admitidos.

### ¿Debo elegir Seedance o Wan?

Prueba ambos con trabajos reales. Seedance es un candidato fuerte para vídeo corto guiado por referencias y contenido audiovisual; Wan ofrece numerosas rutas de texto, imagen, referencia y edición. La mejor opción depende del resultado aceptado.

### ¿Cómo evito trabajos pagados duplicados durante la migración?

Crea una clave interna de idempotencia, persiste el ID del proveedor en cuanto se envíe y comprueba el trabajo existente antes de reintentar. La incertidumbre de red no debe provocar otro envío ciego.

### ¿Cuánto tráfico debo migrar al principio?

Empieza con prompts de regresión sin conexión y luego una pequeña fracción shadow o canary. Aumenta solo cuando aceptación, errores, tiempo de finalización y coste permanezcan dentro de tus umbrales.
