Prețuri multimodale: ce facturează de fapt imaginile, audio și video
Trei modele, aceleași 500 de fotografii: costuri de 5,5 ori diferite, iar cel mai ieftin se schimbă când le redimensionezi.
Pe această pagină
Iată o singură sarcină, tarifată în trei feluri: descrierea a cinci sute de fotografii de produs, câte o legendă scurtă pentru fiecare. Aceleași fotografii, aceeași instrucțiune, aceeași lungime a răspunsului. Singurul lucru care se schimbă este modelul care le citește.
| fotografie | 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 |
Trei lucruri din tabelul acesta merită o pauză.
Cel mai ieftin model se schimbă între al treilea și al patrulea rând, pe aceeași sarcină, fiindcă cineva a redimensionat fotografiile. Cere un paragraf în loc de o legendă și punctul de intersecție se mută din nou: la 1280 × 960 câștigătorul este Gemini pentru o legendă de patruzeci de tokens și OpenAI pentru un paragraf de patru sute de tokens.
Coloana Gemini nu se mișcă deloc, pe niciun rând: o fotografie de 4000 × 3000 îl costă exact cât una de 640 × 480. O fotografie de 4000 × 3000 îl costă exact cât o fotografie de 640 × 480. Nu este un plafon. Este o consecință a felului în care numără, iar asta înseamnă că cea mai obișnuită optimizare de cost din domeniul acesta — reduci rezoluția înainte de upload — plătește așa:
| image tokens, 4000 × 3000 → 800 × 600 | costul rulării | economisit | |
|---|---|---|---|
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 % |
Niciunul dintre aceste numere nu este un preț publicat de furnizor. Toate trei au trebuit calculate, după trei reguli diferite, fiindcă o fotografie nu este nicăieri o unitate facturabilă: mai întâi este convertită în tokens, printr-o aritmetică scrisă în trei locuri incompatibile.
Capitolul 16 a construit factura pentru text și s-a oprit acolo unde se oprește textul. Capitolul acesta este restul facturii: imagini, vorbire, transcriere, video și compute brut, care împreună sunt facturate în opt unități diferite, plus metoda de a compara lucruri care nu sunt vândute cu aceeași măsură.
Afișează detaliile
Ce are nevoie acest capitol din cele anterioare.
- Capitolul 7 a construit tokenizerul și unitatea. Tot ce urmează aici este o încercare de a transforma ceva ce nu este text în acea unitate.
- Capitolul 8 a stabilit ce consumă un model: nu simboluri, ci vectori într-un spațiu de embedding. De aceea o imagine poate fi tarifată în tokens.
- Capitolul 16 a construit
computeCost, treptele lui de preț și cele cinci buckets de tokens. Acest capitol extinde funcția aceea, nu o înlocuiește. - Capitolul 11 a introdus LoRA ca tehnică de fine-tuning, iar Capitolul 20 i-a pus prețul ca decizie de buget. Aici reapare pe un model care nu este un language model.
Fără tensori, după regula din Capitolul 14: aici vorbim despre tarife, conversii și contabilitate, deci este TypeScript.
De ce o fotografie are un preț în tokens
Link către secțiunea: De ce o fotografie are un preț în tokensUn transformer primește o secvență de vectori. Nu are nicio opinie despre locul de unde au venit. Capitolul 8 i-a dat embeddings căutate după un id de token; nimic din arhitectură nu cere neapărat lookupul.
Așadar: tai imaginea în pătrate fixe, aplatizezi fiecare pătrat într-o listă de numere și treci fiecare listă printr-un strat liniar învățat ca să obții un vector cu lățimea modelului. Un patch de pixeli colorați de 32 × 32 este numere; proiecția îl transformă într-un vector -dimensional, exact forma în care sosește un text token. Asta e tot, iar lucrarea o spune chiar în titlu: o imagine valorează 16 × 16 cuvinte.1 Adaugi o codare pozițională ca modelul să știe ce pătrat era unde, intercalezi rezultatele cu text embeddings, iar secvența citită de model este parțial imagine și parțial propoziție.
Trei lucrări au transformat ideea în produs. CLIP a antrenat un encoder de imagine și un encoder de text să se pună de acord, pe patru sute de milioane de perechi colectate de pe web, iar acolo ideea că pixelii și cuvintele pot împărți același spațiu a încetat să mai fie o ipoteză.2 Flamingo a prins un encoder vizual înghețat de un language model înghețat cu câteva straturi-punte antrenate.3 LLaVA a arătat că puntea poate fi o singură proiecție liniară și că urmarea instrucțiunilor poate fi predată cu date generate, motiv pentru care aproape fiecare model vision-language deschis de atunci arată cam la fel.4
Consecința pentru factura ta este imediată și deloc spectaculoasă: patchurile sunt poziții în secvență, deci sunt input tokens, deci plătești pentru ele la tariful de input. Câte sunt ține de aritmetică, iar fiecare furnizor o face altfel.
Trei reguli, toate publicate, niciuna la fel
Link către secțiunea: Trei reguli, toate publicate, niciuna la felFiecare regulă de mai jos este implementată din documentația proprie a furnizorului și verificată cu exemplele lucrate din aceeași documentație.
OpenAI acoperă imaginea cu patchuri de 32 × 32 și înmulțește numărul cu un factor pe model. Dacă numărul de patchuri depășește bugetul pentru acel model și acel nivel de detaliu, imaginea este scalată în jos până încape:
Anthropic o acoperă cu patchuri de 28 × 28, câte un visual token fiecare, și plafonează atât latura lungă, cât și numărul de tokens — 1.568 pixeli și 1.568 tokens pe modelele standard-tier, 2.576 și 4.784 pe tierul high-resolution. Imaginile supradimensionate sunt scalate la cea mai mare dimensiune care încape în ambele limite.5
Google nu numără pixelii deloc. O imagine cu ambele laturi de cel mult 384 de pixeli costă fix 258 tokens. Orice este mai mare se taie în tile-uri de 258 tokens fiecare, iar grila de tile-uri vine dintr-o unitate de crop de .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;
}Rulează fiecare pe numerele tipărite de propriul furnizor:
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 MATCHSunt afișate nouă concordanțe; rularea completă verifică cincisprezece, fiindcă tabelul Anthropic dă ambele tieruri pentru toate cele șase dimensiuni. Regulile sunt acum ale tale și le poți rula pe orice fotografie ai, acesta fiind scopul: acestea sunt singurele trei funcții din capitol pe care nu le poți obține dintr-o pagină de prețuri.
Ce înseamnă „mai mare”, de trei ori
Link către secțiunea: Ce înseamnă „mai mare”, de trei oriTrece aceeași fotografie 4:3 prin toate trei, la șase dimensiuni:
| dimensiune | 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 |
Citește ultima coloană în jos. Odată ce fotografia trece de 384 de pixeli, numărul nu se mai schimbă niciodată, iar asta nu este o coincidență sau un plafon. Pune unitatea de crop înapoi în formula de tile-uri, pentru o imagine cel puțin la fel de lată pe cât este de înaltă:
Dimensiunea se anulează. Google's image tokens depind de raportul de aspect și de nimic altceva. O fotografie 4:3 are patru tile-uri indiferent dacă este o miniatură sau un poster. Acest singur fapt algebric este întreaga explicație a zeroului din tabelul de economii de mai sus, și nicio pagină de prețuri nu îl afirmă.
Celelalte două coloane se plafonează în schimb, la înălțimi diferite și din motive diferite — Anthropic la un plafon declarat de tokens, OpenAI la un buget de patchuri după o limită de pixeli — motiv pentru care cele trei curbe se intersectează la dimensiuni diferite.
Acum strică-l. Modul evident de a cheltui mai puțin pe un vision model este să ceri mai puțin detaliu, deci trimite detail: "low":
1600x1200 low = 2280 high = 2280 ratio 1.00
3200x2400 low = 3687 high = 2942 ratio 1.25A cere mai puțin detaliu a costat cu 25 % mai mult. Nu este un bug, iar OpenAI o spune într-un singur rând din tabelul de dimensionare: pe acea familie de modele, low folosește o limită de 2048 de pixeli cu un buget de 6.144 patchuri, în timp ce high folosește aceeași limită de pixeli cu un buget de 2.500 de patchuri, „so it can use more tokens than high”.7 Cuvântul low numește o setare de fidelitate, nu un preț: pe două dintre cele cinci familii de modele documentate nu cumpără nicio economie, iar pe una dintre acestea două costă mai mult.
A genera una este o altă mașinărie
Link către secțiunea: A genera una este o altă mașinărieTot ce a fost până acum era un model care citește o imagine. A face una rulează pe un mecanism fără tokens deloc, iar acesta este motivul pentru care se vinde la imagine, nu la cuvânt.
A face o imagine: un preț per imagine este un preț per token
Link către secțiunea: A face o imagine: un preț per imagine este un preț per tokenFurnizorii publică generarea de imagini ca preț per imagine. Nu este. Modelele GPT Image emit image tokens specializați, al căror număr depinde de dimensiunea și calitatea cerute; înmulțește numerele publicate cu tariful publicat de output imagine al GPT Image 1, $40 per milion, și compară cu prețurile per imagine de pe aceeași pagină:
| calitate | 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) |
Nouă cifre derivate față de nouă publicate, fiecare pereche concordând în limita a $0.002.11 Google este și mai explicit și face conversia pentru tine chiar pe pagina de prețuri: output imagine la $60 per milion tokens, „output images at 1K (1024x1024px) consume 1120 tokens and are equivalent to $0.067 per image”.12
Deci un preț per imagine este un preț per token cu numărul inclus. Ceea ce este în regulă, dar ascunde ceva. Ia tabelul generației curente și împarte invers:
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 tokImaginea mai mare este cea mai ieftină la fiecare calitate. Un canvas de 1024 × 1536 are cu 50 % mai mulți pixeli decât unul de 1024 × 1024 și costă cu 23 % mai puțini tokens la medium. OpenAI semnalează asta într-o propoziție peste care ai trece — „a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting” — iar pe generația anterioară de model mergea invers, portretul costând cu 50 % mai mult decât pătratul.11 Orice default de 1024x1024 scris înainte de acea schimbare este acum opțiunea scumpă.
Sunet, facturat la secundă, caracter și token
Link către secțiunea: Sunet, facturat la secundă, caracter și tokenCere trei produse să rostească aceleași 519 caractere — aproximativ 38 de secunde de audio — și primești trei sisteme de unități de la doi furnizori:
| model | unitate | preț |
|---|---|---|
tts-1 | per caracter | $15.00 per milion de caractere → $0.007785 |
tts-1-hd | per caracter | $30.00 per milion de caractere → $0.015570 |
gemini-3.1-flash-tts | per audio token, 25 pe secundă | $20.00 per milion → $0.019319 |
Același furnizor vinde ambele unități: tts-1 de la OpenAI este tarifat per milion de caractere, în timp ce gpt-4o-mini-tts este tarifat per milion de tokens, $0.60 in și $12.00 out.13 Deci „cel mai ieftin text-to-speech” nu este o întrebare cu răspuns până nu spui ce rostești.
Iar cele două unități sunt oarbe la lucruri opuse. Un preț per caracter nu vede durata: alege o voce lentă, deliberată, sau adaugă pauze, iar factura nu se mișcă, deși audio-ul devine mai lung. Un preț per secundă nu vede conținutul: treizeci de secunde costă la fel fie că sunt un paragraf tehnic dens, fie că cineva numără până la zece. Schimbă vocea și exact unul dintre cei doi furnizori îți recalculează prețul.
Transcrierea merge în sens invers și este cea mai simplă linie din toată factura — per minut de audio, fix:
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)Observă ultimul rând față de al treilea: să o faci live, pe măsură ce sosesc cuvintele, costă de 5,7 ori cât să o faci pe un fișier terminat. Diferența este prețul faptului că nu poți face batch, și asta face următoarea secțiune scumpă.
Un minut de voce, pe articole
Link către secțiunea: Un minut de voce, pe articoleAcum numărul care decide dacă vocea este o funcționalitate sau un produs.
Apelul: o conversație de suport în zece ture, 149 de cuvinte, care la un ritm declarat de 150 de cuvinte pe minut înseamnă 59,6 secunde de vorbire — 21,2 rostite de apelant, 38,4 rostite înapoi. Conversiile în token sunt ale furnizorilor. 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 pe secundă, în ambele direcții, lucru confirmat de pagina sa de prețuri prin publicarea a $12.00 per milion și $0.018 pe minut pe același rând.12
Conversația se acumulează exact cum a spus Capitolul 16, fiindcă este același mecanism: „the entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive”.14 Doar că acum istoricul este măsurat în audio tokens.
| tură | user | assistant | fresh audio in | cached audio in | audio out | cost |
|---|---|---|---|---|---|---|
| 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 |
Acum comparația care decide produsul, toate patru normalizate la un minut:
| pe minut | față de text | |
|---|---|---|
gpt-realtime-2.1, fără caching | $0.131259 | 37.9× |
gpt-realtime-2.1, istoric cached | $0.057425 | 16.6× |
gemini-3.1-flash-live, fără caching | $0.023965 | 6.9× |
aceleași cuvinte tastate, gpt-5.6-terra | $0.003461 | — |
De treizeci și opt de ori. Nu treizeci și opt la sută. Schimbul identic, purtat în sunet în loc de text, este aproape cu două ordine de mărime mai scump, iar nimic din această diferență nu este o marjă pe care cineva a ales să o perceapă — este rata de conversie. O secundă de audio de assistant înseamnă douăzeci de tokens. Aceeași secundă poartă 2,5 cuvinte la ritmul declarat, iar transcrierea măsurată rulează la 1,26 tokens pe cuvânt, deci ca text înseamnă 3,15 tokens. Sunetul este un pachet de 6,3 ori mai voluminos pentru același sens, iar fiecare dintre tokens lui este facturat la 5,3 ori tariful de text output și de 16 ori tariful de text input. Înmulțește un raport de volum cu un raport de preț și ordinul de mărime este deja acolo înainte să înceapă contabilitatea.
Două consecințe operaționale ies direct din tabel.
Audio caching nu este o optimizare, este modelul de business. Cached audio input costă $0.40 per milion față de $32.00 fresh — o reducere de 98,75 % care înjumătățește apelul. Regula este cea din Capitolul 16, neschimbată: cache-ul potrivește un prefix, deci orice inserat în fața conversației în mijlocul apelului îl distruge, iar locul natural în care să pui „apelantul este acum verificat” este exact acolo.
Și nimic din ce faci în client nu dez-facturează un sunet. Userul vorbește peste assistant, codul tău oprește redarea, difuzorul tace. Orice fusese deja generat fusese deja taxat, fiindcă facturarea se acumulează când răspunsul este creat; iar după regula din Capitolul 16, orice rămâne în conversație este retrimis, ca input audio, la fiecare tură de după. Capitolul 14 a făcut observația aceasta despre oprirea unui text stream. În voce costă de treizeci de ori mai mult.
Video, GPU-seconds și un preț care nu este un preț
Link către secțiunea: Video, GPU-seconds și un preț care nu este un prețVideo-ul este vândut per secundă de unii furnizori și per clip de alții, cu tieruri pentru rezoluție și uneori pentru durată. Cele două forme nu diferă doar ca conveniență; se intersectează.
| model | 1 s | 2 s | 5 s | 10 s | 20 s |
|---|---|---|---|---|---|
veo-3.1, per secundă, 1080p | $0.400 | $0.800 | $2.000 | $4.000 | $8.000 |
veo-3.1-fast, per secundă, 1080p | $0.120 | $0.240 | $0.600 | $1.200 | $2.400 |
sora-2, per secundă, 720p | $0.100 | $0.200 | $0.500 | $1.000 | $2.000 |
hailuo-02, per clip, 1080p | $0.480 | $0.480 | $0.480 | $0.480 | $0.480 |
mochi, per GPU-second | $0.018 | $0.037 | $0.092 | $0.183 | $0.366 |
Furnizorul per clip este mai scump decât cel per secundă sub 1,2 secunde și de 16,7 ori mai ieftin la douăzeci. Nicio ordonare a acestor două modele nu supraviețuiește unei schimbări de lungime a clipului, deci „care video model este cel mai ieftin” nu este o întrebare despre modele.
Ultimul rând este mai rău, și este inima onestă a capitolului. mochi este facturat după secunde GPU reale — timpul de predicție măsurat al jobului — la $0.001400 pe secundă pe un A100 și $0.001525 pe un H100, care sunt tarifele mașinii închiriate și nimic altceva.15 Este un tarif perfect precis și nu este un preț, fiindcă mărimea pe care o înmulțește este necunoscută până după ce te-ai angajat să plătești. Rândul de mai sus presupune douăsprezece GPU-seconds per secundă de output; cvadruplează presupunerea și iese din banda cea mai ieftină, iar abia la de șase ori ajunge la mijlocul tabelului. Este singurul tarif de pe pagina aceasta pe care nu îl poți pune într-o ofertă.
Normalizatorul
Link către secțiunea: NormalizatorulDeci: tokens, image tokens, caractere, minute, secunde video, clipuri întregi, GPU seconds, unități fixe. Opt mărimi, iar singura cale de a le pune pe o singură axă este să declari un workload și să îi pui preț.
Aceasta este extensia lui computeCost din Capitolul 16 — aceeași mașinărie de tieruri, acum cu criterii care nu sunt lungimea promptului:
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;
}Cele două linii marcate sunt locul în care se rupe. Un tarif cotat per unitate înmulțește u.images ?? 1; un tarif cotat per token înmulțește ceva care implicit este zero. Dă-le amândurora o utilizare goală — forma pe care o primești când o măsurare a eșuat — și privește:
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.0000Nu s-a întâmplat nimic, de șase ori, și a costat trei dolari o dată și nimic de cinci ori. Nu este o diferență de rotunjire; este o decizie despre ce înseamnă un număr absent, luată separat pentru fiecare unitate și nescrisă nicăieri. Regula sănătoasă este ca un câmp pe care nu l-a măsurat nimeni să rămână absent, fiindcă „nemăsurat” și „măsurat și ieșit zero” sunt lucruri diferite. Această funcție nu este de acord, în tăcere.
Al doilea eșec este durata. Tariful pe clip își alege tierul cu maxDurationSeconds față de u.videoSeconds ?? 0, așa că o utilizare care nu a înregistrat niciodată o durată se potrivește cu cel mai scurt tier:
duration recorded -> $0.45
duration missing -> $0.27Patruzeci la sută reducere pentru că nu știi cât a durat video-ul. Ambele buguri au aceeași rădăcină: un default ales pentru conveniență într-o funcție a cărei întreagă treabă este să fie exactă.
Cum faci numărul comparabil
Link către secțiunea: Cum faci numărul comparabilCu costurile calculabile, comparația are nevoie de cealaltă jumătate — un workload reprezentativ declarat, câte unul per engine, spus public ca un cititor să poată să nu fie de acord cu el:
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 },
};Fiecare dintre acele linii este un argument. Textul amestecă un sfert input și trei sferturi output fiindcă utilizarea reală înclină spre output; un amestec fifty-fifty clasifică modelele diferit. Workloadul de imagine presupune 1.500 output tokens, între 1.056 ai OpenAI pentru un pătrat medium și 1.584 pentru un portret medium. Video presupune cinci secunde la 1080p, iar tocmai am văzut doi furnizori schimbând locurile la 1,2 secunde. Intrarea de compute presupune șaizeci de GPU-seconds fiindcă nu există altceva de presupus.
Aceasta este metoda, și este singura onestă disponibilă: nu poți compara prețuri în unități diferite; poți compara doar costul unui workload pe care l-ai scris. Orice tabel care clasifică modele multimodale fără să își tipărească workloadul își clasifică propriile presupuneri.
Unde mergem mai departe
Link către secțiunea: Unde mergem mai departeAcum poți pune preț pe orice poate produce un model, în orice unitate se vinde, și poți spune cu voce tare ce workload a presupus comparația ta. Asta închide factura deschisă de Capitolul 16 și închide Partea III: totul, de la Capitolul 14 până aici, a fost despre un apel — cum îl faci, ce pui în el, cum îl eșantionezi, ce returnează, cât costă.
Capitolul 22 schimbă unitatea de analiză, iar schimbarea este scumpă. Un agent nu este un apel; este o buclă care decide singură câte apeluri să facă, iar aritmetica ultimelor două capitole este ceea ce transformă asta dintr-o diagramă de arhitectură într-un buget. Începe punând aceeași întrebare aceluiași model de două ori, cu un tool adăugat în catalog a doua oară, și măsurând ce a făcut acel singur tool: un apel a devenit două, treizeci și nouă de input tokens au devenit 420.
Dacă asta îl face agent depinde de care dintre două definiții publicate deschizi, iar ele nu sunt de acord. Una dintre ele nu este de acord cu ea însăși.
Surse și metodă
Link către secțiunea: Surse și metodăFiecare preț, formulă și rată de conversie din acest capitol a fost citită de pe pagina proprie a furnizorului pe 7 septembrie 2026 și este citată cu acea dată, fiindcă toate se vor schimba. Numerele de tokens, costurile și comparațiile au fost calculate pe acele date de codul tipărit mai sus, pe o singură mașină, fără niciun apel API plătit — acesta fiind și motivul onest pentru care nu există nicio afirmație despre latență în acest capitol.
Funcțiile image-token, tabelele de cost, defalcarea apelului vocal și rezultatele pentru utilizare goală au fost produse de TypeScript-ul tipărit în acest capitol, rulat pe Node 22. Dialogul folosit pentru comparația vocală are 149 de cuvinte și a fost tokenizat cu tiktoken sub encodingul o200k_base la 188 tokens; durata lui rezultă dintr-un ritm declarat de 150 de cuvinte pe minut, care este un parametru al comparației și nu o măsurătoare. Fiecare cifră de furnizor poartă nota de subsol care numește pagina din care a venit.
Referințe
Link către secțiunea: Referințe-
Dosovitskiy, A. et al. An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale. arXiv:2010.11929 (2020). Patchurile, proiecția liniară în dimensiunea embedding și position embeddings care fac grila lizibilă pentru un sequence model. ↩
-
Radford, A. et al. Learning Transferable Visual Models From Natural Language Supervision. arXiv:2103.00020 (2021). Antrenarea contrastivă a unui image encoder și a unui text encoder pe 400 de milioane de perechi și spațiul comun pe care îl presupune tot ce vine după. ↩
-
Alayrac, J.-B. et al. Flamingo: a Visual Language Model for Few-Shot Learning. arXiv:2204.14198 (2022). Encoder vizual înghețat, language model înghețat, straturi-punte antrenate — arhitectura care a transformat înțelegerea imaginilor într-o capabilitate de chat. ↩
-
Liu, H., Li, C., Wu, Q. and Lee, Y. J. Visual Instruction Tuning. arXiv:2304.08485 (2023). O singură proiecție liniară ca punte și date de instrucțiuni generate ca set de antrenare; motivul pentru care modelele vision-language deschise au convergent către aceeași formă. ↩
-
Anthropic, Vision,
platform.claude.com/docs/en/build-with-claude/vision, accesat 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.” De asemenea, cele două tieruri de rezoluție (standard: latură lungă de 1568 pixeli, 1568 visual tokens; high-resolution, pe Claude 4.7 și ulterior: 2576 pixeli și 4784 tokens), regula de downsizing și tabelul cu șase rânduri de dimensiuni și token counts reprodus mai sus. Tarifele modelelor din Anthropic, Pricing,platform.claude.com/docs/en/about-claude/pricing, aceeași dată: Claude Haiku 4.5 la $1 și $5 per milion input și output tokens. ↩ -
Google, Image understanding,
ai.google.dev/gemini-api/docs/image-understanding, accesat 2026-09-07. „258 tokens if both dimensions <= 384 pixels. Larger images are tiled into 768x768 pixel tiles, each costing 258 tokens”, cu formula unității de crop —floor(min(width, height) / 1.5), dimensiuni împărțite la ea și înmulțite între ele — și exemplul lucrat de 960 × 540 care dă 3 × 2 = 6 tile-uri. Google o numește „a rough formula”; invarianța la scală derivată mai sus este o proprietate a formulei așa cum este publicată. Audio input pe aceeași familie este 32 tokens pe secundă de audio (ai.google.dev/gemini-api/docs/audio, aceeași dată). ↩ -
OpenAI, Images and vision,
developers.openai.com/api/docs/guides/images-vision, accesat 2026-09-07. Sursa regulii bazate pe patchuri (patchuri 32 × 32,patch_count = ceil(width/32)×ceil(height/32), formulashrink_factorși ajustarea ei întreagă, limita de respingere la 30.000 de patchuri); tabelul de dimensionare a modelelor, inclusiv faptul călowpegpt-5.4folosește o limită de 2048 de pixeli și un buget de 6.144 patchuri „so it can use more tokens thanhigh”, față de bugetul de 2.500 patchuri alhigh; tabelul de multiplicatori (1,2 pentru familiile GPT-5.x, 1,62 pentrugpt-4.1-mini, 2,46 pentrugpt-4.1-nano); cele două exemple lucrate reproduse mai sus (1024 × 1024 → 1229 tokens, 2048 × 2048 → 3000 tokens); regulile bazate pe tile-uri pentru modele mai vechi (bază plus tile-uri de 512 pixeli, 85 + 170 pegpt-4o); și lista de limitări citată în caseta despre vision. ↩ ↩2 -
Ho, J., Jain, A. and Abbeel, P. Denoising Diffusion Probabilistic Models. arXiv:2006.11239 (2020). Schedule-ul forward de noising, reparametrizarea care transformă obiectivul în prezicerea zgomotului adăugat și bucla de sampling. ↩
-
Rombach, R., Blattmann, A., Lorenz, D., Esser, P. and Ommer, B. High-Resolution Image Synthesis with Latent Diffusion Models. arXiv:2112.10752 (2022). Rularea procesului de diffusion într-un spațiu latent comprimat, ceea ce a făcut numărul fix de pași suficient de accesibil pentru vânzare per imagine. ↩
-
Prince, S. J. D. Understanding Deep Learning (MIT Press, 2023), capitolul 18. Delegarea declarată pentru tot ce a sărit acest capitol despre diffusion — variational bound, noise schedules, classifier-free guidance și familiile de samplere. Hu, E. et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv:2106.09685 (2021), este adaptorul însuși, introdus în Capitolul 11 pe un language model și folosit aici pe un image model fără schimbare de matematică. Radford, A. et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), arXiv:2212.04356 (2022), este modelul de transcriere al cărui preț per minut apare mai sus. ↩
-
OpenAI, Image generation,
developers.openai.com/api/docs/guides/image-generation, Pricing,developers.openai.com/api/docs/pricing, și pagina de model pentrugpt-image-1, toate accesate 2026-09-07. Pagina de model pentrugpt-image-2nu are secțiune de pricing; tarifele ei vin din pagina de pricing de mai sus. Pagina GPT Image 1 publică text input la $5.00, image input la $10.00 și image output la $40.00 per milion tokens lângă tabelul per imagine folosit în derivarea de mai sus. De asemenea: tabelul output-token pentru modelele anterioare lui gpt-image-2 (272 / 408 / 400 low, 1056 / 1584 / 1568 medium, 4160 / 6240 / 6208 high, pentru square, portrait și landscape); tabelele de preț per imagine pentru GPT Image 2, 1.5, 1 și 1 Mini folosite în derivările de mai sus; propoziția „a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting”; nota că fiecare imagine parțială streamed costă încă 100 image output tokens; și tarifele gpt-image-2 de $8.00 image input, $2.00 cached image input, $30.00 image output și $5.00 text input per milion tokens. Tarifele de text model folosite pentru comparații:gpt-5.6-terrala $2.00 input, $0.20 cached input și $12.00 output,gpt-5.6-lunala $0.20 și $1.20, standard tier, short context. Video:sora-2la $0.10 per secundă la 720p șisora-2-prola $0.30, $0.50 și $0.70 la 720p, 1024p și 1080p. Transcriere: $0.006, $0.0045, $0.003 și $0.017 pe minut pentrugpt-4o-transcribe,gpt-transcribe,gpt-4o-mini-transcribeșigpt-live-transcribe. ↩ ↩2 -
Google, Gemini Developer API pricing,
ai.google.dev/gemini-api/docs/pricing, accesat 2026-09-07. Gemini 3.1 Flash-Lite la $0.25 per milion input tokens (text, imagine și video) și $1.50 output. Gemini 3.1 Flash Image: image output la $60 per milion tokens, cu echivalențele publicate de 747, 1120, 1680 și 2520 tokens pentru imagini 0.5K, 1K, 2K și 4K și prețurile lor per imagine de $0.045, $0.067, $0.101 și $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 și „$3.00 or $0.005/min” audio input, „$4.50 (text) $12.00 or $0.018/min (audio)” output. Veo 3.1 per secundă cu audio: $0.40 la 720p și 1080p și $0.60 la 4K standard; $0.10, $0.12 și $0.30 fast. Gemini Omni Flash facturează video output „at a rate of 5,792 tokens per second of 720p video”, pe care aceeași notă o convertește la aproximativ $0.10 pe secundă — cea mai clară afirmație publicată că un preț media per secundă este un preț pe token. ↩ ↩2 -
Pagini de model OpenAI pentru
tts-1,tts-1-hdșigpt-4o-mini-tts,developers.openai.com/api/docs/models, accesate 2026-09-07.tts-1la $15.00 șitts-1-hdla $30.00 per milion de caractere;gpt-4o-mini-ttsla $0.60 per milion text input tokens și $12.00 per milion audio output tokens — același furnizor, aceeași operațiune, două unități. ↩ -
OpenAI, Managing costs (Realtime API),
developers.openai.com/api/docs/guides/realtime-costs, accesat 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.” De asemenea: „The entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive”; costurile se acumulează când un Response este creat; exemplul lucrat în două ture a cărui acumulare o reproduce tabelul de mai sus; și payloadul de utilizareresponse.donecu spliturile luiinput_token_detailsșioutput_token_details. Tarife din pagina de pricing, aceeași dată:gpt-realtime-2.1audio la $32.00 input, $0.40 cached input și $64.00 output per milion tokens, text la $4.00, $0.40 și $24.00, image input la $5.00. ↩ ↩2 -
Replicate, Pricing,
replicate.com/pricing, accesat 2026-09-07. Nvidia A100 (80GB) la $0.001400 pe secundă și $5.04 pe oră; Nvidia H100 la $0.001525 pe secundă și $5.49 pe oră. ↩