modele

OpenAI: GPT Image 2

Markdown · JSON

OpenAI: GPT Image 2

GPT Image 2 generuje i edytuje obrazy na podstawie tekstu i referencji wizualnych. Obsługuje elastyczne wymiary kadru i automatycznie przetwarza obrazy wejściowe z wysoką wiernością, oferując osobne ustawienia jakości, formatu i tła gotowego materiału.

O modelu

Ten opis przedstawia możliwości modelu. Dane wejściowe, wyniki i opcje dostępne w Ailoot podano poniżej dla wybranej metody.

GPT Image 2 to model OpenAI do generowania i edycji obrazów na podstawie tekstu i materiałów wizualnych. Tworzy nowy obraz z pisemnego opisu i może używać obrazów źródłowych do edycji lub pracy opartej na referencjach. Praktyczne zadania obejmują ilustracje, koncepcje produktów, kompozycje wizualne i zmiany w istniejącym materiale. Jest odrębną wersją względem modeli GPT Image 2.5 Sunburst i Flare, z własnym zakresem jakości i sposobem przetwarzania wierności wejścia.

Przy generowaniu opisz główny obiekt, scenę, kompozycję, światło i zamierzony styl. Przy edycji określ, co ma się zmienić, a co powinno zachować wygląd. Opis produktu może dotyczyć ceramicznej lampy na jasnej powierzchni, z sylwetką umieszczoną pośrodku i miejscem na podpis; kolejna edycja może zmienić tło, zachowując kształt lampy i kąt widzenia. Udokumentowane bezpośrednie procesy generowania i edycji przyjmują prompty do 32 000 znaków i mogą zwracać od jednego do dziesięciu obrazów.

Edycja z referencjami przyjmuje do szesnastu obrazów wejściowych. Określ cel każdej referencji, aby nie pomylić głównego obiektu, tła i sposobu przedstawienia. GPT Image 2 automatycznie przetwarza każde wejście obrazowe z wysoką wiernością; input_fidelity należy pominąć, ponieważ w tej wersji nie można go regulować. Różni się to od wyboru high lub low w GPT Image 1 oraz trybu wierności wejścia ograniczonego do low w GPT Image 1 Mini. Przetwarzanie wejścia z wysoką wiernością pomaga zachować szczegóły źródła, ale nie gwarantuje odtworzenia każdego z nich bez zmian.

Maska może wskazywać obszar do edycji. Obraz źródłowy i maska muszą mieć ten sam format i wymiary oraz rozmiar poniżej 50 MB zgodnie z wymaganiami przygotowania w przewodniku; maska wymaga też kanału alfa. Jeśli dostarczono kilka obrazów wejściowych, maska dotyczy pierwszego. Model traktuje maskę jako wskazówkę opartą na prompcie, a nie ścisłą granicę geometryczną. Opisz lokalną zmianę i wymagania zachowania elementów, a następnie sprawdź otoczenie pod kątem niezamierzonych różnic.

GPT Image 2 obsługuje jakość low, medium, high i auto, z auto jako wartością domyślną. Ustawienia xhigh i max z rodziny 2.5 nie należą do zakresu jakości tej wersji. Rozmiar może być kwadratowy, poziomy, pionowy, automatyczny lub określony poprawną niestandardową szerokością i wysokością. Przykłady producenta obejmują 1024 × 1024, 1536 × 1024, 1024 × 1536, 2048 × 2048, 2048 × 1152, 3840 × 2160 i 2160 × 3840 pikseli. Dobierz orientację i poziom szczegółów do rzeczywistego układu, zamiast traktować jakość i wymiary jako to samo ustawienie.

Niestandardowe wymiary muszą być wielokrotnościami szesnastu pikseli, z maksymalnym bokiem 3840 pikseli, stosunkiem dłuższego boku do krótszego nie większym niż 3:1 i polem od 655 360 do 8 294 400 pikseli. Warunki te obowiązują jednocześnie. Rozdzielczości powyżej 2560 × 1440 są oznaczone jako eksperymentalne. Kadr spełniający jedną regułę nadal może naruszać inną, dlatego wybierz obsługiwaną parę wymiarów i opisz elementy wrażliwe na przycięcie.

