Multimodální ceny: za co se u obrázků, audia a videa opravdu účtuje
Tři modely u stejných 500 fotek vyjdou až 5,5× jinak — a nejlevnější volba se změní po pouhém zmenšení.
Na této stránce
Tady je jeden úkol oceněný třemi způsoby: popsat pět set produktových fotografií, ke každé jeden krátký popisek. Stejné fotografie, stejná instrukce, stejně dlouhá odpověď. Mění se jen model, který je č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 |
U té tabulky stojí za zastavení tři věci.
Nejlevnější model se změní mezi třetím a čtvrtým řádkem, u stejného úkolu, protože někdo změnil velikost fotografií. Požádejte místo popisku o odstavec a průsečík se posune znovu: při 1280 × 960 vyhrává u čtyřicet tokenového popisku Gemini a u čtyř set tokenového odstavce OpenAI.
Sloupec Gemini se nehne vůbec, v žádném řádku: fotografie 4000 × 3000 ho stojí přesně tolik co fotografie 640 × 480. Fotografie 4000 × 3000 ho stojí přesně tolik co fotografie 640 × 480. Není to strop. Je to důsledek toho, jak počítá, a znamená to, že nejběžnější optimalizace nákladů v tomto oboru — zmenšit obrázek před nahráním — se vyplatí takto:
| image tokens, 4000 × 3000 → 800 × 600 | cena běhu | úspora | |
|---|---|---|---|
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 % |
Žádné z těch čísel není cena, kterou vendor zveřejňuje. Všechna tři se musela spočítat ze tří různých pravidel, protože fotografie není účtovatelná jednotka nikde: nejdřív se převádí na tokeny, aritmetikou zapsanou na třech neslučitelných místech.
Kapitola 16 sestavila účet za text a skončila tam, kde text končí. Tato kapitola je zbytek faktury: obrázky, řeč, přepis, video a syrový compute, které se dohromady účtují v osmi různých jednotkách, plus metoda, jak porovnávat věci, které se neprodávají stejnou mírou.
Zobrazit podrobnosti
Co tato kapitola potřebuje z předchozích.
- Kapitola 7 postavila tokenizer a jednotku. Všechno zde je pokus převést něco, co není text, na tuto jednotku.
- Kapitola 8 stanovila, co model konzumuje: ne symboly, ale vektory v embedding prostoru. Proto vůbec může mít obrázek cenu v tokenech.
- Kapitola 16 postavila
computeCost, jeho cenové úrovně a jeho pět token košů. Tato kapitola tuto funkci rozšiřuje, nenahrazuje. - Kapitola 11 představila LoRA jako fine-tuning techniku a Kapitola 20 ji ocenila jako rozpočtové rozhodnutí. Zde se objeví u modelu, který není jazykový model.
Žádné tenzory, podle pravidla z Kapitoly 14: toto jsou tarify, převody a účetnictví, takže TypeScript.
Proč má fotografie token cenu
Odkaz na sekci: Proč má fotografie token cenuTransformer přijímá sekvenci vektorů. Nezajímá ho, odkud přišly. Kapitola 8 mu předávala embeddings vyhledané podle token id; nic v architektuře nevyžaduje vyhledávání.
Takže: rozřežte obrázek na pevné čtverce, každý čtverec zploštěte na seznam čísel a každý seznam pošlete přes jednu naučenou lineární vrstvu, abyste získali vektor šířky modelu. Barevný patch pixelů 32 × 32 je čísel; projekce z něj udělá jeden -rozměrný vektor, přesně ve tvaru, v jakém přichází textový token. To je celé, a přesně to říká název článku: obrázek má hodnotu 16 × 16 slov.1 Přidejte poziční kódování, aby model věděl, který čtverec byl kde, proložte výsledky textovými embeddings, a sekvence, kterou model čte, je zčásti obrázek a zčásti věta.
Tři články z toho udělaly produkt. CLIP natrénoval image encoder a text encoder tak, aby se shodly na čtyř stech milionech scrapovaných dvojic; tam přestala být myšlenka, že pixely a slova mohou sdílet prostor, hypotézou.2 Flamingo připevnilo zmrazený vision encoder ke zmrazenému jazykovému modelu pomocí několika natrénovaných přemosťovacích vrstev.3 LLaVA ukázala, že mostem může být jediná lineární projekce a instruction-following lze naučit na generovaných datech; proto od té doby každý otevřený vision-language model vypadá zhruba stejně.4
Důsledek pro vaši fakturu je okamžitý a neokázalý: patches jsou pozice v sekvenci, takže jsou input tokens, takže za ně platíte vstupní sazbu. Kolik jich je, to je aritmetika, a každý provider ji dělá jinak.
Tři pravidla, všechna zveřejněná, žádné stejné
Odkaz na sekci: Tři pravidla, všechna zveřejněná, žádné stejnéKaždé pravidlo níže je implementované z vlastní dokumentace providera a ověřené proti vypracovaným příkladům ve stejné dokumentaci.
OpenAI pokryje obrázek patchi 32 × 32 a počet vynásobí faktorem podle modelu. Pokud počet patchů překročí rozpočet pro daný model a úroveň detailu, obrázek se zmenšuje, dokud se nevejde:
Anthropic ho pokryje patchi 28 × 28, jeden visual token každý, a omezuje jak dlouhou hranu, tak počet tokenů — 1 568 pixelů a 1 568 tokenů u modelů standardní úrovně, 2 576 a 4 784 u high-resolution úrovně. Příliš velké obrázky se zmenší na největší velikost, která splní obě podmínky.5
Google pixely nepočítá vůbec. Obrázek, jehož obě strany mají nejvýše 384 pixelů, stojí paušálně 258 tokenů. Cokoli většího se řeže na tiles po 258 tokenech a mřížka tiles vychází z crop unit .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;
}Spusťte každé pravidlo proti číslům, která tiskne jeho vlastní vendor:
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 MATCHVytištěno je devět shod; celý běh kontroluje patnáct, protože Anthropicova tabulka uvádí obě úrovně pro všech šest velikostí. Pravidla teď můžete spustit na jakékoli své fotografii, a o to jde: tohle jsou jediné tři funkce v této kapitole, které nedostanete z cenové stránky.
Co znamená „větší“, třikrát
Odkaz na sekci: Co znamená „větší“, třikrátPošlete stejnou fotografii 4:3 přes všechny tři systémy v šesti velikostech:
| velikost | 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 |
Čtěte poslední sloupec dolů. Jakmile je obrázek nad 384 pixelů, číslo se už nikdy nezmění, a není to náhoda ani strop. Dosaďte crop unit zpět do tile vzorce pro obrázek alespoň tak široký jako vysoký:
Velikost se vykrátí. Google image tokens závisí na poměru stran a na ničem jiném. Fotografie 4:3 jsou čtyři tiles, ať je to thumbnail nebo plakát. Tento jediný algebraický fakt je celé vysvětlení nuly v tabulce úspor výše, a žádná cenová stránka ho nikde neříká.
Další dva sloupce místo toho narážejí na strop, v různých výškách a z různých důvodů — Anthropic na deklarovaný token ceiling, OpenAI na patch budget po pixel limitu — proto se tři křivky protínají u různých velikostí.
Teď to rozbijte. Zjevný způsob, jak za vision model utratit méně, je požádat o méně detailu, takže pošlete detail: "low":
1600x1200 low = 2280 high = 2280 ratio 1.00
3200x2400 low = 3687 high = 2942 ratio 1.25Požadavek na méně detailu stál o 25 % víc. Není to chyba a OpenAI to říká jedním řádkem v tabulce velikostí: u této rodiny modelů používá low limit 2048 pixelů s rozpočtem 6 144 patchů, zatímco high používá stejný pixel limit s rozpočtem 2 500 patchů, „takže může použít více tokenů než high“.7 Slovo low pojmenovává nastavení věrnosti, ne cenu: u dvou z pěti zdokumentovaných rodin modelů nepřináší žádnou úsporu a u jedné z těch dvou stojí víc.
Generování obrázku je jiný stroj
Odkaz na sekci: Generování obrázku je jiný strojVšechno doposud byl model, který obrázek čte. Vytvořit obrázek běží na mechanismu, v němž nejsou žádné tokeny, a právě proto se prodává za obrázek, ne za slovo.
Vytvoření obrázku: cena za obrázek je cena za token
Odkaz na sekci: Vytvoření obrázku: cena za obrázek je cena za tokenVendoři zveřejňují generování obrázků jako cenu za obrázek. Tou ale není. GPT Image modely emitují specializované image tokens, jejichž počet závisí na požadované velikosti a kvalitě; vynásobte zveřejněné počty publikovanou výstupní sazbou GPT Image 1 ve výši $40 za milion a porovnejte s cenami za obrázek na stejné stránce:
| kvalita | 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) |
Devět odvozených čísel proti devíti zveřejněným, každý pár se shodou do $0.002.11 Google je ještě explicitnější a převod dělá za vás přímo na cenové stránce: image output za $60 za milion tokenů, „výstupní obrázky v 1K (1024x1024px) spotřebují 1120 tokenů a odpovídají $0.067 za obrázek“.12
Cena za obrázek je tedy cena za token se zahrnutým počtem. To je v pořádku, a něco to skrývá. Vezměte tabulku aktuální generace a vydělte zpětně:
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 tokVětší obrázek je levnější při každé kvalitě. Canvas 1024 × 1536 má o 50 % víc pixelů než 1024 × 1024 a při medium stojí o 23 % méně tokenů. OpenAI to označuje ve větě, kterou byste přeskočili — „větší nečtvercové rozlišení může někdy vytvořit méně output tokens než menší nebo čtvercové rozlišení při stejném nastavení kvality“ — a u předchozí generace modelů to běželo opačně, portrait stál o 50 % víc než square.11 Každé výchozí 1024x1024 napsané před touto změnou je teď drahá volba.
Zvuk účtovaný po sekundách, znacích a tokenech
Odkaz na sekci: Zvuk účtovaný po sekundách, znacích a tokenechPožádejte tři produkty, aby přečetly stejných 519 znaků — asi 38 sekund audia — a od dvou vendorů dostanete tři systémy jednotek:
| model | jednotka | cena |
|---|---|---|
tts-1 | za znak | $15.00 za milion znaků → $0.007785 |
tts-1-hd | za znak | $30.00 za milion znaků → $0.015570 |
gemini-3.1-flash-tts | za audio token, 25 za sekundu | $20.00 za milion → $0.019319 |
Stejný vendor prodává obě jednotky: OpenAI tts-1 je oceněné za milion znaků, zatímco gpt-4o-mini-tts je oceněné za milion tokenů, $0.60 dovnitř a $12.00 ven.13 Takže „nejlevnější text-to-speech“ není otázka s odpovědí, dokud neřeknete, co se má číst.
A obě jednotky jsou slepé k opačným věcem. Cena za znak nevidí délku trvání: zvolte pomalý, rozvážný hlas nebo přidejte pauzy a účet se nepohne, zatímco audio se prodlouží. Cena za sekundu nevidí obsah: třicet sekund stojí stejně, ať je to hutný technický odstavec, nebo někdo počítá do deseti. Změňte hlas a přesně jeden z vašich dvou vendorů přecení.
Přepis běží opačně a je nejjednodušší řádek na celé faktuře — za minutu audia, paušálně:
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)Všimněte si posledního řádku proti třetímu: dělat to živě, jak slova přicházejí, stojí 5,7krát tolik co dělat to z hotového souboru. Ten rozdíl je cena za nemožnost batch, a právě kvůli němu je další sekce drahá.
Jedna minuta hlasu, rozepsaná po položkách
Odkaz na sekci: Jedna minuta hlasu, rozepsaná po položkáchTeď číslo, které rozhoduje, zda je hlas funkce, nebo produkt.
Hovor: podpůrná konverzace o deseti tazích, 149 slov, což při deklarovaných 150 slovech za minutu znamená 59,6 sekundy řeči — 21,2 vyřčených volajícím, 38,4 řečených zpět. Převody na tokeny jsou vlastní převody providerů. OpenAI: „audio tokens v user messages jsou 1 token na 100 ms audia, zatímco audio tokens v assistant messages jsou 1 token na 50 ms“.14 Google: 25 tokenů za sekundu v obou směrech, což jeho cenová stránka potvrzuje publikací $12.00 za milion a $0.018 za minutu na stejném řádku.12
Konverzace se akumuluje přesně tak, jak říkala Kapitola 16, protože je to stejný mechanismus: „celá konverzace se posílá modelu pro každý Response... pozdější tahy v session tedy budou dražší“.14 Jen teď se historie měří v audio tokens.
| tah | user | assistant | nové audio in | cached audio in | audio out | cena |
|---|---|---|---|---|---|---|
| 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 |
Teď srovnání, které rozhoduje produkt, všechny čtyři normalizované na minutu:
| za minutu | oproti textu | |
|---|---|---|
gpt-realtime-2.1, bez caching | $0.131259 | 37.9× |
gpt-realtime-2.1, historie cached | $0.057425 | 16.6× |
gemini-3.1-flash-live, bez caching | $0.023965 | 6.9× |
stejná slova napsaná, gpt-5.6-terra | $0.003461 | — |
Třicet osmkrát. Ne třicet osm procent. Identická výměna vedená zvukem místo textu je téměř o dva řády dražší, a žádná část toho rozdílu není marže, kterou se někdo rozhodl účtovat — je to převodní poměr. Jedna sekunda assistant audia je dvacet tokenů. Tatáž sekunda nese při deklarované rychlosti 2,5 slova a měřený přepis běží na 1,26 tokenu na slovo, takže jako text je to 3,15 tokenu. Zvuk je 6,3krát objemnější balík pro stejný význam a každý jeho token se účtuje 5,3krát vyšší sazbou než textový výstup a 16krát vyšší sazbou než textový vstup. Vynásobte objemový poměr cenovým poměrem a řád je jasný ještě před jakýmkoli účetnictvím.
Z tabulky přímo plynou dva provozní důsledky.
Audio caching není optimalizace, je to obchodní model. Cached audio input stojí $0.40 za milion proti $32.00 za fresh — sleva 98,75 %, která hovor zlevní na polovinu. Pravidlo je z Kapitoly 16, beze změny: cache páruje prefix, takže cokoli vložené doprostřed hovoru na začátek konverzace ji zničí, a přirozené místo, kam dát „volající je nyní ověřen“, je přesně tam.
A nic, co uděláte v klientu, zvuk neodúčtuje. Uživatel skočí asistentovi do řeči, váš kód zastaví přehrávání, reproduktor ztichne. Cokoli už bylo vygenerováno, už bylo účtováno, protože billing narůstá při vytvoření response; a podle pravidla Kapitoly 16 se cokoli, co zůstane v konverzaci, znovu posílá jako input audio při každém dalším tahu. Kapitola 14 to říkala o přerušení textového streamu. U hlasu to stojí třicetkrát víc.
Video, GPU-sekundy a cena, která není cena
Odkaz na sekci: Video, GPU-sekundy a cena, která není cenaVideo někteří vendoři prodávají za sekundu a jiní za klip, s úrovněmi pro rozlišení a někdy pro délku. Tyto dva tvary se neliší jen pohodlím; protínají se.
| model | 1 s | 2 s | 5 s | 10 s | 20 s |
|---|---|---|---|---|---|
veo-3.1, za sekundu, 1080p | $0.400 | $0.800 | $2.000 | $4.000 | $8.000 |
veo-3.1-fast, za sekundu, 1080p | $0.120 | $0.240 | $0.600 | $1.200 | $2.400 |
sora-2, za sekundu, 720p | $0.100 | $0.200 | $0.500 | $1.000 | $2.000 |
hailuo-02, za klip, 1080p | $0.480 | $0.480 | $0.480 | $0.480 | $0.480 |
mochi, za GPU-sekundu | $0.018 | $0.037 | $0.092 | $0.183 | $0.366 |
Vendor účtující za klip je dražší než ten sekundový pod 1,2 sekundy a 16,7krát levnější u dvaceti sekund. Žádné pořadí těchto dvou modelů nepřežije změnu délky klipu, takže „který video model je nejlevnější“ není otázka na modely.
Poslední řádek je horší, a je poctivým jádrem kapitoly. mochi se účtuje podle skutečných GPU sekund — naměřeného prediction time jobu — za $0.001400 za sekundu na A100 a $0.001525 na H100, což jsou sazby pronajatého stroje a nic jiného.15 Je to dokonale přesný tarif a není to cena, protože veličina, kterou násobí, není známa, dokud se nezavážete ji zaplatit. Řádek výše předpokládá dvanáct GPU-sekund na sekundu výstupu; zčtyřnásobte ten předpoklad a opustí nejlevnější pásmo, a teprve při šestinásobku dopadne doprostřed tabulky. Je to jediný tarif na této stránce, který nemůžete dát do nabídky.
Normalizátor
Odkaz na sekci: NormalizátorTakže: tokens, image tokens, znaky, minuty, video sekundy, celé klipy, GPU sekundy, paušální jednotky. Osm veličin, a jediný způsob, jak je dát na jednu osu, je deklarovat workload a ocenit ho.
To je rozšíření computeCost z Kapitoly 16 — stejný tier mechanismus, teď s kritérii, která nejsou délka prompt:
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;
}Dva označené řádky ukazují, kde se to láme. Tarif uvedený za jednotku násobí u.images ?? 1; tarif uvedený za token násobí něco, co má výchozí nulu. Nakrmte obojí prázdným usage — tvarem, který dostanete, když měření selhalo — a dívejte 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.0000Nic se nestalo, šestkrát, a jednou to stálo tři dolary a pětkrát nic. To není rozdíl v zaokrouhlení; je to rozhodnutí o tom, co znamená chybějící číslo, učiněné zvlášť pro každou jednotku a nikde nezapsané. Rozumné pravidlo je, že pole, které nikdo neměřil, zůstává absent, protože „neměřeno“ a „změřeno a vyšlo nula“ jsou různé věci. Tato funkce tiše nesouhlasí.
Druhé selhání je délka trvání. Tarif za klip vybírá tier pomocí maxDurationSeconds proti u.videoSeconds ?? 0, takže usage, které nikdy nezaznamenalo duration, odpovídá nejkratší úrovni:
duration recorded -> $0.45
duration missing -> $0.27Čtyřicetiprocentní sleva za to, že nevíte, jak dlouhé video bylo. Obě chyby mají stejný kořen: default zvolený pro pohodlí uvnitř funkce, jejímž jediným úkolem je být přesná.
Jak udělat číslo srovnatelné
Odkaz na sekci: Jak udělat číslo srovnatelnéKdyž jsou náklady spočitatelné, srovnání potřebuje druhou polovinu — deklarovaný reprezentativní workload, jeden pro každý engine, zveřejněný tak, aby s ním čtenář mohl nesouhlasit:
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 },
};Každý z těchto řádků je argument. Text míchá čtvrtinu vstupu a tři čtvrtiny výstupu, protože reálné použití se kloní k výstupu; směs padesát na padesát seřadí modely jinak. Image workload předpokládá 1 500 output tokens, mezi 1 056 OpenAI pro medium square a 1 584 pro medium portrait. Video předpokládá pět sekund při 1080p, a právě jsme viděli dva vendory prohodit si místa při 1,2 sekundy. Compute položka předpokládá šedesát GPU-sekund, protože není co jiného předpokládat.
To je metoda, a je jediná poctivá dostupná: nemůžete porovnávat ceny v různých jednotkách; můžete porovnávat jen náklady workload, který jste zapsali. Jakákoli tabulka řadící multimodální modely bez vytištění workload řadí vlastní předpoklady.
Kam to vede dál
Odkaz na sekci: Kam to vede dálTeď umíte ocenit cokoli, co model dokáže vytvořit, v jakékoli jednotce se to prodává, a nahlas říct, jaký workload vaše srovnání předpokládalo. Tím se uzavírá faktura otevřená Kapitolou 16 a uzavírá se Část III: všechno od Kapitoly 14 až sem bylo o jednom volání — jak ho udělat, co do něj dát, jak ho sample, co vrací, co stojí.
Kapitola 22 mění jednotku analýzy, a ta změna je drahá. Agent není jedno volání; je to smyčka, která sama rozhoduje, kolik volání udělá, a aritmetika posledních dvou kapitol je to, co z architektonického diagramu dělá rozpočet. Začíná tím, že stejnému modelu položí stejnou otázku dvakrát, podruhé s jedním tool přidaným do katalogu, a změří, co ten jeden tool udělal: jedno volání se stalo dvěma, třicet devět input tokens se stalo 420.
Jestli z něj tohle dělá agent, záleží na tom, kterou ze dvou publikovaných definic otevřete, a ty se neshodují. Jedna z nich se neshoduje ani sama se sebou.
Zdroje a metoda
Odkaz na sekci: Zdroje a metodaKaždá cena, vzorec a převodní sazba v této kapitole byly přečteny z vlastní stránky providera dne 7. září 2026 a jsou citovány s tímto datem, protože všechny se budou měnit. Počty tokenů, náklady a srovnání byly spočítány z těchto dat kódem vytištěným výše, na jednom stroji, bez placeného API volání — což je také poctivý důvod, proč v této kapitole není jediné tvrzení o latenci.
Image-token funkce, cenové tabulky, rozpis hlasového hovoru a výsledky empty-usage byly vytvořeny TypeScriptem vytištěným v této kapitole, spuštěným na Node 22. Dialog použitý pro hlasové srovnání má 149 slov a byl tokenizován pomocí tiktoken pod encoding o200k_base na 188 tokenů; jeho duration vychází z deklarované rychlosti 150 slov za minutu, což je parametr srovnání, ne měření. Každý údaj providera nese poznámku pod čarou, která jmenuje stránku, odkud pochází.
Reference
Odkaz na sekci: Reference-
Dosovitskiy, A. et al. An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale. arXiv:2010.11929 (2020). Patches, lineární projekce do embedding dimenze a position embeddings, díky nimž je mřížka čitelná pro sekvenční model. ↩
-
Radford, A. et al. Learning Transferable Visual Models From Natural Language Supervision. arXiv:2103.00020 (2021). Kontrastivní trénink image encoderu a text encoderu na 400 milionech dvojic a sdílený prostor, který všechno navazující předpokládá. ↩
-
Alayrac, J.-B. et al. Flamingo: a Visual Language Model for Few-Shot Learning. arXiv:2204.14198 (2022). Zmrazený vision encoder, zmrazený jazykový model, natrénované přemosťovací vrstvy — architektura, která změnila image understanding v chat capability. ↩
-
Liu, H., Li, C., Wu, Q. and Lee, Y. J. Visual Instruction Tuning. arXiv:2304.08485 (2023). Jedna lineární projekce jako most a generovaná instruction data jako trénovací sada; důvod, proč otevřené vision-language modely konvergovaly k jednomu tvaru. ↩
-
Anthropic, Vision,
platform.claude.com/docs/en/build-with-claude/vision, přístup 2026-09-07. „Claude zobrazuje obrázky v patchích místo pixelů. Každý patch je blok obrázku 28×28 pixelů, označovaný jako visual token. Obrázek proto stojí ⌈width / 28⌉ × ⌈height / 28⌉ visual tokens.“ Také dvě úrovně rozlišení (standard: dlouhá hrana 1568 pixelů, 1568 visual tokens; high-resolution, na Claude 4.7 a novějších: 2576 pixelů a 4784 tokenů), pravidlo zmenšování a výše reprodukovaná šestiradá tabulka velikostí a počtů tokenů. Sazby modelu z Anthropic, Pricing,platform.claude.com/docs/en/about-claude/pricing, stejné datum: Claude Haiku 4.5 za $1 a $5 za milion input a output tokens. ↩ -
Google, Image understanding,
ai.google.dev/gemini-api/docs/image-understanding, přístup 2026-09-07. „258 tokenů, pokud jsou oba rozměry <= 384 pixelů. Větší obrázky se tileují do tiles 768x768 pixelů, každý za 258 tokenů“, s crop-unit vzorcem —floor(min(width, height) / 1.5), rozměry vydělené jím a vynásobené dohromady — a vypracovaným příkladem 960 × 540 dávajícím 3 × 2 = 6 tiles. Google tomu říká „hrubý vzorec“; scale-invariance odvozená výše je vlastnost vzorce tak, jak je zveřejněn. Audio input na stejné rodině je 32 tokenů za sekundu audia (ai.google.dev/gemini-api/docs/audio, stejné datum). ↩ -
OpenAI, Images and vision,
developers.openai.com/api/docs/guides/images-vision, přístup 2026-09-07. Zdroj pravidla založeného na patchích (patche 32 × 32,patch_count = ceil(width/32)×ceil(height/32), vzorecshrink_factora jeho celočíselná úprava, limit odmítnutí 30 000 patchů); tabulky sizing modelu, včetně toho, želownagpt-5.4používá 2048pixelový limit a rozpočet 6 144 patchů „takže může použít více tokenů nežhigh“, proti rozpočtu 2 500 patchů uhigh; tabulky multiplikátorů (1.2 pro rodiny GPT-5.x, 1.62 progpt-4.1-mini, 2.46 progpt-4.1-nano); dvou vypracovaných příkladů reprodukovaných výše (1024 × 1024 → 1229 tokenů, 2048 × 2048 → 3000 tokenů); tile pravidel pro starší modely (base plus 512pixelové tiles, 85 + 170 ugpt-4o); a seznamu omezení citovaného ve vision boxu. ↩ ↩2 -
Ho, J., Jain, A. and Abbeel, P. Denoising Diffusion Probabilistic Models. arXiv:2006.11239 (2020). Dopředný noising schedule, reparametrizace, která mění objective na predikci přidaného šumu, a sampling loop. ↩
-
Rombach, R., Blattmann, A., Lorenz, D., Esser, P. and Ommer, B. High-Resolution Image Synthesis with Latent Diffusion Models. arXiv:2112.10752 (2022). Spuštění diffusion procesu v komprimovaném latentním prostoru, díky čemuž byl pevný počet kroků dost levný na prodej za obrázek. ↩
-
Prince, S. J. D. Understanding Deep Learning (MIT Press, 2023), kapitola 18. Deklarované delegování všeho, co tato kapitola přeskočila o diffusion — variační mez, noise schedules, classifier-free guidance a rodiny samplerů. Hu, E. et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv:2106.09685 (2021), je samotný adapter, představený v Kapitole 11 na jazykovém modelu a zde použitý na image modelu beze změny matematiky. Radford, A. et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), arXiv:2212.04356 (2022), je transcription model, jehož minutová cena se objevuje výše. ↩
-
OpenAI, Image generation,
developers.openai.com/api/docs/guides/image-generation, Pricing,developers.openai.com/api/docs/pricing, a stránka modelu progpt-image-1, vše s přístupem 2026-09-07. Stránka modelu progpt-image-2neobsahuje pricing sekci; jeho sazby pocházejí z cenové stránky výše. Stránka GPT Image 1 zveřejňuje text input za $5.00, image input za $10.00 a image output za $40.00 za milion tokenů vedle tabulky cen za obrázek použité v odvození výše. Dále: tabulka output-token pro modely před gpt-image-2 (272 / 408 / 400 low, 1056 / 1584 / 1568 medium, 4160 / 6240 / 6208 high, pro square, portrait a landscape); tabulky cen za obrázek pro GPT Image 2, 1.5, 1 a 1 Mini použité v odvozeních výše; věta „větší nečtvercové rozlišení může někdy vytvořit méně output tokens než menší nebo čtvercové rozlišení při stejném nastavení kvality“; poznámka, že každý streamovaný partial image stojí dalších 100 image output tokens; a sazby gpt-image-2 $8.00 image input, $2.00 cached image input, $30.00 image output a $5.00 text input za milion tokenů. Sazby textových modelů použité pro srovnání:gpt-5.6-terraza $2.00 input, $0.20 cached input a $12.00 output,gpt-5.6-lunaza $0.20 a $1.20, standard tier, short context. Video:sora-2za $0.10 za sekundu při 720p asora-2-proza $0.30, $0.50 a $0.70 při 720p, 1024p a 1080p. Přepis: $0.006, $0.0045, $0.003 a $0.017 za minutu progpt-4o-transcribe,gpt-transcribe,gpt-4o-mini-transcribeagpt-live-transcribe. ↩ ↩2 -
Google, Gemini Developer API pricing,
ai.google.dev/gemini-api/docs/pricing, přístup 2026-09-07. Gemini 3.1 Flash-Lite za $0.25 za milion input tokens (text, image a video) a $1.50 output. Gemini 3.1 Flash Image: image output za $60 za milion tokenů, se zveřejněnými ekvivalencemi 747, 1120, 1680 a 2520 tokenů pro 0.5K, 1K, 2K a 4K obrázky a jejich cenami za obrázek $0.045, $0.067, $0.101 a $0.151. Gemini 3.1 Flash TTS: $1.00 text input, $20.00 audio output, „audio tokens odpovídají 25 tokenům za sekundu audia“. Gemini 3.1 Flash Live Preview: $0.75 text a „$3.00 nebo $0.005/min“ audio input, „$4.50 (text) $12.00 nebo $0.018/min (audio)“ output. Veo 3.1 za sekundu s audiem: $0.40 při 720p a 1080p a $0.60 při 4K standard; $0.10, $0.12 a $0.30 fast. Gemini Omni Flash účtuje video output „sazbou 5 792 tokenů za sekundu 720p videa“, což stejná poznámka převádí na zhruba $0.10 za sekundu — nejjasnější zveřejněné tvrzení kdekoli, že sekundová cena médií je token cena. ↩ ↩2 -
Stránky modelů OpenAI pro
tts-1,tts-1-hdagpt-4o-mini-tts,developers.openai.com/api/docs/models, přístup 2026-09-07.tts-1za $15.00 atts-1-hdza $30.00 za milion znaků;gpt-4o-mini-ttsza $0.60 za milion text input tokens a $12.00 za milion audio output tokens — stejný vendor, stejná operace, dvě jednotky. ↩ -
OpenAI, Managing costs (Realtime API),
developers.openai.com/api/docs/guides/realtime-costs, přístup 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.“ Také: „The entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive“; náklady narůstají při vytvoření Response; vypracovaný dvoutahový příklad, jehož akumulaci reprodukuje tabulka výše; a usage payloadresponse.dones rozdělenímiinput_token_detailsaoutput_token_details. Sazby z cenové stránky, stejné datum:gpt-realtime-2.1audio za $32.00 input, $0.40 cached input a $64.00 output za milion tokenů, text za $4.00, $0.40 a $24.00, image input za $5.00. ↩ ↩2 -
Replicate, Pricing,
replicate.com/pricing, přístup 2026-09-07. Nvidia A100 (80GB) za $0.001400 za sekundu a $5.04 za hodinu; Nvidia H100 za $0.001525 za sekundu a $5.49 za hodinu. ↩