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.
| fotografi | gpt-5.6-luna | gemini-3.1-flash-lite | claude-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 × 600 | pris for kørslen | sparet | |
|---|---|---|---|
gpt-5.6-luna | 2,942 → 570 | $0.3220 → $0.0848 | 73.7 % |
claude-haiku-4.5 | 1,564 → 638 | $0.9010 → $0.4380 | 51.4 % |
gemini-3.1-flash-lite | 1,032 → 1,032 | $0.1638 → $0.1638 | 0.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.
Hvorfor et fotografi har en token-pris
Link til afsnittet: Hvorfor et fotografi har en token-prisEn 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 tal; projektionen gør den til én -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 ensHver 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:
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å .6
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:
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 MATCHNi 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.
Hvad "større" betyder, tre gange
Link til afsnittet: Hvad "større" betyder, tre gangeSend det samme 4:3-fotografi gennem alle tre ved seks størrelser:
| størrelse | OpenAI, high | Anthropic, standard | Anthropic, high-res | Gemini |
|---|---|---|---|---|
| 384 × 288 | 130 | 154 | 154 | 258 |
| 640 × 480 | 360 | 414 | 414 | 1,032 |
| 800 × 600 | 570 | 638 | 638 | 1,032 |
| 1600 × 1200 | 2,280 | 1,564 | 2,494 | 1,032 |
| 3200 × 2400 | 2,942 | 1,564 | 4,740 | 1,032 |
| 4000 × 3000 | 2,942 | 1,564 | 4,740 | 1,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:
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":
1600x1200 low = 2280 high = 2280 ratio 1.00
3200x2400 low = 3687 high = 2942 ratio 1.25At 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.
At generere ét er en anden maskine
Link til afsnittet: At generere ét er en anden maskineAlt 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 tokenLeverandø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:
| kvalitet | 1024 × 1024 | 1024 × 1536 | 1536 × 1024 |
|---|---|---|---|
| low | 272 tok → $0.0109 ($0.011) | 408 tok → $0.0163 ($0.016) | 400 tok → $0.0160 ($0.016) |
| medium | 1,056 tok → $0.0422 ($0.042) | 1,584 tok → $0.0634 ($0.063) | 1,568 tok → $0.0627 ($0.063) |
| high | 4,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:
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 tokDet 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.
Lyd, faktureret per sekund, tegn og token
Link til afsnittet: Lyd, faktureret per sekund, tegn og tokenBed tre produkter om at sige de samme 519 tegn — cirka 38 sekunders lyd — og du får tre enhedssystemer fra to leverandører:
| model | enhed | pris |
|---|---|---|
tts-1 | per tegn | $15.00 per million tegn → $0.007785 |
tts-1-hd | per tegn | $30.00 per million tegn → $0.015570 |
gemini-3.1-flash-tts | per 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:
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.
Ét minut stemme, specificeret
Link til afsnittet: Ét minut stemme, specificeretNu 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.
| turn | bruger | assistant | frisk lyd ind | cached lyd ind | lyd ud | pris |
|---|---|---|---|---|---|---|
| 1 | 4.4 s | 9.2 s | 44 | 0 | 184 | $0.013224 |
| 2 | 5.6 s | 9.6 s | 56 | 228 | 192 | $0.014211 |
| 3 | 5.2 s | 9.2 s | 52 | 476 | 184 | $0.013670 |
| 4 | 4.0 s | 4.8 s | 40 | 712 | 96 | $0.007749 |
| 5 | 2.0 s | 5.6 s | 20 | 848 | 112 | $0.008187 |
Nu sammenligningen, der afgør produktet, alle fire normaliseret til et minut:
| per minut | versus tekst | |
|---|---|---|
gpt-realtime-2.1, no caching | $0.131259 | 37.9× |
gpt-realtime-2.1, history cached | $0.057425 | 16.6× |
gemini-3.1-flash-live, no caching | $0.023965 | 6.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 prisVideo 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.
| model | 1 s | 2 s | 5 s | 10 s | 20 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.
Normalisatoren
Link til afsnittet: NormalisatorenAltså: 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:
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:
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.0000Intet 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:
duration recorded -> $0.45
duration missing -> $0.27Fyrre 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.
At gøre tallet sammenligneligt
Link til afsnittet: At gøre tallet sammenligneligtNå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:
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.
Hvor det går hen nu
Link til afsnittet: Hvor det går hen nuDu 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.
Kilder og metode
Link til afsnittet: Kilder og metodeHver 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.
Referencer
Link til afsnittet: Referencer-
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. ↩
-
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. ↩
-
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. ↩
-
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. ↩
-
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. ↩ -
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). ↩ -
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 atlowpågpt-5.4bruger en 2048-pixelgrænse og et 6.144-patch-budget "so it can use more tokens thanhigh", modhigh's 2.500-patch-budget; multiplikatortabellen (1,2 for GPT-5.x-familierne, 1,62 forgpt-4.1-mini, 2,46 forgpt-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 -
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. ↩
-
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. ↩
-
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. ↩
-
OpenAI, Image generation,
developers.openai.com/api/docs/guides/image-generation, Pricing,developers.openai.com/api/docs/pricing, og modelsiden forgpt-image-1, alle tilgået 2026-09-07. Modelsiden forgpt-image-2har 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-terratil $2.00 input, $0.20 cached input og $12.00 output,gpt-5.6-lunatil $0.20 og $1.20, standard tier, short context. Video:sora-2til $0.10 per sekund ved 720p ogsora-2-protil $0.30, $0.50 og $0.70 ved 720p, 1024p og 1080p. Transskription: $0.006, $0.0045, $0.003 og $0.017 per minut forgpt-4o-transcribe,gpt-transcribe,gpt-4o-mini-transcribeoggpt-live-transcribe. ↩ ↩2 -
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 -
OpenAI-modelsider for
tts-1,tts-1-hdoggpt-4o-mini-tts,developers.openai.com/api/docs/models, tilgået 2026-09-07.tts-1til $15.00 ogtts-1-hdtil $30.00 per million tegn;gpt-4o-mini-ttstil $0.60 per million text input tokens og $12.00 per million audio output tokens — samme leverandør, samme operation, to enheder. ↩ -
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; ogresponse.doneusage-payloaden med densinput_token_details- ogoutput_token_details-opdelinger. Rater fra prissiden, samme dato:gpt-realtime-2.1audio 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 -
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. ↩