Zum Hauptinhalt springen

Vidu Q4 Preview Referenz-zu-Video baut aus 1 bis 15 Referenzbildern und bis zu 3 Sprachclips eine Szene in 16:9, 9:16, 1:1, 3:4 oder 4:3. Clips laufen 3 bis 16 Sekunden in 540p bis 4k mit generiertem Ton. Die Filterung ist leicht: Ab der Stufe Mittel werden die meisten NSFW-Anfragen abgeschwächt oder abgelehnt.

Die Filterung fällt je nach Endpunkt anders aus: Bild zu Video — Unzensiert, Videoverlängerung — Unzensiert, Referenz zu Video — Leicht.

Ab $0.045/s

Playground

Anfrage senden

Schnellstart

Die Beispiele verwenden die öffentlichen Parameter des gewählten Endpunkts. Ersetzen Sie API-Schlüssel und Beispielmedien und senden Sie die Anfrage von Ihrem Server.

SDKs & Integrationen
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

API-Authentifizierung

Bewahren Sie den API-Schlüssel serverseitig in der Umgebungsvariablen SPICY_API_KEY auf. Verwenden Sie Bearer-Authentifizierung und für JSON-Anfragen Content-Type: application/json.

Authorization: Bearer $SPICY_API_KEY
BeispielergebnisBeispiel übernehmen
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -d '{
  "model": "vidu/q4-preview/reference-to-video",
  "input": {
    "aspect_ratio": "16:9",
    "duration_seconds": 5,
    "prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
    "reference_image_urls": [
      "https://example.com/reference.png"
    ],
    "resolution": "720p"
  }
}'

# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Erzeugt aus dem Eingabeschema dieses Modells – genau dem, gegen das die API jede Anfrage prüft.

Eingabeparameter

Diese Felder gehören in das input-Objekt des Request-Bodys. Namen und Typen entsprechen der API. Wo kein Standardwert angegeben ist, dürfen Sie auch keinen annehmen.

reference_image_urlsarray<string>Erforderlich

Pflicht, 1 bis 15 Bilder von Personen, Outfits, Produkten oder Orten. Eine Anfrage ohne wird abgelehnt. Die Reihenfolge zählt, weil der Prompt sie über die Position anspricht. Ändert den Preis nicht.

Standardwert
Nicht festgelegt
Einschränkungen
minItems:1
maxItems:15
promptstringErforderlich

Pflicht, bis zu 20.000 Zeichen. Beschreiben Sie die Szene und sprechen Sie Referenzen über ihre Position an, etwa „the woman from the first image“. Setzen Sie gesprochene Zeilen in doppelte Anführungszeichen. Ändert den Preis nicht.

Standardwert
Nicht festgelegt
Einschränkungen
minLength:1
maxLength:20000
seedintegerOptional

Hält Läufe vergleichbar, während Sie jeweils nur eine Sache ändern. Ein bildgleicher Clip ist damit nicht garantiert. Ändert den Preis nicht.

Standardwert
Nicht festgelegt
Einschränkungen
minimum:0
maximum:2147483647
generate_audiobooleanOptional

Standardmäßig an: Dialog, Effekte und Atmosphäre entstehen mit dem Bild. Schalten Sie es für einen Clip ohne Tonspur aus. Ändert den Preis nicht.

Standardwert
true
duration_secondsintegerOptionalPreisrelevant

Ganze Sekunden, 3 bis 16, Standard 5. Wird zusammen mit der Auflösung pro Sekunde abgerechnet.

Standardwert
5
Einschränkungen
minimum:3
maximum:16
resolutionstringOptionalPreisrelevant

540p, 720p (Standard), 1080p, 2k oder 4k. Das bestimmt den Preis pro Sekunde: 2k kostet mehr als 1080p und 4k etwa doppelt so viel wie 2k. 2k und 4k liefern 10-Bit-HEVC-Dateien, die manche Browser nicht inline abspielen.

Standardwert
"720p"
Zulässige Werte
"540p""720p""1080p""2k""4k"
aspect_ratiostringOptional

16:9 (Standard), 9:16, 1:1, 3:4 oder 4:3. Ändert den Preis nicht.

Standardwert
"16:9"
Zulässige Werte
"16:9""9:16""1:1""3:4""4:3"
reference_audio_urlsarray<string>Optional

