Prezos multimodais: o que realmente facturan as imaxes, o audio e o vídeo
Tres modelos coas mesmas 500 fotos discrepan por 5,5×; o máis barato cambia en canto alguén as redimensiona.
Nesta páxina
Aquí tes unha tarefa, cobrada de tres formas: describir cincocentas fotografías de produto, unha lenda curta por cada unha. As mesmas fotografías, a mesma instrución, a mesma lonxitude de resposta. O único que cambia é que modelo as le.
| fotografía | 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 |
Hai tres cousas nesa táboa nas que paga a pena deterse.
O modelo máis barato cambia entre a terceira fila e a cuarta, na mesma tarefa, porque alguén redimensionou as fotografías. Pide un parágrafo en vez dunha lenda e o punto de cruce móvese outra vez: en 1280 × 960 gaña Gemini para unha lenda de corenta tokens e OpenAI para un parágrafo de catrocentos tokens.
A columna de Gemini non se move nada, en ningunha fila: unha fotografía de 4000 \u00d7 3000 cústalle exactamente o mesmo ca unha de 640 \u00d7 480. Unha fotografía de 4000 × 3000 cústalle exactamente o mesmo ca unha fotografía de 640 × 480. Iso non é un tope. É unha consecuencia de como conta, e significa que a optimización de custo máis común neste negocio —reducir a resolución antes de subir— paga así:
| image tokens, 4000 × 3000 → 800 × 600 | custo da execución | aforro | |
|---|---|---|---|
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 % |
Ningún deses números é un prezo que publique o provedor. Os tres tiveron que ser calculados, a partir de tres regras distintas, porque unha fotografía non é unha unidade facturable en ningures: primeiro convértese en tokens, cunha aritmética escrita en tres lugares incompatibles.
O capítulo 16 construíu a factura do texto e parou onde para o texto. Este capítulo é o resto da factura: imaxes, fala, transcrición, vídeo e compute bruto, que entre todos se facturan en oito unidades distintas, e o método para comparar cousas que non se venden coa mesma medida.
Mostrar detalles
O que este capítulo necesita dos anteriores.
- Capítulo 7 construíu o tokenizer e a unidade. Todo aquí é un intento de converter algo que non é texto nesa unidade.
- Capítulo 8 estableceu o que consome un modelo: non símbolos, senón vectores nun espazo de embedding. Por iso unha imaxe pode ter prezo en tokens.
- Capítulo 16 construíu
computeCost, os seus niveis de prezo e os seus cinco depósitos de token. Este capítulo amplía esa función en vez de substituíla. - Capítulo 11 introduciu LoRA como técnica de fine-tuning e Capítulo 20 púxolle prezo como decisión orzamentaria. Aquí aparece nun modelo que non é un modelo de linguaxe.
Sen tensores, pola regra do capítulo 14: isto vai de tarifas, conversións e contabilidade, así que é TypeScript.
Por que unha fotografía ten prezo de token
Ligazón á sección: Por que unha fotografía ten prezo de tokenUn transformer toma unha secuencia de vectores. Non ten opinión sobre de onde viñeron. O capítulo 8 alimentouno con embeddings buscados a partir dun id de token; nada na arquitectura esixe esa busca.
Así que: corta a imaxe en cadrados fixos, aplana cada cadrado nunha lista de números e pasa cada lista por unha capa lineal aprendida para obter un vector da largura do modelo. Un parche de 32 × 32 píxeles de cor son números; a proxección convérteo nun vector -dimensional, exactamente coa forma coa que chega un token de texto. Iso é todo, e é o artigo cuxo título o di: unha imaxe vale 16 × 16 palabras.1 Engade unha codificación posicional para que o modelo saiba que cadrado estaba onde, intercala os resultados cos embeddings do texto, e a secuencia que le o modelo é parte imaxe e parte frase.
Tres artigos fixérono produto. CLIP adestrou un codificador de imaxe e un codificador de texto para poñerse de acordo, sobre catrocentos millóns de pares raspados, e aí foi onde a idea de que píxeles e palabras poden compartir un espazo deixou de ser unha hipótese.2 Flamingo atornillou un codificador de visión conxelado a un modelo de linguaxe conxelado con algunhas capas ponte adestradas.3 LLaVA mostrou que a ponte podía ser unha soa proxección lineal e que o seguimento de instrucións podía ensinarse con datos xerados, e por iso todos os modelos abertos de visión-linguaxe desde entón teñen máis ou menos a mesma forma.4
A consecuencia para a túa factura é inmediata e pouco glamurosa: os parches son posicións na secuencia, así que son input tokens, así que pagas por eles á tarifa de entrada. Cantos son é aritmética, e cada provedor faina doutro xeito.
Tres regras, todas publicadas, ningunha igual
Ligazón á sección: Tres regras, todas publicadas, ningunha igualCada regra de abaixo está implementada a partir da documentación do propio provedor e comprobada contra os exemplos resoltos desa mesma documentación.
OpenAI cobre a imaxe con parches de 32 × 32 e multiplica o reconto por un factor por modelo. Se o reconto de parches supera o orzamento dese modelo e nivel de detalle, a imaxe redúcese ata encaixar:
Anthropic cóbrea con parches de 28 × 28, un visual token cada un, e pon tope tanto ao lado longo como ao reconto de tokens: 1,568 píxeles e 1,568 tokens nos modelos de nivel estándar, 2,576 e 4,784 no nivel de alta resolución. As imaxes demasiado grandes escálanse ao maior tamaño que encaixe nos dous.5
Google non conta píxeles en absoluto. Unha imaxe cos dous lados en 384 píxeles ou menos custa unha tarifa plana de 258 tokens. Calquera cousa maior córtase en tiles de 258 tokens cada un, e a grella de tiles sae dunha unidade de recorte de .6
export function openaiImageTokens(
w: number, h: number,
{ maxDim, patchBudget, multiplier }: { maxDim: number; patchBudget: number; multiplier: number },
) {
const fit = Math.min(1, maxDim / Math.max(w, h)); // never enlarges
w = Math.floor(w * fit); h = Math.floor(h * fit);
let patches = Math.ceil(w / 32) * Math.ceil(h / 32);
if (patches > patchBudget) {
const s = Math.sqrt((32 * 32 * patchBudget) / (w * h));
const adj = s * Math.min(
Math.floor((w * s) / 32) / ((w * s) / 32),
Math.floor((h * s) / 32) / ((h * s) / 32));
patches = Math.ceil(Math.floor(w * adj) / 32) * Math.ceil(Math.floor(h * adj) / 32);
}
return Math.ceil(patches * multiplier);
}
export function anthropicVisualTokens(
w: number, h: number,
{ maxLongEdge, maxTokens }: { maxLongEdge: number; maxTokens: number },
) {
const tok = (a: number, b: number) => Math.ceil(a / 28) * Math.ceil(b / 28);
const long = Math.max(w, h), short = Math.min(w, h);
for (let L = Math.min(long, maxLongEdge); L >= 1; L--) {
const t = tok(L, Math.round((short * L) / long));
if (t <= maxTokens) return t;
}
return 0;
}
export function geminiImageTokens(w: number, h: number) {
if (w <= 384 && h <= 384) return 258;
const crop = Math.floor(Math.min(w, h) / 1.5);
return Math.ceil(w / crop) * Math.ceil(h / crop) * 258;
}Executa cada unha contra os números que imprime o seu propio provedor:
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 MATCHImprímense nove coincidencias; a execución completa comproba quince, xa que a táboa de Anthropic dá os dous niveis para os seis tamaños. Agora as regras son túas para executalas sobre calquera fotografía que teñas, que é a cuestión: estas son as únicas tres funcións deste capítulo que non podes obter dunha páxina de prezos.
Que significa "maior", tres veces
Ligazón á sección: Que significa "maior", tres vecesPasa a mesma fotografía 4:3 polas tres regras en seis tamaños:
| tamaño | OpenAI, high | Anthropic, estándar | Anthropic, alta resolución | 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 |
Le a última columna cara abaixo. En canto a imaxe supera os 384 píxeles, o número xa non cambia nunca, e iso non é unha coincidencia nin un tope. Substitúe a unidade de recorte de volta na fórmula de tiles, para unha imaxe polo menos tan ancha como alta:
O tamaño cancélase. Os image tokens de Google dependen da relación de aspecto e de nada máis. Unha fotografía 4:3 son catro tiles tanto se é unha miniatura como se é un póster. Ese único feito alxébrico é toda a explicación do cero na táboa de aforro de arriba, e ningunha páxina de prezos en ningures o di.
As outras dúas columnas, en cambio, chegan a un tope, a alturas diferentes e por razóns diferentes —Anthropic nun teito declarado de tokens, OpenAI nun orzamento de parches despois dun límite de píxeles—, e por iso as tres curvas crúzanse en tamaños distintos.
Agora rómpao. A maneira obvia de gastar menos nun modelo de visión é pedir menos detalle, así que envía detail: "low":
1600x1200 low = 2280 high = 2280 ratio 1.00
3200x2400 low = 3687 high = 2942 ratio 1.25Pedir menos detalle custou 25 % máis. Non é un bug, e OpenAI dio nunha liña da táboa de tamaños: nesa familia de modelos, low usa un límite de 2048 píxeles cun orzamento de 6,144 parches mentres high usa o mesmo límite de píxeles cun orzamento de 2,500 parches, "so it can use more tokens than high".7 A palabra low nomea un axuste de fidelidade, non un prezo: en dúas das cinco familias de modelos documentadas non compra ningún aforro, e nunha desas dúas custa máis.
Xerar unha é unha máquina distinta
Ligazón á sección: Xerar unha é unha máquina distintaTodo ata agora foi un modelo lendo unha imaxe. Facela executa un mecanismo sen tokens, e esa é a razón pola que se vende pola imaxe e non pola palabra.
Facer unha imaxe: un prezo por imaxe é un prezo por token
Ligazón á sección: Facer unha imaxe: un prezo por imaxe é un prezo por tokenOs provedores publican a xeración de imaxes como prezo por imaxe. Non o é. Os modelos GPT Image emiten image tokens especializados cuxo reconto depende do tamaño e da calidade solicitados; multiplica os recontos publicados pola tarifa publicada de saída de imaxe de GPT Image 1, $40 por millón, e compara cos prezos por imaxe da mesma páxina:
| calidade | 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) |
Nove cifras derivadas contra nove publicadas, todos os pares coincidindo dentro de $0.002.11 Google é aínda máis explícito e fai a conversión por ti na propia páxina de prezos: saída de imaxe a $60 por millón de tokens, "output images at 1K (1024x1024px) consume 1120 tokens and are equivalent to $0.067 per image".12
Así que un prezo por imaxe é un prezo por token co reconto dobrado dentro. Está ben, e agocha algo. Colle a táboa da xeración actual e divide cara atrás:
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 tokA imaxe maior é a máis barata en todas as calidades. Un canvas de 1024 × 1536 ten 50 % máis píxeles ca un de 1024 × 1024 e custa 23 % menos tokens en medium. OpenAI advírteo nunha frase que saltarías —"a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting"— e na xeración anterior de modelos ía ao revés, co retrato custando 50 % máis ca o cadrado.11 Todo valor por defecto de 1024x1024 escrito antes dese cambio é agora a opción cara.
Son, facturado polo segundo, polo carácter e polo token
Ligazón á sección: Son, facturado polo segundo, polo carácter e polo tokenPídelles a tres produtos que falen os mesmos 519 caracteres —uns 38 segundos de audio— e obtés tres sistemas de unidades de dous provedores:
| modelo | unidade | prezo |
|---|---|---|
tts-1 | por carácter | $15.00 por millón de caracteres → $0.007785 |
tts-1-hd | por carácter | $30.00 por millón de caracteres → $0.015570 |
gemini-3.1-flash-tts | por audio token, 25 por segundo | $20.00 por millón → $0.019319 |
O mesmo provedor vende as dúas unidades: tts-1 de OpenAI ten prezo por millón de caracteres mentres gpt-4o-mini-tts ten prezo por millón de tokens, $0.60 de entrada e $12.00 de saída.13 Así que "o text-to-speech máis barato" non é unha pregunta con resposta ata que digas que vas falar.
E as dúas unidades son cegas a cousas opostas. Un prezo por carácter non ve a duración: escolle unha voz lenta e deliberada, ou engade pausas, e a factura non se move mentres o audio se fai máis longo. Un prezo por segundo non ve o contido: trinta segundos custan o mesmo tanto se son un parágrafo técnico denso como se alguén conta ata dez. Cambia a voz e exactamente un dos teus dous provedores recalcula o prezo.
A transcrición vai ao revés e é a liña máis simple de toda a factura: por minuto de audio, plana:
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)Fíxate na última fila fronte á terceira: facelo en directo, mentres chegan as palabras, custa 5,7 veces facelo sobre un ficheiro rematado. Esa diferenza é o prezo de non poder facer batch, e é o que encarece a sección seguinte.
Un minuto de voz, desagregado
Ligazón á sección: Un minuto de voz, desagregadoAgora o número que decide se a voz é unha funcionalidade ou un produto.
A chamada: unha conversa de soporte de dez quendas, 149 palabras, que a unha taxa declarada de 150 palabras por minuto son 59,6 segundos de fala: 21,2 falados pola persoa que chama, 38,4 devoltos. As conversións de token son as dos propios provedores. OpenAI: "audio tokens in user messages are 1 token per 100 ms of audio, while audio tokens in assistant messages are 1 token per 50 ms".14 Google: 25 tokens por segundo, nas dúas direccións, que a súa páxina de prezos confirma ao publicar $12.00 por millón e $0.018 por minuto na mesma liña.12
A conversa acumúlase exactamente como dixo o capítulo 16, porque é o mesmo mecanismo: "the entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive".14 Só que agora o historial mídese en audio tokens.
| quenda | usuario | assistant | audio novo de entrada | audio cached de entrada | audio de saída | custo |
|---|---|---|---|---|---|---|
| 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 |
Agora a comparación que decide o produto, as catro normalizadas a un minuto:
| por minuto | fronte ao texto | |
|---|---|---|
gpt-realtime-2.1, sen caching | $0.131259 | 37.9× |
gpt-realtime-2.1, historial cached | $0.057425 | 16.6× |
gemini-3.1-flash-live, sen caching | $0.023965 | 6.9× |
as mesmas palabras tecleadas, gpt-5.6-terra | $0.003461 | — |
Trinta e oito veces. Non trinta e oito por cento. O intercambio idéntico, realizado en son en vez de texto, é case dúas ordes de magnitude máis caro, e nada desa diferenza é unha marxe que alguén decidiu cobrar: é a taxa de conversión. Un segundo de audio de assistant son vinte tokens. Ese mesmo segundo leva 2,5 palabras á taxa declarada, e a transcrición medida vai a 1,26 tokens por palabra, así que como texto son 3,15 tokens. O son é un paquete 6,3 veces máis voluminoso para o mesmo significado, e cada un dos seus tokens factúrase a 5,3 veces a tarifa de saída de texto e a 16 veces a tarifa de entrada de texto. Multiplica unha relación de volume por unha relación de prezo e a orde de magnitude xa está aí antes de que empece a contabilidade.
Dúas consecuencias operativas saen directamente da táboa.
Audio caching non é unha optimización, é o modelo de negocio. A entrada de audio cached custa $0.40 por millón fronte a $32.00 nova: un desconto do 98,75 % que reduce á metade a chamada. A regra é a do capítulo 16, sen cambios: a cache coincide cun prefixo, así que calquera cousa inserida ao comezo da conversa a media chamada destrúea, e o lugar natural para poñer "a persoa que chama xa está verificada" é exactamente aí.
E nada do que fagas no cliente desf factura un son. O usuario fala por enriba do assistant, o teu código detén a reprodución, o altofalante cala. O que xa fora xerado xa foi cobrado, porque a facturación acumúlase cando se crea a resposta; e pola regra do capítulo 16, todo o que queda na conversa reenvíase como audio de entrada en cada quenda posterior. O capítulo 14 fixo este punto sobre abortar un stream de texto. En voz custa trinta veces máis.
Vídeo, GPU-segundos e un prezo que non é un prezo
Ligazón á sección: Vídeo, GPU-segundos e un prezo que non é un prezoO vídeo véndese por segundo nalgúns provedores e por clip noutros, con niveis por resolución e ás veces por duración. Esas dúas formas non difiren só en comodidade; crúzanse.
| modelo | 1 s | 2 s | 5 s | 10 s | 20 s |
|---|---|---|---|---|---|
veo-3.1, por segundo, 1080p | $0.400 | $0.800 | $2.000 | $4.000 | $8.000 |
veo-3.1-fast, por segundo, 1080p | $0.120 | $0.240 | $0.600 | $1.200 | $2.400 |
sora-2, por segundo, 720p | $0.100 | $0.200 | $0.500 | $1.000 | $2.000 |
hailuo-02, por clip, 1080p | $0.480 | $0.480 | $0.480 | $0.480 | $0.480 |
mochi, por GPU-segundo | $0.018 | $0.037 | $0.092 | $0.183 | $0.366 |
O provedor por clip é máis caro ca o de por segundo por baixo de 1,2 segundos e 16,7 veces máis barato aos vinte. Ningunha orde entre eses dous modelos sobrevive a un cambio de lonxitude do clip, así que "que modelo de vídeo é máis barato" non é unha pregunta sobre modelos.
A última fila é peor, e é o corazón honesto do capítulo. mochi factúrase contra segundos reais de GPU —o tempo de predición medido do traballo— a $0.001400 por segundo nun A100 e $0.001525 nun H100, que son as tarifas da máquina alugada e nada máis.15 Iso é unha tarifa perfectamente precisa e non é un prezo, porque a cantidade pola que multiplica é descoñecida ata despois de te comprometeres a pagala. A fila anterior asume doce GPU-segundos por segundo de saída; cuadruplica esa suposición e sae da franxa máis barata, e só a seis veces aterra a media táboa. É a única tarifa desta páxina que non podes meter nun orzamento.
O normalizador
Ligazón á sección: O normalizadorAsí que: tokens, image tokens, caracteres, minutos, segundos de vídeo, clips enteiros, GPU-segundos, unidades planas. Oito cantidades, e a única maneira de poñelas nun só eixe é declarar unha carga de traballo e poñerlle prezo.
Esa é a extensión de computeCost do capítulo 16: a mesma maquinaria de niveis, agora con criterios que non son a lonxitude do 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;
}As dúas liñas marcadas son onde rompe. Unha tarifa cotizada por unidade multiplica u.images ?? 1; unha tarifa cotizada por token multiplica algo que por defecto é cero. Dálle ás dúas un uso baleiro —a forma que obtés cando unha medición fallou— e observa:
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.0000Non pasou nada, seis veces, e custou tres dólares unha vez e nada cinco veces. Iso non é unha diferenza de redondeo; é unha decisión sobre que significa un número ausente, tomada por separado para cada unidade e nunca escrita. A regra sensata é que un campo que ninguén mediu segue ausente, porque "non medido" e "medido e saíu cero" son cousas distintas. Esta función discrepa en silencio.
O segundo fallo é a duración. A tarifa por clip escolle o seu nivel con maxDurationSeconds contra u.videoSeconds ?? 0, así que un uso que nunca rexistrou unha duración coincide co nivel máis curto:
duration recorded -> $0.45
duration missing -> $0.27Corenta por cento de desconto por non saber canto duraba o vídeo. Os dous bugs teñen a mesma raíz: un valor por defecto escollido por comodidade dentro dunha función cuxo traballo enteiro é ser exacta.
Facer comparable o número
Ligazón á sección: Facer comparable o númeroCos custos calculables, a comparación necesita a outra metade: unha carga de traballo representativa declarada, unha por motor, explicada en público para que un lector poida discrepar:
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 },
};Cada unha desas liñas é un argumento. O texto mestura un cuarto de entrada e tres cuartos de saída porque o uso real se inclina á saída; unha mestura cincuenta-cincuenta ordena os modelos doutro xeito. A carga de traballo de imaxe asume 1,500 tokens de saída, entre os 1,056 de OpenAI para un cadrado medium e os 1,584 para un retrato medium. Vídeo asume cinco segundos a 1080p, e acabamos de ver dous provedores intercambiar posicións en 1,2 segundos. A entrada de compute asume sesenta GPU-segundos porque non hai outra cousa que asumir.
Ese é o método, e é o único honesto dispoñible: non podes comparar prezos en unidades distintas; só podes comparar o custo dunha carga de traballo que deixaches por escrito. Calquera táboa que clasifique modelos multimodais sen imprimir a súa carga de traballo está clasificando as súas propias suposicións.
Cara a onde vai isto agora
Ligazón á sección: Cara a onde vai isto agoraAgora podes poñer prezo a calquera cousa que poida producir un modelo, na unidade na que se venda, e dicir en voz alta que carga de traballo asumiu a túa comparación. Iso pecha a factura que abriu o capítulo 16, e pecha a Parte III: todo desde o capítulo 14 ata aquí tratou de unha chamada: como facela, que poñer nela, como facer sampling, que devolve, que custa.
O capítulo 22 cambia a unidade de análise, e o cambio é caro. Un agent non é unha chamada; é un bucle que decide por si mesmo cantas chamadas facer, e a aritmética dos dous últimos capítulos é o que converte iso dun diagrama de arquitectura nun orzamento. Comeza facendo a mesma pregunta ao mesmo modelo dúas veces, cunha ferramenta engadida ao catálogo a segunda vez, e medindo o que fixo esa única ferramenta: unha chamada converteuse en dúas, trinta e nove input tokens convertéronse en 420.
Que iso o converta nun agent depende de cal das dúas definicións publicadas abras, e non coinciden. Unha delas nin sequera coincide consigo mesma.
Fontes e método
Ligazón á sección: Fontes e métodoCada prezo, fórmula e taxa de conversión deste capítulo leuse na páxina do propio provedor o 7 de setembro de 2026 e cítase con esa data, porque todos van moverse. Os recontos de token, custos e comparacións calculáronse sobre eses datos co código impreso arriba, nunha máquina, sen facer ningunha chamada de API de pago; esa é tamén a razón honesta pola que non hai nin unha soa afirmación de latencia neste capítulo.
As funcións de image-token, as táboas de custo, o desagregado da chamada de voz e os resultados de uso baleiro producíronse co TypeScript impreso neste capítulo, executado en Node 22. O diálogo usado para a comparación de voz ten 149 palabras e foi tokenized con tiktoken baixo a codificación o200k_base en 188 tokens; a súa duración deriva dunha taxa declarada de 150 palabras por minuto, que é un parámetro da comparación e non unha medición. Cada cifra de provedor leva a nota que nomea a páxina da que saíu.
Referencias
Ligazón á sección: Referencias-
Dosovitskiy, A. et al. An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale. arXiv:2010.11929 (2020). Parches, a proxección lineal cara á dimensión de embedding e os embeddings de posición que fan lexible a grella para un modelo de secuencia. ↩
-
Radford, A. et al. Learning Transferable Visual Models From Natural Language Supervision. arXiv:2103.00020 (2021). Adestramento contrastivo dun codificador de imaxe e dun codificador de texto sobre 400 millóns de pares, e o espazo compartido que todo o posterior dá por suposto. ↩
-
Alayrac, J.-B. et al. Flamingo: a Visual Language Model for Few-Shot Learning. arXiv:2204.14198 (2022). Codificador de visión conxelado, modelo de linguaxe conxelado, capas ponte adestradas: a arquitectura que converteu a comprensión de imaxes nunha capacidade de chat. ↩
-
Liu, H., Li, C., Wu, Q. and Lee, Y. J. Visual Instruction Tuning. arXiv:2304.08485 (2023). Unha soa proxección lineal como ponte e datos de instrución xerados como conxunto de adestramento; a razón pola que os modelos abertos de visión-linguaxe converxeron nunha forma. ↩
-
Anthropic, Vision,
platform.claude.com/docs/en/build-with-claude/vision, consultado o 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." Tamén os dous niveis de resolución (estándar: lado longo de 1568 píxeles, 1568 visual tokens; alta resolución, en Claude 4.7 e posteriores: 2576 píxeles e 4784 tokens), a regra de redución, e a táboa de seis filas de tamaños e recontos de token reproducida arriba. Tarifas de modelo de Anthropic, Pricing,platform.claude.com/docs/en/about-claude/pricing, mesma data: Claude Haiku 4.5 a $1 e $5 por millón de input e output tokens. ↩ -
Google, Image understanding,
ai.google.dev/gemini-api/docs/image-understanding, consultado o 2026-09-07. "258 tokens if both dimensions <= 384 pixels. Larger images are tiled into 768x768 pixel tiles, each costing 258 tokens", coa fórmula da unidade de recorte —floor(min(width, height) / 1.5), dimensións divididas por ela e multiplicadas entre si— e o exemplo resolto de 960 × 540 que dá 3 × 2 = 6 tiles. Google chámao "a rough formula"; a invariancia de escala derivada arriba é unha propiedade da fórmula tal como está publicada. A entrada de audio da mesma familia é 32 tokens por segundo de audio (ai.google.dev/gemini-api/docs/audio, mesma data). ↩ -
OpenAI, Images and vision,
developers.openai.com/api/docs/guides/images-vision, consultado o 2026-09-07. Fonte da regra baseada en parches (parches de 32 × 32,patch_count = ceil(width/32)×ceil(height/32), a fórmulashrink_factore o seu axuste enteiro, o límite de rexeitamento de 30,000 parches); a táboa de tamaños de modelos, incluído quelowengpt-5.4usa un límite de 2048 píxeles e un orzamento de 6,144 parches "so it can use more tokens thanhigh", fronte ao orzamento de 2,500 parches dehigh; a táboa de multiplicadores (1.2 para as familias GPT-5.x, 1.62 paragpt-4.1-mini, 2.46 paragpt-4.1-nano); os dous exemplos resoltos reproducidos arriba (1024 × 1024 → 1229 tokens, 2048 × 2048 → 3000 tokens); as regras baseadas en tiles para modelos máis antigos (base máis tiles de 512 píxeles, 85 + 170 engpt-4o); e a lista de limitacións citada na caixa de visión. ↩ ↩2 -
Ho, J., Jain, A. and Abbeel, P. Denoising Diffusion Probabilistic Models. arXiv:2006.11239 (2020). A programación directa de engadir ruído, a reparametrización que converte o obxectivo en predicir o ruído engadido, e o bucle de sampling. ↩
-
Rombach, R., Blattmann, A., Lorenz, D., Esser, P. and Ommer, B. High-Resolution Image Synthesis with Latent Diffusion Models. arXiv:2112.10752 (2022). Executar o proceso de diffusion nun espazo latente comprimido, que foi o que fixo o reconto fixo de pasos o bastante asumible para vendelo por imaxe. ↩
-
Prince, S. J. D. Understanding Deep Learning (MIT Press, 2023), capítulo 18. A delegación declarada para todo o que este capítulo saltou sobre diffusion: a cota variacional, as programacións de ruído, classifier-free guidance e as familias de sampler. Hu, E. et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv:2106.09685 (2021), é o propio adaptador, introducido no capítulo 11 nun modelo de linguaxe e usado aquí nun modelo de imaxe sen cambiar a matemática. Radford, A. et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), arXiv:2212.04356 (2022), é o modelo de transcrición cuxo prezo por minuto aparece arriba. ↩
-
OpenAI, Image generation,
developers.openai.com/api/docs/guides/image-generation, Pricing,developers.openai.com/api/docs/pricing, e a páxina do modelogpt-image-1, todos consultados o 2026-09-07. A páxina do modelogpt-image-2non trae sección de prezos; as súas tarifas veñen da páxina de prezos anterior. A páxina de GPT Image 1 publica entrada de texto a $5.00, entrada de imaxe a $10.00 e saída de imaxe a $40.00 por millón de tokens xunto á táboa por imaxe usada na derivación anterior. Tamén: a táboa de output-token para modelos anteriores a gpt-image-2 (272 / 408 / 400 low, 1056 / 1584 / 1568 medium, 4160 / 6240 / 6208 high, para cadrado, retrato e paisaxe); as táboas de prezo por imaxe para GPT Image 2, 1.5, 1 e 1 Mini usadas nas derivacións anteriores; a frase "a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting"; a nota de que cada imaxe parcial transmitida en streaming custa 100 image output tokens extra; e as tarifas de gpt-image-2 de $8.00 entrada de imaxe, $2.00 entrada de imaxe cached, $30.00 saída de imaxe e $5.00 entrada de texto por millón de tokens. Tarifas de modelos de texto usadas nas comparacións:gpt-5.6-terraa $2.00 entrada, $0.20 entrada cached e $12.00 saída,gpt-5.6-lunaa $0.20 e $1.20, nivel estándar, context curto. Vídeo:sora-2a $0.10 por segundo a 720p esora-2-proa $0.30, $0.50 e $0.70 a 720p, 1024p e 1080p. Transcrición: $0.006, $0.0045, $0.003 e $0.017 por minuto paragpt-4o-transcribe,gpt-transcribe,gpt-4o-mini-transcribeegpt-live-transcribe. ↩ ↩2 -
Google, Gemini Developer API pricing,
ai.google.dev/gemini-api/docs/pricing, consultado o 2026-09-07. Gemini 3.1 Flash-Lite a $0.25 por millón de input tokens (texto, imaxe e vídeo) e $1.50 de saída. Gemini 3.1 Flash Image: saída de imaxe a $60 por millón de tokens, coas equivalencias publicadas de 747, 1120, 1680 e 2520 tokens para imaxes 0.5K, 1K, 2K e 4K e os seus prezos por imaxe de $0.045, $0.067, $0.101 e $0.151. Gemini 3.1 Flash TTS: $1.00 de entrada de texto, $20.00 de saída de audio, "audio tokens correspond to 25 tokens per second of audio". Gemini 3.1 Flash Live Preview: $0.75 texto e "$3.00 or $0.005/min" entrada de audio, "$4.50 (text) $12.00 or $0.018/min (audio)" saída. Veo 3.1 por segundo con audio: $0.40 a 720p e 1080p e $0.60 a 4K estándar; $0.10, $0.12 e $0.30 fast. Gemini Omni Flash factura a saída de vídeo "at a rate of 5,792 tokens per second of 720p video", que a mesma nota converte a arredor de $0.10 por segundo: a afirmación publicada máis clara de que un prezo de medios por segundo é un prezo por token. ↩ ↩2 -
Páxinas de modelo de OpenAI para
tts-1,tts-1-hdegpt-4o-mini-tts,developers.openai.com/api/docs/models, consultadas o 2026-09-07.tts-1a $15.00 etts-1-hda $30.00 por millón de caracteres;gpt-4o-mini-ttsa $0.60 por millón de text input tokens e $12.00 por millón de audio output tokens: o mesmo provedor, a mesma operación, dúas unidades. ↩ -
OpenAI, Managing costs (Realtime API),
developers.openai.com/api/docs/guides/realtime-costs, consultado o 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." Tamén: "The entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive"; os custos acumúlanse cando se crea unha Response; o exemplo resolto de dúas quendas cuxa acumulación reproduce a táboa anterior; e o payload de usoresponse.donecoas súas divisiónsinput_token_detailseoutput_token_details. Tarifas da páxina de prezos, mesma data: audio degpt-realtime-2.1a $32.00 entrada, $0.40 entrada cached e $64.00 saída por millón de tokens, texto a $4.00, $0.40 e $24.00, entrada de imaxe a $5.00. ↩ ↩2 -
Replicate, Pricing,
replicate.com/pricing, consultado o 2026-09-07. Nvidia A100 (80GB) a $0.001400 por segundo e $5.04 por hora; Nvidia H100 a $0.001525 por segundo e $5.49 por hora. ↩