HiAPI
Blog

Tutorial

Seedream-API-Kostenoptimierung: So senken Sie die Bildgenerierungskosten auf hiapi

Oct 8, 2026
Seedream-API-Kostenoptimierung: So senken Sie die Bildgenerierungskosten auf hiapi

Seedream ist auf hiapi in vier verschiedenen Stufen verfügbar – seedream-5.0-flash, seedream-5.0-lite, seedream-5.0-pro und die ältere seedream-4.5 – und jede Stufe wird unterschiedlich abgerechnet. Wenn Sie die falsche Stufe oder die falsche Auflösung wählen, zahlen Sie möglicherweise 2- bis 4-mal mehr pro Bild, ohne dass sich die sichtbare Bildqualität verbessert. Dieser Leitfaden zeigt die tatsächliche Preisstruktur jeder Stufe und liefert ein lauffähiges Code-Muster, mit dem Sie das günstigste Modell aufrufen, das Ihre Anforderungen erfüllt.

Was Sie bauen werden und welche Voraussetzungen gelten

Sie bauen einen kleinen Python-Client, der über die einheitliche Task-API von hiapi Seedream-Bildtasks erstellt, auf Ergebnisse wartet und bewusst eine Auflösungs-/Modellkombination wählt, statt die aus Tutorials kopierten Standardwerte zu übernehmen. Zunächst holen Sie sich einen API-Schlüssel aus Ihrer hiapi-Konsole – jede Anfrage unten sendet ihn in der Form Authorization: Bearer sk-....

Die Preisstruktur, die Sie optimieren werden

Aktuelle Preise pro Bild (überprüfen Sie vor dem Launch immer die aktuelle Preisseite, da sich die Tarife ändern können):

  • seedream-5.0-flash – einheitlich $0.025/Bild, Text-zu-Bild und Bild-zu-Bild zum gleichen Preis. Die günstigste Stufe der Plattform; am besten für Entwürfe, Thumbnails und alle Szenarien, in denen Sie mehrfach neu generieren und dann das Endergebnis auswählen.
  • seedream-5.0-lite – einheitlich $0.035/Bild, und entscheidend: Der Preis ist gleich, egal ob Sie in 2K oder 4K rendern. Auf dieser Stufe gibt es aus Kostensicht nie einen Grund, 2K anzufordern – 4K ist ein kostenloses Upgrade.
  • seedream-4.5 (ältere Version) – einheitlich $0.045/Bild für beide Endpunkte.
  • seedream-5.0-pro – nach Auflösung gestaffelt statt einheitlich: Text-zu-Bild kostet $0.05 bei 1K und $0.10 bei 2K; Bild-zu-Bild kostet $0.06 bei 1K und $0.10 bei 2K. Auf dieser Stufe fließt Ihr Budget wirklich in die Auflösung – ein 1K-Entwurf kostet etwa die Hälfte eines 2K-Final-Renderings.

Diese Asymmetrie ist der Kern der gesamten Optimierung: lite belohnt das Anfordern höherer Auflösungen (kostenlos), pro bestraft höhere Auflösungen (Kosten etwa verdoppelt). Behandeln Sie sie in Ihrem Aufrufcode unterschiedlich, statt überall dieselbe Auflösung fest zu verdrahten.

Minimales lauffähiges Beispiel

Jeder Seedream-Aufruf läuft über denselben asynchronen Task-Endpunkt: Sie erstellen ihn mit POST /v1/tasks und rufen dann GET /v1/tasks/{taskId} ab oder empfangen einen Webhook-Callback. Die Modell-IDs sind nackt – kein vorangestelltes models/ oder Anbieter-Präfix.

import os
import time
import requests

API_KEY = os.environ["HIAPI_API_KEY"]  # starts with sk-
BASE_URL = "https://api.hiapi.ai/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}