Optional, bis zu 3 Sprachclips (Vidu verlangt MP3, je 3 bis 12 Sekunden). Ein Clip prägt die Stimme, aber nicht die Worte: Schreiben Sie die Zeile in den Prompt und sagen Sie, dass sie in der Stimme aus dem Referenz-Audio gesprochen wird. Ändert den Preis nicht.

Standardwert
Nicht festgelegt
Einschränkungen
minItems:1
maxItems:3

Auftrag verfolgen

HTTP 202 bestätigt die Annahme, nicht den Abschluss. Speichern Sie die zurückgegebene taskId und fragen Sie diesen Auftrag ab. Erstellen Sie währenddessen keinen weiteren Auftrag.

Antwort bei Annahme
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

Diese Antwort enthält bereits die Kostenschätzung, damit Ihre Anwendung in Auftragsverlauf und Abrechnung denselben Betrag anzeigen kann.

Auftrag abrufen
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Beginnen Sie mit etwa 2 Sekunden Abstand und verlängern Sie das Intervall schrittweise. Bei einem Endzustand hören Sie auf. Nach einem Verbindungsfehler fragen Sie dieselbe taskId ab. Neu anlegen nur mit demselben Idempotency-Key und demselben Request-Body.

Oder den Rückruf zu Ihnen kommen lassen
import { verifyWebhook } from "@spicyapi/sdk";

// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
  const { payload } = verifyWebhook({
    rawBody: req.body,
    timestamp: req.header("X-Webhook-Timestamp"),
    signature: req.header("X-Webhook-Signature"),
    payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
    secret: process.env.SPICY_WEBHOOK_SECRET,
  });
  res.status(200).end();
  void handleFinishedTask(payload);
});

Übergeben Sie callBackUrl beim Anlegen der Aufgabe, dann wird Ihnen der fertige Datensatz per POST zugestellt — ganz ohne Polling-Schleife. Jede Zustellung trägt X-Webhook-Timestamp, X-Webhook-Signature und X-Webhook-Payload-Version. Die Signatur ist ein base64-HMAC-SHA256 über taskId.timestamp.sha256(body) und muss deshalb gegen die Rohbytes geprüft werden: Wer das JSON parst und neu serialisiert, verändert sie, und die Prüfung schlägt fehl. Fehlgeschlagene Zustellungen werden wiederholt, dieselbe taskId kann also zweimal ankommen — machen Sie den Handler idempotent. Antworten Sie zuerst mit 2xx und arbeiten Sie danach; ein langsamer Handler gilt als fehlgeschlagene Zustellung.

Ergebnis auslesen

Lesen Sie output erst aus, wenn state den Wert succeeded hat. Nutzen Sie bei Fehlern errorCode, errorMessage und request_id zur Diagnose. Beispielkosten und -zustände bilden keine tatsächliche Abrechnung ab.

Beispiel einer fertigen Antwort
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "vidu/q4-preview/reference-to-video",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.mp4",
          "mime": "video/mp4",
          "url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.mp4?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
          "expiresAt": "2026-08-28T12:20:08.000Z"
        }
      ]
    },
    "cost": "0.750000",
    "settled": true,
    "createdAt": "2026-08-28T12:00:00Z",
    "completedAt": "2026-08-28T12:00:30Z"
  }
}

Verfügbare Dateien lassen sich direkt über assets[].url ohne API-Authorization-Header öffnen oder herunterladen. Der signierte Link läuft zu expiresAt ab. Fragen Sie den Auftrag innerhalb der Aufbewahrungsfrist erneut ab, um den Link zu erneuern. Noch ausstehende oder nicht verfügbare Dateien haben keine URL. Behandeln Sie signierte Links vertraulich.

SDKs & Integrationen

Nutzen Sie SpicyAPI in Ihrer App, im Terminal, mit KI-Assistenten oder in visuellen Workflows. Wählen Sie die passende Anleitung.

In ComfyUI nutzen

Installieren Sie die SpicyAPI-Nodes über den ComfyUI Manager oder mit dem Befehl unten und suchen Sie auf der Arbeitsfläche nach Vidu Q4 Preview · Reference to Video. Der Node bietet dieselben Optionen wie diese Seite und zeigt seinen Preis, bevor er läuft.

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi