HiAPI
Blog

Tutorial

So verwenden Sie recraft/creative-upscale über die HiAPI API: Anleitung für curl- und Python-Anfragen

Nov 3, 2026
文章封面图:深青底色上以扁平几何切面构成的水晶矿物剖面,青绿双色点缀,印刷图版风格。

Die Rolle von recraft/creative-upscale im Entwickler-Workflow

recraft/creative-upscale ist ein Bild-zu-Bild-Endpunkt: Sie senden ein vorhandenes Bild, und das Modell gibt eine größere Version zurück, die vom Modell neu aufgebaut wurde. Das Schlüsselwort hier ist kreativ (creative). Klassische Upsampling-Schritte (bilinear, Lanczos oder generische Super-Resolution-Modelle) bewahren die Eingabe so originalgetreu wie möglich. Kreatives Upsampling erlaubt dagegen, Details neu zu erzeugen, die in den Quellpixeln nie vorhanden waren – Kanten werden neu synthetisiert, Texturen werden abgeleitet, kleine unscharfe Bereiche können zu plausibel wirkendem Inhalt geschärft werden, nicht nur interpoliert.

Dadurch unterscheidet es sich von einfachen Skalierungswerkzeugen und bestimmt auch seinen anderen Platz in der Pipeline.

Wann Sie es verwenden sollten

  • Asset-Upgrades. Ein Thumbnail oder ein Produktbild aus einer älteren Version muss in einer größeren Anzeigegröße dargestellt werden, während einfache Skalierung im Vergleich zu Nachbarn in nativer Auflösung unscharf wirkt.
  • Arbeit mit Referenzbildern und Effektbildern. Concept Art, Storyboards oder Platzhalterbilder müssen in großer Größe präsentiert werden, ohne ihre niedrig aufgelöste Herkunft zu verraten.
  • Upsampling innerhalb einer Generierungsschleife. Sie haben Bilder in einer kleineren Arbeitsgröße generiert und möchten ein finales Asset, ohne den gesamten Generierungsprozess auf einer größeren Leinwand erneut auszuführen.

Wann Sie es nicht verwenden sollten

Wenn die Anforderung bytegenaue Originaltreue ist – Archivscans, Dokumente, Texturatlas, bei denen Pixelwerte die Daten sind –, verwenden Sie kein kreatives Modell. Neu erzeugte Details sind plausible Vermutungen, keine Rekonstruktion; für Mess- oder Archivierungszwecke ist diese Vermutung ein Defekt. Verwenden Sie in diesem Fall einen deterministischen Resampler und überlassen Sie kreative Modelle der perzeptuellen Ausgabe.

Die Form des Aufrufs

Der Endpunkt folgt demselben Anfragemuster wie andere HiAPI-Bildendpunkte: eine authentifizierte JSON-POST-Anfrage an den Modellpfad mit einem Eingabebild und einem Parameterobjekt. Wenn Sie bereits ein anderes Bildmodell der Plattform integriert haben, lässt sich dieses mentale Modell direkt übertragen – genau das ist der Sinn der Weiterleitung dieser Aufrufe über eine einheitliche Schnittstelle. Ein funktionierender curl-Aufruf wird zur Vorlage für jeden weiteren Bildendpunkt, mit dem Sie in Berührung kommen.

Eine hilfreiche Art, diesen Schritt zu verstehen: Er konsumiert ein Bild, dem Sie bereits vertrauen (Komposition, Inhalt, Farbe sind festgelegt), und gibt eine größere, detailliertere Variante zurück. Entscheidungen zum Inhalt gehören stromaufwärts; recraft/creative-upscale ist die Abschlussphase.

Voraussetzungen und Endpunkt-Setup

Bevor Sie die erste Anfrage schreiben, sammeln Sie vier Dinge. Nichts davon erfordert ein spezielles SDK – die gesamte Integration ist reine HTTPS-Kommunikation mit einem JSON-Request-Body.

1. API-Schlüssel

