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

# Como migrar um aplicativo de vídeo da API Sora para Seedance ou Wan?

> Migre do Sora para Seedance ou Wan separando o contrato estável de trabalhos de vídeo dos payloads específicos. Mapeie prompts, entradas, duração, tamanho, áudio e estados por adaptadores, armazene cada ID externo e compare resultados aceitos com um conjunto fixo de regressão antes de mover o tráfego.

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

# Como migrar um aplicativo de vídeo da API Sora para Seedance ou Wan?

A migração mais segura troca o adaptador do fornecedor, não o restante do produto. Mantenha um contrato interno para prompts, mídia, duração, orientação, intenção de áudio e entrega, e converta esse contrato em solicitações Sora, Seedance ou Wan na borda.

Não substitua `sora-2` por outro nome mantendo o payload. As APIs compartilham um padrão assíncrono, mas endpoints, formatos, valores, campos de mídia e estados são diferentes.

## Faça o inventário do comportamento Sora usado

A [referência da Videos API](https://platform.openai.com/docs/api-reference/videos) documenta criação em `POST /v1/videos`, consulta por ID e campos como `prompt`, `input_reference`, `model`, `seconds` e `size`. Seu aplicativo também pode depender de remix, download, objetos SDK ou erros específicos.

Registre as dependências reais:

| Dependência | Perguntas |
|---|---|
| Modelo | Está fixo em `sora-2` ou `sora-2-pro`? |
| Entrada | Texto, uma referência ou vídeo existente? |
| Duração | Quais valores aparecem na produção? |
| Tamanho | A UI guarda pixels, proporção ou preset? |
| Áudio | O produto promete áudio gerado ou substitui depois? |
| Estado | Como estados externos viram estados locais? |
| Saída | É transmitida, baixada, copiada ou referenciada por URL? |
| Falha | Quais erros são tentados novamente ou mostrados? |

O inventário revela se a mudança é apenas de modelo ou também de fluxo.

## Defina um trabalho neutro em relação ao fornecedor

Crie um objeto interno que represente a intenção sem fingir que todos aceitam os mesmos 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"}
}
```

Marque capacidades como obrigatórias, preferidas ou opcionais. Se o usuário exigir referência, descartá-la é erro. Se um seed só funcionar em um fornecedor, o adaptador pode omiti-lo e registrar a decisão.

## Mapeie intenção, não nomes de campo

Sora usa dimensões por `size`. Seedance pode expor `ratio`, `resolution`, `duration`, arrays de referência e áudio. Wan pode usar `size` ou `ratio` e oferecer expansão, tipo de plano, referência ou edição.

| Intenção | Exemplo Sora | Mapeamento Seedance ou Wan |
|---|---|---|
| Modelo | `sora-2` | ID exato no Atlas |
| Envio | `POST /v1/videos` | `POST /api/v1/model/generateVideo` |
| Prompt | `prompt` | Geralmente `prompt` |
| Referência | `input_reference` | `image` ou `reference_images` conforme a rota |
| Duração | `seconds` | `duration` e intervalo da rota |
| Quadro | `size` | `ratio`, `size` ou resolução e proporção |
| Áudio | Comportamento do modelo | `generate_audio` ou entrada de áudio |
| Resultado | ID de vídeo | Prediction ID da resposta |
| Estado | Endpoint de vídeo | `GET /api/v1/model/prediction/{id}` |

Essa tabela é uma lista de migração, não um schema. Copie os valores exatos da página ao vivo.

## Escolha uma rota Seedance deliberadamente

Seedance é uma família. Atlas Cloud documenta fluxos de texto, imagem e referência. [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) aceita mídia de referência e controles específicos de duração, resolução, proporção, bitrate e áudio.

Considere Seedance para:

* clipes audiovisuais curtos;
* orientação por sujeito, estilo ou cena;
* formatos sociais e publicitários;
* escolha entre iteração rápida e rotas de mais qualidade.

Não suponha que todas as variantes aceitam o mesmo. Escolha por modo e valide no schema.

## Escolha uma rota Wan deliberadamente

Wan oferece geração e edição. As [páginas Wan no 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) incluem Wan 3.0 e versões anteriores, com endpoints de texto, imagem, referência ou edição.

Considere Wan para:

* variedade de modos;
* expansão de prompt ou controles quando disponíveis;
* referência ou vídeo de origem;
* uma segunda família para qualidade ou disponibilidade.

Comece por um endpoint exato. Um adaptador `wan` vago vira condicionais difíceis de testar.

## Implemente adaptadores explícitos

Mantenha a validação perto do adaptador.

```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
```

A configuração deve rejeitar requisitos incompatíveis. Não transforme 12 segundos em 5, horizontal em vertical nem ignore referências silenciosamente.

Guarde o trabalho interno e o payload enviado para reproduzir regressões e questões de cobrança.

## Preserve a segurança assíncrona

Atlas Cloud devolve prediction ID e explica o ciclo em [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). Use estados locais duráveis.

| Estado local | Significado |
|---|---|
| `ready` | Validado, não enviado |
| `submitted` | ID externo armazenado |
| `processing` | Fornecedor processando |
| `succeeded` | Metadados recuperados |
| `failed` | Erro terminal |
| `rejected` | Concluiu mas falhou em qualidade |

Crie uma chave de idempotência. Persista fornecedor, rota, hash do payload e ID externo juntos. Se um worker perder conexão, consulte o registro antes de criar outro trabalho pago.

Consulte com intervalo crescente e jitter. Mais polling não acelera a geração.

## Monte um conjunto de regressão

Use 20 a 50 trabalhos reais, incluindo casos difíceis. Mantenha ativos e intenção constantes.

Avalie:

* aderência ao prompt;
* consistência de sujeito e produto;
* estabilidade do movimento;
* continuidade temporal;
* fidelidade à referência;
* ajuste audiovisual;
* formato e resolução;
* editabilidade do início e fim;
* distribuição de tempo;
* custo por saída aceita.

Não compare apenas um clipe. A aleatoriedade distorce; repita quando o produto permitir.

## Implante com um plano reversível

Avance por etapas.

1. Reproduza prompts não sensíveis offline.
2. Execute trabalhos shadow não entregues.
3. Envie uma pequena parcela canary para uma rota nova.
4. Compare erros, tempo, aceitação e custo.
5. Aumente apenas se os limites forem mantidos.
6. Preserve o adaptador Sora até não precisar de rollback.

Decida se deve mostrar o fornecedor. Se os modelos diferem, a escolha pode ser honesta. Se o produto vende uma capacidade, roteie somente entre alternativas que cumprem o mesmo contrato.

## Conclusão

Migre mantendo um trabalho neutro e trocando apenas o adaptador. Mapeie capacidades, escolha um endpoint real do Atlas, guarde cada prediction ID, rejeite requisitos incompatíveis e compare o custo por saída aceita em um conjunto fixo.

Seedance e Wan não são trocas de nome. Tornam-se alternativas seguras quando schemas são detalhes de implementação e a migração continua reversível.

## FAQ

### Posso trocar o nome do modelo Sora e manter o mesmo corpo da solicitação?

Não. Sora, Seedance e Wan usam IDs, endpoints, campos, valores e entradas de mídia diferentes. Mantenha um schema interno de trabalho e escreva um adaptador para cada rota.

### Qual é a maior semelhança arquitetônica entre as APIs?

A geração de vídeo é assíncrona. O aplicativo envia um trabalho, armazena um ID externo, consulta o status depois e obtém a saída apenas quando o processamento termina.

### Quais campos precisam de mapeamento explícito?

Mapeie ID do modelo, prompt, mídia de referência, duração, proporção ou tamanho, resolução, áudio, seed, comportamento de segurança e estados. Não ignore campos incompatíveis silenciosamente.

### Devo escolher Seedance ou Wan?

Teste ambos com os trabalhos reais do aplicativo. Seedance é forte para vídeo curto guiado por referências e audiovisual; Wan oferece várias rotas de texto, imagem, referência e edição. A melhor opção depende do resultado aceito.

### Como evitar trabalhos pagos duplicados durante a migração?

Crie uma chave interna de idempotência, persista o ID do fornecedor assim que enviar e verifique o trabalho existente antes de tentar novamente. Incerteza de rede não deve causar outro envio cego.

### Quanto tráfego devo migrar inicialmente?

Comece com prompts de regressão offline e depois uma pequena parcela shadow ou canary. Aumente somente quando aceitação, erros, tempo de conclusão e custo estiverem nos limites.
