- Wann dieser Schnellstart verwendet werden sollte
- Schritt 1: Holen Sie sich Ihren Novita API-Key
- Schritt 2: Bestätigen Sie den Endpunkt und das Modell
- Schritt 3: Senden Sie Ihre erste Anfrage
- Schritt 4: Pollen Sie auf Ihr Ergebnis
- Python-Beispiel: End-to-End
- cURL-Beispiel
- Wichtige Parameter
- Was Qwen Image gut generiert
- Häufige Fehler und Behebungen
- FAQ
- Empfohlene Artikel
Die Qwen Image Text-to-Image-API auf Novita AI erzeugt Bilder aus Text-Prompts mit dem 20B Qwen Image Modell – derselben Grundlage, die die Qwen Image Edit-API für präzise Bearbeitungsaufgaben antreibt. Dieser Schnellstart behandelt den vollständigen Async-Workflow: Senden einer Generierungsanfrage, Erhalten einer Task-ID, Polling auf Fertigstellung und Abrufen der Bild-URL. Der Endpunkt ist POST https://api.novita.ai/v3/async/qwen-image-txt2img.
Wann dieser Schnellstart verwendet werden sollte
Verwenden Sie diese Anleitung, wenn Sie Folgendes benötigen:
- Bilder aus Text-Prompts mit hochwertiger Texteinbettung in Englisch oder Chinesisch über
POST /v3/async/qwen-image-txt2imggenerieren. - Pipelines erstellen, die Poster, Grafik-Assets oder illustrierte Inhalte produzieren, bei denen die Lesbarkeit von Text im Bild wichtig ist.
- Schnell gegen eine gehostete API prototypisieren, anstatt das 20B-Modell auf lokaler GPU-Infrastruktur auszuführen.
Das Qwen Image Modell ist besonders stark bei der Generierung von Bildern mit lesbarem, gestaltetem Text im Output – denken Sie an Poster, Schilder, Produkt-Mockups und Cover-Grafiken. Wenn Ihr Anwendungsfall das Bearbeiten eines vorhandenen Bildes und nicht die Neugenerierung betrifft, lesen Sie stattdessen die Qwen Image Edit-API. Wenn Sie einen vollständigen Überblick über die Funktionen und Benchmarks des Qwen Image Modells wünschen, finden Sie im Novita AI Qwen Image Launch-Beitrag die Architektur und Benchmark-Ergebnisse im Detail.
Schritt 1: Holen Sie sich Ihren Novita API-Key
Erstellen Sie ein Novita AI-Konto und navigieren Sie zu API-Key-Verwaltung. Generieren Sie einen Key und speichern Sie ihn als Umgebungsvariable:
export NOVITA_API_KEY="your_api_key_here"
Halten Sie den Key aus clientseitigem Code, Frontend-Bundles und Versionskontrolle fern.
Schritt 2: Bestätigen Sie den Endpunkt und das Modell
| Element | Wert |
|---|---|
| Generierungsendpunkt | POST https://api.novita.ai/v3/async/qwen-image-txt2img |
| Ergebnis-Polling-Endpunkt | GET https://api.novita.ai/v3/async/task-result?task_id=<id> |
| Modell | Qwen Image (20B MMDiT) |
| API-Dokumentation | Novita AI Qwen Image txt2img Referenz |
Die API folgt einem zweistufigen Async-Muster, das bei allen Novita AI Bildgenerierungsendpunkten üblich ist. Der Generierungsaufruf gibt nur eine task_id zurück; Sie pollieren den Ergebnisendpunkt separat, bis die Aufgabe abgeschlossen ist.
Die Preisgestaltung beträgt 0,02 $ pro Bild, konsistent mit dem Qwen Image Edit-Endpunkt. Überprüfen Sie den aktuellen Tarif auf der Novita AI Preisseite, bevor Sie eine Kostenschätzung erstellen.
Schritt 3: Senden Sie Ihre erste Anfrage
POST an den Generierungsendpunkt mit einem prompt und optionalem size:
curl -s -X POST https://api.novita.ai/v3/async/qwen-image-txt2img \
-H "Authorization: Bearer $NOVITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A cinematic mountain landscape at sunrise, warm golden light, ultra-detailed, 8K",
"size": "1024*1024"
}'
Eine erfolgreiche 200-Antwort gibt Folgendes zurück:
{
"task_id": "abc123..."
}
Speichern Sie die task_id. Sie werden sie im nächsten Schritt verwenden.
Schritt 4: Pollen Sie auf Ihr Ergebnis
GET am Task-Ergebnisendpunkt mit der task_id als Query-Parameter:
curl -s "https://api.novita.ai/v3/async/task-result?task_id=abc123..." \
-H "Authorization: Bearer $NOVITA_API_KEY"
Die Antwort enthält ein status-Feld. Pollen Sie weiter, bis der Status TASK_STATUS_SUCCEED ist:
{
"task": {
"task_id": "abc123...",
"status": "TASK_STATUS_SUCCEED"
},
"images": [
{
"image_url": "https://...",
"image_url_ttl": "3600",
"image_type": "png"
}
]
}
Die image_url ist eine zeitlich begrenzte URL – der Wert image_url_ttl (in Sekunden) gibt an, wie lange sie gültig bleibt. Laden Sie das Bild umgehend herunter oder leiten Sie es über Ihren eigenen Speicher weiter, wenn Sie einen langfristigen Zugriff benötigen.
Statuswerte, die behandelt werden sollten:
| Status | Bedeutung |
|---|---|
TASK_STATUS_QUEUED |
Anfrage ist in der Warteschlange, noch nicht gestartet |
TASK_STATUS_PROCESSING |
Generierung läuft |
TASK_STATUS_SUCCEED |
Bild ist bereit; lesen Sie images[0].image_url |
TASK_STATUS_FAILED |
Generierung fehlgeschlagen; prüfen Sie task.reason |
Python-Beispiel: End-to-End
Dieses Skript sendet eine Generierungsanfrage, pollt bis zur Fertigstellung und gibt die Bild-URL aus.
import os
import time
import requests
API_KEY = os.environ["NOVITA_API_KEY"]
BASE_URL = "https://api.novita.ai"
def generate_image(prompt: str, size: str = "1024*1024") -> str:
response = requests.post(
f"{BASE_URL}/v3/async/qwen-image-txt2img",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json={"prompt": prompt, "size": size},
)
response.raise_for_status()
return response.json()["task_id"]
def poll_result(task_id: str, interval: float = 2.0, max_attempts: int = 60) -> str:
for _ in range(max_attempts):
response = requests.get(
f"{BASE_URL}/v3/async/task-result",
headers={"Authorization": f"Bearer {API_KEY}"},
params={"task_id": task_id},
)
response.raise_for_status()
data = response.json()
status = data["task"]["status"]
if status == "TASK_STATUS_SUCCEED":
return data["images"][0]["image_url"]
elif status == "TASK_STATUS_FAILED":
reason = data["task"].get("reason", "unknown")
raise RuntimeError(f"Generation failed: {reason}")
time.sleep(interval)
raise TimeoutError(f"Task {task_id} did not complete after {max_attempts} polls")
if __name__ == "__main__":
prompt = (
"A poster reading 'Welcome to Novita AI' in bold neon letters "
"against a dark city skyline at night, cinematic lighting"
)
task_id = generate_image(prompt, size="1024*1024")
print(f"Task ID: {task_id}")
image_url = poll_result(task_id)
print(f"Image URL: {image_url}")
cURL-Beispiel
Zwei-Befehl-Muster für den vollständigen Workflow:
# Schritt 1: Generierungsanfrage senden
TASK_ID=$(curl -s -X POST https://api.novita.ai/v3/async/qwen-image-txt2img \
-H "Authorization: Bearer $NOVITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A serene Japanese garden with cherry blossoms, koi pond, morning mist, watercolor style",
"size": "1024*1536"
}' | python3 -c "import sys,json; print(json.load(sys.stdin)['task_id'])")
echo "Task ID: $TASK_ID"
# Schritt 2: Bis zur Fertigstellung pollieren
while true; do
STATUS=$(curl -s "https://api.novita.ai/v3/async/task-result?task_id=$TASK_ID" \
-H "Authorization: Bearer $NOVITA_API_KEY")
STATE=$(echo $STATUS | python3 -c "import sys,json; print(json.load(sys.stdin)['task']['status'])")
echo "Status: $STATE"
if [ "$STATE" = "TASK_STATUS_SUCCEED" ]; then
echo $STATUS | python3 -c "import sys,json; print(json.load(sys.stdin)['images'][0]['image_url'])"
break
elif [ "$STATE" = "TASK_STATUS_FAILED" ]; then
echo "Generierung fehlgeschlagen"
break
fi
sleep 2
done
Wichtige Parameter
| Parameter | Typ | Erforderlich | Standard | Hinweise |
|---|---|---|---|---|
prompt |
string | Ja | — | Textbeschreibung des zu generierenden Bildes. Unterstützt Englisch und Chinesisch. |
size |
string | Nein | 1024*1024 |
Breite × Höhe in Pixeln, formatiert als B*H. Jede Dimension: 256–1536. |
Größenoptionen, die in Betracht gezogen werden sollten:
| Anwendungsfall | Empfohlene Größe |
|---|---|
| Quadratisch (Social, Profil) | 1024*1024 |
| Hochformat (Mobil, Poster) | 1024*1536 |
| Querformat (Banner, Thumbnail) | 1536*1024 |
Es gibt keinen separaten Parameter negative_prompt, steps oder cfg_scale an diesem Endpunkt – das Modell trifft diese Entscheidungen intern. Konzentrieren Sie sich in Ihrem Prompt darauf, was das Bild enthalten soll und welchen visuellen Stil es haben soll.
Was Qwen Image gut generiert
Die 20B MMDiT-Architektur verschafft Qwen Image einen echten Vorteil in einigen spezifischen Bereichen:
Text in Bildern. Die meisten Bildgenerierungsmodelle haben Schwierigkeiten mit lesbarem Text – Wörter verschwimmen, Buchstaben vertauschen sich und mehrzeilige Layouts brechen zusammen. Qwen Image verarbeitet englischen und chinesischen Text mit deutlich besserer Genauigkeit. Poster, Schilder, Etiketten und beschriftete Grafiken sind praktikable Anwendungsfälle und kein Glücksspiel.
Semantische Konsistenz. Wenn ein Prompt eine Szene mit mehreren Elementen und spezifischen räumlichen Beziehungen beschreibt, neigt Qwen Image dazu, die Layout-Intention zuverlässiger zu berücksichtigen als kleinere oder ältere Architekturen.
Prompt-Befolgung im Maßstab. Lange, detaillierte Prompts, die mehrere Attribute beschreiben – Szene, Beleuchtung, Stil, Farbpalette, bestimmte Objekte – produzieren Ausgaben, die den gesamten Prompt widerspiegeln, anstatt sich an ein Schlüsselwort zu klammern.
Wo es weniger geeignet ist: Echtzeit- oder interaktive Generierungs-Workflows. Das Async-Muster bedeutet eine inhärente Latenz zwischen Anfrage und Ergebnis. Wenn Ihr Anwendungsfall eine Reaktionszeit unter einer Sekunde erfordert, ist dieser Endpunkt nicht die richtige Wahl.
Häufige Fehler und Behebungen
401 Unauthorized: Überprüfen Sie, ob der Authorization-Header als Bearer <key> mit einem Leerzeichen nach Bearer formatiert ist. Verifizieren Sie, dass der Key in der Novita AI-Konsole aktiv ist.
400 Bad Request bei size: Der Parameter size muss * als Trennzeichen verwenden (z. B. 1024*1024), nicht x, × oder ein JSON-Array. Jede Dimension muss zwischen 256 und 1536 liegen.
TASK_STATUS_FAILED ohne Grund: Wird normalerweise durch einen Prompt verursacht, der die Inhaltsfilterung auslöst. Vereinfachen Sie den Prompt und versuchen Sie es erneut. Vermeiden Sie Prompts mit expliziter Gewalt, sexuellem Inhalt oder Inhalten, die Sicherheitsfilter auslösen könnten.
Bild-URL abgelaufen (403 oder 404 auf der URL): Das Feld image_url_ttl gibt an, wie lange die URL gültig ist. Laden Sie das Bild sofort nach erfolgreichem Polling herunter, oder speichern Sie es in Ihrem eigenen Objektspeicher.
Langsames Polling: Die Generierungszeit variiert mit der Serverlast. Ein Polling-Intervall von 2 Sekunden ist angemessen. Wenn der Task nach 10 Sekunden immer noch TASK_STATUS_QUEUED ist, setzen Sie das Polling fort – die Warteschlangentiefe kann bei Spitzenauslastung ansteigen.
FAQ
Gibt es einen OpenAI-kompatiblen Endpunkt für Qwen Image txt2img?
Nein. Der /v3/async/qwen-image-txt2img-Endpunkt verwendet Novita AIs natives Async-Bild-API-Format, nicht das OpenAI-Bildgenerierungsformat. Wenn Sie eine OpenAI-kompatible Bildgenerierung benötigen, bietet Novita AI FLUX- und SDXL-Modelle über kompatible Endpunkte an – siehe die Novita AI-Dokumentation.
Was ist der Unterschied zwischen diesem Endpunkt und dem Qwen Image Edit-Endpunkt?
Dieser Endpunkt generiert Bilder nur aus einem Text-Prompt – es wird kein Eingabebild benötigt. Der Qwen Image Edit-Endpunkt nimmt ein vorhandenes Bild plus eine Textanweisung entgegen und modifiziert das Bild entsprechend. Verwenden Sie txt2img, wenn Sie von Grund auf neu erstellen; verwenden Sie edit, wenn Sie etwas in einem vorhandenen Bild ändern müssen.
Unterstützt das Modell andere Seitenverhältnisse als quadratisch?
Ja. Verwenden Sie den Parameter size, um Breite und Höhe unabhängig voneinander zwischen 256 und 1536 Pixeln pro Dimension festzulegen. Hohe Verhältnisse (z. B. 1024*1536) eignen sich gut für Hochkant-Inhalte; breite Verhältnisse (z. B. 1536*1024) passen zu Bannern und Thumbnails.
Wie erhalte ich konsistente Ergebnisse über mehrere Generierungen hinweg?
Es gibt keinen seed-Parameter am txt2img-Endpunkt. Jede Anfrage produziert ein anderes Ergebnis. Wenn Sie reproduzierbare Ausgaben benötigen, speichern Sie die Bild-URL sofort und bewahren Sie das Bild in Ihrem eigenen Speicher auf, anstatt es neu zu generieren.
Kann ich diese API in einem Batch-Job verwenden?
Ja. Senden Sie mehrere Generierungsanfragen und sammeln Sie die Task-IDs, dann pollieren Sie sie parallel. Jede Anfrage gibt ihre eigene task_id zurück, sodass Batch-Workflows unkompliziert sind – Sie müssen nicht warten, bis eine abgeschlossen ist, bevor Sie die nächste senden.
