Skip to content
scroll to zoom · drag to pan

getByteBudgetTransformUrl

function getByteBudgetTransformUrl(asset, opts): string | null;

Defined in: packages/asset-client/dist/index.d.ts:566

⭐ La ÚNICA puerta por la que se puede pinnear un quality numérico — y está construida para que no se pueda usar mal.

getTransformUrl recibe un Pick<AssetDTO, "sha">: un sha y nada más. Con eso, un quality: 75 en el call site es CIEGO — la misma línea es un ajuste honesto del encoder sobre un asset sin escalera, y una segunda compresión silenciosa sobre uno con escalera. Nada en el tipo, en el nombre ni en el editor distinguía los dos casos. Un aviso avisa; esto impide.

  1. En COMPILACIÓN: el parámetro exige presets: string. Un { sha } pelado —la llamada ciega— ya no compila. Para pasar por acá hay que tener el DTO en la mano, y tener el DTO es saber la respuesta.
  2. En EJECUCIÓN: si el asset tiene cualquier preset de tamaño, tira. Si presets no vino, tira — «no sé» nunca se resuelve como «dale».

Un presupuesto de bytes que alguien MIDIÓ, sobre un asset subido con presets: ["original"]. Ahí no hay a qué saltar y el pin hace lo que su nombre dice. Medido 2026-08-31 contra producción, ancho 1 920, las seis respuestas x-transform-source: original:

quality bytes vs auto PSNR
40 82 112 −33,6 % 35,32 dB
60 106 892 −13,5 % 36,85 dB
(auto) 123 614 — 37,65 dB
90 269 026 +117,6 % 41,46 dB

Monótona y sin sorpresas: −33,6 % de peso por −2,32 dB. Eso sí es un intercambio, y es la razón por la que el parámetro no se borró del todo.

Parameter Type
asset Pick<AssetDTO, "sha"> & { presets: string; } & VisibilityHint
opts WithPinnedQuality<TransformOptions>

string | null

si el asset tiene escalera, si no se sabe si la tiene, o si quality no está en 1..100.