Spring til indhold
21/30Kapitel 21 af 30

Multimodal prissætning: Hvad billeder, lyd og video egentlig fakturerer

Tre modeller får de samme 500 fotos og afviger med faktor 5,5 — og den billigste skifter, når nogen ændrer størrelsen.

På denne side

Her er én opgave prissat på tre måder: beskriv fem hundrede produktfotografier, én kort billedtekst hver. Samme fotografier, samme instruktion, samme svarlængde. Det eneste, der ændrer sig, er hvilken model der læser dem.

fotografigpt-5.6-lunagemini-3.1-flash-liteclaude-haiku-4.5
800 × 600$0.0848$0.1638$0.4380
1024 × 768$0.1200$0.1638$0.6370
1280 × 960$0.1718$0.1638$0.9010
1600 × 1200$0.2558$0.1638$0.9010
4000 × 3000$0.3220$0.1638$0.9010

Tre ting i den tabel er værd at stoppe op ved.

Den billigste model ændrer sig mellem tredje og fjerde række, på samme opgave, fordi nogen ændrede størrelsen på fotografierne. Bed om et afsnit i stedet for en billedtekst, og skæringspunktet flytter sig igen: ved 1280 × 960 er vinderen Gemini for en billedtekst på fyrre tokens og OpenAI for et afsnit på fire hundrede tokens.

Gemini-kolonnen flytter sig slet ikke, i nogen række: et fotografi på 4000 \u00d7 3000 koster den præcis det samme som et på 640 \u00d7 480. Et fotografi på 4000 × 3000 koster den præcis det samme som et fotografi på 640 × 480. Det er ikke et loft. Det er en konsekvens af, hvordan den tæller, og det betyder, at den mest almindelige omkostningsoptimering i denne branche — nedskalér før du uploader — betaler sig sådan her:

image tokens, 4000 × 3000 → 800 × 600pris for kørslensparet
gpt-5.6-luna2,942 → 570$0.3220 → $0.084873.7 %
claude-haiku-4.51,564 → 638$0.9010 → $0.438051.4 %
gemini-3.1-flash-lite1,032 → 1,032$0.1638 → $0.16380.0 %

Ingen af de tal er en pris, leverandøren offentliggør. Alle tre måtte beregnes, ud fra tre forskellige regler, fordi et fotografi ikke er en fakturerbar enhed nogen steder: det konverteres først til tokens, efter en aritmetik skrevet ned tre inkompatible steder.

Kapitel 16 byggede regningen for tekst og stoppede der, hvor tekst stopper. Dette kapitel er resten af fakturaen: billeder, tale, transskription, video og rå compute, som tilsammen faktureres i otte forskellige enheder, og metoden til at sammenligne ting, der ikke sælges efter samme mål.

Vis detaljer

Hvad dette kapitel kræver fra de tidligere.

  • Kapitel 7 byggede tokenizer og enheden. Alt her er et forsøg på at gøre noget, der ikke er tekst, til den enhed.
  • Kapitel 8 fastslog, hvad en model forbruger: ikke symboler, men vektorer i et embedding-rum. Derfor kan et billede overhovedet prissættes i tokens.
  • Kapitel 16 byggede computeCost, dens prisniveauer og dens fem token-spande. Dette kapitel udvider den funktion i stedet for at erstatte den.
  • Kapitel 11 introducerede LoRA som en fine-tuning-teknik, og Kapitel 20 prissatte den som en budgetbeslutning. Her dukker den op på en model, der ikke er en sprogmodel.

Ingen tensorer, efter reglen fra Kapitel 14: dette er tariffer, konverteringer og bogføring, så det er TypeScript.

En transformer tager en sekvens af vektorer. Den har ingen holdning til, hvor de kom fra. Kapitel 8 fodrede den med embeddings slået op fra et token-id; intet i arkitekturen kræver opslaget.

Altså: skær billedet i faste kvadrater, flad hvert kvadrat ud til en liste af tal, og skub hver liste gennem ét indlært lineært lag for at få en vektor med modellens bredde. En 32 × 32 patch af farvepixels er 32×32×3=307232 \times 32 \times 3 = 3072 tal; projektionen ERd×3072E \in \mathbb{R}^{d \times 3072} gør den til én dd-dimensionel vektor, præcis den form et tekst-token ankommer i. Det er det hele, og det er artiklen, hvis titel siger det: et billede er 16 × 16 ord værd.1 Tilføj en positionskodning, så modellen ved, hvilket kvadrat der lå hvor, flet resultaterne ind mellem tekst-embeddings, og den sekvens, modellen læser, er delvist billede og delvist sætning.

