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

# Come migrare un’app video dalla Sora API a Seedance o Wan?

> Migra da Sora a Seedance o Wan separando il contratto stabile dei job video dai payload specifici del provider. Mappa prompt, input, durata, dimensione, audio e stati tramite adapter, salva ogni ID esterno e confronta gli output accettati con un set di regressione fisso prima di spostare il traffico.

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

# Come migrare un’app video dalla Sora API a Seedance o Wan?

La migrazione più sicura cambia l’adapter del provider, non il resto del prodotto. Mantieni un contratto interno per prompt, media, durata, orientamento, intenzione audio e consegna, quindi traducilo in richieste Sora, Seedance o Wan ai margini.

Non sostituire `sora-2` con un altro nome mantenendo lo stesso payload. Le API condividono un pattern asincrono, ma differiscono per endpoint, formati, valori, campi media e stati.

## Fai l’inventario del comportamento Sora usato

La [referenza Videos API](https://platform.openai.com/docs/api-reference/videos) documenta creazione con `POST /v1/videos`, stato per ID e campi come `prompt`, `input_reference`, `model`, `seconds` e `size`. L’app può dipendere anche da remix, download, oggetti SDK o errori specifici.

Registra le dipendenze reali:

| Dipendenza | Domande |
|---|---|
| Modello | Il codice è fisso su `sora-2` o `sora-2-pro`? |
| Input | Testo, un riferimento o video esistente? |
| Durata | Quali valori compaiono in produzione? |
| Dimensione | La UI salva pixel, rapporto o preset? |
| Audio | Il prodotto promette audio generato o lo sostituisce? |
| Stato | Come vengono mappati gli stati esterni? |
| Output | Viene trasmesso, scaricato, copiato o riferito con URL? |
| Errore | Quali errori vengono ritentati o mostrati? |

L’inventario mostra se cambia solo il modello o anche il workflow.

## Definisci un job neutrale rispetto al provider

Crea un oggetto interno che rappresenti l’intenzione senza fingere controlli uguali.

```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 le capacità come obbligatorie, preferite o opzionali. Se l’utente richiede un riferimento, eliminarlo è un errore. Se un seed serve solo a un provider, l’adapter può ometterlo registrando la decisione.

## Mappa l’intenzione, non i nomi dei campi

Sora usa `size`. Seedance può esporre `ratio`, `resolution`, `duration`, array di riferimenti e audio. Wan può usare `size` o `ratio` e offrire espansione del prompt, shot type, riferimenti o editing.

| Intenzione | Esempio Sora | Mappatura Seedance o Wan |
|---|---|---|
| Modello | `sora-2` | ID Atlas esatto |
| Invio | `POST /v1/videos` | `POST /api/v1/model/generateVideo` |
| Prompt | `prompt` | In genere `prompt` |
| Riferimento | `input_reference` | `image` o `reference_images` secondo la route |
| Durata | `seconds` | `duration` e intervallo della route |
| Frame | `size` | `ratio`, `size` o risoluzione più rapporto |
| Audio | Comportamento modello | `generate_audio` o input audio |
| Risultato | ID video | Prediction ID della risposta |
| Stato | Endpoint video | `GET /api/v1/model/prediction/{id}` |

La tabella è una checklist, non uno schema. Copia i valori esatti dalla pagina live.

## Scegli deliberatamente una route Seedance

Seedance è una famiglia. Atlas Cloud documenta flussi di testo, immagini e riferimenti. [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) accetta media di riferimento e controlli specifici per durata, risoluzione, rapporto, bitrate e audio.

Considera Seedance per:

* clip audiovisive brevi;
* guida da soggetto, stile o scena;
* formati social e pubblicitari;
* scelta tra iterazione rapida e route di qualità.

Non presumere input uguali per tutte le varianti. Scegli per modalità e valida con lo schema.

## Scegli deliberatamente una route Wan

Wan offre generazione ed editing. Le [pagine Wan su 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) includono Wan 3.0 e versioni precedenti con endpoint di testo, immagini, riferimenti o editing.

Considera Wan per:

* ampia scelta di modalità;
* espansione del prompt o controlli di ripresa disponibili;
* flussi con riferimenti o video sorgente;
* una seconda famiglia per qualità o disponibilità.

Inizia con un endpoint preciso. Un adapter `wan` vago diventa un insieme di condizioni difficili da testare.

## Implementa adapter espliciti

Mantieni la validazione vicino all’adapter.

```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 configurazione deve rifiutare requisiti incompatibili. Non trasformare silenziosamente 12 secondi in 5, orizzontale in verticale né ignorare riferimenti.

Salva il job interno e il payload inviato per riprodurre regressioni e dubbi di fatturazione.

## Conserva la sicurezza asincrona

Atlas Cloud restituisce un prediction ID e descrive il ciclo in [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 stati locali persistenti.

| Stato locale | Significato |
|---|---|
| `ready` | Validato, non inviato |
| `submitted` | ID esterno salvato |
| `processing` | Provider in elaborazione |
| `succeeded` | Metadati recuperati |
| `failed` | Errore terminale |
| `rejected` | Completato ma rifiutato dalla qualità |

Crea una chiave di idempotenza. Salva provider, route, hash del payload e ID esterno insieme. Se un worker perde la connessione, controlla il record prima di un altro job a pagamento.

Fai polling con intervallo crescente e jitter. Più polling non accelera la generazione.

## Costruisci un set di regressione

Usa da 20 a 50 job reali, inclusi casi difficili. Mantieni asset e intenzione costanti.

Valuta:

* aderenza al prompt;
* coerenza di soggetto e prodotto;
* stabilità del movimento;
* continuità temporale;
* fedeltà al riferimento;
* adattamento audiovisivo;
* formato e risoluzione;
* modificabilità di inizio e fine;
* distribuzione del tempo;
* costo per output accettato.

Non confrontare una sola clip. La casualità distorce; ripeti se il prodotto permette retry.

## Distribuisci con un piano reversibile

Procedi per fasi.

1. Riproduci prompt non sensibili offline.
2. Esegui job shadow non consegnati.
3. Invia una piccola quota canary a una nuova route.
4. Confronta errori, tempo, accettazione e costo.
5. Aumenta solo se le soglie restano stabili.
6. Mantieni l’adapter Sora finché serve rollback.

Decidi se mostrare il provider. Se i modelli differiscono, una scelta può essere onesta. Se il prodotto vende una capacità, instrada solo tra alternative con lo stesso contratto.

## Conclusione

Migra conservando un job neutrale e sostituendo solo l’adapter. Mappa le capacità, scegli un endpoint Atlas reale, salva ogni prediction ID, rifiuta requisiti incompatibili e confronta il costo per output accettato con un set fisso.

Seedance e Wan non sono semplici cambi di nome. Diventano alternative sicure quando gli schemi sono dettagli d’implementazione e la migrazione resta reversibile.

## FAQ

### Posso sostituire solo il nome del modello Sora e mantenere lo stesso body?

No. Sora, Seedance e Wan usano ID, endpoint, campi, valori e input media diversi. Mantieni uno schema interno del job e scrivi un adapter per ogni route.

### Qual è la principale somiglianza architetturale tra queste API?

La generazione video è asincrona. L’app invia un job, salva un ID esterno, controlla lo stato in seguito e recupera l’output solo dopo il completamento.

### Quali campi richiedono una mappatura esplicita?

Mappa ID del modello, prompt, media di riferimento, durata, rapporto o dimensione, risoluzione, audio, seed, comportamento di sicurezza e stati del provider. Non ignorare silenziosamente campi non supportati.

### Dovrei scegliere Seedance o Wan?

Testa entrambi sui job reali. Seedance è forte per video brevi guidati da riferimenti e audiovisivo, mentre Wan offre molte route di testo, immagini, riferimenti ed editing. La scelta dipende dagli output accettati.

### Come evitare job a pagamento duplicati durante la migrazione?

Crea una chiave interna di idempotenza, salva subito l’ID del provider e controlla il job esistente prima di un retry. L’incertezza di rete non deve causare un nuovo invio cieco.

### Quanto traffico dovrei migrare inizialmente?

Inizia con prompt di regressione offline e poi una piccola quota shadow o canary. Aumenta solo se accettazione, errori, tempo di completamento e costo restano entro le soglie.
