قیمتگذاری چندوجهی: تصاویر، صدا و ویدئو واقعاً چه چیزی را صورتحساب میکنند
سه مدل برای همان 500 عکس تا 5.5 برابر اختلاف هزینه دارند؛ با تغییر اندازه، ارزانترین گزینه هم عوض میشود.
در این صفحه
این یک کار است با سه قیمت: توصیف پانصد عکس محصول، برای هر کدام یک کپشن کوتاه. همان عکسها، همان دستور، همان طول پاسخ. تنها چیزی که عوض میشود این است که کدام مدل آنها را میخواند.
| عکس | 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 |
در آن جدول، سه نکته ارزش مکث کردن دارد.
ارزانترین مدل بین ردیف سوم و چهارم، برای همان کار، عوض میشود، چون کسی اندازه عکسها را تغییر داده است. بهجای کپشن، یک پاراگراف بخواهید و نقطه تقاطع دوباره جابهجا میشود: در 1280 × 960 برنده برای کپشن چهل-tokenی Gemini است و برای پاراگراف چهارصد-tokenی OpenAI.
ستون Gemini در هیچ ردیفی اصلاً تکان نمیخورد: یک عکس 4000 × 3000 دقیقاً همانقدر برایش هزینه دارد که یک عکس 640 × 480. یک عکس 4000 × 3000 دقیقاً همانقدر هزینه دارد که یک عکس 640 × 480. این سقف نیست. نتیجه نحوه شمارش آن است، و یعنی رایجترین بهینهسازی هزینه در این کسبوکار — کوچکسازی قبل از آپلود — اینطور جواب میدهد:
| image tokens، 4000 × 3000 → 800 × 600 | هزینه اجرا | صرفهجویی | |
|---|---|---|---|
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 % |
هیچکدام از این اعداد قیمتی نیست که فروشنده منتشر کند. هر سه باید از سه قاعده متفاوت محاسبه میشدند، چون عکس هیچجا واحد قابل صورتحساب نیست: اول با حسابی که در سه جای ناسازگار نوشته شده به token تبدیل میشود.
فصل 16 صورتحساب متن را ساخت و جایی ایستاد که متن تمام میشود. این فصل بقیه فاکتور است: تصویر، گفتار، transcription، ویدئو و compute خام، که رویهمرفته با هشت واحد مختلف صورتحساب میشوند، و روش مقایسه چیزهایی که با یک مقیاس فروخته نمیشوند.
نمایش جزئیات
این فصل از فصلهای قبلی چه میخواهد.
- فصل 7 tokenizer و واحد را ساخت. همهچیز اینجا تلاشی است برای تبدیل چیزی که متن نیست به همان واحد.
- فصل 8 مشخص کرد مدل چه چیزی مصرف میکند: نه نمادها، بلکه بردارها در یک فضای embedding. به همین دلیل است که تصویر اصلاً میتواند با token قیمتگذاری شود.
- فصل 16 تابع
computeCost، ردههای قیمت و پنج سبد token آن را ساخت. این فصل آن تابع را گسترش میدهد، نه جایگزینش میکند. - فصل 11 LoRA را بهعنوان تکنیک fine-tuning معرفی کرد و فصل 20 آن را بهعنوان تصمیم بودجهای قیمتگذاری کرد. اینجا روی مدلی ظاهر میشود که مدل زبانی نیست.
طبق قاعده فصل 14، بدون تنسور: اینجا تعرفه، تبدیل و حسابداری است، پس TypeScript است.
چرا یک عکس قیمت token دارد
لینک به بخش: چرا یک عکس قیمت token داردیک transformer دنبالهای از بردارها میگیرد. برایش مهم نیست از کجا آمدهاند. فصل 8 به آن embeddingهایی را خوراند که از یک token id lookup شده بودند؛ هیچچیز در معماری، lookup را الزام نمیکند.
پس: تصویر را به مربعهای ثابت ببرید، هر مربع را به فهرستی از اعداد تخت کنید، و هر فهرست را از یک لایه خطیِ یادگرفتهشده عبور دهید تا برداری با عرض مدل بسازید. یک patch 32 × 32 از پیکسلهای رنگی، عدد است؛ projection آن را به یک بردار -بعدی تبدیل میکند، دقیقاً همان شکلی که یک text token با آن وارد میشود. کل ماجرا همین است، و همان مقالهای است که عنوانش میگوید: یک تصویر بهاندازه 16 × 16 کلمه میارزد.1 یک positional encoding اضافه کنید تا مدل بداند کدام مربع کجا بوده، نتایج را با text embeddings درهم بگذارید، و دنبالهای که مدل میخواند بخشی تصویر و بخشی جمله است.
سه مقاله آن را به محصول تبدیل کردند. CLIP یک image encoder و یک text encoder را آموزش داد تا روی چهارصد میلیون جفت جمعآوریشده توافق کنند؛ همانجا بود که ایده اشتراک فضا بین پیکسل و کلمه از فرضیه بودن خارج شد.2 Flamingo یک vision encoder منجمد را با چند لایه پلزنِ آموزشدیده به یک مدل زبانی منجمد پیچ کرد.3 LLaVA نشان داد این پل میتواند یک projection خطی واحد باشد و instruction-following میتواند با داده تولیدی آموخته شود؛ به همین دلیل است که تقریباً همه مدلهای vision-language باز بعد از آن شبیه هم به نظر میرسند.4
پیامد آن برای فاکتور شما فوری و بیزرقوبرق است: patchها موقعیتهایی در دنبالهاند، پس input tokens هستند، پس با نرخ ورودی هزینهشان را میپردازید. تعدادشان حساب است، و هر provider آن را جور دیگری انجام میدهد.
سه قاعده، همه منتشرشده، هیچکدام مثل هم نیست
لینک به بخش: سه قاعده، همه منتشرشده، هیچکدام مثل هم نیستهر قاعده زیر از مستندات خود provider پیادهسازی شده و با مثالهای محاسبهشده همان مستندات سنجیده شده است.
OpenAI تصویر را با patchهای 32 × 32 میپوشاند و تعداد را در ضریب مخصوص هر مدل ضرب میکند. اگر تعداد patch از بودجه آن مدل و سطح detail فراتر برود، تصویر تا جایی کوچک میشود که جا شود:
Anthropic آن را با patchهای 28 × 28 میپوشاند، هر کدام یک visual token، و هم لبه بلند و هم تعداد token را سقفگذاری میکند — 1,568 پیکسل و 1,568 token در مدلهای standard-tier، و 2,576 و 4,784 در high-resolution tier. تصاویر بیشازحد بزرگ به بزرگترین اندازهای کوچک میشوند که با هر دو جور دربیاید.5
Google اصلاً پیکسلها را نمیشمارد. تصویری که هر دو ضلعش 384 پیکسل یا کمتر باشد، هزینه ثابت 258 token دارد. هر چیز بزرگتر به tileهایی از 258 token بریده میشود، و شبکه tile از 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;
}هر کدام را روی اعدادی اجرا کنید که 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 MATCHنه توافق چاپ میشود؛ اجرای کامل پانزده مورد را بررسی میکند، چون جدول Anthropic هر دو tier را برای هر شش اندازه میدهد. حالا قواعد برای اجرای روی هر عکسی که دارید مال شماست، و نکته همین است: اینها تنها سه تابع این فصلاند که از صفحه قیمت به دست نمیآیند.
«بزرگتر» یعنی چه، سه بار
لینک به بخش: «بزرگتر» یعنی چه، سه بارهمان عکس 4:3 را در شش اندازه از هر سه عبور دهید:
| اندازه | OpenAI، high | Anthropic، استاندارد | 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 |
ستون آخر را رو به پایین بخوانید. وقتی تصویر از 384 پیکسل بزرگتر شد، عدد دیگر هرگز تغییر نمیکند، و این نه تصادف است نه سقف. crop unit را برای تصویری که حداقل به پهنای ارتفاعش است دوباره در فرمول tile جایگذاری کنید:
اندازه حذف میشود. image tokens گوگل به aspect ratio وابستهاند و به هیچ چیز دیگر. یک عکس 4:3 چهار tile است، چه thumbnail باشد چه poster. همین واقعیت جبریِ واحد، کل توضیح صفرِ جدول صرفهجویی بالاست، و هیچ صفحه قیمتی در هیچجا آن را بیان نمیکند.
دو ستون دیگر در عوض سقف میخورند، در ارتفاعهای متفاوت و به دلایل متفاوت — Anthropic در سقف اعلامشده token، OpenAI در بودجه patch بعد از یک محدودیت پیکسلی — و به همین دلیل سه منحنی در اندازههای متفاوت همدیگر را قطع میکنند.
حالا خرابش کنید. راه بدیهی برای هزینه کمتر در vision model این است که detail کمتری بخواهید، پس detail: "low" را بفرستید:
1600x1200 low = 2280 high = 2280 ratio 1.00
3200x2400 low = 3687 high = 2942 ratio 1.25درخواست detail کمتر، 25 % بیشتر هزینه داشت. این باگ نیست و OpenAI آن را در یک خط از جدول اندازهگذاری میگوید: در آن خانواده مدل، low از محدودیت 2048 پیکسلی با بودجه 6,144-patch استفاده میکند، درحالیکه high از همان محدودیت پیکسلی با بودجه 2,500-patch استفاده میکند، «so it can use more tokens than high».7 واژه low نام یک تنظیم fidelity است، نه قیمت: در دو تا از پنج خانواده مدل مستندشده هیچ صرفهجویی نمیخرد، و در یکی از همان دو، بیشتر هزینه دارد.
ساختن یک تصویر، ماشین دیگری است
لینک به بخش: ساختن یک تصویر، ماشین دیگری استهمهچیز تا اینجا مدلی بوده که تصویری را میخواند. ساختن تصویر روی مکانیزمی اجرا میشود که اصلاً token ندارد، و به همین دلیل بهجای کلمه، با تصویر فروخته میشود.
ساختن تصویر: قیمت هر عکس، قیمت هر token است
لینک به بخش: ساختن تصویر: قیمت هر عکس، قیمت هر token استVendorها image generation را بهصورت قیمت هر تصویر منتشر میکنند. اینطور نیست. مدلهای GPT Image، image tokens تخصصی بیرون میدهند که تعدادشان به اندازه و quality درخواستی وابسته است؛ تعدادهای منتشرشده را در نرخ image output منتشرشده GPT Image 1 یعنی $40 به ازای هر میلیون ضرب کنید و با قیمتهای هر تصویر در همان صفحه مقایسه کنید:
| 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) |
نه رقم مشتقشده در برابر نه رقم منتشرشده، و هر جفت با اختلافی کمتر از $0.002 همخوان است.11 Google حتی صریحتر است و تبدیل را خودش روی صفحه قیمت برایتان انجام میدهد: image output با $60 به ازای هر میلیون token، «output images at 1K (1024x1024px) consume 1120 tokens and are equivalent to $0.067 per image».12
پس قیمت هر تصویر، قیمت هر token است با شمارش تاخورده در آن. اشکالی ندارد، و چیزی را پنهان میکند. جدول نسل فعلی را بگیرید و رو به عقب تقسیم کنید:
quality 1024x1024 1024x1536
low $0.006 -> 200 tok $0.005 -> 167 tok
medium $0.053 -> 1767 tok $0.041 -> 1367 tok
high $0.211 -> 7033 tok $0.165 -> 5500 tokتصویر بزرگتر در هر quality ارزانتر است. یک canvas 1024 × 1536 پنجاه درصد پیکسل بیشتری از 1024 × 1024 دارد و در medium بیستوسه درصد token کمتر هزینه دارد. OpenAI آن را در جملهای علامت میزند که احتمالاً از آن میگذرید — «a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting» — و در نسل قبلی مدلها برعکس بود، portrait پنجاه درصد بیشتر از square هزینه داشت.11 هر default از 1024x1024 که قبل از آن تغییر نوشته شده، حالا گزینه گران است.
صدا، با ثانیه، کاراکتر و token صورتحساب میشود
لینک به بخش: صدا، با ثانیه، کاراکتر و token صورتحساب میشوداز سه محصول بخواهید همان 519 کاراکتر را بگویند — حدود 38 ثانیه audio — و از دو vendor سه سیستم واحد میگیرید:
| مدل | واحد | قیمت |
|---|---|---|
tts-1 | به ازای هر کاراکتر | $15.00 به ازای هر میلیون کاراکتر → $0.007785 |
tts-1-hd | به ازای هر کاراکتر | $30.00 به ازای هر میلیون کاراکتر → $0.015570 |
gemini-3.1-flash-tts | به ازای هر audio token، 25 در ثانیه | $20.00 به ازای هر میلیون → $0.019319 |
همان vendor هر دو واحد را میفروشد: tts-1 از OpenAI برحسب هر میلیون کاراکتر قیمتگذاری میشود، درحالیکه gpt-4o-mini-tts برحسب هر میلیون token قیمتگذاری میشود، $0.60 ورودی و $12.00 خروجی.13 پس «ارزانترین text-to-speech» تا وقتی نگویید چه چیزی را میخوانید، پرسشی با پاسخ نیست.
و دو واحد نسبت به چیزهای متضاد کورند. قیمت هر کاراکتر duration را نمیبیند: صدایی آهسته و شمرده انتخاب کنید، یا مکث اضافه کنید، فاکتور تکان نمیخورد درحالیکه audio طولانیتر میشود. قیمت هر ثانیه content را نمیبیند: سی ثانیه همانقدر هزینه دارد، چه یک پاراگراف فنی فشرده باشد چه کسی تا ده بشمارد. voice را عوض کنید و دقیقاً یکی از دو vendor شما دوباره قیمتگذاری میکند.
Transcription برعکس میرود و سادهترین خط کل فاکتور است — به ازای هر دقیقه audio، ثابت:
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)ردیف آخر را نسبت به سوم ببینید: انجام آن بهصورت زنده، وقتی کلمات میرسند، 5.7 برابر انجام آن روی فایل آماده هزینه دارد. این فاصله قیمتِ نتوانستن برای batch کردن است، و همان چیزی است که بخش بعدی را گران میکند.
یک دقیقه voice، ریزشده
لینک به بخش: یک دقیقه voice، ریزشدهحالا عددی که تعیین میکند voice یک feature است یا یک محصول.
تماس: مکالمه پشتیبانی دهنوبتی، 149 کلمه، که با نرخ اعلامشده 150 کلمه در دقیقه، 59.6 ثانیه گفتار است — 21.2 ثانیه از تماسگیرنده، 38.4 ثانیه پاسخ. تبدیلهای token متعلق به خود providerهاست. 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 token در ثانیه، در هر دو جهت، که صفحه قیمتش با انتشار $12.00 به ازای هر میلیون و $0.018 به ازای هر دقیقه در همان خط تأیید میکند.12
مکالمه دقیقاً همانطور انباشته میشود که فصل 16 گفت، چون همان مکانیزم است: «the entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive».14 فقط حالا history با audio tokens اندازهگیری میشود.
| نوبت | کاربر | assistant | audio تازه ورودی | audio cached ورودی | audio خروجی | هزینه |
|---|---|---|---|---|---|---|
| 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 |
حالا مقایسهای که محصول را تعیین میکند، هر چهار مورد نرمالشده به یک دقیقه:
| هر دقیقه | نسبت به متن | |
|---|---|---|
gpt-realtime-2.1، بدون caching | $0.131259 | 37.9× |
gpt-realtime-2.1، history cached | $0.057425 | 16.6× |
gemini-3.1-flash-live، بدون caching | $0.023965 | 6.9× |
همان کلمات تایپشده، gpt-5.6-terra | $0.003461 | — |
سیوهشت برابر. نه سیوهشت درصد. همان تبادل، اگر بهجای متن با صدا انجام شود، تقریباً دو مرتبه بزرگی گرانتر است، و هیچکدام از این فاصله حاشیه سودی نیست که کسی انتخاب کرده باشد — نرخ تبدیل است. یک ثانیه audio از assistant بیست token است. همان ثانیه با نرخ اعلامشده 2.5 کلمه حمل میکند، و transcript اندازهگیریشده 1.26 token به ازای هر کلمه دارد، پس بهصورت متن 3.15 token است. صدا برای همان معنا بستهای 6.3 برابر حجیمتر است، و هر token آن با 5.3 برابر نرخ text output و 16 برابر نرخ text input صورتحساب میشود. نسبت حجم را در نسبت قیمت ضرب کنید و مرتبه بزرگی پیش از هر حسابداری حاضر است.
دو پیامد عملیاتی مستقیم از جدول بیرون میآید.
Audio caching بهینهسازی نیست، مدل کسبوکار است. cached audio input برابر $0.40 به ازای هر میلیون است در برابر $32.00 تازه — تخفیف 98.75 % که تماس را نصف میکند. قاعده همان قاعده فصل 16 است، بیتغییر: cache یک prefix را match میکند، پس هر چیزی که وسط تماس جلوی مکالمه درج شود آن را نابود میکند، و جای طبیعی گذاشتن «تماسگیرنده اکنون verify شده» دقیقاً همانجاست.
و هیچ کاری در client یک صدا را از صورتحساب خارج نمیکند. کاربر روی حرف assistant صحبت میکند، کد شما پخش را متوقف میکند، speaker ساکت میشود. هرچه قبلاً تولید شده بود قبلاً هزینه شده، چون billing وقتی response ساخته میشود انباشته میشود؛ و طبق قاعده فصل 16 هرچه در مکالمه بماند، در هر نوبت بعدی دوباره بهعنوان input audio فرستاده میشود. فصل 14 این نکته را درباره abort کردن text stream گفت. در voice سی برابر بیشتر هزینه دارد.
ویدئو، GPU-second، و قیمتی که قیمت نیست
لینک به بخش: ویدئو، GPU-second، و قیمتی که قیمت نیستVideo را بعضی vendorها به ازای هر ثانیه میفروشند و بعضی به ازای هر clip، با tierهایی برای resolution و گاهی duration. این دو شکل فقط از نظر راحتی فرق ندارند؛ همدیگر را قطع میکنند.
| مدل | 1 s | 2 s | 5 s | 10 s | 20 s |
|---|---|---|---|---|---|
veo-3.1، هر ثانیه، 1080p | $0.400 | $0.800 | $2.000 | $4.000 | $8.000 |
veo-3.1-fast، هر ثانیه، 1080p | $0.120 | $0.240 | $0.600 | $1.200 | $2.400 |
sora-2، هر ثانیه، 720p | $0.100 | $0.200 | $0.500 | $1.000 | $2.000 |
hailuo-02، هر clip، 1080p | $0.480 | $0.480 | $0.480 | $0.480 | $0.480 |
mochi، هر GPU-second | $0.018 | $0.037 | $0.092 | $0.183 | $0.366 |
vendor هر-clip زیر 1.2 ثانیه از هر-ثانیه گرانتر است و در بیست ثانیه 16.7 برابر ارزانتر. هیچ ترتیب رتبهبندی این دو مدل با تغییر طول clip دوام نمیآورد، پس «کدام video model ارزانتر است» پرسشی درباره مدلها نیست.
ردیف آخر بدتر است، و قلب صادق این فصل همانجاست. mochi بر اساس ثانیههای واقعی GPU صورتحساب میشود — زمان prediction اندازهگیریشده job — با $0.001400 در ثانیه روی A100 و $0.001525 روی H100، که نرخهای ماشین اجارهایاند و هیچ چیز دیگر.15 این تعرفهای کاملاً دقیق است و قیمت نیست، چون کمیتی که در آن ضرب میشود تا بعد از تعهد به پرداخت ناشناخته است. ردیف بالا دوازده GPU-second به ازای هر ثانیه خروجی فرض میکند؛ آن فرض را چهار برابر کنید و از باند ارزانترین خارج میشود، و فقط در شش برابر به میانه جدول میرسد. این تنها تعرفه این صفحه است که نمیتوانید در quote بگذارید.
نرمالساز
لینک به بخش: نرمالسازپس: tokenها، image tokens، کاراکترها، دقیقهها، video seconds، clipهای کامل، GPU seconds، واحدهای ثابت. هشت کمیت، و تنها راه گذاشتنشان روی یک محور این است که workloadی اعلام کنید و آن را قیمتگذاری کنید.
این گسترش computeCost فصل 16 است — همان ماشین tier، حالا با criterionهایی که prompt length نیستند:
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;
}دو خط علامتخورده جایی است که میشکند. تعرفهای که به ازای unit نقل شده، u.images ?? 1 را ضرب میکند؛ تعرفهای که به ازای token نقل شده، چیزی را ضرب میکند که پیشفرضش صفر است. به هر دو یک usage خالی بدهید — شکلی که وقتی measurement شکست میگیرید — و ببینید:
per image (nano-banana-pro) empty usage => $0.1500
per clip (hailuo-02) empty usage => $0.1500
per unit (a cloned voice) empty usage => $3.0000
per token (gpt-image-2) empty usage => $0.0000
per second (veo-3.1) empty usage => $0.0000
per GPU-second (mochi) empty usage => $0.0000شش بار هیچ اتفاقی نیفتاد، و یک بار سه دلار هزینه داشت و پنج بار هیچ. این اختلاف گرد کردن نیست؛ تصمیمی است درباره اینکه عدد غایب یعنی چه، جداگانه برای هر unit گرفته شده و هیچجا نوشته نشده. قاعده درست این است که فیلدی که هیچکس اندازهاش نگرفته غایب میماند، چون «اندازهگیری نشده» و «اندازهگیری شده و صفر درآمده» چیزهای متفاوتاند. این تابع آرام با آن مخالف است.
شکست دوم duration است. تعرفه clip-priced، tier خود را با maxDurationSeconds در برابر u.videoSeconds ?? 0 انتخاب میکند، پس usageی که هرگز duration ثبت نکرده، با کوتاهترین tier match میشود:
duration recorded -> $0.45
duration missing -> $0.27چهل درصد تخفیف برای اینکه نمیدانید video چقدر طول داشته است. هر دو باگ یک ریشه دارند: پیشفرضی که برای راحتی داخل تابعی انتخاب شده که کل کارش دقیق بودن است.
قابلمقایسه کردن عدد
لینک به بخش: قابلمقایسه کردن عددوقتی هزینهها قابل محاسبه شدند، مقایسه نیمه دیگر را میخواهد — یک representative workload اعلامشده، یکی برای هر engine، عمومی بیانشده تا خواننده بتواند با آن مخالفت کند:
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 },
};هر کدام از آن خطوط یک استدلال است. متن یکچهارم input و سهچهارم output را مخلوط میکند چون usage واقعی به output متمایل است؛ blend پنجاهپنجاه مدلها را جور دیگری رتبهبندی میکند. workload تصویر 1,500 output token فرض میکند، بین 1,056 OpenAI برای medium square و 1,584 آن برای medium portrait. Video پنج ثانیه در 1080p فرض میکند، و همین حالا دیدیم دو vendor در 1.2 ثانیه جا عوض میکنند. ورودی compute شصت GPU-second فرض میکند چون چیز دیگری برای فرض کردن نیست.
روش همین است، و تنها روش صادقانه موجود: نمیتوانید قیمتها را در واحدهای متفاوت مقایسه کنید؛ فقط میتوانید هزینه workloadی را که نوشتهاید مقایسه کنید. هر جدولی که multimodal models را بدون چاپ workload خود رتبهبندی کند، فرضهای خودش را رتبهبندی میکند.
بعدش به کجا میرسد
لینک به بخش: بعدش به کجا میرسدحالا میتوانید هر چیزی را که مدل میتواند تولید کند، در هر واحدی که فروخته میشود، قیمتگذاری کنید و با صدای بلند بگویید مقایسه شما چه workloadی را فرض کرده است. این فاکتوری را که فصل 16 باز کرد میبندد، و Part III را هم میبندد: همهچیز از فصل 14 تا اینجا درباره یک call بوده است — چطور آن را بسازید، چه چیزی در آن بگذارید، چطور sample کنید، چه برمیگرداند، چه هزینهای دارد.
فصل 22 واحد تحلیل را عوض میکند، و این تغییر گران است. یک agent یک call نیست؛ حلقهای است که خودش تصمیم میگیرد چند call بسازد، و حساب دو فصل اخیر همان چیزی است که آن را از diagram معماری به budget تبدیل میکند. با پرسیدن همان سؤال از همان مدل دو بار شروع میشود، با یک tool اضافهشده به catalogue در بار دوم، و اندازهگیری اینکه آن یک tool چه کرد: یک call شد دو call، سیونه input token شد 420.
اینکه آیا همین آن را agent میکند یا نه، بستگی دارد کدامیک از دو تعریف منتشرشده را باز کنید، و آنها توافق ندارند. یکی از آنها حتی با خودش هم توافق ندارد.
منابع و روش
لینک به بخش: منابع و روشهر قیمت، فرمول و نرخ تبدیل در این فصل از صفحه خود provider در 7 سپتامبر 2026 خوانده شده و با همان تاریخ نقل میشود، چون همهشان جابهجا خواهند شد. token countها، هزینهها و مقایسهها روی آن data با کدی که بالا چاپ شد، روی یک ماشین، و بدون هیچ paid API call محاسبه شدند — که دلیل صادقانه نبودن حتی یک ادعای latency در این فصل هم هست.
توابع image-token، جدولهای هزینه، breakdown تماس voice و نتایج empty-usage با TypeScript چاپشده در این فصل تولید شدند، اجراشده روی Node 22. دیالوگ استفادهشده برای مقایسه voice، 149 کلمه است و با tiktoken تحت encoding o200k_base به 188 token تبدیل شد؛ duration آن از نرخ اعلامشده 150 کلمه در دقیقه میآید، که parameter مقایسه است نه measurement. هر رقم provider، footnoteای دارد که صفحه مبدأش را نام میبرد.
ارجاعات
لینک به بخش: ارجاعات-
Dosovitskiy, A. et al. An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale. arXiv:2010.11929 (2020). Patchها، projection خطی به embedding dimension، و position embeddings که grid را برای sequence model خوانا میکنند. ↩
-
Radford, A. et al. Learning Transferable Visual Models From Natural Language Supervision. arXiv:2103.00020 (2021). training کنتراستی یک image encoder و یک text encoder روی 400 میلیون جفت، و فضای مشترکی که هر چیز پاییندستی فرض میگیرد. ↩
-
Alayrac, J.-B. et al. Flamingo: a Visual Language Model for Few-Shot Learning. arXiv:2204.14198 (2022). vision encoder منجمد، مدل زبانی منجمد، لایههای پلزن آموزشدیده — معماریای که image understanding را به قابلیت chat تبدیل کرد. ↩
-
Liu, H., Li, C., Wu, Q. and Lee, Y. J. Visual Instruction Tuning. arXiv:2304.08485 (2023). یک projection خطی واحد بهعنوان پل و داده instruction تولیدشده بهعنوان مجموعه آموزشی؛ دلیل اینکه مدلهای vision-language باز روی یک شکل همگرا شدند. ↩
-
Anthropic، Vision،
platform.claude.com/docs/en/build-with-claude/vision، دسترسی در 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.» همچنین دو resolution tier (standard: لبه بلند 1568 پیکسل، 1568 visual token؛ high-resolution، روی Claude 4.7 و بعدتر: 2576 پیکسل و 4784 token)، قاعده downsizing، و جدول ششردیفی اندازهها و token countها که بالا بازتولید شد. نرخهای مدل از Anthropic، Pricing،platform.claude.com/docs/en/about-claude/pricing، همان تاریخ: Claude Haiku 4.5 با $1 و $5 به ازای هر میلیون input و output tokens. ↩ -
Google، Image understanding،
ai.google.dev/gemini-api/docs/image-understanding، دسترسی در 2026-09-07. «258 tokens if both dimensions <= 384 pixels. Larger images are tiled into 768x768 pixel tiles, each costing 258 tokens»، با فرمول crop-unit —floor(min(width, height) / 1.5)، ابعاد تقسیم بر آن و ضرب در هم — و مثال محاسبهشده 960 × 540 که 3 × 2 = 6 tile میدهد. Google آن را «a rough formula» مینامد؛ scale-invariance مشتقشده در بالا ویژگی فرمول همانطور است که منتشر شده. audio input روی همان خانواده 32 token در ثانیه audio است (ai.google.dev/gemini-api/docs/audio، همان تاریخ). ↩ -
OpenAI، Images and vision،
developers.openai.com/api/docs/guides/images-vision، دسترسی در 2026-09-07. منبع قاعده مبتنی بر patch (patchهای 32 × 32،patch_count = ceil(width/32)×ceil(height/32)، فرمولshrink_factorو تنظیم integer آن، محدودیت رد 30,000-patch)؛ جدول اندازهگذاری مدل، از جمله اینکهlowرویgpt-5.4از محدودیت 2048 پیکسلی و بودجه 6,144-patch استفاده میکند «so it can use more tokens thanhigh»، در برابر بودجه 2,500-patch درhigh؛ جدول ضریبها (1.2 برای خانوادههای GPT-5.x، 1.62 برایgpt-4.1-mini، 2.46 برایgpt-4.1-nano)؛ دو مثال محاسبهشده بازتولیدشده در بالا (1024 × 1024 → 1229 token، 2048 × 2048 → 3000 token)؛ قواعد مبتنی بر tile برای مدلهای قدیمیتر (base بهعلاوه tileهای 512 پیکسلی، 85 + 170 رویgpt-4o)؛ و فهرست محدودیتهای نقلشده در جعبه vision. ↩ ↩2 -
Ho, J., Jain, A. and Abbeel, P. Denoising Diffusion Probabilistic Models. arXiv:2006.11239 (2020). forward noising schedule، reparameterisation که objective را به پیشبینی نویز اضافهشده تبدیل میکند، و 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). اجرای process diffusion در فضای latent فشرده، همان چیزی که تعداد گام ثابت را آنقدر مقرونبهصرفه کرد که به ازای هر تصویر فروخته شود. ↩
-
Prince, S. J. D. Understanding Deep Learning (MIT Press, 2023), chapter 18. واگذاری اعلامشده برای هر چیزی که این فصل درباره diffusion کنار گذاشت — variational bound، noise schedules، classifier-free guidance و خانوادههای sampler. Hu, E. et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv:2106.09685 (2021)، خود adapter است، که در فصل 11 روی مدل زبانی معرفی شد و اینجا بدون تغییر ریاضیات روی مدل تصویر استفاده میشود. Radford, A. et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), arXiv:2212.04356 (2022)، مدل transcriptionی است که قیمت هر دقیقهاش بالا آمده است. ↩
-
OpenAI، Image generation،
developers.openai.com/api/docs/guides/image-generation، Pricing،developers.openai.com/api/docs/pricing، و صفحه مدل برایgpt-image-1، همه دسترسی در 2026-09-07. صفحه مدل برایgpt-image-2بخش pricing ندارد؛ نرخهایش از صفحه pricing بالا آمدهاند. صفحه GPT Image 1، text input را با $5.00، image input را با $10.00 و image output را با $40.00 به ازای هر میلیون token کنار جدول per-image استفادهشده در derivation بالا منتشر میکند. همچنین: جدول output-token برای مدلهای قبل از gpt-image-2 (272 / 408 / 400 low، 1056 / 1584 / 1568 medium، 4160 / 6240 / 6208 high، برای square، portrait و landscape)؛ جداول per-image price برای GPT Image 2، 1.5، 1 و 1 Mini استفادهشده در derivationهای بالا؛ جمله «a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting»؛ یادداشت اینکه هر partial image استریمشده 100 image output token اضافه هزینه دارد؛ و نرخهای gpt-image-2 شامل $8.00 image input، $2.00 cached image input، $30.00 image output و $5.00 text input به ازای هر میلیون token. نرخهای text model استفادهشده برای مقایسهها:gpt-5.6-terraبا $2.00 input، $0.20 cached input و $12.00 output،gpt-5.6-lunaبا $0.20 و $1.20، standard tier، short context. Video:sora-2با $0.10 در ثانیه در 720p وsora-2-proبا $0.30، $0.50 و $0.70 در 720p، 1024p و 1080p. Transcription: $0.006، $0.0045، $0.003 و $0.017 در دقیقه برایgpt-4o-transcribe،gpt-transcribe،gpt-4o-mini-transcribeوgpt-live-transcribe. ↩ ↩2 -
Google، Gemini Developer API pricing،
ai.google.dev/gemini-api/docs/pricing، دسترسی در 2026-09-07. Gemini 3.1 Flash-Lite با $0.25 به ازای هر میلیون input tokens (متن، تصویر و video) و $1.50 خروجی. Gemini 3.1 Flash Image: image output با $60 به ازای هر میلیون token، با equivalenceهای منتشرشده 747، 1120، 1680 و 2520 token برای تصاویر 0.5K، 1K، 2K و 4K و قیمتهای هر تصویر $0.045، $0.067، $0.101 و $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 و «$3.00 or $0.005/min» audio input، «$4.50 (text) $12.00 or $0.018/min (audio)» output. Veo 3.1 هر ثانیه با audio: $0.40 در 720p و 1080p و $0.60 در 4K standard؛ $0.10، $0.12 و $0.30 fast. Gemini Omni Flash خروجی video را «at a rate of 5,792 tokens per second of 720p video» صورتحساب میکند، که همان footnote به حدود $0.10 در ثانیه تبدیل میکند — روشنترین بیان منتشرشده در هر جا که قیمت media هر ثانیه، قیمت token است. ↩ ↩2 -
صفحات مدل OpenAI برای
tts-1،tts-1-hdوgpt-4o-mini-tts،developers.openai.com/api/docs/models، دسترسی در 2026-09-07.tts-1با $15.00 وtts-1-hdبا $30.00 به ازای هر میلیون کاراکتر؛gpt-4o-mini-ttsبا $0.60 به ازای هر میلیون text input tokens و $12.00 به ازای هر میلیون audio output tokens — همان vendor، همان عملیات، دو unit. ↩ -
OpenAI، Managing costs (Realtime API)،
developers.openai.com/api/docs/guides/realtime-costs، دسترسی در 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.» همچنین: «The entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive»؛ costs وقتی Response ساخته میشود accrue میشود؛ مثال محاسبهشده دو turn که accumulation آن در جدول بالا بازتولید شده؛ و usage payload response.doneبا splitهایinput_token_detailsوoutput_token_details. نرخها از صفحه pricing، همان تاریخ: audio درgpt-realtime-2.1با $32.00 input، $0.40 cached input و $64.00 output به ازای هر میلیون token، text با $4.00، $0.40 و $24.00، image input با $5.00. ↩ ↩2 -
Replicate، Pricing،
replicate.com/pricing، دسترسی در 2026-09-07. Nvidia A100 (80GB) با $0.001400 در ثانیه و $5.04 در ساعت؛ Nvidia H100 با $0.001525 در ثانیه و $5.49 در ساعت. ↩