Tre artikler gjorde det til et produkt. CLIP trænede en billed-encoder og en tekst-encoder til at blive enige, på fire hundrede millioner scrape-de par, og dér holdt idéen om, at pixels og ord kan dele et rum, op med at være en hypotese.2 Flamingo boltede en frossen vision-encoder fast på en frossen sprogmodel med nogle få trænede bro-lag.3 LLaVA viste, at broen kunne være en enkelt lineær projektion, og at instruction-following kunne læres med genererede data, hvilket er grunden til, at alle åbne vision-language-modeller siden ligner hinanden nogenlunde.4

Konsekvensen for din faktura er øjeblikkelig og uglamourøs: patches er positioner i sekvensen, så de er input tokens, så du betaler for dem til input-taksten. Hvor mange er aritmetik, og hver udbyder gør det forskelligt.

Tre regler, alle offentliggjort, ingen ens

Link til afsnittet: Tre regler, alle offentliggjort, ingen ens

Hver regel nedenfor er implementeret fra udbyderens egen dokumentation og tjekket mod de gennemregnede eksempler i den samme dokumentation.

OpenAI dækker billedet med 32 × 32 patches og ganger antallet med en faktor per model. Hvis patch-antallet overstiger budgettet for den model og det detaljeniveau, skaleres billedet ned, indtil det passer:

patches=w32×h32,shrink=322budgetwh\text{patches} = \left\lceil \frac{w}{32} \right\rceil \times \left\lceil \frac{h}{32} \right\rceil, \qquad \text{shrink} = \sqrt{\frac{32^2 \cdot \text{budget}}{w \cdot h}}

Anthropic dækker det med 28 × 28 patches, ét visuelt token hver, og sætter loft på både den lange kant og token-antallet — 1.568 pixels og 1.568 tokens på standard-tier-modeller, 2.576 og 4.784 på high-resolution-tier. Overdimensionerede billeder skaleres til den største størrelse, der passer til begge.5

Google tæller slet ikke pixels. Et billede med begge sider på eller under 384 pixels koster fladt 258 tokens. Alt større skæres i tiles på 258 tokens hver, og tile-gitteret kommer fra en crop-enhed på min(w,h)/1.5\lfloor \min(w,h) / 1.5 \rfloor.6

imagetokens.tsTS
export function openaiImageTokens(
  w: number, h: number,
  { maxDim, patchBudget, multiplier }: { maxDim: number; patchBudget: number; multiplier: number },
) {
  const fit = Math.min(1, maxDim / Math.max(w, h));      // never enlarges
  w = Math.floor(w * fit); h = Math.floor(h * fit);
  let patches = Math.ceil(w / 32) * Math.ceil(h / 32);   
  if (patches > patchBudget) {
    const s = Math.sqrt((32 * 32 * patchBudget) / (w * h));
    const adj = s * Math.min(
      Math.floor((w * s) / 32) / ((w * s) / 32),
      Math.floor((h * s) / 32) / ((h * s) / 32));
    patches = Math.ceil(Math.floor(w * adj) / 32) * Math.ceil(Math.floor(h * adj) / 32);
  }
  return Math.ceil(patches * multiplier);                
}

export function anthropicVisualTokens(
  w: number, h: number,
  { maxLongEdge, maxTokens }: { maxLongEdge: number; maxTokens: number },
) {
  const tok = (a: number, b: number) => Math.ceil(a / 28) * Math.ceil(b / 28);
  const long = Math.max(w, h), short = Math.min(w, h);
  for (let L = Math.min(long, maxLongEdge); L >= 1; L--) {     
    const t = tok(L, Math.round((short * L) / long));
    if (t <= maxTokens) return t;                              
  }
  return 0;
}

export function geminiImageTokens(w: number, h: number) {
  if (w <= 384 && h <= 384) return 258;
  const crop = Math.floor(Math.min(w, h) / 1.5);               
  return Math.ceil(w / crop) * Math.ceil(h / crop) * 258;      
}

Kør hver af dem mod de tal, dens egen leverandør trykker:

three implementations against three documentationsTEXT
OpenAI, gpt-5.4 at detail:high (2048 px, 2,500 patches, 1.2x)
  1024x1024 -> 1024 patches -> 1229 tokens   doc says 1229   MATCH
  2048x2048 -> 2500 patches -> 3000 tokens   doc says 3000   MATCH

Anthropic, the published table (one tier per row shown)
  200x200    std   64 @ 200x200     doc   64, not resized    OK
  1000x1000  std 1296 @ 1000x1000   doc 1296, not resized    OK
  1092x1092  std 1521 @ 1092x1092   doc 1521, not resized    OK
  1920x1080  std 1560 @ 1456x819    doc 1560, 1456x819       OK
  2000x1500  std 1564 @ 1269x952    doc 1564, 1269x952       OK
  3840x2160  hi  4784 @ 2576x1449   doc 4784, 2576x1449      OK

Google, the worked example
  960x540 -> crop 360 -> 3 x 2 = 6 tiles     doc says 6      MATCH