Sie benötigen einen HiAPI-API-Schlüssel, der Zugriff auf Bildmodelle hat. Behandeln Sie ihn als Geheimnis: Laden Sie ihn aus einer Umgebungsvariable, statt ihn in Skripte einzufügen, und committen Sie ihn niemals in ein Repository.

export HIAPI_API_KEY="your-key-here"

Der Schlüssel wird über einen Header übergeben, nicht in der URL und nicht im JSON-Request-Body. Ihn aus dem Query-String herauszuhalten, hält ihn auch aus der Shell-Historie und aus Proxy-Logs heraus.

2. Basis-URL

Die Basis-URL ist Ihr HiAPI-API-Host. Alle Modellaufrufe sind relative Pfade darunter, sodass Sie sie als Variable setzen und in jedem Skript wiederverwenden können:

export HIAPI_BASE_URL="https://api.hiapi.ai"

Schlagen Sie in der API-Referenzdokumentation der Plattform die kanonische Basis-URL und das Pfadpräfix für Ihr Konto nach und speichern Sie sie in dieser einen Variable. So ist eine Änderung von Host oder Version eine einzeilige Bearbeitung.

3. Modellbezeichner

Die Modell-ID ist ein Pfadsegment und muss genau wie veröffentlicht geschrieben werden: recraft/creative-upscale. Sie enthält einen Schrägstrich, was bei manchen Werkzeugen wichtig ist – der Abschnitt zum Debugging geht darauf ins Detail. Groß-/Kleinschreibung und Bindestriche zählen. Ein falsches Zeichen erzeugt einen Modell-nicht-gefunden-Fehler, der bei flüchtigem Überfliegen der Meldung wie ein Authentifizierungsproblem aussieht.

4. Testbild

Halten Sie ein Bild auf der Festplatte bereit und kennen Sie dessen genauen Pfad und MIME-Typ. Verwenden Sie beim ersten Lauf eine kleine Datei, damit ein Fehler eindeutig ein Anfrageproblem ist und nicht ein Problem mit der Payload-Größe oder ein Timeout. Sie werden dasselbe Bild später für Vergleichsläufe wiederverwenden, wählen Sie also etwas mit sichtbaren Details (Stoff, Vegetation, Schilder ohne Text) statt eines flachen Verlaufs.

Checkliste für Header

Jede Anfrage ab hier trägt dieselben Header:

  • Authorization: Bearer $HIAPI_API_KEY
  • Content-Type: application/json

Wenn Sie das Bild im JSON-Request-Body als base64 oder Data-URI senden, reichen diese beiden Header aus. Wenn Sie stattdessen die Datei zuerst hochladen, um eine URL zu erhalten, behandeln Sie diesen Upload als separaten Aufruf und bewahren Sie die erzeugte URL getrennt von der Modellanfrage auf.

Mit Schlüssel, Basis-URL, Modell-ID und einem Testbild können Sie in weniger als einer Minute einen echten Aufruf ausführen.

Ein funktionierender Aufruf mit curl

Das Folgende ist ein direkt ausführbarer Aufruf. Ersetzen Sie den Bildwert durch Ihre eigene Eingabe – entweder eine öffentlich erreichbare URL oder eine base64-kodierte Data-URI, je nachdem, was das Eingabeschema des Modells akzeptiert.

curl -sS -X POST "$HIAPI_BASE_URL/v1/models/recraft/creative-upscale" \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input": {
      "image": "https://example.com/test-input.png"
    },
    "parameters": {
      "upscale": 2
    }
  }' \
  -o response.json

Verwenden Sie -o, um die Antwort in eine Datei zu schreiben, statt sie ins Terminal streamen zu lassen. So bleibt das JSON zum Parsen intakt und der Aufruf scriptbar.