Wynik domyślnie ma format PNG, dostępne są także JPEG i WebP. Dla JPEG i WebP obsługiwana jest kompresja od 0 do 100. Tło może być nieprzezroczyste lub automatyczne; aktualna dokumentacja tej konkretnej wersji opisuje przezroczystość w GPT Image 2 jako funkcję w wersji preview. Przy żądaniu przezroczystości użyj PNG lub WebP, aby zachować kanał alfa. Udokumentowany proces strumieniowania dopuszcza do trzech obrazów częściowych przed gotowym obrazem; zapisuj końcowy materiał, a nie podgląd postępu. Interfejs producenta obsługuje również przetwarzanie wsadowe.

Oceń czytelność tekstu, położenie przedmiotów i zachowanie szczegółów źródła w rzeczywistym wyniku. GPT Image może mieć trudności z precyzyjnymi napisami, kompozycjami wymagającymi dokładnego układu i powtarzalną tożsamością wizualną w osobnych generowaniach. Przy sekwencji edycji używaj wybranego wyniku jako następnego źródła i podawaj konkretną zmianę powiązaną z widocznym problemem. Użytecznym wynikiem GPT Image 2 jest obraz odpowiadający jasnemu opisowi generowania lub edycji, z wejściem o wysokiej wierności, wymiarami i jakością dobranymi do tego zadania.

Ailoot · Obrazy POST /v1/images/generations gpt-image-2

gpt-image-2

OpenAI /gpt-image-2

Start

GPT Image 2 generuje i edytuje obrazy na podstawie tekstu i referencji wizualnych. Obsługuje elastyczne wymiary kadru i automatycznie przetwarza obrazy wejściowe z wysoką wiernością, oferując osobne ustawienia jakości, formatu i tła gotowego materiału.

Akceptowane dane wejściowe
Tekst
Wyniki
Obrazy

Dostępne w Ailoot · dane wejściowe i metody

Ailoot · Obrazy POST /v1/images/generations
Wejście
text
Wyjście
image
Format wyjściowy
Plik obrazu
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
gpt-image-2
Domyślnie—
PolepromptTypstringWymaganieWymaganeWartości i limity
Minimalna długość: 1
Domyślnie—
PolenTypintegerWymaganieOpcjonalneWartości i limity
Minimum: 1
Domyślnie1
Poleresponse_formatTypstringWymaganieOpcjonalneWartości i limity
url, b64_json
Domyślnie—
PolestreamTypbooleanWymaganieOpcjonalneWartości i limityDomyślniefalse
PolesizeTypstringWymaganieOpcjonalneWartości i limity
Zależy od modelu
Domyślnie—
PolequalityTypstringWymaganieOpcjonalneWartości i limity
Zależy od modelu
Domyślnie—
PolebackgroundTypstringWymaganieOpcjonalneWartości i limity
Zależy od modelu
Domyślnie—
Poleoutput_formatTypstringWymaganieOpcjonalneWartości i limity
Zależy od modelu
Domyślnie—
Poleoutput_compressionTypintegerWymaganieOpcjonalneWartości i limity
Zależy od modelu
Domyślnie—
PolemoderationTypstringWymaganieOpcjonalneWartości i limity
Zależy od modelu
Domyślnie—
Poleinput_fidelityTypstringWymaganieOpcjonalneWartości i limity
Zależy od modelu
Domyślnie—
PolestyleTypstringWymaganieOpcjonalneWartości i limity
Zależy od modelu
Domyślnie—
Polepartial_imagesTypintegerWymaganieOpcjonalneWartości i limity
Zależy od modelu
Domyślnie—
Kombinacje materiałów wejściowych

Tekst na obraz · Wymagane: prompt

Parametry i cykl życia metody
ParametrKontrakt
Parametrmaterial_typesKontrakttext
ParametrrequiredKontraktmodel, prompt
Parametroptional_controlsKontraktnull
Parametrcontent_typeKontraktapplication/json

Cykl życia: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · Rzeczywiście zwrócony task_id lub wpis w bibliotece multimediów

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Struktury metod i ID są dokładne; możliwości dostawcy są odrębne od dopuszczenia żądania.

Cennik

Stawki metod Ailoot

Ailoot ObrazyPOST /v1/images/generations
Wejście tekstowe
0,0025 USD / 1K
Wejście, obraz
0,004 USD / 1K tokens
Wyjście, obraz
0,015 USD / 1K tokens

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Przykładowe żądania