Ni overensstemmelser bliver printet; den fulde kørsel tjekker femten, eftersom Anthropics tabel giver begge tiers for alle seks størrelser. Reglerne er nu dine at køre på et hvilket som helst fotografi, du har, hvilket er pointen: det er de eneste tre funktioner i dette kapitel, du ikke kan få fra en prisside.

Send det samme 4:3-fotografi gennem alle tre ved seks størrelser:

størrelseOpenAI, highAnthropic, standardAnthropic, high-resGemini
384 × 288130154154258
640 × 4803604144141,032
800 × 6005706386381,032
1600 × 12002,2801,5642,4941,032
3200 × 24002,9421,5644,7401,032
4000 × 30002,9421,5644,7401,032

Læs den sidste kolonne nedad. Når billedet først er over 384 pixels, ændrer tallet sig aldrig igen, og det er ikke et tilfælde eller et loft. Sæt crop-enheden tilbage i tile-formlen, for et billede der er mindst lige så bredt, som det er højt:

tiles=wh/1.5×hh/1.51.5wh×2\text{tiles} = \left\lceil \frac{w}{\lfloor h/1.5 \rfloor} \right\rceil \times \left\lceil \frac{h}{\lfloor h/1.5 \rfloor} \right\rceil \approx \left\lceil \frac{1.5\,w}{h} \right\rceil \times 2

Størrelsen går ud. Googles image tokens afhænger af billedformatet og intet andet. Et 4:3-fotografi er fire tiles, uanset om det er en thumbnail eller en plakat. Den ene algebraiske kendsgerning er hele forklaringen på nullet i besparelsestabellen ovenfor, og ingen prisside nogen steder siger det.

De to andre kolonner rammer i stedet et loft, ved forskellige højder og af forskellige grunde — Anthropic ved et deklareret token-loft, OpenAI ved et patch-budget efter en pixelgrænse — og derfor krydser de tre kurver hinanden ved forskellige størrelser.

Knæk det nu. Den oplagte måde at bruge mindre på en vision-model er at bede om mindre detalje, så send detail: "low":

gpt-5.4, the same photograph, two detail levelsTEXT
1600x1200   low = 2280   high = 2280   ratio 1.00
3200x2400   low = 3687   high = 2942   ratio 1.25

At bede om mindre detalje kostede 25 % mere. Det er ikke en fejl, og OpenAI siger det selv i én linje i størrelsestabellen: på den modelfamilie bruger low en 2048-pixelgrænse med et 6.144-patch-budget, mens high bruger samme pixelgrænse med et 2.500-patch-budget, "so it can use more tokens than high".7 Ordet low navngiver en fidelity-indstilling, ikke en pris: på to af de fem dokumenterede modelfamilier køber det slet ingen besparelse, og på en af de to koster det mere.

Alt hidtil har været en model, der læser et billede. At lave ét kører på en mekanisme uden tokens overhovedet, og det er grunden til, at det sælges per billede i stedet for per ord.

At lave et billede: en pris per billede er en pris per token

Link til afsnittet: At lave et billede: en pris per billede er en pris per token

Leverandører offentliggør billedgenerering som en pris per billede. Det er det ikke. GPT Image-modeller udsender specialiserede image tokens, hvis antal afhænger af den ønskede størrelse og kvalitet; gang de offentliggjorte antal med GPT Image 1's offentliggjorte image output-rate på $40 per million og sammenlign med priserne per billede på samme side:

kvalitet1024 × 10241024 × 15361536 × 1024
low272 tok → $0.0109 ($0.011)408 tok → $0.0163 ($0.016)400 tok → $0.0160 ($0.016)
medium1,056 tok → $0.0422 ($0.042)1,584 tok → $0.0634 ($0.063)1,568 tok → $0.0627 ($0.063)
high4,160 tok → $0.1664 ($0.167)6,240 tok → $0.2496 ($0.25)6,208 tok → $0.2483 ($0.25)

Ni afledte tal mod ni offentliggjorte, hvert par enige inden for $0.002.11 Google er endnu mere eksplicit og laver konverteringen for dig på selve prissiden: image output til $60 per million tokens, "output images at 1K (1024x1024px) consume 1120 tokens and are equivalent to $0.067 per image".12

Så en pris per billede er en pris per token med antallet foldet ind. Det er fint, og det skjuler noget. Tag den nuværende generations tabel og divider baglæns:

gpt-image-2, published price -> implied output tokens at $30/MTEXT
quality   1024x1024            1024x1536
low       $0.006 -> 200 tok    $0.005 -> 167 tok
medium    $0.053 -> 1767 tok   $0.041 -> 1367 tok
high      $0.211 -> 7033 tok   $0.165 -> 5500 tok

Det større billede er det billigere ved hver kvalitet. Et 1024 × 1536 canvas har 50 % flere pixels end et 1024 × 1024 og koster 23 % færre tokens ved medium. OpenAI markerer det i en sætning, du ville springe over — "a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting" — og på den forrige modelgeneration gik det den anden vej, hvor portrait kostede 50 % mere end square.11 Hver default på 1024x1024 skrevet før den ændring er nu den dyre mulighed.