Was die einzelnen Teile bewirken

  • -X POST – Der Endpunkt ist POST; GET liefert einen Methodenfehler, der leicht als Berechtigungsproblem missverstanden wird.
  • URL – Die Basis-URL, dann der Modellpfad mit vollständiger Modell-ID. Da die ID selbst einen Schrägstrich enthält, hat der Pfad nach der Modellsammlung zwei Segmente; halten Sie ihn als einen String zusammen und lassen Sie die Client-Bibliothek ihn nicht zu recraft%2Fcreative-upscale umkodieren, es sei denn, die Dokumentation gibt dies als erwartetes Verhalten an.
  • Authorization – Das Bearer-Token. Wenn Sie bei exakt diesem Befehl eine 401 sehen, sind der Schlüssel oder das Header-Format falsch; nichts anderes im Body wurde noch validiert.
  • Content-Type: application/json – Erforderlich. Ohne ihn behandeln manche Gateways den Body als Formulardaten, und die Anfrage erreicht das Modell nie.
  • input.image – Das Quellbild. Bevorzugen Sie beim Iterieren eine URL: Sie hält den Befehl kurz und den Diff klar.
  • parameters.upscale – Die Upsampling-Steuerung. Beginnen Sie mit einem moderaten Faktor und erhöhen Sie ihn erst, nachdem Sie eine Antwort bestätigt haben.

Zwei praktische Varianten

Um eine lokale Datei statt einer URL als base64 zu senden:

B64=$(base64 -w0 ./test-input.png)

curl -sS -X POST "$HIAPI_BASE_URL/v1/models/recraft/creative-upscale" \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"input\": { \"image\": \"data:image/png;base64,${B64}\" },
    \"parameters\": { \"upscale\": 2 }
  }" \
  -o response.json

Um beim Debugging sowohl den HTTP-Statuscode als auch den Response-Body zu sehen, fügen Sie -w '\nHTTP %{http_code}\n' hinzu und entfernen Sie -o.

Betrachten Sie diesen einen Befehl als Ihre Vorlage. Sobald er ein Bild zurückgibt, ist jede spätere Änderung – anderer Faktor, anderes Quellbild – nur das Bearbeiten von zwei Feldern statt einer neuen Integration.

Dieselbe Anfrage in Python

Die Python-Version sollte kein Copy-Paste des curl-Bodys sein; sie sollte eine kleine wiederverwendbare Funktion sein, damit spätere Vergleichsläufe jeweils nur einen Aufruf benötigen. Verwenden Sie nur die Standardbibliothek – kein SDK erforderlich.

import base64
import json
import os
import pathlib
import urllib.request

HIAPI_BASE_URL = os.environ["HIAPI_BASE_URL"].rstrip("/")
HIAPI_API_KEY = os.environ["HIAPI_API_KEY"]
MODEL = "recraft/creative-upscale"


def creative_upscale(image: str, upscale: int = 2, timeout: int = 120) -> dict:
    """Sendet ein Bild an recraft/creative-upscale und gibt das geparste JSON zurück."""
    payload = {
        "input": {"image": image},
        "parameters": {"upscale": upscale},
    }
    request = urllib.request.Request(
        url=f"{HIAPI_BASE_URL}/v1/models/{MODEL}",
        data=json.dumps(payload).encode("utf-8"),
        headers={
            "Authorization": f"Bearer {HIAPI_API_KEY}",
            "Content-Type": "application/json",
        },
        method="POST",
    )
    with urllib.request.urlopen(request, timeout=timeout) as response:
        return json.loads(response.read().decode("utf-8"))


def as_data_uri(path: str) -> str:
    data = pathlib.Path(path).read_bytes()
    mime = "image/png" if path.lower().endswith(".png") else "image/jpeg"
    return f"data:{mime};base64,{base64.b64encode(data).decode('ascii')}"


if __name__ == "__main__":
    result = creative_upscale(as_data_uri("test-input.png"), upscale=2)
    print(json.dumps(result, indent=2)[:2000])

