Multimodal fiyatlandırma: Görsel, ses ve video gerçekte neyi faturalar
Aynı 500 fotoğraf üç modelde 5,5 kata varan fark yaratır; biri görselleri yeniden boyutlandırınca en ucuz seçenek değişir.
Bu sayfada
İşte tek bir iş, üç farklı fiyatla: beş yüz ürün fotoğrafını betimle, her biri için kısa bir caption. Aynı fotoğraflar, aynı instruction, aynı cevap uzunluğu. Değişen tek şey onları hangi modelin okuduğu.
| fotoğraf | 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 |
Bu tabloda durup bakmaya değer üç şey var.
En ucuz model, aynı işte üçüncü satırla dördüncü satır arasında değişiyor, çünkü biri fotoğrafları yeniden boyutlandırmış. Caption yerine bir paragraf iste, kesişim noktası yine yer değiştirir: 1280 × 960’ta kazanan kırk token’lık caption için Gemini, dört yüz token’lık paragraf için OpenAI olur.
Gemini sütunu hiçbir satırda hiç oynamıyor: 4000 × 3000 fotoğraf ona tam olarak 640 × 480 fotoğraf kadar maliyet çıkarıyor. 4000 × 3000 fotoğraf, 640 × 480 fotoğrafla tam olarak aynı maliyette. Bu bir cap değil. Nasıl saydığının sonucu; ve bu sektördeki en yaygın maliyet optimizasyonunun — yüklemeden önce downsample et — getirisi şöyle oluyor:
| image tokens, 4000 × 3000 → 800 × 600 | çalıştırma maliyeti | tasarruf | |
|---|---|---|---|
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 % |
Bu sayıların hiçbiri vendor’ın yayımladığı bir fiyat değil. Üçü de üç farklı kuraldan hesaplanmak zorunda kaldı, çünkü fotoğraf hiçbir yerde faturalandırılabilir birim değil: önce token’a dönüştürülür; üstelik aritmetiği üç uyumsuz yerde yazılıdır.
Chapter 16 metin için faturayı kurdu ve metnin bittiği yerde durdu. Bu chapter faturanın geri kalanı: görseller, konuşma, transcription, video ve raw compute. Bunlar birlikte sekiz farklı birimde faturalanıyor; aynı ölçüyle satılmayan şeyleri karşılaştırmanın yöntemi de burada.
Ayrıntıları göster
Bu chapter’ın öncekilerden istediği şey.
- Chapter 7 tokenizer’ı ve birimi kurdu. Buradaki her şey, metin olmayan bir şeyi o birime dönüştürme girişimi.
- Chapter 8 modelin ne tükettiğini belirledi: semboller değil, embedding uzayındaki vektörler. Bir görselin token cinsinden fiyatlanabilmesinin nedeni bu.
- Chapter 16
computeCost’i, fiyat katmanlarını ve beş token bucket’ını kurdu. Bu chapter o function’ı değiştirmek yerine genişletiyor. - Chapter 11 LoRA’yı bir fine-tuning tekniği olarak tanıttı ve Chapter 20 onu bir bütçe kararı olarak fiyatladı. Burada language model olmayan bir modelde karşımıza çıkıyor.
Chapter 14’teki kurala göre tensor yok: konu tarifeler, dönüşümler ve muhasebe; bu yüzden TypeScript.
Bir fotoğrafın neden token fiyatı var
Bölüme bağlantı: Bir fotoğrafın neden token fiyatı varBir transformer vektör dizisi alır. Bu vektörlerin nereden geldiği konusunda fikri yoktur. Chapter 8 ona bir token id’den bakılan embeddings verdi; mimaride bu lookup’ın zorunlu olduğu hiçbir şey yok.
Yani: resmi sabit karelere böl, her kareyi sayı listesine düzleştir ve her listeyi öğrenilmiş tek bir linear layer’dan geçirerek model genişliğinde bir vektör elde et. Renkli piksellerden oluşan 32 × 32 patch sayıdır; projection onu tek bir boyutlu vektöre çevirir; bu da bir text token’ın geldiği şeklin aynısıdır. Hepsi bu; başlığı da bunu söyleyen makale: bir görsel 16 × 16 kelime değerindedir.1 Model hangi karenin nerede olduğunu bilsin diye positional encoding ekle, sonuçları text embeddings ile iç içe geçir; modelin okuduğu sequence artık kısmen resim, kısmen cümledir.
Üç makale bunu ürüne dönüştürdü. CLIP, dört yüz milyon scraped pair üzerinde bir image encoder ile text encoder’ı aynı şeyi söylemeye eğitti; piksellerin ve kelimelerin ortak bir uzayı paylaşabileceği fikri hipotez olmaktan orada çıktı.2 Flamingo, frozen vision encoder’ı frozen language model’e birkaç eğitilmiş bridging layer ile bağladı.3 LLaVA, köprünün tek bir linear projection olabileceğini ve instruction-following’in generated data ile öğretilebileceğini gösterdi; bu yüzden o zamandan beri her open vision-language model kabaca aynı görünüyor.4
Faturan için sonuç anında ve gösterişsizdir: patch’ler sequence içindeki position’lardır; yani input token’dır; yani bunları input rate üzerinden ödersin. Kaç tane olduğu aritmetiktir ve her provider bunu farklı yapar.
Üç kural, hepsi yayımlanmış, hiçbiri aynı değil
Bölüme bağlantı: Üç kural, hepsi yayımlanmış, hiçbiri aynı değilAşağıdaki her kural provider’ın kendi dokümantasyonundan uygulanmış ve aynı dokümantasyondaki worked example’lara karşı kontrol edilmiştir.
OpenAI görseli 32 × 32 patch’lerle kaplar ve sayıyı model başına bir katsayıyla çarpar. Patch sayısı o model ve detail level için bütçeyi aşarsa, görsel sığana kadar küçültülür:
Anthropic görseli 28 × 28 patch’lerle kaplar, her biri bir visual token’dır, ayrıca hem long edge’i hem token count’u cap’ler — standard-tier modellerde 1.568 piksel ve 1.568 token, high-resolution tier’da 2.576 ve 4.784. Fazla büyük görseller, ikisine de sığan en büyük boyuta ölçeklenir.5
Google piksel saymaz. İki kenarı da 384 piksel veya altında olan görsel flat 258 token tutar. Daha büyük her şey, her biri 258 token olan tile’lara bölünür ve tile grid’i crop unit’inden gelir.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;
}Her birini kendi vendor’ının yayımladığı sayılarla çalıştır:
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 MATCHDokuz eşleşme basılır; tam run on beşini kontrol eder, çünkü Anthropic’in tablosu altı boyutun tamamı için iki tier’ı da verir. Kurallar artık herhangi bir fotoğrafın üzerinde çalıştırman için sende; mesele de bu: bu chapter’daki, price page’den alamayacağın tek üç function bunlar.
“Daha büyük” ne demek, üç ayrı cevap
Bölüme bağlantı: “Daha büyük” ne demek, üç ayrı cevapAynı 4:3 fotoğrafı altı boyutta üçünün de içinden geçir:
| boyut | 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 |
Son sütunu aşağı doğru oku. Resim 384 pikseli aştığı anda sayı bir daha değişmiyor; bu tesadüf de değil, cap de değil. En az genişliği kadar yüksek olmayan bir görsel için crop unit’i tile formülüne geri koy:
Boyut sadeleşir. Google’ın image tokens’ı aspect ratio’ya bağlıdır, başka hiçbir şeye değil. 4:3 fotoğraf ister thumbnail ister poster olsun dört tile’dır. Yukarıdaki tasarruf tablosundaki sıfırın tüm açıklaması bu tek cebirsel gerçek; bunu hiçbir price page açıkça söylemez.
Diğer iki sütun ise cap’ler; farklı yüksekliklerde ve farklı sebeplerle — Anthropic beyan edilmiş token ceiling’de, OpenAI pixel limit sonrasında patch budget’ta — bu yüzden üç eğri farklı boyutlarda kesişir.
Şimdi boz. Vision modelde daha az harcamak için bariz yol daha az detail istemektir; o yüzden detail: "low" gönder:
1600x1200 low = 2280 high = 2280 ratio 1.00
3200x2400 low = 3687 high = 2942 ratio 1.25Daha az detail istemek %25 daha pahalıya çıktı. Bu bug değil; OpenAI sizing table’da bunu tek satırda söylüyor: o model family’de low 2048-pixel limit ile 6.144-patch budget kullanırken high aynı pixel limit’i 2.500-patch budget ile kullanıyor, “so it can use more tokens than high”.7 low kelimesi price değil fidelity setting adıdır: belgelenmiş beş model family’nin ikisinde hiç tasarruf sağlamaz, o ikisinden birinde daha pahalıya gelir.
Bir tane üretmek farklı bir makine
Bölüme bağlantı: Bir tane üretmek farklı bir makineBuraya kadar her şey bir modelin görsel okumasıydı. Bir görsel yapmak içinde hiç token olmayan bir mekanizmada çalışır; bu yüzden kelime başına değil, resim başına satılır.
Görsel yapmak: resim başı fiyat, token başı fiyattır
Bölüme bağlantı: Görsel yapmak: resim başı fiyat, token başı fiyattırVendor’lar image generation’ı resim başına fiyat olarak yayımlar. Aslında değildir. GPT Image modelleri, sayısı istenen size ve quality’ye bağlı specialised image tokens üretir; yayımlanan count’ları GPT Image 1’in yayımlanmış image output rate’i olan milyon başına $40 ile çarp ve aynı sayfadaki per-image prices ile karşılaştır:
| quality | 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) |
Dokuz türetilmiş rakam, dokuz yayımlanmış rakama karşı; her çift $0.002 içinde uyuşuyor.11 Google daha da açık davranıyor ve conversion’ı price page’de senin için yapıyor: image output milyon token başına $60, “output images at 1K (1024x1024px) consume 1120 tokens and are equivalent to $0.067 per image”.12
Yani per-image price, count’u içine katlanmış per-token price’tır. Bunda sorun yok; ama bir şeyi saklar. Güncel generation’ın tablosunu al ve geriye doğru böl:
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 tokDaha büyük görsel her quality’de daha ucuz. 1024 × 1536 canvas, 1024 × 1024’ten %50 daha fazla piksel içeriyor ve medium’da %23 daha az token tutuyor. OpenAI bunu atlayacağın bir cümlede işaretliyor — “a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting” — ve önceki model generation’da tam tersi çalışıyordu: portrait, square’den %50 daha pahalıydı.11 Bu değişiklikten önce yazılmış her 1024x1024 default’u artık pahalı seçenek.
Ses; saniye, karakter ve token ile faturalanır
Bölüme bağlantı: Ses; saniye, karakter ve token ile faturalanırÜç üründen aynı 519 karakteri — yaklaşık 38 saniye audio — konuştur; iki vendor’dan üç unit system çıkar:
| model | birim | fiyat |
|---|---|---|
tts-1 | karakter başına | milyon karakter başına $15.00 → $0.007785 |
tts-1-hd | karakter başına | milyon karakter başına $30.00 → $0.015570 |
gemini-3.1-flash-tts | audio token başına, saniyede 25 | milyon başına $20.00 → $0.019319 |
Aynı vendor iki birimi de satıyor: OpenAI’ın tts-1’i milyon karakter başına fiyatlanırken gpt-4o-mini-tts milyon token başına, $0.60 input ve $12.00 output olarak fiyatlanıyor.13 Yani “en ucuz text-to-speech” ne konuşturduğunu söylemeden cevaplanabilecek bir soru değil.
Ve iki birim zıt şeylere kör. Karakter başına fiyat duration’ı göremez: yavaş, tane tane bir voice seç veya pause ekle; audio uzarken fatura oynamaz. Saniye başına fiyat content’i göremez: otuz saniye ister yoğun bir teknik paragraf olsun ister birinin ona kadar sayması, aynı tutar. Voice’u değiştir, iki vendor’ından tam biri yeniden fiyatlar.
Transcription ters yönde çalışır ve tüm faturanın en basit satırıdır — audio dakika başına, flat:
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)Son satırı üçüncüye karşı not et: işi kelimeler gelirken live yapmak, bitmiş dosyada yapmanın 5,7 katı. Bu fark batch yapamamanın fiyatıdır ve sonraki bölümü pahalı kılan da budur.
Bir dakikalık voice, kalem kalem
Bölüme bağlantı: Bir dakikalık voice, kalem kalemŞimdi voice’un özellik mi ürün mü olduğunu belirleyen sayı.
Call: on turn’lük bir support conversation, 149 kelime; beyan edilen 150 words per minute ile 59,6 saniye speech — 21,2’si caller’dan, 38,4’ü geri konuşulmuş. Token dönüşümleri provider’ların kendi dönüşümleri. 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: iki yönde de saniyede 25 token; bunu price page’i aynı satırda $12.00 per million ve $0.018 per minute yayımlayarak doğruluyor.12
Conversation tam Chapter 16’nın söylediği gibi birikir, çünkü mekanizma aynıdır: “the entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive”.14 Tek fark, history’nin artık audio tokens ile ölçülmesi.
| turn | 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 |
Şimdi ürünü belirleyen karşılaştırma; dört satır da bir dakikaya normalize edilmiş:
| dakika başına | metne göre | |
|---|---|---|
gpt-realtime-2.1, caching yok | $0.131259 | 37.9× |
gpt-realtime-2.1, history cached | $0.057425 | 16.6× |
gemini-3.1-flash-live, caching yok | $0.023965 | 6.9× |
aynı kelimeler typed, gpt-5.6-terra | $0.003461 | — |
Otuz sekiz kat. Otuz sekiz per cent değil. Ses yerine metinle yapılan aynı exchange neredeyse iki order of magnitude daha pahalı ve bu farkın hiçbiri birinin koymayı seçtiği margin değil — conversion rate. Bir saniye assistant audio yirmi token’dır. Aynı saniye beyan edilen rate’te 2,5 kelime taşır ve measured transcript kelime başına 1,26 token’dır; yani text olarak 3,15 token. Sound aynı meaning için 6,3 kat daha hacimli bir paket; ayrıca token’larının her biri text output rate’in 5,3 katı ve text input rate’in 16 katı üzerinden faturalandırılır. Bulk ratio’yu price ratio ile çarp; muhasebe başlamadan order of magnitude zaten oradadır.
Tablodan iki operational sonuç doğrudan çıkar.
Audio caching optimizasyon değil, business model’dir. Cached audio input milyon başına $0.40, fresh ise $32.00 — call’u yarıya indiren %98,75 discount. Kural Chapter 16’nınkiyle aynı: cache bir prefix eşleşmesi arar; dolayısıyla call ortasında conversation’ın başına eklenen her şey onu bozar ve “caller artık verified” bilgisini koymanın doğal yeri tam da orasıdır.
Client’ta yaptığın hiçbir şey sesi faturadan düşürmez. User assistant’ın üstüne konuşur, kodun playback’i durdurur, speaker susar. Üretilmiş olan ne varsa zaten charge edilmiştir, çünkü billing response oluşturulduğunda accrue eder; Chapter 16’nın kuralıyla, conversation’da kalan her şey sonraki her turn’de input audio olarak yeniden gönderilir. Chapter 14 bunu text stream’i abort etmek için söyledi. Voice’ta otuz kat daha pahalıdır.
Video, GPU-second ve fiyat olmayan fiyat
Bölüme bağlantı: Video, GPU-second ve fiyat olmayan fiyatVideo bazı vendor’larda saniye başına, bazılarında clip başına satılır; resolution ve bazen duration için tier’lar vardır. Bu iki shape yalnızca convenience açısından farklı değildir; kesişirler.
| model | 1 s | 2 s | 5 s | 10 s | 20 s |
|---|---|---|---|---|---|
veo-3.1, saniye başına, 1080p | $0.400 | $0.800 | $2.000 | $4.000 | $8.000 |
veo-3.1-fast, saniye başına, 1080p | $0.120 | $0.240 | $0.600 | $1.200 | $2.400 |
sora-2, saniye başına, 720p | $0.100 | $0.200 | $0.500 | $1.000 | $2.000 |
hailuo-02, clip başına, 1080p | $0.480 | $0.480 | $0.480 | $0.480 | $0.480 |
mochi, GPU-second başına | $0.018 | $0.037 | $0.092 | $0.183 | $0.366 |
Clip başına satan vendor, 1,2 saniyenin altında saniye başına satandan pahalı; yirmi saniyede 16,7 kat ucuz. Bu iki modelin sıralaması clip length değişince ayakta kalmaz; yani “hangi video modeli en ucuz” model hakkında bir soru değildir.
Son satır daha kötü ve bu chapter’ın dürüst kalbi orası. mochi real GPU seconds üzerinden faturalanır — job’ın measured prediction time’ı — A100’de saniye başına $0.001400, H100’de $0.001525; bunlar kiralanan makinenin rate’leridir, başka bir şey değil.15 Bu tamamen precise bir tariff’tır ve price değildir, çünkü çarptığı quantity ödemeyi kabul ettikten sonra belli olur. Yukarıdaki satır output’un her saniyesi için on iki GPU-second varsayar; bu varsayımı dörtle çarp, en ucuz band’dan çıkar; ancak altı katında tablonun ortasına iner. Bu sayfadaki, quote’a koyamayacağın tek tariff budur.
Normalizer
Bölüme bağlantı: NormalizerYani: tokens, image tokens, characters, minutes, video seconds, whole clips, GPU seconds, flat units. Sekiz quantity ve bunları tek eksene koymanın tek yolu bir workload beyan edip onu fiyatlamaktır.
Bu, Chapter 16’nın computeCost uzantısıdır — aynı tier machinery, artık prompt length olmayan criteria ile:
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;
}İşaretli iki satır kırıldığı yer. Unit başına quoted tariff u.images ?? 1 ile çarpılır; token başına quoted tariff default’u sıfır olan bir şeyle çarpılır. İkisine de empty usage ver — measurement fail olduğunda aldığın shape — ve izle:
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.0000Altı kez hiçbir şey olmadı; birinde üç dolar tuttu, beşinde hiçbir şey tutmadı. Bu rounding difference değil; eksik bir sayının ne anlama geldiği hakkında, her unit için ayrı alınmış ve hiçbir yerde yazılmamış bir karar. Sağlam kural, kimsenin ölçmediği bir field’ın absent kalmasıdır, çünkü “ölçülmedi” ile “ölçüldü ve sıfır çıktı” farklı şeylerdir. Bu fonksiyon sessizce buna katılmıyor.
İkinci failure duration. Clip-priced tariff tier’ını maxDurationSeconds ile u.videoSeconds ?? 0’ye karşı seçiyor; yani duration kaydetmemiş usage en kısa tier ile eşleşiyor:
duration recorded -> $0.45
duration missing -> $0.27Videonun ne kadar sürdüğünü bilmediğin için yüzde kırk indirim. İki bug’ın root’u aynı: işi exact olmak olan bir function’ın içinde convenience için seçilmiş default.
Sayıyı karşılaştırılabilir yapmak
Bölüme bağlantı: Sayıyı karşılaştırılabilir yapmakCost’lar computable olduğuna göre karşılaştırmanın diğer yarısı gerekir — engine başına bir tane, kamuya açık ifade edilen, okuyucunun itiraz edebileceği declared representative workload:
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 },
};Bu satırların her biri bir argümandır. Text dörtte bir input, dörtte üç output karıştırır çünkü gerçek usage output’a kayar; fifty-fifty blend modelleri farklı sıralar. Image workload, OpenAI’ın medium square için 1.056’sı ile medium portrait için 1.584’ü arasında, 1.500 output token varsayar. Video beş saniye 1080p varsayar; az önce iki vendor’ın 1,2 saniyede yer değiştirdiğini gördük. Compute entry altmış GPU-second varsayar çünkü varsayacak başka hiçbir şey yok.
Yöntem budur ve eldeki tek dürüst yöntem de budur: farklı unit’lerdeki price’ları karşılaştıramazsın; yalnızca yazıya döktüğün bir workload’un cost’unu karşılaştırabilirsin. Workload’unu basmadan multimodal modelleri sıralayan her tablo, kendi assumptions’ını sıralıyordur.
Buradan sonrası
Bölüme bağlantı: Buradan sonrasıArtık bir modelin üretebildiği her şeyi, hangi unit’te satılırsa satılsın fiyatlayabilir ve comparison’ın hangi workload’u varsaydığını yüksek sesle söyleyebilirsin. Bu, Chapter 16’nın açtığı faturayı kapatır ve Part III’ü kapatır: Chapter 14’ten buraya kadar her şey one call hakkındaydı — onu nasıl yaparsın, içine ne koyarsın, nasıl sample edersin, ne döndürür, ne tutar.
Chapter 22 analysis unit’ini değiştiriyor ve değişiklik pahalı. Bir agent tek call değildir; kaç call yapacağına kendi karar veren bir loop’tur ve son iki chapter’ın aritmetiği onu architecture diagram’dan bütçeye dönüştürür. Aynı modele aynı soruyu iki kez sorarak açılır; ikinci sefer catalogue’a bir tool eklenir ve o tek tool’un ne yaptığı ölçülür: bir call iki oldu, otuz dokuz input token 420 oldu.
Bunun agent sayılıp sayılmayacağı, yayımlanmış iki definition’dan hangisini açtığına bağlı; onlar da aynı fikirde değil. Bir tanesi kendi içinde de aynı fikirde değil.
Kaynaklar ve yöntem
Bölüme bağlantı: Kaynaklar ve yöntemBu chapter’daki her price, formula ve conversion rate provider’ın kendi sayfasından 7 Eylül 2026 tarihinde okundu ve o tarihle quoted edildi; çünkü hepsi değişecek. Token count’ları, cost’lar ve comparison’lar yukarıda basılan code ile, tek bir makinede, paid API call yapılmadan hesaplandı — bu chapter’da tek bir latency claim olmamasının dürüst nedeni de budur.
Image-token function’ları, cost table’ları, voice-call breakdown ve empty-usage results bu chapter’da basılan TypeScript ile, Node 22 üzerinde çalıştırılarak üretildi. Voice comparison’da kullanılan dialogue 149 kelimedir ve o200k_base encoding altında tiktoken ile 188 token olarak tokenized edildi; duration’ı, comparison’ın parameter’ı olan ve measurement olmayan 150 words per minute declared rate’ten gelir. Her provider figure, geldiği page’i adlandıran footnote’u taşır.
Referanslar
Bölüme bağlantı: Referanslar-
Dosovitskiy, A. et al. An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale. arXiv:2010.11929 (2020). Patch’ler, embedding dimension’a linear projection ve grid’i sequence model için legible yapan position embeddings. ↩
-
Radford, A. et al. Learning Transferable Visual Models From Natural Language Supervision. arXiv:2103.00020 (2021). Image encoder ve text encoder’ın 400 milyon pair üzerinde contrastive training’i ve downstream’deki her şeyin varsaydığı shared space. ↩
-
Alayrac, J.-B. et al. Flamingo: a Visual Language Model for Few-Shot Learning. arXiv:2204.14198 (2022). Frozen vision encoder, frozen language model, trained bridging layers — image understanding’i chat capability’ye dönüştüren architecture. ↩
-
Liu, H., Li, C., Wu, Q. and Lee, Y. J. Visual Instruction Tuning. arXiv:2304.08485 (2023). Bridge olarak tek linear projection ve training set olarak generated instruction data; open vision-language modellerin tek bir shape’te birleşmesinin nedeni. ↩
-
Anthropic, Vision,
platform.claude.com/docs/en/build-with-claude/vision, erişim 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.” Ayrıca iki resolution tier (standard: 1568-pixel long edge, 1568 visual tokens; high-resolution, Claude 4.7 ve sonrası: 2576 pixels ve 4784 tokens), downsizing rule ve yukarıda yeniden üretilen altı satırlık size/token count table. Model rates: Anthropic, Pricing,platform.claude.com/docs/en/about-claude/pricing, aynı tarih: Claude Haiku 4.5 milyon input ve output token başına $1 ve $5. ↩ -
Google, Image understanding,
ai.google.dev/gemini-api/docs/image-understanding, erişim 2026-09-07. “258 tokens if both dimensions <= 384 pixels. Larger images are tiled into 768x768 pixel tiles, each costing 258 tokens”, crop-unit formula ile —floor(min(width, height) / 1.5), dimensions’ın buna bölünüp birbirleriyle çarpılması — ve 960 × 540’ın 3 × 2 = 6 tile verdiği worked example. Google buna “a rough formula” diyor; yukarıda türetilen scale-invariance, formula’nın yayımlandığı haliyle bir property’si. Aynı family’de audio input saniye başına 32 audio token’dır (ai.google.dev/gemini-api/docs/audio, aynı tarih). ↩ -
OpenAI, Images and vision,
developers.openai.com/api/docs/guides/images-vision, erişim 2026-09-07. Patch-based rule’un kaynağı (32 × 32 patches,patch_count = ceil(width/32)×ceil(height/32),shrink_factorformula’sı ve integer adjustment’ı, 30.000-patch rejection limit);low’nıngpt-5.4üzerinde 2048-pixel limit ve 6.144-patch budget kullandığını, “so it can use more tokens thanhigh” dediğini içeren model sizing table;high’un 2.500-patch budget’ına karşı; multiplier table (GPT-5.x family’leri için 1.2,gpt-4.1-miniiçin 1.62,gpt-4.1-nanoiçin 2.46); yukarıda yeniden üretilen iki worked example (1024 × 1024 → 1229 tokens, 2048 × 2048 → 3000 tokens); eski modeller için tile-based rules (base plus 512-pixel tiles,gpt-4oüzerinde 85 + 170); ve vision kutusunda quoted limitations list. ↩ ↩2 -
Ho, J., Jain, A. and Abbeel, P. Denoising Diffusion Probabilistic Models. arXiv:2006.11239 (2020). Forward noising schedule, objective’i eklenen noise’u tahmin etmeye çeviren reparameterisation ve 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). Diffusion process’i compressed latent space’te çalıştırmak; sabit step count’u image başına satılacak kadar affordable yapan şey. ↩
-
Prince, S. J. D. Understanding Deep Learning (MIT Press, 2023), chapter 18. Bu chapter’ın diffusion hakkında atladığı her şey için declared delegation — variational bound, noise schedules, classifier-free guidance ve sampler family’leri. Hu, E. et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv:2106.09685 (2021), adapter’ın kendisidir; Chapter 11’de language model üzerinde tanıtıldı ve burada matematiği değişmeden image model üzerinde kullanıldı. Radford, A. et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), arXiv:2212.04356 (2022), per-minute price’ı yukarıda görünen transcription model’dir. ↩
-
OpenAI, Image generation,
developers.openai.com/api/docs/guides/image-generation, Pricing,developers.openai.com/api/docs/pricing, vegpt-image-1model page’i, hepsine erişim 2026-09-07.gpt-image-2model page’inde pricing section yok; rate’leri yukarıdaki pricing page’den geliyor. GPT Image 1’in page’i yukarıdaki derivation’da kullanılan per-image table’ın yanında text input’u $5.00, image input’u $10.00 ve image output’u milyon token başına $40.00 olarak yayımlar. Ayrıca: gpt-image-2 öncesi modeller için output-token table (square, portrait ve landscape için low’da 272 / 408 / 400, medium’da 1056 / 1584 / 1568, high’da 4160 / 6240 / 6208); yukarıdaki derivation’larda kullanılan GPT Image 2, 1.5, 1 ve 1 Mini per-image price table’ları; “a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting” cümlesi; her streamed partial image’ın ekstra 100 image output token tuttuğu notu; ve gpt-image-2’nin milyon token başına $8.00 image input, $2.00 cached image input, $30.00 image output ve $5.00 text input rate’leri. Comparison’larda kullanılan text model rates:gpt-5.6-terra$2.00 input, $0.20 cached input ve $12.00 output;gpt-5.6-luna$0.20 ve $1.20, standard tier, short context. Video:sora-2720p’de saniye başına $0.10 vesora-2-pro720p, 1024p ve 1080p’de $0.30, $0.50 ve $0.70. Transcription:gpt-4o-transcribe,gpt-transcribe,gpt-4o-mini-transcribevegpt-live-transcribeiçin dakika başına $0.006, $0.0045, $0.003 ve $0.017. ↩ ↩2 -
Google, Gemini Developer API pricing,
ai.google.dev/gemini-api/docs/pricing, erişim 2026-09-07. Gemini 3.1 Flash-Lite milyon input token başına $0.25 (text, image ve video) ve output için $1.50. Gemini 3.1 Flash Image: image output milyon token başına $60; 0.5K, 1K, 2K ve 4K images için yayımlanmış 747, 1120, 1680 ve 2520 token equivalence’ları ve per-image prices olarak $0.045, $0.067, $0.101 ve $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 ve “$3.00 or $0.005/min” audio input, “$4.50 (text) $12.00 or $0.018/min (audio)” output. Veo 3.1 audio ile saniye başına: 720p ve 1080p’de $0.40, 4K standard’da $0.60; fast’te $0.10, $0.12 ve $0.30. Gemini Omni Flash video output’u “at a rate of 5,792 tokens per second of 720p video” ile bill eder; aynı footnote bunu yaklaşık $0.10 per second’a çevirir — per-second media price’ın token price olduğuna dair herhangi bir yerdeki en net published statement. ↩ ↩2 -
tts-1,tts-1-hdvegpt-4o-mini-ttsiçin OpenAI model page’leri,developers.openai.com/api/docs/models, erişim 2026-09-07.tts-1milyon karakter başına $15.00 vetts-1-hd$30.00;gpt-4o-mini-ttsmilyon text input token başına $0.60 ve milyon audio output token başına $12.00 — aynı vendor, aynı operation, iki unit. ↩ -
OpenAI, Managing costs (Realtime API),
developers.openai.com/api/docs/guides/realtime-costs, erişim 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.” Ayrıca: “The entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive”; costs accrue when a Response is created; yukarıdaki table’ın accumulation’ını yeniden ürettiği worked two-turn example; veinput_token_detailsveoutput_token_detailssplit’leriyleresponse.doneusage payload. Rates pricing page’den, aynı tarih:gpt-realtime-2.1audio milyon token başına $32.00 input, $0.40 cached input ve $64.00 output; text $4.00, $0.40 ve $24.00; image input $5.00. ↩ ↩2 -
Replicate, Pricing,
replicate.com/pricing, erişim 2026-09-07. Nvidia A100 (80GB) saniye başına $0.001400 ve saat başına $5.04; Nvidia H100 saniye başına $0.001525 ve saat başına $5.49. ↩