Bed tre produkter om at sige de samme 519 tegn — cirka 38 sekunders lyd — og du får tre enhedssystemer fra to leverandører:

modelenhedpris
tts-1per tegn$15.00 per million tegn → $0.007785
tts-1-hdper tegn$30.00 per million tegn → $0.015570
gemini-3.1-flash-ttsper audio token, 25 per sekund$20.00 per million → $0.019319

Den samme leverandør sælger begge enheder: OpenAIs tts-1 prissættes per million tegn, mens gpt-4o-mini-tts prissættes per million tokens, $0.60 ind og $12.00 ud.13 Så "billigste text-to-speech" er ikke et spørgsmål med et svar, før du siger, hvad du får sagt.

Og de to enheder er blinde for modsatte ting. En pris per tegn kan ikke se varighed: vælg en langsom, eftertænksom stemme, eller tilføj pauser, og regningen flytter sig ikke, mens lyden bliver længere. En pris per sekund kan ikke se indhold: tredive sekunder koster det samme, uanset om det er et tæt teknisk afsnit eller nogen, der tæller til ti. Skift stemmen, og præcis én af dine to leverandører omprissætter.

Transskription går den anden vej og er den enkleste linje på hele fakturaen — per minut lyd, fladt:

transcribing 59.6 secondsTEXT
whisper                  $0.005960     ($0.006 / min)
gpt-transcribe           $0.004470     ($0.0045 / min)
gpt-4o-mini-transcribe   $0.002980     ($0.003 / min)
gpt-live-transcribe      $0.016887     ($0.017 / min)

Bemærk sidste række mod den tredje: at gøre det live, mens ordene ankommer, koster 5,7 gange at gøre det på en færdig fil. Det gab er prisen for ikke at kunne batch, og det er det, der gør næste afsnit dyrt.

Nu tallet, der afgør, om stemme er en feature eller et produkt.

Opkaldet: en support-samtale på ti turns, 149 ord, hvilket ved en deklareret hastighed på 150 ord per minut er 59,6 sekunders tale — 21,2 talt af opkalderen, 38,4 talt tilbage. Token-konverteringerne er udbydernes egne. OpenAI: "audio tokens in user messages are 1 token per 100 ms of audio, while audio tokens in assistant messages are 1 token per 50 ms".14 Google: 25 tokens per sekund, i begge retninger, hvilket deres prisside bekræfter ved at offentliggøre $12.00 per million og $0.018 per minut på samme linje.12

Samtalen akkumuleres præcis som Kapitel 16 sagde, den ville, fordi det er den samme mekanisme: "the entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive".14 Nu måles historikken bare i audio tokens.

turnbrugerassistantfrisk lyd indcached lyd indlyd udpris
14.4 s9.2 s440184$0.013224
25.6 s9.6 s56228192$0.014211
35.2 s9.2 s52476184$0.013670
44.0 s4.8 s4071296$0.007749
52.0 s5.6 s20848112$0.008187

Nu sammenligningen, der afgør produktet, alle fire normaliseret til et minut:

per minutversus tekst
gpt-realtime-2.1, no caching$0.13125937.9×
gpt-realtime-2.1, history cached$0.05742516.6×
gemini-3.1-flash-live, no caching$0.0239656.9×
de samme ord tastet, gpt-5.6-terra$0.003461

Otteogtredive gange. Ikke otteogtredive procent. Den identiske udveksling, ført i lyd i stedet for tekst, er næsten to størrelsesordener dyrere, og intet af det gab er en margin, nogen har valgt at opkræve — det er konverteringsraten. Ét sekund assistant-lyd er tyve tokens. Det samme sekund bærer 2,5 ord ved den deklarerede hastighed, og den målte transskription ligger på 1,26 tokens per ord, så som tekst er det 3,15 tokens. Lyd er en 6,3 gange mere omfangsrig pakke for samme betydning, og hver af dens tokens faktureres til 5,3 gange tekst-output-raten og 16 gange tekst-input-raten. Gang en bulk-ratio med en pris-ratio, og størrelsesordenen er der allerede, før nogen bogføring begynder.

To driftsmæssige konsekvenser falder direkte ud af tabellen.

Audio caching er ikke en optimering, det er forretningsmodellen. Cached audio input er $0.40 per million mod $32.00 fresh — en rabat på 98,75 %, der halverer opkaldet. Reglen er Kapitel 16's, uændret: cachen matcher et prefix, så alt, der indsættes forrest i samtalen midt i et opkald, ødelægger den, og det naturlige sted at placere "opkalderen er nu verificeret" er præcis dér.