Warum diese Form

  • Konfiguration aus Umgebungsvariablen. Basis-URL und Schlüssel werden beim Import einmal gelesen, sodass keine Geheimnisse in der Datei stehen und ein Umgebungswechsel nur ein Export benötigt.
  • Eine Funktion, eine Aufgabe. creative_upscale nimmt eine Bildreferenz und einen Faktor entgegen und gibt geparstes JSON zurück. Alle Informationen über die Parameter bleiben am Aufrufpunkt sichtbar.
  • Explizites Timeout. Bildmodelle dauern länger als Textendpunkte. Setzen Sie das Timeout bewusst, statt einen zu kurzen Standardwert zu erben, und halten Sie es lang genug, damit ein langsamer, aber erfolgreicher Aufruf nicht unnötig wiederholt wird.
  • Ein Helfer für lokale Dateien. as_data_uri bedeutet, dass Sie entweder eine URL oder einen lokalen Pfad übergeben können, ohne die Anfragerlogik zu ändern.

Wenn Sie lieber einen sitzungsbasierten Client verwenden

Derselbe Aufruf mit httpx erfordert nur zwei geänderte Zeilen – einen Client erstellen, den Standard-Header Authorization setzen und dann den JSON-Body per post senden. Die wichtigen Invarianten bleiben unverändert: Die Modell-ID bleibt ein einzelnes unkodiertes Pfadsegment, der Schlüssel bleibt in den Headern, und der Body behält die Aufteilung in input / parameters. Passen Sie diese drei Punkte an, ist Ihr Client mit jedem anderen Client der Plattform austauschbar.

Wenn Sie dies in eine Pipeline einbinden, geben Sie das geparste Dictionary zurück und lassen Sie den Aufrufer entscheiden, wie das Bild persistiert wird – diese Trennung macht die Antwortverarbeitung im nächsten Abschnitt wiederverwendbar.

Upsampling- und Kreativparameter

Die Werte, die Sie senden, sind weniger wichtig als wo Sie sie senden. Stellen Sie zuerst sicher, dass die Position stimmt, und optimieren Sie dann die Werte.

Zwei Container, ein Vertrag

Jede Anfrage teilt sich auf in:

  • input – Das Bild selbst. Das Objekt der Operation. Nichts über das Modellverhalten gehört hierher.
  • parameters – Die Steuerungen. Upsampling-Faktor und Kreativ-Einstellungen gehören beide in dieses Objekt, als Geschwister.

Diese Aufteilung ist der Vertrag. Der erste Lauf sollte bestätigen, dass das Modell Ihre Platzierung akzeptiert – das heißt, der Aufruf mindestens ein Bild zurückgibt –, bevor Sie die Werte zu optimieren beginnen. Wenn ein Parameter im falschen Container landet, erhalten Sie meist entweder ein mit Standardwerten erzeugtes Bild oder einen Validierungsfehler, der auf ein unbekanntes Feld hinweist. In beiden Fällen ist es ein Platzierungsfehler, kein Qualitätsfehler, und das Herumprobieren an Qualitätseinstellungen behebt ihn nicht.

Upsampling-Faktor

Der Faktor steuert die Größe der Ausgabe relativ zur Eingabe. So sollte man darüber nachdenken:

  • Es ist ein Multiplikator, also wachsen auch Kosten und Latenz. Von einem moderaten Faktor zum Maximum ist kein linearer Schritt in der Renderzeit. Betrachten Sie jede Erhöhung als neues Experiment, nicht als Feinjustierung eines Schiebereglers.
  • Die Eingangsauflösung zählt weiterhin. Wenn eine gewisse Struktur vorhanden ist, hat ein kreatives Modell mehr, womit es arbeiten kann. Eine sehr kleine Eingabe gibt ihm mehr Freiheit zu erfinden, was manchmal das Ziel ist und manchmal ein Unfall.
  • Wählen Sie den Faktor nach Zielgröße, nicht nach Maximum. Wenn das Bild 2× benötigt, um in seinen Platz zu passen, fordern Sie 2× an. Das Maximum anzufordern und dann zu verkleinern verwirft den Gewinn und bezahlt trotzdem dafür.

Kreativitätssteuerung

Kreativität ist der Regler, der bestimmt, wie viel das Modell ersetzen darf (statt zu vergrößern). Niedrige Einstellungen verhalten sich eher wie treues Upsampling; hohe Einstellungen lassen das Modell aggressiver neu synthetisieren, was unscharfe oder blockige Quellbilder retten kann, aber ebenso Details einführen kann, die Sie nicht wollen.

