Precificação multimodal: o que imagens, áudio e vídeo realmente cobram
Três modelos recebem as mesmas 500 fotos e discordam por 5,5×; o mais barato muda assim que alguém redimensiona as imagens.
Nesta página
Aqui está uma tarefa, precificada de três maneiras: descrever quinhentas fotografias de produtos, uma legenda curta para cada uma. Mesmas fotografias, mesma instrução, mesmo tamanho de resposta. A única coisa que muda é qual modelo as lê.
| fotografia | 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 |
Há três coisas nessa tabela que merecem uma pausa.
O modelo mais barato muda entre a terceira linha e a quarta, na mesma tarefa, porque alguém redimensionou as fotografias. Peça um parágrafo em vez de uma legenda e o ponto de cruzamento muda de novo: em 1280 × 960, o vencedor é Gemini para uma legenda de quarenta tokens e OpenAI para um parágrafo de quatrocentos tokens.
A coluna do Gemini não se move nada, em nenhuma linha: uma fotografia de 4000 × 3000 custa exatamente o mesmo que uma de 640 × 480. Uma fotografia de 4000 × 3000 custa exatamente o mesmo que uma fotografia de 640 × 480. Isso não é um limite. É consequência de como ele conta, e significa que a otimização de custo mais comum neste mercado — reduzir a resolução antes de fazer upload — paga assim:
| image tokens, 4000 × 3000 → 800 × 600 | custo da execução | economia | |
|---|---|---|---|
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 % |
Nenhum desses números é um preço que o fornecedor publica. Os três tiveram de ser calculados, a partir de três regras diferentes, porque uma fotografia não é uma unidade faturável em lugar nenhum: ela primeiro é convertida em tokens, por uma aritmética registrada em três lugares incompatíveis.
Capítulo 16 montou a conta de texto e parou onde o texto termina. Este capítulo é o restante da fatura: imagens, fala, transcrição, vídeo e computação bruta, que juntos são cobrados em oito unidades diferentes, e o método para comparar coisas que não são vendidas pela mesma medida.
Mostrar detalhes
O que este capítulo precisa dos anteriores.
- Capítulo 7 construiu o tokenizer e a unidade. Tudo aqui é uma tentativa de transformar algo que não é texto nessa unidade.
- Capítulo 8 estabeleceu o que um modelo consome: não símbolos, mas vetores em um espaço de embedding. É por isso que uma imagem pode ser precificada em tokens.
- Capítulo 16 construiu
computeCost, suas faixas de preço e seus cinco buckets de token. Este capítulo estende essa função em vez de substituí-la. - Capítulo 11 apresentou LoRA como técnica de fine-tuning e Capítulo 20 precificou isso como uma decisão de orçamento. Aqui ela aparece em um modelo que não é um modelo de linguagem.
Sem tensores, pela regra do Capítulo 14: isto é tarifas, conversões e contabilidade, então é TypeScript.
Por que uma fotografia tem preço em token
Link para a seção: Por que uma fotografia tem preço em tokenUm transformer recebe uma sequência de vetores. Ele não tem opinião sobre de onde eles vieram. O Capítulo 8 o alimentou com embeddings buscados a partir de um ID de token; nada na arquitetura exige essa busca.
Então: corte a imagem em quadrados fixos, achate cada quadrado em uma lista de números e passe cada lista por uma camada linear aprendida para obter um vetor com a largura do modelo. Um patch de 32 × 32 pixels coloridos tem números; a projeção o transforma em um vetor -dimensional, exatamente o formato em que um token de texto chega. É só isso, e está no artigo cujo título já diz: uma imagem vale 16 × 16 palavras.1 Adicione uma codificação posicional para o modelo saber qual quadrado estava onde, intercale os resultados com os embeddings de texto, e a sequência lida pelo modelo é parte imagem e parte frase.
Três artigos transformaram isso em produto. CLIP treinou um codificador de imagem e um codificador de texto para concordarem, em quatrocentos milhões de pares coletados da web, e foi ali que a ideia de pixels e palavras compartilharem um espaço deixou de ser hipótese.2 Flamingo acoplou um codificador de visão congelado a um modelo de linguagem congelado com algumas camadas de ponte treinadas.3 LLaVA mostrou que a ponte podia ser uma única projeção linear e que o seguimento de instruções podia ser ensinado com dados gerados, por isso todo modelo aberto de visão-linguagem desde então parece mais ou menos igual.4
A consequência para sua fatura é imediata e nada glamourosa: os patches são posições na sequência, portanto são input tokens, portanto você paga por eles na taxa de entrada. Quantos são é aritmética, e cada fornecedor faz de um jeito.
Três regras, todas publicadas, nenhuma igual
Link para a seção: Três regras, todas publicadas, nenhuma igualCada regra abaixo é implementada a partir da própria documentação do fornecedor e conferida contra os exemplos trabalhados nessa mesma documentação.
A OpenAI cobre a imagem com patches de 32 × 32 e multiplica a contagem por um fator por modelo. Se a contagem de patches excede o orçamento desse modelo e nível de detalhe, a imagem é reduzida até caber:
A Anthropic a cobre com patches de 28 × 28, um visual token cada, e limita tanto a borda maior quanto a contagem de token — 1.568 pixels e 1.568 tokens em modelos de faixa padrão, 2.576 e 4.784 na faixa de alta resolução. Imagens grandes demais são reduzidas ao maior tamanho que caiba nos dois limites.5
O Google não conta pixels. Uma imagem com ambos os lados em até 384 pixels custa uma taxa fixa de 258 tokens. Qualquer coisa maior é cortada em tiles de 258 tokens cada, e a grade de tiles vem de uma unidade de corte 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;
}Execute cada uma contra os números que o próprio fornecedor imprime:
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 MATCHNove concordâncias são impressas; a execução completa confere quinze, já que a tabela da Anthropic dá as duas faixas para todos os seis tamanhos. As regras agora são suas para rodar em qualquer fotografia que você tiver, e esse é o ponto: estas são as únicas três funções deste capítulo que você não consegue tirar de uma página de preços.
O que «maior» significa, três vezes
Link para a seção: O que «maior» significa, três vezesPasse a mesma fotografia 4:3 pelas três regras em seis tamanhos:
| tamanho | OpenAI, high | Anthropic, padrão | Anthropic, alta resolução | 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 |
Leia a última coluna de cima para baixo. Depois que a imagem passa de 384 pixels, o número nunca muda de novo, e isso não é coincidência nem limite. Substitua a unidade de corte de volta na fórmula de tiles, para uma imagem pelo menos tão larga quanto alta:
O tamanho cancela. Os image tokens do Google dependem da proporção de aspecto e de nada mais. Uma fotografia 4:3 tem quatro tiles seja ela uma miniatura ou um pôster. Esse único fato algébrico é a explicação inteira do zero na tabela de economia acima, e nenhuma página de preços em lugar nenhum o afirma.
As outras duas colunas impõem limites, em alturas diferentes e por motivos diferentes — Anthropic em um teto declarado de token, OpenAI em um orçamento de patches depois de um limite de pixels —, e é por isso que as três curvas se cruzam em tamanhos diferentes.
Agora quebre a regra. A maneira óbvia de gastar menos em um modelo de visão é pedir menos detalhe, então envie detail: "low":
1600x1200 low = 2280 high = 2280 ratio 1.00
3200x2400 low = 3687 high = 2942 ratio 1.25Pedir menos detalhe custou 25 % mais. Isso não é bug, e a OpenAI diz isso em uma linha da tabela de dimensionamento: nessa família de modelos, low usa um limite de 2048 pixels com um orçamento de 6.144 patches, enquanto high usa o mesmo limite de pixels com um orçamento de 2.500 patches, «portanto pode usar mais tokens que high».7 A palavra low nomeia uma configuração de fidelidade, não um preço: em duas das cinco famílias de modelos documentadas ela não compra economia nenhuma, e em uma dessas duas custa mais.
Gerar uma imagem é outra máquina
Link para a seção: Gerar uma imagem é outra máquinaTudo até aqui foi um modelo lendo uma imagem. Fazer uma imagem roda em um mecanismo sem tokens, e é por isso que ele é vendido por imagem, não por palavra.
Fazer uma imagem: preço por imagem é preço por token
Link para a seção: Fazer uma imagem: preço por imagem é preço por tokenFornecedores publicam geração de imagem como preço por imagem. Não é. Modelos GPT Image emitem image tokens especializados cuja contagem depende do tamanho e da qualidade solicitados; multiplique as contagens publicadas pela taxa de saída de imagem publicada do GPT Image 1, de $40 por milhão, e compare com os preços por imagem na mesma página:
| qualidade | 1024 × 1024 | 1024 × 1536 | 1536 × 1024 |
|---|---|---|---|
| baixa | 272 tok → $0.0109 ($0.011) | 408 tok → $0.0163 ($0.016) | 400 tok → $0.0160 ($0.016) |
| média | 1,056 tok → $0.0422 ($0.042) | 1,584 tok → $0.0634 ($0.063) | 1,568 tok → $0.0627 ($0.063) |
| alta | 4,160 tok → $0.1664 ($0.167) | 6,240 tok → $0.2496 ($0.25) | 6,208 tok → $0.2483 ($0.25) |
Nove números derivados contra nove publicados, todos os pares concordando dentro de $0.002.11 O Google é ainda mais explícito e faz a conversão para você na própria página de preços: saída de imagem a $60 por milhão de tokens, «imagens de saída em 1K (1024x1024px) consomem 1120 tokens e equivalem a $0.067 por imagem».12
Então um preço por imagem é um preço por token com a contagem embutida. Tudo bem, mas isso esconde algo. Pegue a tabela da geração atual e divida ao contrário:
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 imagem maior é a mais barata em todas as qualidades. Um canvas de 1024 × 1536 tem 50 % mais pixels que um de 1024 × 1024 e custa 23 % menos tokens em qualidade média. A OpenAI sinaliza isso em uma frase que você pularia — «uma resolução não quadrada maior às vezes pode produzir menos output tokens do que uma resolução menor ou quadrada na mesma configuração de qualidade» — e, na geração anterior do modelo, era o contrário, com retrato custando 50 % mais que quadrado.11 Todo padrão de 1024x1024 escrito antes dessa mudança agora é a opção cara.
Som, cobrado por segundo, por caractere e por token
Link para a seção: Som, cobrado por segundo, por caractere e por tokenPeça a três produtos para falar os mesmos 519 caracteres — cerca de 38 segundos de áudio — e você obtém três sistemas de unidades de dois fornecedores:
| modelo | unidade | preço |
|---|---|---|
tts-1 | por caractere | $15.00 por milhão de caracteres → $0.007785 |
tts-1-hd | por caractere | $30.00 por milhão de caracteres → $0.015570 |
gemini-3.1-flash-tts | por audio token, 25 por segundo | $20.00 por milhão → $0.019319 |
O mesmo fornecedor vende as duas unidades: tts-1 da OpenAI é precificado por milhão de caracteres, enquanto gpt-4o-mini-tts é precificado por milhão de tokens, $0.60 de entrada e $12.00 de saída.13 Portanto «text-to-speech mais barato» não é uma pergunta com resposta até você dizer o que será falado.
E as duas unidades são cegas a coisas opostas. Um preço por caractere não vê duração: escolha uma voz lenta e deliberada, ou adicione pausas, e a conta não muda enquanto o áudio fica mais longo. Um preço por segundo não vê conteúdo: trinta segundos custam o mesmo seja um parágrafo técnico denso ou alguém contando até dez. Mude a voz e exatamente um dos seus dois fornecedores muda o preço.
Transcrição vai no sentido oposto e é a linha mais simples de toda a fatura — por minuto de áudio, fixo:
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)Observe a última linha em relação à terceira: fazer isso ao vivo, conforme as palavras chegam, custa 5,7 vezes mais do que fazer em um arquivo finalizado. Essa diferença é o preço de não poder fazer batch, e é o que torna a próxima seção cara.
Um minuto de voz, itemizado
Link para a seção: Um minuto de voz, itemizadoAgora o número que decide se voz é uma funcionalidade ou um produto.
A ligação: uma conversa de suporte de dez turnos, 149 palavras, que a uma taxa declarada de 150 palavras por minuto dá 59,6 segundos de fala — 21,2 falados pelo cliente, 38,4 falados de volta. As conversões de token são dos próprios fornecedores. OpenAI: «audio tokens em mensagens do usuário são 1 token por 100 ms de áudio, enquanto audio tokens em mensagens do assistant são 1 token por 50 ms».14 Google: 25 tokens por segundo, nas duas direções, o que sua página de preços confirma ao publicar $12.00 por milhão e $0.018 por minuto na mesma linha.12
A conversa se acumula exatamente como o Capítulo 16 disse que aconteceria, porque é o mesmo mecanismo: «a conversa inteira é enviada ao modelo para cada Response... portanto turnos posteriores na sessão serão mais caros».14 Só que agora o histórico é medido em audio tokens.
| turno | usuário | assistant | áudio novo de entrada | áudio em cache de entrada | áudio 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 comparação que decide o produto, todos os quatro normalizados para um minuto:
| por minuto | versus texto | |
|---|---|---|
gpt-realtime-2.1, sem caching | $0.131259 | 37.9× |
gpt-realtime-2.1, histórico em cache | $0.057425 | 16.6× |
gemini-3.1-flash-live, sem caching | $0.023965 | 6.9× |
as mesmas palavras digitadas, gpt-5.6-terra | $0.003461 | — |
Trinta e oito vezes. Não trinta e oito por cento. A troca idêntica, conduzida em som em vez de texto, é quase duas ordens de grandeza mais cara, e nada dessa diferença é uma margem que alguém escolheu cobrar — é a taxa de conversão. Um segundo de áudio do assistant são vinte tokens. Esse mesmo segundo carrega 2,5 palavras na taxa declarada, e a transcrição medida roda a 1,26 tokens por palavra, então como texto ele tem 3,15 tokens. Som é um pacote 6,3 vezes mais volumoso para o mesmo significado, e cada um de seus tokens é cobrado a 5,3 vezes a taxa de saída de texto e 16 vezes a taxa de entrada de texto. Multiplique uma razão de volume por uma razão de preço e a ordem de grandeza já está lá antes de qualquer contabilidade começar.
Duas consequências operacionais saem direto da tabela.
Audio caching não é uma otimização, é o modelo de negócio. Entrada de áudio em cache custa $0.40 por milhão contra $32.00 nova — um desconto de 98,75 % que reduz a ligação pela metade. A regra é a do Capítulo 16, sem mudanças: o cache corresponde a um prefixo, então qualquer coisa inserida no início da conversa no meio da ligação o destrói, e o lugar natural para colocar «o cliente agora está verificado» é exatamente ali.
E nada que você faça no cliente desfatura um som. O usuário fala por cima do assistant, seu código interrompe a reprodução, o alto-falante fica em silêncio. O que já tinha sido gerado já foi cobrado, porque o faturamento acumula quando a resposta é criada; e, pela regra do Capítulo 16, o que permanece na conversa é reenviado, como áudio de entrada, em todos os turnos seguintes. O Capítulo 14 fez esse ponto sobre abortar um stream de texto. Em voz, custa trinta vezes mais.
Vídeo, GPU-segundos e um preço que não é preço
Link para a seção: Vídeo, GPU-segundos e um preço que não é preçoVídeo é vendido por segundo por alguns fornecedores e por clipe por outros, com faixas para resolução e às vezes para duração. Esses dois formatos não diferem apenas em conveniência; eles se cruzam.
| 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 clipe, 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 fornecedor por clipe é mais caro que o por segundo abaixo de 1,2 segundo e 16,7 vezes mais barato aos vinte. Nenhuma ordenação desses dois modelos sobrevive a uma mudança no comprimento do clipe, então «qual modelo de vídeo é mais barato» não é uma pergunta sobre modelos.
A última linha é pior, e é o coração honesto do capítulo. mochi é cobrado contra segundos reais de GPU — o tempo de predição medido do job — a $0.001400 por segundo em uma A100 e $0.001525 em uma H100, que são as taxas da máquina alugada e nada mais.15 Essa é uma tarifa perfeitamente precisa e não é um preço, porque a quantidade que ela multiplica é desconhecida até depois de você ter se comprometido a pagá-la. A linha acima assume doze GPU-segundos por segundo de saída; quadruplique essa suposição e ela sai da faixa mais barata, e só em seis vezes cai no meio da tabela. É a única tarifa nesta página que você não consegue colocar em uma cotação.
O normalizador
Link para a seção: O normalizadorEntão: tokens, image tokens, caracteres, minutos, segundos de vídeo, clipes inteiros, GPU-segundos, unidades fixas. Oito quantidades, e a única forma de colocá-las em um eixo é declarar uma carga de trabalho e precificá-la.
Essa é a extensão do computeCost do Capítulo 16 — a mesma maquinaria de faixas, agora com critérios que não são o comprimento 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 duas linhas marcadas são onde ele quebra. Uma tarifa cotada por unidade multiplica u.images ?? 1; uma tarifa cotada por token multiplica algo cujo padrão é zero. Alimente ambas com uso vazio — o formato que você obtém quando uma medição falhou — e veja:
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.0000Nada aconteceu, seis vezes, e custou três dólares uma vez e nada cinco vezes. Isso não é diferença de arredondamento; é uma decisão sobre o que um número ausente significa, tomada separadamente para cada unidade e nunca escrita. A regra sensata é que um campo que ninguém mediu permanece ausente, porque «não medido» e «medido e deu zero» são coisas diferentes. Esta função discorda em silêncio.
A segunda falha é duração. A tarifa por clipe seleciona sua faixa com maxDurationSeconds contra u.videoSeconds ?? 0, então um uso que nunca registrou duração corresponde à faixa mais curta:
duration recorded -> $0.45
duration missing -> $0.27Quarenta por cento de desconto por não saber quanto durou o vídeo. Ambos os bugs têm a mesma raiz: um padrão escolhido por conveniência dentro de uma função cujo trabalho inteiro é ser exata.
Tornando o número comparável
Link para a seção: Tornando o número comparávelCom custos computáveis, a comparação precisa da outra metade — uma carga de trabalho representativa declarada, uma por engine, exposta publicamente para que um leitor possa discordar dela:
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 uma dessas linhas é um argumento. Texto mistura um quarto de entrada e três quartos de saída porque o uso real pende para a saída; uma mistura meio a meio classifica os modelos de outro jeito. A carga de imagem assume 1.500 output tokens, entre os 1.056 da OpenAI para um quadrado médio e os 1.584 para um retrato médio. Vídeo assume cinco segundos em 1080p, e acabamos de ver dois fornecedores trocarem de lugar em 1,2 segundo. A entrada de computação assume sessenta GPU-segundos porque não há mais nada a assumir.
Esse é o método, e é o único honesto disponível: você não pode comparar preços em unidades diferentes; só pode comparar o custo de uma carga de trabalho que você escreveu. Qualquer tabela que classifique modelos multimodais sem imprimir sua carga de trabalho está classificando as próprias suposições.
Para onde isso vai agora
Link para a seção: Para onde isso vai agoraAgora você consegue precificar qualquer coisa que um modelo possa produzir, em qualquer unidade em que ela seja vendida, e dizer em voz alta qual carga de trabalho sua comparação assumiu. Isso fecha a fatura que o Capítulo 16 abriu, e fecha a Parte III: tudo do Capítulo 14 até aqui tratou de uma chamada — como fazê-la, o que colocar nela, como amostrá-la, o que ela retorna, quanto custa.
O Capítulo 22 muda a unidade de análise, e a mudança é cara. Um agent não é uma chamada; é um loop que decide por si mesmo quantas chamadas fazer, e a aritmética dos dois últimos capítulos é o que transforma isso de um diagrama de arquitetura em um orçamento. Ele começa fazendo a mesma pergunta ao mesmo modelo duas vezes, com uma ferramenta adicionada ao catálogo na segunda vez, e medindo o que essa única ferramenta fez: uma chamada virou duas, trinta e nove input tokens viraram 420.
Se isso faz dele um agent depende de qual das duas definições publicadas você abre, e elas não concordam. Uma delas não concorda consigo mesma.
Fontes e método
Link para a seção: Fontes e métodoCada preço, fórmula e taxa de conversão neste capítulo foi lido da própria página do fornecedor em 7 de setembro de 2026 e é citado com essa data, porque todos eles vão mudar. As contagens de token, custos e comparações foram calculados sobre esses dados pelo código impresso acima, em uma máquina, sem nenhuma chamada de API paga — o que também é o motivo honesto para não haver uma única afirmação de latência neste capítulo.
As funções de image-token, as tabelas de custo, o detalhamento da chamada de voz e os resultados de uso vazio foram produzidos pelo TypeScript impresso neste capítulo, executado no Node 22. O diálogo usado para a comparação de voz tem 149 palavras e foi tokenizado com tiktoken sob a codificação o200k_base em 188 tokens; sua duração vem de uma taxa declarada de 150 palavras por minuto, que é um parâmetro da comparação e não uma medição. Cada número de fornecedor carrega a nota de rodapé que nomeia a página de onde veio.
Referências
Link para a seção: Referências-
Dosovitskiy, A. et al. An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale. arXiv:2010.11929 (2020). Patches, a projeção linear para a dimensão de embedding e os position embeddings que tornam a grade legível para um modelo de sequência. ↩
-
Radford, A. et al. Learning Transferable Visual Models From Natural Language Supervision. arXiv:2103.00020 (2021). Treinamento contrastivo de um codificador de imagem e um codificador de texto em 400 milhões de pares, e o espaço compartilhado que tudo a jusante assume. ↩
-
Alayrac, J.-B. et al. Flamingo: a Visual Language Model for Few-Shot Learning. arXiv:2204.14198 (2022). Codificador de visão congelado, modelo de linguagem congelado, camadas de ponte treinadas — a arquitetura que transformou compreensão de imagem em capacidade de chat. ↩
-
Liu, H., Li, C., Wu, Q. and Lee, Y. J. Visual Instruction Tuning. arXiv:2304.08485 (2023). Uma única projeção linear como ponte e dados de instrução gerados como conjunto de treino; o motivo pelo qual modelos abertos de visão-linguagem convergiram para um formato. ↩
-
Anthropic, Vision,
platform.claude.com/docs/en/build-with-claude/vision, acessado em 2026-09-07. «Claude vê imagens em patches em vez de pixels. Cada patch é um bloco de 28×28 pixels da imagem, referido como um visual token. Uma imagem, portanto, custa ⌈width / 28⌉ × ⌈height / 28⌉ visual tokens.» Também as duas faixas de resolução (padrão: borda maior de 1568 pixels, 1568 visual tokens; alta resolução, em Claude 4.7 e posteriores: 2576 pixels e 4784 tokens), a regra de redução de tamanho e a tabela de seis linhas de tamanhos e contagens de token reproduzida acima. Taxas de modelo de Anthropic, Pricing,platform.claude.com/docs/en/about-claude/pricing, mesma data: Claude Haiku 4.5 a $1 e $5 por milhão de input e output tokens. ↩ -
Google, Image understanding,
ai.google.dev/gemini-api/docs/image-understanding, acessado em 2026-09-07. «258 tokens se ambas as dimensões <= 384 pixels. Imagens maiores são divididas em tiles de 768x768 pixels, cada um custando 258 tokens», com a fórmula da unidade de corte —floor(min(width, height) / 1.5), dimensões divididas por ela e multiplicadas — e o exemplo trabalhado de 960 × 540 dando 3 × 2 = 6 tiles. O Google chama isso de «uma fórmula aproximada»; a invariância de escala derivada acima é uma propriedade da fórmula como publicada. Entrada de áudio na mesma família é 32 tokens por segundo de áudio (ai.google.dev/gemini-api/docs/audio, mesma data). ↩ -
OpenAI, Images and vision,
developers.openai.com/api/docs/guides/images-vision, acessado em 2026-09-07. Fonte da regra baseada em patches (patches de 32 × 32,patch_count = ceil(width/32)×ceil(height/32), a fórmulashrink_factore seu ajuste inteiro, o limite de rejeição de 30.000 patches); a tabela de dimensionamento de modelos, incluindo quelowemgpt-5.4usa um limite de 2048 pixels e um orçamento de 6.144 patches «portanto pode usar mais tokens quehigh», contra o orçamento de 2.500 patches dehigh; a tabela de multiplicadores (1,2 para as famílias GPT-5.x, 1,62 paragpt-4.1-mini, 2,46 paragpt-4.1-nano); os dois exemplos trabalhados reproduzidos acima (1024 × 1024 → 1229 tokens, 2048 × 2048 → 3000 tokens); as regras baseadas em tiles para modelos mais antigos (base mais tiles de 512 pixels, 85 + 170 emgpt-4o); e a lista de limitações citada na caixa de visão. ↩ ↩2 -
Ho, J., Jain, A. and Abbeel, P. Denoising Diffusion Probabilistic Models. arXiv:2006.11239 (2020). O agendamento de ruído direto, a reparametrização que transforma o objetivo em prever o ruído adicionado e o loop de amostragem. ↩
-
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 processo de diffusion em um espaço latente comprimido, que foi o que tornou a contagem fixa de etapas acessível o bastante para vender por imagem. ↩
-
Prince, S. J. D. Understanding Deep Learning (MIT Press, 2023), capítulo 18. A delegação declarada para tudo que este capítulo pulou sobre diffusion — o limite variacional, os agendamentos de ruído, classifier-free guidance e as famílias de samplers. Hu, E. et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv:2106.09685 (2021), é o adaptador em si, apresentado no Capítulo 11 em um modelo de linguagem e usado aqui em um modelo de imagem sem mudança de matemática. Radford, A. et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), arXiv:2212.04356 (2022), é o modelo de transcrição cujo preço por minuto aparece acima. ↩
-
OpenAI, Image generation,
developers.openai.com/api/docs/guides/image-generation, Pricing,developers.openai.com/api/docs/pricing, e a página do modelogpt-image-1, todos acessados em 2026-09-07. A página do modelogpt-image-2não traz seção de preços; suas taxas vêm da página de preços acima. A página do GPT Image 1 publica entrada de texto a $5.00, entrada de imagem a $10.00 e saída de imagem a $40.00 por milhão de tokens ao lado da tabela por imagem usada na derivação acima. Também: a tabela de output-token para modelos anteriores ao gpt-image-2 (272 / 408 / 400 baixa, 1056 / 1584 / 1568 média, 4160 / 6240 / 6208 alta, para quadrado, retrato e paisagem); as tabelas de preço por imagem para GPT Image 2, 1.5, 1 e 1 Mini usadas nas derivações acima; a frase «uma resolução não quadrada maior às vezes pode produzir menos output tokens do que uma resolução menor ou quadrada na mesma configuração de qualidade»; a observação de que cada imagem parcial em streaming custa 100 image output tokens extras; e as taxas do gpt-image-2 de $8.00 entrada de imagem, $2.00 entrada de imagem em cache, $30.00 saída de imagem e $5.00 entrada de texto por milhão de tokens. Taxas de modelos de texto usadas nas comparações:gpt-5.6-terraa $2.00 entrada, $0.20 entrada em cache e $12.00 saída,gpt-5.6-lunaa $0.20 e $1.20, faixa padrão, context curto. Vídeo:sora-2a $0.10 por segundo em 720p esora-2-proa $0.30, $0.50 e $0.70 em 720p, 1024p e 1080p. Transcrição: $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, acessado em 2026-09-07. Gemini 3.1 Flash-Lite a $0.25 por milhão de input tokens (texto, imagem e vídeo) e $1.50 de saída. Gemini 3.1 Flash Image: saída de imagem a $60 por milhão de tokens, com as equivalências publicadas de 747, 1120, 1680 e 2520 tokens para imagens 0.5K, 1K, 2K e 4K e seus preços por imagem 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 áudio, «audio tokens correspondem a 25 tokens por segundo de áudio». Gemini 3.1 Flash Live Preview: $0.75 texto e «$3.00 ou $0.005/min» entrada de áudio, «$4.50 (texto) $12.00 ou $0.018/min (áudio)» saída. Veo 3.1 por segundo com áudio: $0.40 em 720p e 1080p e $0.60 em 4K padrão; $0.10, $0.12 e $0.30 rápido. Gemini Omni Flash cobra saída de vídeo «a uma taxa de 5.792 tokens por segundo de vídeo 720p», que a mesma nota converte para cerca de $0.10 por segundo — a declaração publicada mais clara em qualquer lugar de que um preço de mídia por segundo é um preço por token. ↩ ↩2 -
Páginas de modelo da OpenAI para
tts-1,tts-1-hdegpt-4o-mini-tts,developers.openai.com/api/docs/models, acessadas em 2026-09-07.tts-1a $15.00 etts-1-hda $30.00 por milhão de caracteres;gpt-4o-mini-ttsa $0.60 por milhão de text input tokens e $12.00 por milhão de audio output tokens — o mesmo fornecedor, a mesma operação, duas unidades. ↩ -
OpenAI, Managing costs (Realtime API),
developers.openai.com/api/docs/guides/realtime-costs, acessado em 2026-09-07. «Audio tokens em mensagens do usuário são 1 token por 100 ms de áudio, enquanto audio tokens em mensagens do assistant são 1 token por 50ms de áudio.» Também: «A conversa inteira é enviada ao modelo para cada Response... portanto turnos posteriores na sessão serão mais caros»; custos acumulam quando uma Response é criada; o exemplo trabalhado de dois turnos cuja acumulação a tabela acima reproduz; e o payload de usoresponse.donecom suas divisõesinput_token_detailseoutput_token_details. Taxas da página de preços, mesma data: áudiogpt-realtime-2.1a $32.00 entrada, $0.40 entrada em cache e $64.00 saída por milhão de tokens, texto a $4.00, $0.40 e $24.00, entrada de imagem a $5.00. ↩ ↩2 -
Replicate, Pricing,
replicate.com/pricing, acessado em 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. ↩