Og intet du gør i klienten, af-fakturerer en lyd. Brugeren taler hen over assistenten, din kode stopper afspilningen, højttaleren bliver stille. Hvad der allerede var genereret, var allerede faktureret, fordi fakturering påløber, når responsen oprettes; og efter Kapitel 16's regel bliver hvad end der bliver i samtalen, sendt igen som input-lyd ved hvert efterfølgende turn. Kapitel 14 gjorde samme pointe om at afbryde en tekststream. I stemme koster det tredive gange mere.

Video, GPU-sekunder og en pris, der ikke er en pris

Link til afsnittet: Video, GPU-sekunder og en pris, der ikke er en pris

Video sælges per sekund af nogle leverandører og per klip af andre, med tiers for opløsning og nogle gange for varighed. De to former adskiller sig ikke bare i bekvemmelighed; de krydser.

model1 s2 s5 s10 s20 s
veo-3.1, per sekund, 1080p$0.400$0.800$2.000$4.000$8.000
veo-3.1-fast, per sekund, 1080p$0.120$0.240$0.600$1.200$2.400
sora-2, per sekund, 720p$0.100$0.200$0.500$1.000$2.000
hailuo-02, per klip, 1080p$0.480$0.480$0.480$0.480$0.480
mochi, per GPU-sekund$0.018$0.037$0.092$0.183$0.366

Per-klip-leverandøren er dyrere end per-sekund-leverandøren under 1,2 sekunder og 16,7 gange billigere ved tyve. Ingen rangordning af de to modeller overlever en ændring i kliplængde, så "hvilken videomodel er billigst" er ikke et spørgsmål om modeller.

Den sidste række er værre, og den er kapitlets ærlige kerne. mochi faktureres mod reelle GPU-sekunder — jobbets målte prediction-tid — til $0.001400 per sekund på en A100 og $0.001525 på en H100, hvilket er den lejede maskines takster og intet andet.15 Det er en fuldstændig præcis tarif, og den er ikke en pris, fordi den mængde, den ganger med, er ukendt, indtil efter du har forpligtet dig til at betale den. Rækken ovenfor antager tolv GPU-sekunder per sekund output; firedobl den antagelse, og den forlader det billigste bånd, og først ved seks gange lander den midt i tabellen. Det er den eneste tarif på denne side, du ikke kan sætte i et tilbud.

Altså: tokens, image tokens, tegn, minutter, videosekunder, hele klip, GPU-sekunder, flade enheder. Otte størrelser, og den eneste måde at lægge dem på én akse er at deklarere en workload og prissætte den.

Det er udvidelsen til Kapitel 16's computeCost — samme tier-maskineri, nu med kriterier der ikke er prompt-længde:

normalise.tsTS
export interface MediaCriteria {
  resolution?: string[]; quality?: string[];
  hasAudio?: boolean; maxDurationSeconds?: number;
}
export interface MediaTier { when?: MediaCriteria; price: number }
export type MediaRate = number | MediaTier[];

const matches = (when: MediaCriteria, u: Usage) => {
  const inList = (l?: string[], v?: string) => !l || (v !== undefined && l.includes(v));
  if (!inList(when.resolution, u.resolution)) return false;
  if (!inList(when.quality, u.quality)) return false;
  if (when.hasAudio !== undefined && when.hasAudio !== (u.hasAudio ?? false)) return false;
  if (when.maxDurationSeconds !== undefined
      && (u.videoSeconds ?? 0) > when.maxDurationSeconds) return false;   
  return true;
};

const mediaPrice = (rate: MediaRate | undefined, u: Usage): number => {
  if (rate === undefined) return 0;
  if (typeof rate === "number") return rate;
  for (const t of rate.filter((t) => t.when)) if (matches(t.when!, u)) return t.price;
  return rate.find((t) => !t.when)?.price ?? 0;      // the tier with no criteria is the default
};

export function computeCost(p: Pricing, u: Usage): number {
  let c = textCost(p, u);                             // Chapter 16, unchanged
  if (p.imageInputToken || p.imageOutputToken) {
    c += (u.imageInputTokens ?? 0) * (p.imageInputToken ?? 0)
       + (u.imageOutputTokens ?? 0) * (p.imageOutputToken ?? 0);
  } else if (p.imageUnit !== undefined) c += (u.images ?? 1) * mediaPrice(p.imageUnit, u);  
  if (p.videoSecond !== undefined) c += (u.videoSeconds ?? 0) * mediaPrice(p.videoSecond, u);
  if (p.videoUnit   !== undefined) c += (u.videoCount ?? 1)   * mediaPrice(p.videoUnit, u);
  c += (u.audioInputTokens ?? 0)       * (p.audioInputToken ?? 0)
     + (u.cachedAudioInputTokens ?? 0) * (p.cachedAudioInputToken ?? p.audioInputToken ?? 0)
     + (u.audioOutputTokens ?? 0)      * (p.audioOutputToken ?? 0)
     + (u.computeSeconds ?? 0)         * (p.computeSecond ?? 0)
     + (u.chars ?? 0)                  * (p.perChar ?? 0)
     + (u.minutes ?? 0)                * (p.perMinute ?? 0);
  return c;
}