Betrachten Sie diesen Parameter als Hebel für die Treue, mit konkreten Interpretationen an beiden Enden:

  • Bewahren – Logos, Gesichter, Produktkatalogbilder, alles, was ein Betrachter mit dem Original vergleichen könnte.
  • Neu erzeugen – Concept Art, Hintergründe, Texturen, dekorative Bilder, bei denen Plausibilität vor Genauigkeit geht.

Arbeitsweise

Ändern Sie jeweils einen Parameter, halten Sie die Eingabe fest und protokollieren Sie die Werte zusammen mit der Ausgabe. Eine kleine Matrix – dasselbe Bild bei zwei Faktoren, jeder Faktor mit zwei Kreativ-Einstellungen – reicht aus, um das Verhalten des Endpunkts mit Ihren eigenen Inhalten zu charakterisieren. Leihen Sie sich keine "besten" Werte von anderen; kreative Modelle interagieren stark mit der Eingabe, und Einstellungen, die für Fotos passen, passen selten für flache Illustrationen.

Wenn ein Wert direkt abgelehnt wird, statt ein schlechtes Ergebnis zu liefern, teilt Ihnen der Vertrag die Domäne des Parameters mit – schlagen Sie die Parameterreferenz des Endpunkts nach, um akzeptable Bereiche zu erfahren, statt zu raten.

Antwort lesen und Bild speichern

Parsen Sie die Antwort defensiv. Der Payload-Typ ist Teil des Vertrags, kann aber zwischen URL und Inline-base64-Block variieren, und Ihr Client sollte nicht abstürzen, je nachdem, was er empfängt.

Zuerst das rohe JSON ansehen

Bevor Sie einen Parser schreiben, führen Sie einmal den curl-Aufruf mit -o response.json aus und lesen Sie die Datei. Identifizieren Sie das Feld, das das Bild trägt. Es ist normalerweise eines von:

  • eine URL, die auf die erzeugte Datei zeigt, oder
  • ein Inline-String, meist base64 oder eine Data-URI.

Suchen Sie außerdem nach Metadaten, die es lohnt zu protokollieren: Abmessungen, die zurückgespiegelte Modell-ID und jede Kennung, die Sie für ein Support-Ticket verwenden können.

Eine fehlertolerante Speicherfunktion

import base64
import pathlib
import urllib.request


def extract_image(result: dict) -> str:
    """Findet den Bild-Payload, unabhängig von seiner zurückgegebenen Form."""
    for container in (result, result.get("data"), result.get("output")):
        if isinstance(container, list) and container:
            container = container[0]
        if isinstance(container, dict):
            for key in ("image", "url", "b64_json", "image_url"):
                value = container.get(key)
                if isinstance(value, str) and value:
                    return value
    raise ValueError(f"no image field in response: {sorted(result)}")


def save_image(payload: str, out_path: str = "upscaled.png") -> pathlib.Path:
    path = pathlib.Path(out_path)
    if payload.startswith("data:"):
        payload = payload.split(",", 1)[1]
        path.write_bytes(base64.b64decode(payload))
    elif payload.startswith("http://") or payload.startswith("https://"):
        with urllib.request.urlopen(payload) as response:
            path.write_bytes(response.read())
    else:
        path.write_bytes(base64.b64decode(payload))
    return path