Ailoot · Obrazy

curlPython SDKNode.js SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gpt-image-2", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'gpt-image-2', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "gpt-image-2", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");

Odbieranie i zapisywanie wyników

Ailoot · Obrazy

Pobierz każdy zwrócony obraz lub zapisz jego zawartość Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Zachowaj wszystkie ukończone wyniki

Zapisz każdy ukończony obraz; pobierz każdy zwrócony URL lub zdekoduj zawartość Base64.

Zachowaj każdy element danych. Zdekoduj każdą wartość b64_json lub pobierz dane z każdego zwróconego podpisanego adresu URL. Dobierz rozszerzenie nazwy pliku na podstawie rzeczywistego typu MIME lub bajtów.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Jeśli wynik generowania lub edycji obrazu wymaga sprawdzenia, zachowaj pierwotny operation_id/X-Client-Request-ID oraz zwrócone informacje o wyniku. Odzyskaj istniejące własne wyniki z biblioteki multimediów, używając rzeczywistych wartości task_id lub asset_id. Nie wysyłaj ponownie żądania generowania lub edycji ani nie twórz adresu URL do sprawdzania stanu na podstawie operation_id.

Pola odpowiedzi
PoleTyp
PolecreatedTypinteger
Poledata[].urlTypstring
Poledata[].b64_jsonTypbase64 string
PoleusageTypobject
Błędy i dalsze kroki
OdpowiedźWarunekNastępny krok
Odpowiedź400 · invalid_request_errorWarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametruNastępny krokPopraw wskazane pola przed nowym żądaniem utworzenia.
Odpowiedźserver_errorWarunekZwrócona odpowiedź wskazuje, że operacja lub wynik wymaga sprawdzeniaNastępny krokZachowaj pierwotnie zwrócony identyfikator operacji lub zadania, nagłówki żądania i odpowiedź; kontynuuj obsługiwane odczyty tej pierwotnej operacji. Nie wysyłaj ponownie żądania utworzenia.

Aliasy

Aliasy modelu

Ailoot gpt-image-2
Ailoot Ultra gpt-image-2, openai/gpt-image-2

Aliasy ścieżek metod

/v1/images

Powiązane ID modeli

openai/gpt-image-2, gpt-image-2, gpt-image-2

Ailoot Ultra · Obrazy POST /v1/images/generations gpt-image-2

gpt-image-2

OpenAI /gpt-image-2
ID modelu
  • gpt-image-2
  • openai/gpt-image-2

Start

GPT Image 2 generuje i edytuje obrazy na podstawie tekstu i referencji wizualnych. Obsługuje elastyczne wymiary kadru i automatycznie przetwarza obrazy wejściowe z wysoką wiernością, oferując osobne ustawienia jakości, formatu i tła gotowego materiału.

Akceptowane dane wejściowe
Tekst
Wyniki
Obrazy

Dostępne w Ailoot · dane wejściowe i metody

Ailoot Ultra · Obrazy POST /v1/images/generations
Wejście
text
Wyjście
image
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
gpt-image-2
Domyślnie—
PolepromptTypstringWymaganieWymaganeWartości i limity
Maksymalna długość: 32 000
Domyślnie—
PolesizeTypstringWymaganieOpcjonalneWartości i limity
Warunki: Użyj auto lub WIDTHxHEIGHT z oboma wymiarami podzielnymi przez 16. Najdłuższy bok może mieć najwyżej 3,840 pikseli, a łączny rozmiar najwyżej 8,300,000 pikseli.
Domyślnieauto
PolebackgroundTypstringWymaganieOpcjonalneWartości i limity
transparent, opaque, auto
Domyślnieauto
PolemoderationTypstringWymaganieOpcjonalneWartości i limity
low, auto
Warunki: Użyj auto dla standardowej moderacji treści.
Domyślnie—
PolenTypintegerWymaganieOpcjonalneWartości i limity
Minimum: 1
Maksimum: 10
Domyślnie1
PolequalityTypstringWymaganieOpcjonalneWartości i limity
auto, high, medium, low
Domyślnieauto
Poleoutput_compressionTypintegerWymaganieOpcjonalneWartości i limity
Minimum: 0
Maksimum: 100
Warunki: Dotyczy wyjścia JPEG i WebP; wyślij udokumentowaną wartość całkowitą.
Domyślnie100
Poleoutput_formatTypstringWymaganieOpcjonalneWartości i limity
webp, png, jpeg
Domyślniepng
PolestreamTypbooleanWymaganieOpcjonalneWartości i limity
false
Warunki: Ta ścieżka zwraca jedną kompletną odpowiedź JSON.
Domyślniefalse
Parametry i cykl życia metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktprompt, model
Parametrmaterial_typesKontrakttext
ParametroptionalKontraktsize, background, moderation, n, quality, output_compression, output_format, stream
ParametrconditionsKontraktPrzezroczyste tło wymaga PNG lub WebP., Kompresja wyjścia dotyczy JPEG lub WebP., Wybrana metoda generuje na podstawie tekstu. Edycja i sterowanie strumieniowaniem opisane przez producenta są osobnymi funkcjami.

