Guide utilisateur
modèle vidéo

Génération vidéo Doubao Seedance 2.0

Appeler les modèles vidéo Doubao via l'interface unifiée de tâches vidéo ; décrit les modèles disponibles dans le projet actuel, les champs de requête et les méthodes d'interrogation.

  • Route de soumission : POST /v1/videos
  • Requête de tâche : GET /v1/videos/{task_id}
  • Téléchargement du contenu : GET /v1/videos/{task_id}/content

Les routes de compatibilité historiques POST /v1/video/generations et GET /v1/video/generations/{task_id} existent toujours ; pour une nouvelle intégration, utilisez /v1/videos, comme dans le playground et les métadonnées d'endpoint du modèle.

Exemple de requête de soumission

cURL

curl --request POST \
  --url https://api.magickapi.com/v1/videos \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "doubao-seedance-2-0-260128",
    "prompt": "一只小狗正在唱歌",
    "seconds": "5",
    "metadata": {
      "resolution": "720p",
      "ratio": "16:9",
      "generate_audio": true
    }
  }'

Exemple de réponse de succès de soumission

{
  "id": "task_01KXYZ1234567890ABCDE",
  "task_id": "task_01KXYZ1234567890ABCDE",
  "object": "video",
  "model": "doubao-seedance-2-0-260128",
  "status": "queued",
  "progress": 0,
  "created_at": 1712345678
}

Interrogation et téléchargement

cURL - Interroger l'état de la tâche

curl https://api.magickapi.com/v1/videos/task_01KXYZ1234567890ABCDE \
  -H 'Authorization: Bearer YOUR_API_KEY'

cURL - Télécharger le fichier vidéo

curl -L https://api.magickapi.com/v1/videos/task_01KXYZ1234567890ABCDE/content \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  --output doubao-output.mp4

Python - Interrogation périodique et téléchargement

import time
import requests

base_url = "https://api.magickapi.com"
api_key = "YOUR_API_KEY"
headers = {
    "Authorization": f"Bearer {api_key}",
    "Content-Type": "application/json",
}

submit_payload = {
    "model": "doubao-seedance-2-0-260128",
    "prompt": "一只小狗正在唱歌",
    "seconds": "5",
    "metadata": {
        "resolution": "720p",
        "ratio": "16:9",
        "generate_audio": True,
    },
}

submit_resp = requests.post(
    f"{base_url}/v1/videos",
    headers=headers,
    json=submit_payload,
    timeout=300,
)
submit_resp.raise_for_status()
task = submit_resp.json()
task_id = task.get("id") or task.get("task_id")
print("task_id:", task_id)

while True:
    query_resp = requests.get(
        f"{base_url}/v1/videos/{task_id}",
        headers={"Authorization": f"Bearer {api_key}"},
        timeout=300,
    )
    query_resp.raise_for_status()
    status = query_resp.json()
    print(status)

    if status["status"] == "completed":
        download_resp = requests.get(
            f"{base_url}/v1/videos/{task_id}/content",
            headers={"Authorization": f"Bearer {api_key}"},
            timeout=600,
        )
        download_resp.raise_for_status()
        with open("doubao-output.mp4", "wb") as f:
            f.write(download_resp.content)
        print("saved: doubao-output.mp4")
        break

    if status["status"] == "failed":
        message = (status.get("error") or {}).get("message", "video generation failed")
        raise RuntimeError(message)

    time.sleep(10)

Node.js - Interrogation périodique et téléchargement

import { writeFile } from "node:fs/promises";

const baseUrl = "https://api.magickapi.com";
const apiKey = "YOUR_API_KEY";

const submitPayload = {
  model: "doubao-seedance-2-0-260128",
  prompt: "一只小狗正在唱歌",
  seconds: "5",
  metadata: {
    resolution: "720p",
    ratio: "16:9",
    generate_audio: true,
  },
};

const submitResp = await fetch(`${baseUrl}/v1/videos`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify(submitPayload),
});

if (!submitResp.ok) {
  throw new Error(await submitResp.text());
}

const task = await submitResp.json();
const taskId = task.id || task.task_id;
console.log("task_id:", taskId);

while (true) {
  const queryResp = await fetch(`${baseUrl}/v1/videos/${taskId}`, {
    headers: {
      Authorization: `Bearer ${apiKey}`,
    },
  });
  if (!queryResp.ok) {
    throw new Error(await queryResp.text());
  }

  const status = await queryResp.json();
  console.log(status);

  if (status.status === "completed") {
    const downloadResp = await fetch(`${baseUrl}/v1/videos/${taskId}/content`, {
      headers: {
        Authorization: `Bearer ${apiKey}`,
      },
    });
    if (!downloadResp.ok) {
      throw new Error(await downloadResp.text());
    }
    const buffer = Buffer.from(await downloadResp.arrayBuffer());
    await writeFile("doubao-output.mp4", buffer);
    console.log("saved: doubao-output.mp4");
    break;
  }

  if (status.status === "failed") {
    throw new Error(status.error?.message || "video generation failed");
  }

  await new Promise((resolve) => setTimeout(resolve, 10000));
}

Exemple de requête style OpenAI

{
  "id": "task_01KXYZ1234567890ABCDE",
  "object": "video",
  "model": "doubao-seedance-2-0-260128",
  "status": "completed",
  "progress": 100,
  "created_at": 1712345678,
  "completed_at": 1712345720,
  "metadata": {
    "url": "https://example.com/generated-video.mp4"
  }
}

Champs publics de premier niveau réellement analysés par le projet actuel

  • model
  • prompt
  • mode
  • image
  • images
  • input_reference
  • size
  • duration
  • seconds
  • metadata

Écriture des paramètres liés à Doubao

Génération vidéo à partir de texte seul

Champs minimaux recommandés :

  • model
  • prompt
  • seconds
  • metadata.resolution
  • metadata.ratio

Génération vidéo à partir d'image

Si seule la première image est nécessaire, utilisez le champ de premier niveau images :

{
  "model": "doubao-seedance-2-0-fast-260128",
  "prompt": "让人物向前走近镜头",
  "images": ["https://example.com/first-frame.png"],
  "seconds": "5",
  "metadata": {
    "resolution": "720p",
    "ratio": "9:16"
  }
}

Référence vidéo / audio

Les entrées de référence plus complexes doivent être placées dans metadata.content en utilisant les noms de champs en amont :

  • image_url
  • video_url
  • audio_url

Autres champs d'extension courants

Les paramètres d'extension courants doivent également être placés sous metadata, par exemple :

  • generate_audio
  • return_last_frame
  • seed
  • camera_fixed
  • watermark

Requête de compatibilité historique

La route historique de requête de tâche reste disponible :

curl https://api.magickapi.com/v1/video/generations/task_01KXYZ1234567890ABCDE \
  -H 'Authorization: Bearer YOUR_API_KEY'

Dernière mise à jour

Sommaire