def create_task(model: str, input_payload: dict) -> str:
    resp = requests.post(f"{BASE_URL}/tasks", headers=HEADERS,
                          json={"model": model, "input": input_payload}, timeout=30)
    resp.raise_for_status()
    return resp.json()["data"]["taskId"]


def wait_task(task_id: str, interval: float = 3.0, timeout: float = 180.0) -> dict:
    deadline = time.time() + timeout
    while time.time() < deadline:
        resp = requests.get(f"{BASE_URL}/tasks/{task_id}", headers=HEADERS, timeout=30)
        resp.raise_for_status()
        data = resp.json()["data"]
        if data["status"] == "success":
            return data
        if data["status"] == "fail":
            raise RuntimeError(data["error"])
        time.sleep(interval)
    raise TimeoutError(f"task {task_id} did not finish within {timeout}s")


# seedream-5.0-lite: 4K costs the same $0.035 as 2K, so always ask for 4K here.
task_id = create_task(
    "seedream-5.0-lite/text-to-image",
    {"prompt": "a minimalist product photo of a ceramic mug on a wooden table", "resolution": "4K"},
)
result = wait_task(task_id)
image_url = result["output"][0]["url"]
print(image_url)

resolution akzeptiert auf seedream-5.0-lite nur 2K oder 4K (kein 1K). seedream-5.0-pro akzeptiert 1K/2K und erfordert zusätzlich aspect_ratio (einer der Werte 1:1, 4:3, 3:4, 16:9, 9:16, 2:3, 3:2, 21:9) – das Eingabeschema jeder Seedream-Stufe ist etwas anders, gehen Sie also nicht davon aus, dass Felder, die ein Modell akzeptiert, auf ein anderes übertragbar sind.

Produktionsreifes Muster

Wählen Sie die Stufe programmatisch, nicht aus Gewohnheit. Pflegen Sie eine kleine Kostentabelle direkt neben der Aufrufstelle und routen Sie nach Budget-/Qualitätsanforderungen, statt überall dasselbe Modell fest zu verdrahten – behandeln Sie die Zahlen wie einen Cache der Preisseite, nicht wie die Quelle der Wahrheit:

SEEDREAM_COST_USD = {
    ("seedream-5.0-flash", None): 0.025,
    ("seedream-5.0-lite", "2K"): 0.035,
    ("seedream-5.0-lite", "4K"): 0.035,   # same price — always prefer 4K
    ("seedream-5.0-pro", "1K"): 0.05,      # text-to-image; i2i 1K is $0.06
    ("seedream-5.0-pro", "2K"): 0.10,
}

def pick_model_for_draft_vs_final(is_final: bool) -> tuple[str, dict]:
    if not is_final:
        return "seedream-5.0-flash", {}  # $0.025, iterate freely
    return "seedream-5.0-pro", {"resolution": "2K"}  # $0.10, one shot at the end

Bevorzugen Sie Callbacks gegenüber engmaschigem Polling. Rufen Sie in High-Throughput-Pipelines nicht alle paar Sekunden wait_task in einer Schleife auf, sondern fügen Sie der Erstellungsanfrage ein callback hinzu:

task_id_resp = requests.post(
    f"{BASE_URL}/tasks", headers=HEADERS,
    json={
        "model": "seedream-5.0-lite/text-to-image",
        "input": {"prompt": "...", "resolution": "4K"},
        "callback": {"url": "https://yourapp.example.com/webhooks/hiapi", "when": "final"},
    },
    timeout=30,
)

Wenn der Task einen Endzustand erreicht (success oder fail), erhält Ihr Webhook-Handler einmalig ein POST, statt dass Ihr Worker in einer Polling-Schleife Anfragen verbraucht. Wenn Sie keinen öffentlichen HTTPS-Endpunkt bereitstellen können (lokale Entwicklung, interne Tools), ist Polling weiterhin die einfachere Wahl – wechseln Sie zu Callbacks, sobald Sie mit echter Last laufen.