Cykl życia: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · Rzeczywiście zwrócony task_id lub wpis w bibliotece multimediów

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Cennik

Jak obliczana jest ostateczna opłata

Wyświetlane stawki służą do oszacowania kosztu przed generowaniem. Ostateczna opłata jest obliczana na podstawie kosztu zarejestrowanego dla pierwotnego generowania. Zmierzony czas trwania wyniku i prognozowane ilości nie stanowią ostatecznej ilości podlegającej rozliczeniu.

Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.

Tryb szybki
Nie określono Gdy wybrany jest tryb szybki
Tryb flex
Nie określono Gdy wybrany jest tryb flex
Maksymalna intensywność rozumowania
Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)

Szacunkowe stawki do porównania

Ceny według konfiguracji

Dopasuj każdą opłatę do pokazanych warunków. Użyj jednej stawki dla każdego zestawu alternatywnych konfiguracji.

KonfiguracjaTabela stawekPrzewidywana ilośćOpłata
KonfiguracjaBazowe stawki za tokenyTabela stawekStawka podstawowaPrzewidywana ilość—Opłata
Wejście · Tokeny wejściowe · Szacunek tylko do porównania — / 1K tokenów
Wyjście · Tokeny wyjściowe · Szacunek tylko do porównania — / 1K tokenów
Wejście · Odczyt cache · Szacunek tylko do porównania — / 1K tokenów
Wejście · Zapis do cache · Szacunek tylko do porównania — / 1K tokenów
Wejście · Zapis do cache, 1 godz. · Szacunek tylko do porównania — / 1K tokenów
KonfiguracjaSzacowany koszt generowaniaTabela stawek—Przewidywana ilośćszacunek dla jednego generowaniaOpłata
Wyjście · Szacowany koszt generowania · Szacunek tylko do porównania $0.24576 szacunek przed generowaniem

Ten szacunek nie jest dodatkową opłatą ani stałą stawką za ukończone generowanie.

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Przykładowe żądania

Ailoot Ultra · Obrazy

curl
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'prompt': 'A cute baby sea otter', 'model': 'gpt-image-2', 'size': '1024x1024', 'n': 1, 'background': 'auto', 'moderation': 'auto', 'output_format': 'png'}

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT

Odbieranie i zapisywanie wyników

Ailoot Ultra · Obrazy

Pobierz każdy zwrócony obraz lub zapisz jego zawartość Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Inne odczyty treści
Odczytaj istniejące zasoby należące do Ciebie
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
Zachowaj wszystkie ukończone wyniki

Zapisz każdy ukończony obraz; pobierz każdy zwrócony URL lub zdekoduj zawartość Base64.

Zachowaj pełną odpowiedź i nagłówki, wszystkie rzeczywiście uzyskane wyniki, pierwotnie zwrócone identyfikatory oraz wszystkie pola zużycia. Odzyskaj pierwotną operację bez ponownego wysyłania żądania utworzenia.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Zachowaj zwrócony X-Client-Request-ID do uzgodnienia danych. Odczytuj wyłącznie rzeczywiście zwrócone wartości task_id/asset_id lub własną bibliotekę multimediów; nigdy nie buduj adresu URL zadania na podstawie identyfikatora operacji i nigdy nie wysyłaj ponownie żądania utworzenia.