Der Punkt ist nicht, dass dies der einzig richtige Parser ist – sondern dass die Funktion ihre Annahmen offenlegt (data:, http(s)://, reines base64) und einen klaren Fehler auslöst, wenn nichts passt. Wenn sich die Antwortform ändert, aktualisieren Sie nur eine Funktion statt jedes Skript, das Bilder konsumiert.

Sicheres Speichern im curl-Ablauf

curl -sS -X POST "$HIAPI_BASE_URL/v1/models/recraft/creative-upscale" \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d @request.json -o response.json

python - <<'PY'
import json
from save_image import extract_image, save_image
result = json.load(open("response.json"))
print(save_image(extract_image(result), "out.png"))
PY

Zwei Gewohnheiten lohnen sich: Schreiben Sie bei jedem Lauf einen neuen Dateinamen, damit ein fehlgeschlagener oder teilweise geschriebener Lauf nie ein gutes Ergebnis überschreibt; überprüfen Sie nach dem Speichern die Ausgabemaße – ein erfolgreicher HTTP 200 mit unerwarteten Abmessungen bedeutet, dass die Parameter nicht wirksam wurden, und das ist hier leichter zu erkennen als nach drei Stufen in der Pipeline.

Häufige Fehler debuggen

Die meisten Fehler beim ersten Lauf sind banal. Arbeiten Sie diese Liste der Reihe nach ab; sie deckt die überwiegende Mehrheit der Fälle ab.

401 / 403 – Authentifizierung

  • Wurde der Schlüssel in derselben Shell geladen, in der der Befehl läuft? echo $HIAPI_API_KEY sollte einen nicht leeren Wert ausgeben.
  • Lautet der Header exakt Authorization: Bearer <key> – einschließlich Leerzeichen und dem Wort Bearer?
  • Ist der Schlüssel am Ende gar in der URL oder im JSON-Body statt im Header gelandet? Verschieben Sie ihn zurück.
  • Ist der Schlüssel auf Bildmodelle beschränkt? Ein Schlüssel, der für einen Produktbereich funktioniert, gilt möglicherweise nicht für diesen Endpunkt.

404 – Modell oder Route nicht gefunden

Dies ist fast immer ein Problem der Modell-ID. Vergleichen Sie Zeichen für Zeichen mit der veröffentlichten Kennung recraft/creative-upscale: der Schrägstrich, die Kleinschreibung und die Bindestriche in creative-upscale sind alle entscheidend. Eine verwandte Falle ist die URL-Escaping im Client – wenn Sie auf der Anforderungszeile recraft%2Fcreative-upscale sehen und der Aufruf 404 ergibt, hat Ihre HTTP-Schicht den Schrägstrich kodiert; konfigurieren Sie sie so, dass sie Pfadsegmente nicht anfasst.

Prüfen Sie außerdem, dass Sie kein Pfadpräfix doppelt haben (z. B. endet die Basis-URL bereits mit einem Versionsegment und der Pfad wiederholt es). Eine einzige Variable für die Basis-URL macht dies leicht erkennbar.

400 – Anfrage verstanden, aber abgelehnt

Lesen Sie die Meldung, statt zu raten. Häufige Ursachen:

  • Fehlerhaftes Bild-Eingabeformat. Abgeschnittenes base64 (oft durch eine abgeschnittene Shell-Variable oder ein fehlendes data:image/png;base64,-Präfix, wenn das Schema eine vollständige Data-URI erwartet) oder eine URL, die nicht öffentlich abrufbar ist.
  • Parameter außerhalb des Bereichs oder falsch platziert. Ein Faktor, den das Modell nicht akzeptiert, oder ein upscale, das auf oberster Ebene statt innerhalb von parameters gesendet wurde.
  • Fehlender Content-Type. Ein Content-Type von text/plain oder ein ganz fehlender macht den JSON-Body zu einem nicht parsebaren Dokument.

413 / 422 / Timeout – Größe und Dauer

Sehr große Quellbilder können bereits vor der Modellausführung an der Validierung scheitern. Verkleinern Sie die Eingabe moderat, versuchen Sie es erneut und bestätigen Sie, dass die Anfrageform stimmt, bevor Sie die Datei in voller Auflösung senden. Bei Timeouts unterscheiden Sie zwischen langsam und fehlgeschlagen: Erhöhen Sie das Client-Timeout einmal, und wenn der Aufruf dann erfolgreich ist, gehört die Korrektur zur Client-Konfiguration, nicht zur Payload.

Schnelle Triage-Regel

Wenn der Fehler Authentifizierung, Modell oder Eingabeformat erwähnt, haben Sie die Upsampling-Logik gar nicht erreicht – keine Kreativ- oder Faktorwerte sind hier im Spiel. Reparieren Sie den Wrapper, wiederholen Sie die kleinstmögliche Anfrage (ein kleines Testbild, Standardparameter) und ändern Sie erst dann die Einstellungen. Debugging in dieser Reihenfolge verhindert den klassischen Fehler, mit Parametern einen defekten Header kompensieren zu wollen.

Einen wiederholbaren Vergleichstest aufbauen

Kreatives Upsampling hängt stark von Urteilsvermögen ab, also verwenden Sie feste Einrichtungen statt Erinnerung. Das Ziel ist ein kleines Testgerüst, das die Frage "Ist diese Einstellung wirklich nützlich?" beantwortet, ohne dass Sie alte Dateien erneut visuell prüfen müssen.

Feste Eingabe

  • Ein Testbild, das im Repository eingecheckt ist. Wählen Sie etwas mit wiederherstellbaren Details – Stoff, Vegetation, Gebäudekanten. Committen Sie es neben das Skript, damit jeder Lauf und jedes Teammitglied dieselbe Quelle verwendet.
  • Feste Parameter. Faktor und Kreativwert stehen in Listen im Skript, nicht in Ihrem Kopf oder in Chat-Nachrichten.
  • Feste Modell-ID. Aus demselben Grund wie in der Header-Checkliste: recraft/creative-upscale einmal in einer Konstante schreiben.

Ein minimaler Matrix-Runner

import itertools, json, pathlib

FACTORS = [2, 4]
CREATIVITY = ["preserve", "regenerate"]  # die exakt akzeptierten Werte aus der Dokumentation verwenden

src = as_data_uri("fixtures/test-input.png")
out_dir = pathlib.Path("runs"); out_dir.mkdir(exist_ok=True)

for factor, mode in itertools.product(FACTORS, CREATIVITY):
    result = creative_upscale(src, upscale=factor, creativity=mode)
    name = f"f{factor}-{mode}"
    save_image(extract_image(result), out_dir / f"{name}.png")
    (out_dir / f"{name}.json").write_text(json.dumps(result, indent=2))
    print(name, "ok")

Zwei Details sind wichtiger als der Code. Erstens: Speichern Sie die rohe JSON-Antwort neben jedem Bild – wenn ein Ergebnis falsch aussieht, sagt Ihnen die Antwort, ob Parameter angewendet oder stillschweigend ignoriert wurden. Zweitens: Benennen Sie Dateien nach Parameterwerten, sodass das Verzeichnislisting die Matrix ist und Sie nie überlegen müssen, welche Datei von welcher Einstellung stammt.

In fester Weise vergleichen

  • Betrachten Sie die Ausgabe bei der beabsichtigten Anzeigegröße, nicht hineingezoomt. Kreative Details, die bei 400 % beeindrucken, können in der Größe, die Nutzer tatsächlich sehen, unnatürlich wirken.
  • Prüfen Sie die Abmessungen programmatisch als Teil des Laufs. Eine Abweichung bedeutet, dass der Faktor nicht wirksam wurde – das ist ein Fehlerbericht gegen Ihre eigene Anfrage, kein ästhetisches Problem.
  • Beurteilen Sie nach vordefinierten Kriterien: Treue zur Quelle gegenüber wahrgenommener Schärfe, je nach Asset-Kategorie gewählt. Schreiben Sie das Kriterium neben die Matrix, damit die nächste Person weiß, was "besser" bedeutet.

Sobald die Matrix stabil ist, wird das Gerüst zu einem Regressionstest: Führen Sie es nach jeder Änderung am Client-Code erneut aus und vergleichen Sie mit dem vorherigen Lauf-Verzeichnis. Da jeder Aufruf in dieser Anleitung dieselbe Anfrageform wie die anderen Bildendpunkte der Plattform hat, lässt sich der hier gebaute Runner auf jedes Modell verallgemeinern, das Sie als Nächstes integrieren.

Ä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