De to markerede linjer er der, hvor det knækker. En tarif angivet per enhed ganger u.images ?? 1; en tarif angivet per token ganger noget, der som default er nul. Giv begge et tomt usage — den form, du får, når en måling fejlede — og se:

the same missing measurement, priced by unitTEXT
per image (nano-banana-pro)     empty usage => $0.1500
per clip  (hailuo-02)           empty usage => $0.1500
per unit  (a cloned voice)      empty usage => $3.0000
per token (gpt-image-2)         empty usage => $0.0000
per second (veo-3.1)            empty usage => $0.0000
per GPU-second (mochi)          empty usage => $0.0000

Intet skete, seks gange, og det kostede tre dollars én gang og ingenting fem gange. Det er ikke en afrundingsforskel; det er en beslutning om, hvad et fraværende tal betyder, taget separat for hver enhed og aldrig skrevet ned. Den sunde regel er, at et felt, som ingen har målt, bliver ved med at være fraværende, fordi "ikke målt" og "målt og endte som nul" er forskellige ting. Denne funktion er stille uenig.

Den anden fejl er varighed. Den klip-prissatte tarif vælger sin tier med maxDurationSeconds mod u.videoSeconds ?? 0, så et usage, der aldrig registrerede en varighed, matcher den korteste tier:

hailuo-02, 768pTEXT
duration recorded    ->  $0.45
duration missing     ->  $0.27

Fyrre procent rabat for ikke at vide, hvor lang videoen var. Begge fejl har samme rod: en default valgt for bekvemmelighed inde i en funktion, hvis hele opgave er at være præcis.

Når omkostninger kan beregnes, kræver sammenligningen den anden halvdel — en deklareret repræsentativ workload, én per engine, angivet offentligt, så en læser kan være uenig i den:

workloads.tsTS
export const representative = {
  text:   { blend: [[{ promptTokens: 1e6 }, 0.25], [{ completionTokens: 1e6 }, 0.75]] },
  image:  { images: 1, imageInputTokens: 50, imageOutputTokens: 1500 },
  video:  { videoSeconds: 5, videoCount: 1, resolution: "1080p", hasAudio: true, computeSeconds: 60 },
  voice:  { chars: 1000, computeSeconds: 10 },
  stt:    { minutes: 1 },
};

Hver eneste af de linjer er et argument. Tekst blander en fjerdedel input og tre fjerdedele output, fordi reel brug hælder mod output; en fifty-fifty-blanding rangerer modellerne anderledes. Billed-workloaden antager 1.500 output tokens, mellem OpenAIs 1.056 for en medium square og dens 1.584 for en medium portrait. Video antager fem sekunder ved 1080p, og vi har lige set to leverandører bytte plads ved 1,2 sekunder. Compute-posten antager tres GPU-sekunder, fordi der ikke er andet at antage.

Det er metoden, og det er den eneste ærlige, der findes: du kan ikke sammenligne priser i forskellige enheder; du kan kun sammenligne omkostningen for en workload, du har skrevet ned. Enhver tabel, der rangerer multimodale modeller uden at trykke sin workload, rangerer sine egne antagelser.

Du kan nu prissætte alt, en model kan producere, i hvilken som helst enhed det sælges, og sige højt, hvilken workload din sammenligning antog. Det lukker den faktura, Kapitel 16 åbnede, og det lukker Del III: alt fra Kapitel 14 til her har handlet om ét kald — hvordan man laver det, hvad man putter i det, hvordan man sampler det, hvad det returnerer, hvad det koster.

Kapitel 22 ændrer analyseenheden, og ændringen er dyr. En agent er ikke ét kald; den er en løkke, der selv beslutter, hvor mange kald den vil lave, og aritmetikken fra de sidste to kapitler er det, der gør det fra et arkitekturdiagram til et budget. Det åbner med at stille samme spørgsmål til samme model to gange, med ét tool tilføjet kataloget anden gang, og måle hvad det ene tool gjorde: ét kald blev til to, niogtredive input tokens blev til 420.

Om det gør den til en agent afhænger af, hvilken af to offentliggjorte definitioner du åbner, og de er ikke enige. Den ene af dem er ikke enig med sig selv.


Hver pris, formel og konverteringsrate i dette kapitel blev læst fra udbyderens egen side den 7. september 2026 og citeres med den dato, fordi de alle vil flytte sig. Token-antal, omkostninger og sammenligninger blev beregnet på de data af koden trykt ovenfor, på én maskine, uden et betalt API-kald — hvilket også er den ærlige grund til, at der ikke er en eneste latency-påstand i dette kapitel.