Pola odpowiedzi
PoleTyp
PolecreatedTyp
Poledata[].urlTyp
Poledata[].b64_jsonTyp
PoleusageTyp

Aliasy

Aliasy modelu

Ailoot gpt-image-2
Ailoot Ultra gpt-image-2, openai/gpt-image-2

Aliasy ścieżek metod

/v1/images

Powiązane ID modeli

openai/gpt-image-2, gpt-image-2, gpt-image-2

Ailoot Ultra · Obrazy POST /v1/images/generations openai/gpt-image-2

openai/gpt-image-2

OpenAI /openai/gpt-image-2
ID modelu
  • gpt-image-2
  • openai/gpt-image-2

Start

GPT Image 2 generuje i edytuje obrazy na podstawie tekstu i referencji wizualnych. Obsługuje elastyczne wymiary kadru i automatycznie przetwarza obrazy wejściowe z wysoką wiernością, oferując osobne ustawienia jakości, formatu i tła gotowego materiału.

Akceptowane dane wejściowe
Tekst · Obrazy
Wyniki
Obrazy

Dostępne w Ailoot · dane wejściowe i metody

Ailoot Ultra · Obrazy POST /v1/images/generations
Wejście
text, image
Wyjście
image
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
openai/gpt-image-2
Domyślnie—
PolepromptTypstringWymaganieWymaganeWartości i limity
Minimalna długość: 1
Domyślnie—
Poleaspect_ratioTypstringWymaganieOpcjonalneWartości i limity
1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16, 21:9, auto
Domyślnie—
PolequalityTypstringWymaganieOpcjonalneWartości i limity
auto, low, medium, high
Domyślnie—
PolebackgroundTypstringWymaganieOpcjonalneWartości i limity
auto, opaque
Domyślnie—
PolenTypintegerWymaganieOpcjonalneWartości i limity
Minimum: 1
Maksimum: 10
Domyślnie—
Poleinput_referencesTyparrayWymaganieOpcjonalneWartości i limity
Minimalna liczba elementów: 0
Maksymalna liczba elementów: 16
Domyślnie—
Poleoutput_compressionTypintegerWymaganieOpcjonalneWartości i limity
Minimum: 0
Maksimum: 100
Domyślnie—
PoleproviderTypobjectWymaganieOpcjonalneWartości i limityDomyślnie—
Parametry i cykl życia metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, prompt
Parametrmaterial_typesKontrakttext, image

Cykl życia: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · Rzeczywiście zwrócony task_id lub wpis w bibliotece multimediów

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Cennik

Jak obliczana jest ostateczna opłata

Wyświetlane stawki służą do oszacowania kosztu przed generowaniem. Ostateczna opłata jest obliczana na podstawie kosztu zarejestrowanego dla pierwotnego generowania. Zmierzony czas trwania wyniku i prognozowane ilości nie stanowią ostatecznej ilości podlegającej rozliczeniu.

Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.

Tryb szybki
Nie określono Gdy wybrany jest tryb szybki
Tryb flex
Nie określono Gdy wybrany jest tryb flex
Maksymalna intensywność rozumowania
Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)

Szacunkowe stawki do porównania

Ceny według konfiguracji

Dopasuj każdą opłatę do pokazanych warunków. Użyj jednej stawki dla każdego zestawu alternatywnych konfiguracji.

KonfiguracjaTabela stawekPrzewidywana ilośćOpłata
KonfiguracjaBazowe stawki za tokenyTabela stawekStawka podstawowaPrzewidywana ilość—Opłata
Wejście · Tokeny wejściowe · Szacunek tylko do porównania — / 1K tokenów
Wyjście · Tokeny wyjściowe · Szacunek tylko do porównania — / 1K tokenów
Wejście · Odczyt cache · Szacunek tylko do porównania — / 1K tokenów
Wejście · Zapis do cache · Szacunek tylko do porównania — / 1K tokenów
Wejście · Zapis do cache, 1 godz. · Szacunek tylko do porównania — / 1K tokenów
KonfiguracjaSzacowany koszt generowaniaTabela stawek—Przewidywana ilośćszacunek dla jednego generowaniaOpłata
Wyjście · Szacowany koszt generowania · Szacunek tylko do porównania $0.24576 szacunek przed generowaniem

