Source: https://ailoot.ai/models/nb/openai-gpt-5-4-image-2/
Canonical: https://ailoot.ai/models/nb/openai-gpt-5-4-image-2/
Language: nb

# OpenAI: GPT-5.4 Image 2

[Markdown](https://ailoot.ai/models/nb/openai-gpt-5-4-image-2/index.md) · [JSON](https://ailoot.ai/models/nb/openai-gpt-5-4-image-2/facts.json)

## [OpenAI: GPT-5.4 Image 2](https://ailoot.ai/models/nb/openai-gpt-5-4-image-2/)

En arbeidsflyt som kombinerer GPT-5.4s tekstresonnering med bildegenerering og redigering fra GPT Image 2. Bruk et skriftlig oppgavegrunnlag og visuelle referanser til å utvikle en illustrasjon eller endring, og hold tekst- og bildekomponentenes roller atskilt.

- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `openai/gpt-5.4-image-2`](https://ailoot.ai/models/nb/openai-gpt-5-4-image-2/#method-0)
- [**Ailoot Ultra · Bilder** `POST /v1/images/generations` `openai/gpt-5.4-image-2`](https://ailoot.ai/models/nb/openai-gpt-5-4-image-2/#method-1)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `openai/gpt-5.4-image-2`](https://ailoot.ai/models/nb/openai-gpt-5-4-image-2/#method-2)

Om modellen

Denne beskrivelsen dekker modellens funksjoner. Tilgjengelige inndata, utdata og alternativer i Ailoot er oppført nedenfor for den valgte metoden.

GPT-5.4 Image 2 beskriver en arbeidsflyt som kombinerer OpenAIs tekstmodell GPT-5.4 med GPT Image 2 for bildegenerering og redigering. Komponentene har ulike roller: GPT-5.4 kan tolke et oppgavegrunnlag og utvikle de skriftlige instruksjonene, mens GPT Image 2 oppretter eller endrer et bilde. GPT-5.4 godtar tekst og bilder og produserer tekst; GPT Image 2 godtar tekst- og bildeinndata og produserer bilder.

For et nytt visuelt produkt beskriver du formålet, motivet, komposisjonen, stilen og detaljene som er viktige for resultatet. En illustrerende oppgave er å forberede en artikkelillustrasjon: definer ideen bildet skal formidle, ønsket utsnitt og plassen som trengs til den tilhørende sideteksten. Det skriftlige trinnet kan organisere kravene til et tydelig oppgavegrunnlag. Bildetrinnet bruker instruksjonen og eventuelle referanser til å skape det visuelle produktet.

For en redigering oppgir du kildebildet og skiller de ønskede endringene fra elementene som skal beholdes. GPT Image 2 behandler bildeinndata automatisk med høy detaljnøyaktighet og støtter redigering der detaljer er viktige, samt referansebaserte arbeidsflyter. Produsenten dokumenterer utfylling av bildeområder og bildearbeid basert på referanser. En maske kan styre området som skal redigeres, men maskeringen i GPT Image bygger på instruksjonen og følger kanskje ikke maskens form nøyaktig. Den dokumenterte maskearbeidsflyten krever at målbildet og masken samsvarer i format og dimensjoner, at masken har en alfakanal, og at filene er under 50 MB.

GPT Image 2 støtter kvalitetsvalgene low, medium og high samt automatisk kvalitetsvalg. Egendefinerte størrelser krever at begge sider er multipler av 16 piksler, at ingen side overstiger 3840 piksler, at sideforholdet ikke er mer ekstremt enn 3:1, og at totalstørrelsen er mellom 655360 og 8294400 piksler. Dokumenterte eksempler er 1024 × 1024, 1536 × 1024, 2048 × 2048 og 3840 × 2160. Velg dimensjonene ut fra bruksstedet fremfor å anta at alle bilder skal være kvadratiske. I produsentens dokumenterte utdataprofil for Image API er PNG standardformatet, med JPEG og WebP også tilgjengelig. JPEG og WebP støtter en komprimeringsinnstilling fra 0 til 100.

Tekstkomponenten har sin egen spesifikasjon. GPT-5.4s publiserte kontekstvindu er 1050000 tokener, maksimal utdatamengde er 128000 tokener, og kunnskapsgrensen er 31. august 2025. Valgene for resonneringsinnsats er none, low, medium, high og xhigh, med none som standard. Produsenten oppgir bildegenerering blant GPT-5.4s verktøy, mens Image API også tilbyr separate operasjoner for generering og redigering. Disse dokumenterte komponentrollene gjør ikke det kombinerte navnet til en ny selvstendig modell med én felles grense for tekst og bilder.

Bildeveiledningen beskriver begrensninger i presis tekstplassering, gjennomgående visuell konsistens og nøyaktig komposisjon. Forbered kort, tydelig angitt tekst når skrift er viktig, oppgi den relevante referansen for et tilbakevendende motiv, og angi utformingsbegrensningene eksplisitt. Gjennomgå det genererte eller redigerte bildet mot kravene. Et nyttig resultat kan inneholde det skriftlige oppgavegrunnlaget, bildet og en avgrenset liste over endringer for neste redigering, og knytte bildet til det opprinnelige redaksjonelle formålet eller produktformålet.

Praktisk oppgave

### Praktisk oppgave

Teknisk eksempel på engelsk

```
Revise an editorial illustration crop

Edit the supplied article illustration for a landscape header. Preserve the central paper boat's shape, folded edges and blue color. Extend the calm water naturally to the left and leave that side visually quiet for page text added later. Keep the existing light direction and add no words, logos, people or extra boats.
```

#### Forventet resultat

```
An edited landscape image with the original boat preserved and clear composition space on the left.
```

#### Kontroller resultatet

```
Compare boat details and light direction with the source, and inspect the added water for repeated or distorted elements.
```

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `openai/gpt-5.4-image-2`

[`openai/gpt-5.4-image-2`](https://ailoot.ai/models/nb/#m=openai%2Fgpt-5.4-image-2&route=Ultra&caller=openai%2Fgpt-5.4-image-2&fmt=chat)

OpenAI /`openai/gpt-5.4-image-2`

### Start

En arbeidsflyt som kombinerer GPT-5.4s tekstresonnering med bildegenerering og redigering fra GPT Image 2. Bruk et skriftlig oppgavegrunnlag og visuelle referanser til å utvikle en illustrasjon eller endring, og hold tekst- og bildekomponentenes roller atskilt.

Godkjente inndata

Tekst

Resultater

Tekst

### Tilgjengelig i Ailoot · inndata & metoder

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions`

Inndatatyper

`text`

Utdatatyper

`text`

Utdataformat

json eller SSE

| Felt | Type | Krav | Verdier & grenser | Standard |
| --- | --- | --- | --- | --- |
| Felt`model` | Type`string` | KravPåkrevd | Verdier & grenser openai/gpt-5.4-image-2 | Standard— |
| Felt`messages` | Type`message[]` | KravPåkrevd | Verdier & grenser Minste antall elementer: 1 | Standard— |
| Felt`messages[].role` | Type`string` | KravPåkrevd | Verdier & grenser Eksempler: system, user, assistant, tool, function Vilkår: Disse rollene representeres eksplisitt av kompatibilitetstyper i kildekoden; det eksakte rollesettet for modellen er fortsatt modellspesifikt. Avhenger av modellen | Standard— |
| Felt`messages[].content` | Type`string\|content_part[]\|null` | KravValgfritt | Verdier & grenser | Standard— |
| Felt`messages[].tool_calls` | Type`tool_call[]` | KravValgfritt | Verdier & grenser | Standard— |
| Felt`messages[].tool_call_id` | Type`string` | KravValgfritt | Verdier & grenser Gjelder når: role=tool; bruk faktisk returnert ID | Standard— |
| Felt`messages[].name` | Type`string` | KravValgfritt | Verdier & grenser | Standard— |
| Felt`messages[].reasoning_content` | Type`string` | KravValgfritt | Verdier & grenser Gjelder når: Send den faktisk returnerte resonneringen tilbake der denne modellen bruker den | Standard— |
| Felt`messages[].reasoning_details` | Type`object\|array` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`max_tokens` | Type`integer` | KravValgfritt | Verdier & grenser Minimum: 1 Avhenger av modellen | Standard— |
| Felt`max_completion_tokens` | Type`integer` | KravValgfritt | Verdier & grenser Minimum: 1 Avhenger av modellen | Standard— |
| Felt`stream` | Type`boolean` | KravValgfritt | Verdier & grenser | Standardfalse |
| Felt`stream_options.include_usage` | Type`boolean` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`temperature` | Type`number` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`top_p` | Type`number` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`stop` | Type`string\|string[]` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`tools` | Type`function_tool[]` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`tools[].type` | Type`string` | KravValgfritt | Verdier & grenser function Avhenger av modellen | Standard— |
| Felt`tools[].function.name` | Type`string` | KravPåkrevd | Verdier & grenser Gjelder når: funksjonsverktøy oppgitt | Standard— |
| Felt`tools[].function.description` | Type`string` | KravValgfritt | Verdier & grenser | Standard— |
| Felt`tools[].function.parameters` | Type`JSON_schema` | KravValgfritt | Verdier & grenser | Standard— |
| Felt`tool_choice` | Type`string\|object` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`parallel_tool_calls` | Type`boolean` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`response_format` | Type`object` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`reasoning_effort` | Type`string` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`reasoning` | Type`object` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`service_tier` | Type`string` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`instructions` | Type`string` | KravValgfritt | Verdier & grenser Kompatibilitetsfelt | Standard— |
| Felt`functions` | Type`function[]` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`function_call` | Type`string\|object` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`prompt_cache_options` | Type`object` | KravValgfritt | Verdier & grenser Avhenger av modellen | Standard— |
| Felt`modalities` | Type`string[]` | KravValgfritt | Verdier & grenser text | Standard— |
| Felt`provider` | Type`object` | KravValgfritt | Verdier & grenser Vilkår: provider.options avvises på denne Ultra-tekstruten | Standard— |
| Felt`cache_control.ttl` | Type`string` | KravValgfritt | Verdier & grenser Vilkår: 1h avvises på faktiske steder for mellomlagring av ledetekster | Standard— |

Kombinasjoner av inngående materialer

**Tekst** · UTF8-tekst

`messages[].content`

Metodeparametere og livssyklus

| Parameter | Avtale |
| --- | --- |
| Parameter`content_type` | Avtaleapplication/json |
| Parameter`required` | Avtalemodel, messages |
| Parameter`material_types` | Avtaletext |
| Parameter`messages` | Avtalemeldingstabell med role/content-struktur |
| Parameter`file_material` | Avtalefaktisk UTF-8-dokument satt inn som bokstavelig tekst; ingen fil-ID utledes |
| Parameter`optional_controls` | Avtalestream, temperature, top\_p, stop, max\_tokens, max\_completion\_tokens, reasoning, response\_format, tools, tool\_choice |
| Parameter`control_scope` | Avtalemodellspesifikt; brukerens funksjonsverktøy skiller seg fra driftede verktøy |
| Parameter`output_modalities` | Avtaletext |
| Parameter`hosted_operations` | Avtalefalse |
| Parameter`multimodal_input_binding` | Avtalenull |

Livssyklus: `synchronous_or_streamed`

Send eksakt modell-ID sammen med messages.

Kontekstlengde er ikke en outputgrense.

En tekstfil kan levere bokstavelig tekst; bilde-, lyd- og filobjektinput trenger eksakt binding.

### Priser

Tariffopplysninger legger ikke til forespørselsvalg. Støttede parametere står ved den valgte metoden.

Hurtigmodus

Standardpris Når hurtigmodus er valgt

Flex-modus

Standardpris Når flex-modus er valgt

Maksimal resonneringsinnsats

Standardpris Når justeringen «default» brukes for maksimal resonneringsinnsats

Resonneringsinnsats · high

Standardpris Når resonneringsinnsatsen er satt til high

Resonneringsinnsats · low

Standardpris Når resonneringsinnsatsen er satt til low

Resonneringsinnsats · medium

Standardpris Når resonneringsinnsatsen er satt til medium

Resonneringsinnsats · none

Standardpris Når resonneringsinnsatsen er satt til none

Resonneringsinnsats · xhigh

Standardpris Når resonneringsinnsatsen er satt til xhigh

#### Ailoot-satser

#### Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

| Konfigurasjon | Prisplan | Konteksttokener, mer enn | Konteksttokener, opptil og med | Kostnad |
| --- | --- | --- | --- | --- |
| KonfigurasjonGrunnpriser for tokener | PrisplanGrunnsats | Konteksttokener, mer enn— | Konteksttokener, opptil og medIngen øvre grense | Kostnad Inndata · Inngående tokener **$0.016** / 1K tokener Utdata · Utgående tokener **$0.03** / 1K tokener Inndata · Lesing fra hurtigbuffer **$0.004** / 1K tokener Inndata · Skriving til hurtigbuffer **—** / 1K tokener Inndata · Skriving til hurtigbuffer, 1 time **—** / 1K tokener Utdata · Utdatatokener for bilder **$0.06** / 1K bildetokener |
| KonfigurasjonNivå 1 for forespørselslengde | Prisplan— | Konteksttokener, mer enn0 | Konteksttokener, opptil og medIngen øvre grense | Kostnad Inndata · Inngående tokener **$0.016** / 1K tokener Utdata · Utgående tokener **$0.03** / 1K tokener Inndata · Lesing fra hurtigbuffer **$0.004** / 1K tokener Inndata · Skriving til hurtigbuffer **—** / 1K tokener Inndata · Skriving til hurtigbuffer, 1 time **—** / 1K tokener |

#### Detaljer om referansetariffen

Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.

OpenAI: GPT-5.4 Image 2

#### Priser etter konfigurasjon

| Konfigurasjon | Faktureringsvilkår | Kostnad |
| --- | --- | --- |
| KonfigurasjonOpenAI: GPT-5.4 Image 2 · Standardkonfigurasjon | FaktureringsvilkårStandardkonfigurasjon | Kostnad Inndata · Inngående tokener **0,016 USD** / 1K tokener Utdata · Utgående tokener **0,03 USD** / 1K tokener Utdata · Utdatabilde **0,06 USD** / 1K tokener Utdata · Nettsøk **0,02 USD** per søk Inndata · Lesing fra hurtigbuffer **0,004 USD** / 1K tokener |

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. [Slik fungerer reservasjon og oppgjør →](https://ailoot.ai/docs/nb/billing/reserve/)

### Eksempelforespørsler

#### Ailoot Ultra · OpenAI Chat

curlPython SDKPython-strømming

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "openai/gpt-5.4-image-2", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

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/chat/completions \
  -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 json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='openai/gpt-5.4-image-2',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='openai/gpt-5.4-image-2',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Motta og lagre resultater

#### Ailoot Ultra · OpenAI Chat

json eller SSE

##### Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold hvert svaralternativ med innhold, verktøykall og resonnering. Sett sammen endringer i SSE etter svaralternativets/verktøyets indeks, og behold endelig avslutningsgrunn og bruksdata.

##### Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter

| Felt | Type |
| --- | --- |
| Felt`choices[].index` | Typeinteger |
| Felt`choices[].message.content` | Typestring\|null |
| Felt`choices[].message.tool_calls` | Typetool\_call\[\] |
| Felt`choices[].message.reasoning_content` | Typestring |
| Felt`choices[].message.reasoning_details` | Typeobject\|array |
| Felt`choices[].finish_reason` | Typestring\|null |
| Felt`usage` | Typeobject |

Feil og neste trinn

| Svar | Vilkår | Neste trinn |
| --- | --- | --- |
| Svar400 · `invalid_request_error` | VilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdi | Neste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel. |

### Aliaser

#### Modellaliaser

**Ailoot Ultra** [`openai/gpt-5.4-image-2`](https://ailoot.ai/models/nb/#m=openai%2Fgpt-5.4-image-2&route=Ultra&caller=openai%2Fgpt-5.4-image-2&fmt=chat)

#### Aliaser for metodestier

`/v1/images`

#### Tilknyttede anroper-ID-er

[`openai/gpt-5.4-image-2`](https://ailoot.ai/models/nb/#m=openai%2Fgpt-5.4-image-2&route=Ultra&caller=openai%2Fgpt-5.4-image-2&fmt=chat)

**Ailoot Ultra · Bilder** `POST /v1/images/generations` `openai/gpt-5.4-image-2`

[`openai/gpt-5.4-image-2`](https://ailoot.ai/models/nb/#m=openai%2Fgpt-5.4-image-2&route=Ultra&caller=openai%2Fgpt-5.4-image-2&fmt=images)

OpenAI /`openai/gpt-5.4-image-2`

### Start

En arbeidsflyt som kombinerer GPT-5.4s tekstresonnering med bildegenerering og redigering fra GPT Image 2. Bruk et skriftlig oppgavegrunnlag og visuelle referanser til å utvikle en illustrasjon eller endring, og hold tekst- og bildekomponentenes roller atskilt.

Godkjente inndata

Tekst · Bilder

Resultater

Bilder

### Tilgjengelig i Ailoot · inndata & metoder

**Ailoot Ultra · Bilder** `POST /v1/images/generations`

Inndatatyper

`text`, `image`

Utdatatyper

`image`

| Felt | Type | Krav | Verdier & grenser | Standard |
| --- | --- | --- | --- | --- |
| Felt`model` | Type`string` | KravPåkrevd | Verdier & grenser openai/gpt-5.4-image-2 | Standard— |
| Felt`prompt` | Type`string` | KravPåkrevd | Verdier & grenser Minste lengde: 1 | Standard— |
| Felt`aspect_ratio` | Type`string` | KravValgfritt | Verdier & grenser 1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16, 21:9, auto | Standard— |
| Felt`quality` | Type`string` | KravValgfritt | Verdier & grenser auto, low, medium, high | Standard— |
| Felt`background` | Type`string` | KravValgfritt | Verdier & grenser auto, opaque | Standard— |
| Felt`n` | Type`integer` | KravValgfritt | Verdier & grenser Minimum: 1 Maksimum: 10 | Standard— |
| Felt`input_references` | Type`array` | KravValgfritt | Verdier & grenser Minste antall elementer: 0 Maksimalt antall elementer: 16 | Standard— |
| Felt`output_compression` | Type`integer` | KravValgfritt | Verdier & grenser Minimum: 0 Maksimum: 100 | Standard— |
| Felt`provider` | Type`object` | KravValgfritt | Verdier & grenser | Standard— |

Metodeparametere og livssyklus

| Parameter | Avtale |
| --- | --- |
| Parameter`content_type` | Avtaleapplication/json |
| Parameter`required` | Avtalemodel, prompt |
| Parameter`material_types` | Avtaletext, image |

Livssyklus: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · faktisk returnert task\_id eller oppføring i mediebiblioteket

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

`GET /v1/media/assets`

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

### Priser

##### Slik beregnes det endelige beløpet

De viste satsene anslår kostnaden før generering. Det endelige beløpet beregnes ut fra kostnaden som er registrert for den opprinnelige genereringen. Målt varighet på utdataene og anslåtte mengder er ikke den endelige fakturerbare mengden.

Tariffopplysninger legger ikke til forespørselsvalg. Støttede parametere står ved den valgte metoden.

Hurtigmodus

Ikke angitt Når hurtigmodus er valgt

Flex-modus

Ikke angitt Når flex-modus er valgt

Maksimal resonneringsinnsats

Ikke angitt Når justeringen «default» brukes for maksimal resonneringsinnsats

#### Estimerte satser for sammenligning

#### Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

| Konfigurasjon | Prisplan | Forventet mengde | Kostnad |
| --- | --- | --- | --- |
| KonfigurasjonGrunnpriser for tokener | PrisplanGrunnsats | Forventet mengde— | Kostnad Inndata · Inngående tokener · Estimat kun for sammenligning **—** / 1K tokener Utdata · Utgående tokener · Estimat kun for sammenligning **—** / 1K tokener Inndata · Lesing fra hurtigbuffer · Estimat kun for sammenligning **—** / 1K tokener Inndata · Skriving til hurtigbuffer · Estimat kun for sammenligning **—** / 1K tokener Inndata · Skriving til hurtigbuffer, 1 time · Estimat kun for sammenligning **—** / 1K tokener |
| KonfigurasjonAnslått genereringskostnad | Prisplan— | Forventet mengdeestimat for én generering | Kostnad Utdata · Anslått genereringskostnad · Estimat kun for sammenligning **$0.24576** estimat før generering Dette anslaget er verken en tilleggsavgift eller en fast sats for den fullførte genereringen. |

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. [Slik fungerer reservasjon og oppgjør →](https://ailoot.ai/docs/nb/billing/reserve/)

### Eksempelforespørsler

#### Ailoot Ultra · Bilder

curl

```bash
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-5.4-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
```

### Motta og lagre resultater

#### Ailoot Ultra · Bilder

Last ned hvert returnerte bilde eller lagre Base64-innholdet

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

Andre innholdslesinger

Les eksisterende ressurser som tilhører deg

```bash
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.
```

##### Behold alle ferdige resultater

Lagre hvert ferdige bilde; hent hver returnerte URL eller dekod Base64-innholdet.

Bevar hele svaret og svarhodene, alle faktiske utdata, de opprinnelige returnerte identifikatorene og alle bruksfeltene. Hent den opprinnelige operasjonen igjen uten å sende opprettelsesforespørselen på nytt.

##### Hvis det opprinnelige svaret må kontrolleres

Bevar returnert X-Client-Request-ID for avstemming. Les bare faktisk returnerte task\_id/asset\_id-verdier eller egne oppføringer i mediebiblioteket; bygg aldri en oppgave-URL fra operasjons-ID-en, og send aldri opprettelsesforespørselen på nytt.

Svarfelter

| Felt | Type |
| --- | --- |
| Felt`created` | Type |
| Felt`data[].url` | Type |
| Felt`data[].b64_json` | Type |
| Felt`usage` | Type |

### Aliaser

#### Modellaliaser

**Ailoot Ultra** [`openai/gpt-5.4-image-2`](https://ailoot.ai/models/nb/#m=openai%2Fgpt-5.4-image-2&route=Ultra&caller=openai%2Fgpt-5.4-image-2&fmt=images)

#### Aliaser for metodestier

`/v1/images`

#### Tilknyttede anroper-ID-er

[`openai/gpt-5.4-image-2`](https://ailoot.ai/models/nb/#m=openai%2Fgpt-5.4-image-2&route=Ultra&caller=openai%2Fgpt-5.4-image-2&fmt=images)

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `openai/gpt-5.4-image-2`

[`openai/gpt-5.4-image-2`](https://ailoot.ai/models/nb/#m=openai%2Fgpt-5.4-image-2&route=Ultra&caller=openai%2Fgpt-5.4-image-2&fmt=messages)

OpenAI /`openai/gpt-5.4-image-2`

### Start

En arbeidsflyt som kombinerer GPT-5.4s tekstresonnering med bildegenerering og redigering fra GPT Image 2. Bruk et skriftlig oppgavegrunnlag og visuelle referanser til å utvikle en illustrasjon eller endring, og hold tekst- og bildekomponentenes roller atskilt.

Godkjente inndata

Tekst

Resultater

json · sse

### Tilgjengelig i Ailoot · inndata & metoder

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages`

Inndatatyper

`text`

Utdatatyper

`json`, `sse`

Utdataformat

JSON eller SSE

| Felt | Type | Krav | Verdier & grenser | Standard |
| --- | --- | --- | --- | --- |
| Felt`model` | Type`string` | KravPåkrevd | Verdier & grenser openai/gpt-5.4-image-2 | Standard— |
| Felt`messages` | Type`message[]` | KravPåkrevd | Verdier & grenser | Standard— |
| Felt`messages[].role` | Type`string` | KravPåkrevd | Verdier & grenser user, assistant | Standard— |
| Felt`messages[].content` | Type`string` | KravPåkrevd | Verdier & grenser | Standard— |
| Felt`max_tokens` | Type`integer` | KravPåkrevd | Verdier & grenser | Standard— |
| Felt`stream` | Type`boolean` | KravValgfritt | Verdier & grenser | Standardfalse |

Kombinasjoner av inngående materialer

**Tekst** · UTF-8-tekst

`messages[].content-streng`

Metodeparametere og livssyklus

| Parameter | Avtale |
| --- | --- |
| Parameter`content_type` | Avtaleapplication/json |
| Parameter`required` | Avtalemodel, messages, max\_tokens |
| Parameter`optional_controls` | Avtalestream |
| Parameter`material_types` | Avtaletext |
| Parameter`text_file_material` | AvtaleLes det faktiske UTF-8-dokumentet og legg teksten i den angitte input- eller meldingsinnholdsstrengen. |

Livssyklus: `synchronous_or_streamed`

### Priser

Tariffopplysninger legger ikke til forespørselsvalg. Støttede parametere står ved den valgte metoden.

Hurtigmodus

Standardpris Når hurtigmodus er valgt

Flex-modus

Standardpris Når flex-modus er valgt

Maksimal resonneringsinnsats

Standardpris Når justeringen «default» brukes for maksimal resonneringsinnsats

Resonneringsinnsats · high

Standardpris Når resonneringsinnsatsen er satt til high

Resonneringsinnsats · low

Standardpris Når resonneringsinnsatsen er satt til low

Resonneringsinnsats · medium

Standardpris Når resonneringsinnsatsen er satt til medium

Resonneringsinnsats · none

Standardpris Når resonneringsinnsatsen er satt til none

Resonneringsinnsats · xhigh

Standardpris Når resonneringsinnsatsen er satt til xhigh

#### Ailoot-satser

#### Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

| Konfigurasjon | Prisplan | Konteksttokener, mer enn | Konteksttokener, opptil og med | Kostnad |
| --- | --- | --- | --- | --- |
| KonfigurasjonGrunnpriser for tokener | PrisplanGrunnsats | Konteksttokener, mer enn— | Konteksttokener, opptil og medIngen øvre grense | Kostnad Inndata · Inngående tokener **$0.016** / 1K tokener Utdata · Utgående tokener **$0.03** / 1K tokener Inndata · Lesing fra hurtigbuffer **$0.004** / 1K tokener Inndata · Skriving til hurtigbuffer **—** / 1K tokener Inndata · Skriving til hurtigbuffer, 1 time **—** / 1K tokener Utdata · Utdatatokener for bilder **$0.06** / 1K bildetokener |
| KonfigurasjonNivå 1 for forespørselslengde | Prisplan— | Konteksttokener, mer enn0 | Konteksttokener, opptil og medIngen øvre grense | Kostnad Inndata · Inngående tokener **$0.016** / 1K tokener Utdata · Utgående tokener **$0.03** / 1K tokener Inndata · Lesing fra hurtigbuffer **$0.004** / 1K tokener Inndata · Skriving til hurtigbuffer **—** / 1K tokener Inndata · Skriving til hurtigbuffer, 1 time **—** / 1K tokener |

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. [Slik fungerer reservasjon og oppgjør →](https://ailoot.ai/docs/nb/billing/reserve/)

### Eksempelforespørsler

#### Ailoot Ultra · Anthropic Messages

Komplett, minimal JSON-kroppcurl · bruk UTF-8-dokumentet dittPython · lagre hele resultatet

```json
{
  "model": "openai/gpt-5.4-image-2",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'openai/gpt-5.4-image-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
```

```python
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'openai/gpt-5.4-image-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
```

### Motta og lagre resultater

#### Ailoot Ultra · Anthropic Messages

JSON eller SSE

##### Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold alle innholdsblokker, resonneringssignaturer og faktiske ID-er for verktøybruk. Sett sammen alle SSE-blokkendringer; den første tekstblokken er ikke hele resultatet.

##### Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter

| Felt | Type |
| --- | --- |
| Felt`id` | Typestring |
| Felt`model` | Typestring |
| Felt`content[]` | Typetext\|thinking\|tool\_use\|other content block |
| Felt`stop_reason` | Typestring\|null |
| Felt`usage` | Typeobject |

Feil og neste trinn

| Svar | Vilkår | Neste trinn |
| --- | --- | --- |
| Svar400 · `invalid_request_error` | VilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdi | Neste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel. |

### Aliaser

#### Modellaliaser

**Ailoot Ultra** [`openai/gpt-5.4-image-2`](https://ailoot.ai/models/nb/#m=openai%2Fgpt-5.4-image-2&route=Ultra&caller=openai%2Fgpt-5.4-image-2&fmt=messages)

#### Aliaser for metodestier

`/v1/images`

#### Tilknyttede anroper-ID-er

[`openai/gpt-5.4-image-2`](https://ailoot.ai/models/nb/#m=openai%2Fgpt-5.4-image-2&route=Ultra&caller=openai%2Fgpt-5.4-image-2&fmt=messages)

FAQ · OpenAI: GPT-5.4 Image 2

Hvilke inndata og resultater er tilgjengelige?

`POST /v1/chat/completions` · `openai/gpt-5.4-image-2`: `text` → `text` `POST /v1/images/generations` · `openai/gpt-5.4-image-2`: `text`, `image` → `image` `POST /v1/messages` · `openai/gpt-5.4-image-2`: `text` → `json`, `sse`

Hvilke felt bruker forespørselen?

`POST /v1/chat/completions` · `openai/gpt-5.4-image-2`: `model`, `messages`, `stream`, `modalities`, `provider` `POST /v1/images/generations` · `openai/gpt-5.4-image-2`: `model`, `prompt`, `aspect_ratio`, `quality`, `background`, `n`, `input_references`, `output_compression`, `provider` `POST /v1/messages` · `openai/gpt-5.4-image-2`: `model`, `messages`, `max_tokens`, `stream`

Hvilke grenser gjelder?

`POST /v1/chat/completions` · `openai/gpt-5.4-image-2`: `messages.min_items`: `1` `POST /v1/images/generations` · `openai/gpt-5.4-image-2`: `n.minimum`: `1`; `n.maximum`: `10`; `output_compression.minimum`: `0`; `output_compression.maximum`: `100`

Koble Ailoot til Claude Code, OpenCode, Hermes eller egen applikasjon.

## Selskapet og dets prosjektportefølje

Selskapet og dets prosjektportefølje: millioner av kunder; månedlig salg for milliarder.

## Kjøp tokener med rabatt.

Abonnementsrabatt for jevnlig bruk. Kampanjekoder gir opptil 50% på tokenkjøp.

Abonnement

Velg et rabattabonnement for faste forespørsler.

Kampanjekode opptil 50%

Oppgi kode ved kjøp. Prisen beregnes på nytt etter gjeldende kampanje.

Kostnader i historikken

Modell, tokener og beløp lagres for hver forespørsel.

[Velg abonnement](https://ailoot.ai/docs/nb/billing/subscriptions/) · [Se modellpriser](https://ailoot.ai/models/nb/)

## Koble API-et til produktet du selger.

SaaS, apper og boter etter Ailoots offentlige tilbud og lisensavtale. Be om forhandlerlisens for videresalg.

Kommersiell applikasjon

Bygg tekst-, bilde-, video- og lydgenerering inn i betalte funksjoner i tjenesten.

Forhandlerlisens

Send prosjektbeskrivelse og tilgangsopplegg. Be om skriftlige vilkår for bruk og videresalg.

Dokumenter på nettstedet

Offentlig tilbud, lisensavtale og retningslinjer for databehandling er tilgjengelige før tilkobling.

[Be om forhandlerlisens](mailto:support@ailoot.ai) · [Offentlig tilbud og lisensavtale](https://ailoot.ai/legal/offer?lang=nb)

## Ailoot · Selskapet og dets prosjektportefølje





Ailoot bygger på etablert driftserfaring, en stor kundebase, stabil tjeneste og løpende KPI-kontroll.





Selskapet og dets prosjektportefølje: millioner av kunder; månedlig salg for milliarder.





Ailoot bruker denne driftserfaringen til API-tilgang til AI-funksjoner i kundenes produkter, agenter, applikasjoner og automatiseringer.
