- Wann dieser Schnellstart verwendet werden sollte
- Schritt 1: Holen Sie sich Ihren Novita-API-Schlüssel
- Schritt 2: Bestätigen Sie den Endpunkt und das Modell
- Schritt 3: Senden Sie Ihre erste Anfrage
- Schritt 4: Pollen auf Ihr Ergebnis
- Python-Beispiel: End-to-End
- cURL-Beispiel
- Wichtige Parameter
- Was Qwen Image gut generiert
- Häufige Fehler und Lösungen
- FAQ
- Empfohlene Artikel
Die Qwen Image Text-to-Image API auf Novita AI generiert Bilder aus Textvorgaben mithilfe des 20B Qwen Image Modells – derselben Grundlage, die auch die Qwen Image Edit API für präzise Bearbeitungsaufgaben antreibt. Dieser Schnellstart behandelt den vollständigen asynchronen Workflow: Senden einer Generierungsanfrage, Abrufen einer Aufgaben-ID, Pollen auf Fertigstellung und Abrufen Ihrer Bild-URL. Der Endpunkt ist POST https://api.novita.ai/v3/async/qwen-image-txt2img.
Wann dieser Schnellstart verwendet werden sollte
Verwenden Sie diesen Leitfaden, wenn Sie folgende Aufgaben benötigen:
- Bilder aus Textvorgaben mit hochwertiger Textwiedergabe in Englisch oder Chinesisch über
POST /v3/async/qwen-image-txt2imggenerieren. - Pipelines erstellen, die Poster, Grafik-Assets oder illustrierte Inhalte generieren, 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 gut darin, Bilder mit lesbarem, formatiertem Text in der Ausgabe zu generieren – denken Sie an Poster, Schilder, Produkt-Mockups und Cover-Grafiken. Wenn Ihr Anwendungsfall die Bearbeitung eines vorhandenen Bildes anstelle einer Neuerstellung umfasst, lesen Sie stattdessen die Qwen Image Edit API. Wenn Sie einen vollständigen Überblick über die Fähigkeiten des Qwen Image Modells und Benchmarks wünschen, finden Sie im Novita AI Qwen Image Launch-Beitrag Details zur Architektur und Benchmark-Ergebnissen.
Schritt 1: Holen Sie sich Ihren Novita-API-Schlüssel
Erstellen Sie ein Novita AI-Konto und navigieren Sie zur API-Schlüsselverwaltung. Generieren Sie einen Schlüssel und speichern Sie ihn als Umgebungsvariable:
export NOVITA_API_KEY="your_api_key_here"
Halten Sie den Schlüssel von 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 asynchronen Muster, das allen Novita AI-Bildgenerierungsendpunkten gemeinsam ist. Der Generierungsaufruf gibt nur eine task_id zurück; Sie pollt den Ergebnis-Endpunkt separat, bis die Aufgabe abgeschlossen ist.
Der Preis beträgt 0,02 $ pro Bild, konsistent mit dem Qwen Image Edit-Endpunkt. Überprüfen Sie den aktuellen Tarif auf der Novita AI Preisübersicht, bevor Sie eine Kostenschätzung erstellen.
Schritt 3: Senden Sie Ihre erste Anfrage
POST an den Generierungsendpunkt mit einem prompt und einem optionalen 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 zurück:
{
"task_id": "abc123..."
}
Speichern Sie die task_id. Sie werden sie im nächsten Schritt verwenden.
Schritt 4: Pollen auf Ihr Ergebnis
GET an den Ergebnis-Endpunkt 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 langfristigen Zugriff benötigen.
Statuswerte, die behandelt werden müssen:
| 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; überprü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-Befehls-Muster für den vollständigen Workflow:
# Step 1: Submit generation request
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"
# Step 2: Poll until complete
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 "Generation failed"
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 W*H. Jede Dimension: 256–1536. |
Größenoptionen zur Auswahl:
| Anwendungsfall | Empfohlene Größe |
|---|---|
| Quadratisch (Socal, Proil) | 1024*1024 |
| Hochformat (Mobil, Poster) | 1024*1536 |
| Querformat (Banner, Vorschaubild) | 1536*1024 |
Es gibt keinen separaten Parameter negative_prompt, steps oder cfg_scale an diesem Endpunkt – das Modell trifft diese Entscheidungen intern. Konzentrieren Sie Ihren Prompt darauf, was das Bild enthalten soll und seinen visuellen Stil.
Was Qwen Image gut generiert
Die 20B MMDiT-Architektur verschafft Qwen Image in einigen spezifischen Bereichen einen echten Vorteil:
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 realistische 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-Absicht zuverlässiger zu respektieren als kleinere oder ältere Architekturen.
Prompt-Befolgung in großem Umfang. Lange, detaillierte Prompts, die mehrere Attribute beschreiben – Szene, Beleuchtung, Stil, Farbpalette, spezifische Objekte – erzeugen Ausgaben, die den gesamten Prompt widerspiegeln, anstatt sich an ein einzelnes Schlüsselwort zu klammern.
Wo es weniger geeignet ist: Echtzeit- oder interaktive Generierungs-Workflows. Das asynchrone Muster bedeutet eine inhärente Latenz zwischen Anfrage und Ergebnis. Wenn Ihr Anwendungsfall Sub-Sekunden-Feedback erfordert, ist dieser Endpunkt nicht die richtige Wahl.
Häufige Fehler und Lösungen
401 Unauthorized: Überprüfen Sie, ob der Authorization-Header als Bearer <key> mit einem Leerzeichen nach Bearer formatiert ist. Verifizieren Sie, dass der Schlüssel 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 Sicherheitsfiltern entsprechen 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 Pollen herunter oder speichern Sie es in Ihrem eigenen Objektspeicher.
Langsames Pollen: Die Generierungszeit variiert je nach Serverlast. Es ist sinnvoll, das Pollen in 2-Sekunden-Intervallen zu starten. Wenn die Aufgabe nach 10 Sekunden noch TASK_STATUS_QUEUED ist, pollt weiter – die Warteschlangentiefe kann bei Spitzenauslastung ansteigen.
FAQ
Gibt es einen OpenAI-kompatilben Endpunkt für Qwen Image txt2img?
Nein. Der Endpunkt /v3/async/qwen-image-txt2img verwendet Novita AI’s native asynchrone Bild-API, 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 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 einzustellen. Hohe Verhältnisse (z.B. 1024*1536) eignen sich gut für Hochkant-Inhalte; breite Verhältnisse (z.B. 1536*1024) für Banner und Vorschaubilder.
Wie erhalte ich konsistente Ergebnisse über mehrere Generationen hinweg?
Es gibt keinen seed-Parameter am txt2img-Endpunkt. Jede Anfrage erzeugt ein anderes Ergebnis. Wenn Sie reproduzierbare Ausgaben benötigen, speichern Sie die Bild-URL sofort und speichern Sie das Bild in Ihrem eigenen Speicher, anstatt es erneut zu generieren.
Kann ich diese API in einem Batch-Job verwenden?
Ja. Senden Sie mehrere Generierungsanfragen und sammeln Sie die Aufgaben-IDs, dann pollt diese 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 einreichen.