Ten szacunek nie jest dodatkową opłatą ani stałą stawką za ukończone generowanie.

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Przykładowe żądania

Ailoot Ultra · Obrazy

curl
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'openai/gpt-image-2', 'prompt': 'a red panda astronaut floating in space, studio lighting'}

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT

Odbieranie i zapisywanie wyników

Ailoot Ultra · Obrazy

Pobierz każdy zwrócony obraz lub zapisz jego zawartość Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Inne odczyty treści
Odczytaj istniejące zasoby należące do Ciebie
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
Zachowaj wszystkie ukończone wyniki

Zapisz każdy ukończony obraz; pobierz każdy zwrócony URL lub zdekoduj zawartość Base64.

Zachowaj pełną odpowiedź i nagłówki, wszystkie rzeczywiście uzyskane wyniki, pierwotnie zwrócone identyfikatory oraz wszystkie pola zużycia. Odzyskaj pierwotną operację bez ponownego wysyłania żądania utworzenia.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Zachowaj zwrócony X-Client-Request-ID do uzgodnienia danych. Odczytuj wyłącznie rzeczywiście zwrócone wartości task_id/asset_id lub własną bibliotekę multimediów; nigdy nie buduj adresu URL zadania na podstawie identyfikatora operacji i nigdy nie wysyłaj ponownie żądania utworzenia.

Pola odpowiedzi
PoleTyp
PolecreatedTyp
Poledata[].urlTyp
Poledata[].b64_jsonTyp
PoleusageTyp

Aliasy

Aliasy modelu

Ailoot gpt-image-2
Ailoot Ultra gpt-image-2, openai/gpt-image-2

Aliasy ścieżek metod

/v1/images

Powiązane ID modeli

openai/gpt-image-2, gpt-image-2, gpt-image-2

FAQ · OpenAI: GPT Image 2
Jakie dane wejściowe i wyniki są dostępne?

POST /v1/images/generations · gpt-image-2: text → image

POST /v1/images/generations · gpt-image-2: text → image

POST /v1/images/generations · openai/gpt-image-2: text, image → image

Jakich pól używa żądanie?

POST /v1/images/generations · gpt-image-2: model, prompt, n, response_format, stream

POST /v1/images/generations · gpt-image-2: model, prompt, size, background, moderation, n, quality, output_compression, output_format, stream

POST /v1/images/generations · openai/gpt-image-2: model, prompt, aspect_ratio, quality, background, n, input_references, output_compression, provider

Jakie limity obowiązują?

POST /v1/images/generations · gpt-image-2: n.minimum: 1

POST /v1/images/generations · gpt-image-2: prompt.maximum_length: 32000; n.minimum: 1; n.maximum: 10; output_compression.minimum: 0; output_compression.maximum: 100

POST /v1/images/generations · openai/gpt-image-2: n.minimum: 1; n.maximum: 10; output_compression.minimum: 0; output_compression.maximum: 100

Więcej szczegółów

Połącz Ailoot z Claude Code, OpenCode, Hermes albo własną aplikacją.

Firma i jej portfel projektów

Firma i jej portfel projektów: miliony klientów; miesięczna sprzedaż liczona w miliardach.

Kupuj tokeny z rabatem.

Rabat subskrypcji do regularnej pracy. Kody promocyjne — do 50% na tokeny.

Subskrypcja
Wybierz plan z rabatem do regularnych żądań.
Kod promocyjny do 50%
Wpisz kod przy zakupie. Cena zostanie przeliczona według aktualnej promocji.
Koszty w historii
Model, tokeny i kwota są zapisywane dla każdego żądania.

Wybierz subskrypcję · Sprawdź ceny modeli

Połącz API z produktem, który sprzedajesz.

SaaS, aplikacje i boty na warunkach oferty i umowy licencyjnej Ailoot. Do odsprzedaży poproś o licencję resellerską.

Aplikacja komercyjna
Wbuduj generowanie tekstu, obrazów, wideo i dźwięku w płatne funkcje usługi.
Licencja resellerska
Prześlij opis projektu i schemat dostępu. Poproś o pisemne warunki używania i odsprzedaży.
Dokumenty na stronie
Oferta, umowa licencyjna i polityka przetwarzania danych są dostępne przed połączeniem.

Poproś o licencję resellerską · Oferta i umowa licencyjna