Image-token-funktionerne, omkostningstabellerne, voice-call-opdelingen og empty-usage-resultaterne blev produceret af TypeScript trykt i dette kapitel, kørt på Node 22. Dialogen brugt til stemmesammenligningen er 149 ord og blev tokenized med tiktoken under o200k_base encoding ved 188 tokens; dens varighed følger af en deklareret hastighed på 150 ord per minut, hvilket er en parameter for sammenligningen og ikke en måling. Hvert leverandørtal bærer fodnoten, der navngiver den side, det kom fra.

  1. Dosovitskiy, A. et al. An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale. arXiv:2010.11929 (2020). Patches, den lineære projektion ind i embedding-dimensionen og position embeddings, der gør gitteret læsbart for en sekvensmodel.

  2. Radford, A. et al. Learning Transferable Visual Models From Natural Language Supervision. arXiv:2103.00020 (2021). Contrastive training af en image encoder og en text encoder på 400 millioner par, og det delte rum, som alt downstream antager.

  3. Alayrac, J.-B. et al. Flamingo: a Visual Language Model for Few-Shot Learning. arXiv:2204.14198 (2022). Frossen vision encoder, frossen sprogmodel, trænede bro-lag — arkitekturen, der gjorde billedforståelse til en chat-kapacitet.

  4. Liu, H., Li, C., Wu, Q. and Lee, Y. J. Visual Instruction Tuning. arXiv:2304.08485 (2023). En enkelt lineær projektion som bro og genererede instruktionsdata som træningssæt; grunden til, at åbne vision-language-modeller konvergerede mod én form.

  5. Anthropic, Vision, platform.claude.com/docs/en/build-with-claude/vision, tilgået 2026-09-07. "Claude views images in patches instead of pixels. Each patch is a 28×28-pixel block of the image, referred to as a visual token. An image, therefore, costs ⌈width / 28⌉ × ⌈height / 28⌉ visual tokens." Også de to opløsningstiers (standard: 1568-pixel lang kant, 1568 visual tokens; high-resolution, på Claude 4.7 og senere: 2576 pixels og 4784 tokens), nedskaleringsreglen og seksrækkers-tabellen med størrelser og token-antal gengivet ovenfor. Modelrater fra Anthropic, Pricing, platform.claude.com/docs/en/about-claude/pricing, samme dato: Claude Haiku 4.5 til $1 og $5 per million input og output tokens.

  6. Google, Image understanding, ai.google.dev/gemini-api/docs/image-understanding, tilgået 2026-09-07. "258 tokens if both dimensions <= 384 pixels. Larger images are tiled into 768x768 pixel tiles, each costing 258 tokens", med crop-unit-formlen — floor(min(width, height) / 1.5), dimensioner divideret med den og ganget sammen — og det gennemregnede eksempel på 960 × 540, der giver 3 × 2 = 6 tiles. Google kalder det "a rough formula"; skalainvariansen afledt ovenfor er en egenskab ved formlen som offentliggjort. Audio input på samme familie er 32 tokens per sekund lyd (ai.google.dev/gemini-api/docs/audio, samme dato).

  7. OpenAI, Images and vision, developers.openai.com/api/docs/guides/images-vision, tilgået 2026-09-07. Kilde til den patch-baserede regel (32 × 32 patches, patch_count = ceil(width/32)×ceil(height/32), shrink_factor-formlen og dens heltalsjustering, afvisningsgrænsen på 30.000 patches); modelstørrelsestabellen, inklusive at lowgpt-5.4 bruger en 2048-pixelgrænse og et 6.144-patch-budget "so it can use more tokens than high", mod high's 2.500-patch-budget; multiplikatortabellen (1,2 for GPT-5.x-familierne, 1,62 for gpt-4.1-mini, 2,46 for gpt-4.1-nano); de to gennemregnede eksempler gengivet ovenfor (1024 × 1024 → 1229 tokens, 2048 × 2048 → 3000 tokens); de tile-baserede regler for ældre modeller (base plus 512-pixel tiles, 85 + 170 på gpt-4o); og begrænsningslisten citeret i vision-boksen. 2

  8. Ho, J., Jain, A. and Abbeel, P. Denoising Diffusion Probabilistic Models. arXiv:2006.11239 (2020). Forward noising-skemaet, reparameteriseringen der gør målet til at forudsige den tilføjede støj, og sampling-løkken.

  9. Rombach, R., Blattmann, A., Lorenz, D., Esser, P. and Ommer, B. High-Resolution Image Synthesis with Latent Diffusion Models. arXiv:2112.10752 (2022). At køre diffusion-processen i et komprimeret latent rum, hvilket er det, der gjorde det faste antal trin billigt nok til at sælge per billede.

  10. Prince, S. J. D. Understanding Deep Learning (MIT Press, 2023), kapitel 18. Den deklarerede uddelegering for alt, dette kapitel sprang over om diffusion — den variational bound, støjskemaerne, classifier-free guidance og sampler-familierne. Hu, E. et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv:2106.09685 (2021), er selve adapteren, introduceret i Kapitel 11 på en sprogmodel og brugt her på en billedmodel uden ændring af matematikken. Radford, A. et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), arXiv:2212.04356 (2022), er transskriptionsmodellen, hvis pris per minut optræder ovenfor.

  11. OpenAI, Image generation, developers.openai.com/api/docs/guides/image-generation, Pricing, developers.openai.com/api/docs/pricing, og modelsiden for gpt-image-1, alle tilgået 2026-09-07. Modelsiden for gpt-image-2 har ingen pricing-sektion; dens rater kommer fra prissiden ovenfor. GPT Image 1's side offentliggør text input til $5.00, image input til $10.00 og image output til $40.00 per million tokens ved siden af per-billede-tabellen brugt i afledningen ovenfor. Også: output-token-tabellen for modeller før gpt-image-2 (272 / 408 / 400 low, 1056 / 1584 / 1568 medium, 4160 / 6240 / 6208 high, for square, portrait og landscape); per-billede-pristabellerne for GPT Image 2, 1.5, 1 og 1 Mini brugt i afledningerne ovenfor; sætningen "a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting"; noten om, at hvert streamet delbillede koster ekstra 100 image output tokens; og gpt-image-2's rater på $8.00 image input, $2.00 cached image input, $30.00 image output og $5.00 text input per million tokens. Tekstmodelrater brugt til sammenligningerne: gpt-5.6-terra til $2.00 input, $0.20 cached input og $12.00 output, gpt-5.6-luna til $0.20 og $1.20, standard tier, short context. Video: sora-2 til $0.10 per sekund ved 720p og sora-2-pro til $0.30, $0.50 og $0.70 ved 720p, 1024p og 1080p. Transskription: $0.006, $0.0045, $0.003 og $0.017 per minut for gpt-4o-transcribe, gpt-transcribe, gpt-4o-mini-transcribe og gpt-live-transcribe. 2

  12. Google, Gemini Developer API pricing, ai.google.dev/gemini-api/docs/pricing, tilgået 2026-09-07. Gemini 3.1 Flash-Lite til $0.25 per million input tokens (tekst, billede og video) og $1.50 output. Gemini 3.1 Flash Image: image output til $60 per million tokens, med de offentliggjorte ækvivalenser på 747, 1120, 1680 og 2520 tokens for 0.5K-, 1K-, 2K- og 4K-billeder og deres priser per billede på $0.045, $0.067, $0.101 og $0.151. Gemini 3.1 Flash TTS: $1.00 text input, $20.00 audio output, "audio tokens correspond to 25 tokens per second of audio". Gemini 3.1 Flash Live Preview: $0.75 text og "$3.00 or $0.005/min" audio input, "$4.50 (text) $12.00 or $0.018/min (audio)" output. Veo 3.1 per sekund med lyd: $0.40 ved 720p og 1080p og $0.60 ved 4K standard; $0.10, $0.12 og $0.30 fast. Gemini Omni Flash fakturerer video output "at a rate of 5,792 tokens per second of 720p video", hvilket samme fodnote konverterer til cirka $0.10 per sekund — den klareste offentliggjorte erklæring nogen steder om, at en mediepris per sekund er en token-pris. 2

  13. OpenAI-modelsider for tts-1, tts-1-hd og gpt-4o-mini-tts, developers.openai.com/api/docs/models, tilgået 2026-09-07. tts-1 til $15.00 og tts-1-hd til $30.00 per million tegn; gpt-4o-mini-tts til $0.60 per million text input tokens og $12.00 per million audio output tokens — samme leverandør, samme operation, to enheder.

  14. OpenAI, Managing costs (Realtime API), developers.openai.com/api/docs/guides/realtime-costs, tilgået 2026-09-07. "Audio tokens in user messages are 1 token per 100 ms of audio, while audio tokens in assistant messages are 1 token per 50ms of audio." Også: "The entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive"; omkostninger påløber, når en Response oprettes; det gennemregnede to-turn-eksempel, hvis akkumulering tabellen ovenfor gengiver; og response.done usage-payloaden med dens input_token_details- og output_token_details-opdelinger. Rater fra prissiden, samme dato: gpt-realtime-2.1 audio til $32.00 input, $0.40 cached input og $64.00 output per million tokens, text til $4.00, $0.40 og $24.00, image input til $5.00. 2

  15. Replicate, Pricing, replicate.com/pricing, tilgået 2026-09-07. Nvidia A100 (80GB) til $0.001400 per sekund og $5.04 per time; Nvidia H100 til $0.001525 per sekund og $5.49 per time.

Klar til at lade LIA vælge for dig?

Byg med alle AI-modeller ét sted — kom gratis i gang i dag.