Deduplizieren Sie vor dem Erstellen des Tasks, nicht danach. Die Task-API rechnet beim Erstellen ab, daher werden wiederholte Anfragen (Timeouts, Worker-Abstürze, Neu-Deployments von Queue-Consumern), die denselben Job erneut einreichen, doppelt berechnet. Prüfen Sie vor dem Aufruf von create_task in Ihrem eigenen Speicher, ob bereits ein bestehender Task mit dem Schlüssel (model, input_hash) existiert, und überspringen Sie die Erstellung, wenn dieser Task bereits läuft oder erfolgreich war – der Task-Endpunkt von hiapi hat keine integrierte Deduplizierung, das muss also in Ihrem Code liegen.

Behandeln Sie Authentifizierungsfehler explizit. Ein ungültiger oder widerrufener Schlüssel gibt HTTP 401 mit strukturiertem Antwortkörper zurück, nicht eine generische Fehlerseite:

{"error": {"code": "permission_denied", "type": "hiapi_error", "request_id": "..."}}

Prüfen Sie gezielt error.code == "permission_denied", damit ein fehlerhafter Schlüssel schnell fehlschlägt, statt bis zum Timeout erneut zu versuchen.

Verwandte hiapi-Ressourcen

Häufig gestellte Fragen

Welches Seedream-Modell ist am günstigsten für schnelle Entwürfe oder Icons? seedream-5.0-flash, einheitlich $0.025/Bild – die günstigste Stufe der Plattform, Text-zu-Bild und Bild-zu-Bild zum gleichen Preis.

Ist es auf Seedream 5.0 Lite teurer, 4K statt 2K anzufordern? Nein. seedream-5.0-lite kostet einheitlich $0.035/Bild, unabhängig davon, ob resolution 2K oder 4K ist, fordern Sie auf dieser Stufe also standardmäßig 4K an.

Wie viel kostet Seedream 5.0 Pro pro Bild? Nach Auflösung gestaffelt: Text-zu-Bild kostet $0.05 bei 1K und $0.10 bei 2K; Bild-zu-Bild kostet $0.06 bei 1K und $0.10 bei 2K. Anders als bei lite ändert die Auflösung hier tatsächlich Ihre Rechnung.

Wie vermeide ich doppelte Abrechnung, wenn mein Job erneut versucht wird? Die Task-API hat keinen serverseitigen Idempotenzschlüssel, deduplizieren Sie also clientseitig: Speichern Sie vor dem Aufruf von create_task einen Schlüssel für (model, input_hash), und überspringen Sie die Erstellung, wenn dieser Schlüssel bereits läuft oder erfolgreich war.

Soll ich pollen oder Webhook-Callbacks verwenden? Wenn Sie keinen öffentlichen HTTPS-Endpunkt bereitstellen können (lokale Entwicklung, Skripte), pollen Sie GET /v1/tasks/{taskId}. Sobald Sie mit echter Last laufen, wechseln Sie zu callback.url + when: "final" – das ersetzt die Polling-Schleife durch eine Push-Benachrichtigung pro Task.

Was wird bei einem ungültigen API-Schlüssel zurückgegeben? HTTP 401 und {"error": {"code": "permission_denied", "type": "hiapi_error", "request_id": "..."}}. Prüfen Sie diesen Fehlercode explizit, statt mit einem fehlerhaften Schlüssel bis zum Timeout erneut zu versuchen.

Kann ich diese Preise nutzen, ohne zuerst einen API-Schlüssel zu verwenden? Nein – jeder /v1/tasks-Aufruf erfordert einen gültigen Authorization: Bearer sk-...-Header mit einem echten Schlüssel, den Sie in der Konsole erstellt haben; es gibt keinen schlüssellosen oder registrierungsfreien Testpfad für die Produktionsgenerierung.

Ähnliche Artikel

Alle Artikel ansehen →

Starte mit persistenten KI-Artefakten

Hol dir deinen API-Key und rufe Bild-, Video- und Audiomodelle über eine einzige task-basierte API auf.

API-Dokumentation lesen