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

# Hoe migreer je een Sora API-videoapp naar Seedance of Wan?

> Migreer van Sora naar Seedance of Wan door het stabiele interne videojobcontract te scheiden van providerspecifieke payloads. Map prompts, inputs, duur, formaat, audio en statussen via adapters, sla elke externe taak-ID op en vergelijk geaccepteerde outputs met een vaste regressieset voordat je verkeer verplaatst.

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

# Hoe migreer je een Sora API-videoapp naar Seedance of Wan?

De veiligste migratie verandert de provideradapter, niet de rest van het product. Houd één intern contract voor prompts, media, duur, oriëntatie, audio-intentie en levering, en vertaal het aan de rand naar Sora-, Seedance- of Wan-requests.

Vervang niet alleen `sora-2` door een andere naam met dezelfde payload. De API’s delen een asynchroon patroon, maar verschillen in endpoints, formaten, waarden, mediavelden en statussen.

## Inventariseer het gebruikte Sora-gedrag

De [Videos API-referentie](https://platform.openai.com/docs/api-reference/videos) documenteert creatie via `POST /v1/videos`, status op video-ID en velden zoals `prompt`, `input_reference`, `model`, `seconds` en `size`. Je app kan ook afhankelijk zijn van remixes, downloads, SDK-objecten of specifieke fouten.

Leg echte afhankelijkheden vast:

| Afhankelijkheid | Vragen |
|---|---|
| Model | Staat code vast op `sora-2` of `sora-2-pro`? |
| Input | Tekst, één referentie of bestaande video? |
| Duur | Welke waarden komen in productie voor? |
| Formaat | Slaat de UI pixels, verhouding of preset op? |
| Audio | Belooft het product gegenereerde audio of vervangt het die? |
| Status | Hoe worden providerstatussen lokaal gemapt? |
| Output | Wordt deze gestreamd, gedownload, gekopieerd of per URL gebruikt? |
| Fout | Welke fouten worden opnieuw geprobeerd of getoond? |

De inventaris toont of alleen het model of ook de workflow verandert.

## Definieer een providerneutrale videojob

Maak een intern object dat productintentie beschrijft zonder gelijke controles te veronderstellen.

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

Markeer capabilities als vereist, gewenst of optioneel. Als de gebruiker een referentie vereist, is stil weglaten een fout. Als een seed slechts bij één provider nuttig is, mag de adapter hem weglaten en dat registreren.

## Map intentie in plaats van veldnamen

Sora gebruikt `size`. Seedance kan `ratio`, `resolution`, `duration`, referentiearrays en audio aanbieden. Wan kan `size` of `ratio` gebruiken en promptuitbreiding, shottype, referenties of editing ondersteunen.

| Productintentie | Sora-voorbeeld | Seedance- of Wan-mapping |
|---|---|---|
| Model | `sora-2` | Exacte Atlas-model-ID |
| Submission | `POST /v1/videos` | `POST /api/v1/model/generateVideo` |
| Prompt | `prompt` | Meestal `prompt` |
| Referentie | `input_reference` | Routeafhankelijk `image` of `reference_images` |
| Duur | `seconds` | Routeafhankelijk `duration` en bereik |
| Frame | `size` | `ratio`, `size` of resolutie plus verhouding |
| Audio | Modelgedrag | `generate_audio` of audio-input |
| Resultaat | Video-ID | Prediction ID uit respons |
| Status | Video-endpoint | `GET /api/v1/model/prediction/{id}` |

Deze tabel is een migratiechecklist, geen schema. Kopieer exacte waarden van de live modelpagina.

## Kies bewust een Seedance-route

Seedance is een familie. Atlas Cloud documenteert tekst-, beeld- en referentieworkflows. [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) accepteert referentiemedia en biedt routespecifieke controles voor duur, resolutie, verhouding, bitrate en audio.

Overweeg Seedance voor:

* korte audiovisuele clips;
* sturing door onderwerp, stijl of scène;
* social- en advertentieformaten;
* keuze tussen snelle iteratie en kwaliteitsroutes.

Neem niet aan dat alle varianten dezelfde inputs accepteren. Kies per modus en valideer met het schema.

## Kies bewust een Wan-route

Wan biedt generatie en editing. De [Wan-pagina’s op 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) omvatten Wan 3.0 en oudere versies met tekst-, beeld-, referentie- of editendpoints.

Overweeg Wan voor:

* een brede keuze aan modi;
* promptuitbreiding of shotcontroles waar beschikbaar;
* referentie- of bronvideoworkflows;
* een tweede familie voor kwaliteit of beschikbaarheid.

Begin met een precies endpoint. Een vage `wan`-adapter wordt een verzameling moeilijk testbare condities.

## Implementeer expliciete adapters

Houd validatie dicht bij de 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
```

De routeconfiguratie moet onverenigbare eisen afwijzen. Zet 12 seconden niet stil om in 5, landschap niet in portret en negeer geen referenties.

Bewaar interne job en uitgaande payload om regressies en factureringsvragen te reproduceren.

## Behoud asynchrone jobveiligheid

Atlas Cloud retourneert een prediction ID en beschrijft de levenscyclus 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). Gebruik duurzame lokale statussen.

| Lokale status | Betekenis |
|---|---|
| `ready` | Gevalideerd, niet verstuurd |
| `submitted` | Externe ID opgeslagen |
| `processing` | Provider verwerkt |
| `succeeded` | Outputmetadata opgehaald |
| `failed` | Terminale fout |
| `rejected` | Voltooid maar kwaliteitsafwijzing |

Maak vóór submission een idempotentiesleutel. Bewaar provider, route, payloadhash en externe ID samen. Als een worker de verbinding verliest, controleert hij het bestaande record vóór een nieuwe betaalde job.

Poll met oplopend interval en jitter. Vaker pollen versnelt generatie niet.

## Bouw een migratieregressieset

Gebruik 20 tot 50 echte jobs, inclusief moeilijke gevallen. Houd assets en productintentie constant.

Beoordeel:

* promptgetrouwheid;
* onderwerp- en productconsistentie;
* bewegingsstabiliteit;
* temporele continuïteit;
* referentiegetrouwheid;
* audiovisuele aansluiting;
* formaat en resolutie;
* bewerkbaarheid van begin en einde;
* verdeling van voltooiingstijd;
* kosten per geaccepteerde output.

Vergelijk niet slechts één clip. Willekeur vertekent; herhaal wanneer het product retries toestaat.

## Rol uit met een omkeerbaar verkeersplan

Ga in fasen.

1. Speel niet-gevoelige prompts offline af.
2. Voer niet-geleverde shadowjobs uit.
3. Stuur een klein canaryaandeel naar één nieuwe route.
4. Vergelijk fouten, tijd, acceptatie en kosten.
5. Verhoog alleen als drempels standhouden.
6. Behoud de Sora-adapter zolang rollback nodig is.

Bepaal of de provider zichtbaar moet zijn. Als modellen sterk verschillen, kan keuze eerlijk zijn. Als het product een capability verkoopt, routeer alleen tussen alternatieven met hetzelfde acceptatiecontract.

## Conclusie

Migreer door een providerneutrale job te behouden en alleen de adapter te vervangen. Map capabilities expliciet, kies een echt Atlas-endpoint, bewaar elke prediction ID, wijs onverenigbare eisen af en vergelijk kosten per geaccepteerde output met een vaste set.

Seedance en Wan zijn geen naamsvervangers. Ze worden veilige alternatieven wanneer providerschema’s implementatiedetails blijven en migratie omkeerbaar is.

## FAQ

### Kan ik alleen de Sora-modelnaam vervangen en dezelfde request body behouden?

Nee. Sora, Seedance en Wan gebruiken verschillende model-ID’s, endpoints, velden, waarden en media-inputs. Houd een intern jobschema en schrijf per route een adapter.

### Wat is de belangrijkste architecturale overeenkomst?

Videogeneratie is asynchroon. De app verstuurt een job, bewaart een externe ID, controleert later de status en haalt de output pas op na voltooiing.

### Welke velden moeten expliciet worden gemapt?

Map model-ID, prompt, referentiemedia, duur, verhouding of formaat, resolutie, audio, seed, veiligheidsbeleid en providerstatussen. Negeer niet-ondersteunde velden niet stilzwijgend.

### Moet ik Seedance of Wan kiezen?

Test beide met echte jobs. Seedance is sterk voor referentiegestuurde korte video en audiovisuele taken, terwijl Wan veel tekst-, beeld-, referentie- en editroutes biedt. De beste keuze hangt af van geaccepteerde output.

### Hoe voorkom ik dubbele betaalde jobs tijdens migratie?

Maak een interne idempotentiesleutel, sla de provider-ID direct op en controleer de bestaande job vóór een retry. Netwerkonzekerheid mag geen blinde nieuwe submission veroorzaken.

### Hoeveel verkeer moet ik eerst migreren?

Start met offline regressieprompts en daarna een klein shadow- of canaryaandeel. Verhoog alleen als acceptatie, fouten, voltooiingstijd en kosten binnen de drempels blijven.
