Tutorial
So verwenden Sie recraft/creative-upscale über die HiAPI API: Anleitung für curl- und Python-Anfragen
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_KEYContent-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-upscaleumkodieren, 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_upscalenimmt 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_uribedeutet, 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_KEYsollte einen nicht leeren Wert ausgeben. - Lautet der Header exakt
Authorization: Bearer <key>– einschließlich Leerzeichen und dem WortBearer? - 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 vonparametersgesendet wurde. - Fehlender Content-Type. Ein
Content-Typevontext/plainoder 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-upscaleeinmal 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 →-
Tutorial
So rufen Sie hailuo-2.3-fast/image-to-video über die HiAPI API auf: curl und Python in der Praxis
Die erste lauffähige Anfrage für die schnelle, kostengünstige Bild-zu-Video-Stufe – von der Modell-ID bis zum heruntergeladenen MP4
-
Tutorial
So rufen Sie hailuo-2.3/text-to-video über die HiAPI API auf: curl, Python und lauffähige Anfragebeispiele
-
Tutorial
Kandinsky 6.0 Pro Text-zu-Video auf HiAPI: curl- und Python-Tutorial
Eine anfrageorientierte praktische Demonstration: Aufbau des Aufrufs vom Prompt zum Videoclip, Absenden der Anfrage, Abfragen des Fertigstellungsstatus und Herunterladen des Ergebnisses