getByteBudgetTransformUrl
function getByteBudgetTransformUrl(asset, opts): string | null;Defined in: packages/asset-client/src/transform.ts:513
⭐ La ÚNICA puerta por la que se puede pinnear un quality numérico —
y está construida para que no se pueda usar mal.
El problema que resuelve
Section titled “El problema que resuelve”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.
Las dos barreras
Section titled “Las dos barreras”- 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. - En EJECUCIÓN: si el asset tiene cualquier preset de tamaño, tira.
Si
presetsno vino, tira — «no sé» nunca se resuelve como «dale».
Cuándo es legítimo, con el número
Section titled “Cuándo es legítimo, con el número”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.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
asset |
Pick<AssetDTO, "sha"> & { presets: string; } & VisibilityHint |
opts |
WithPinnedQuality<TransformOptions> |
Returns
Section titled “Returns”string | null
Throws
Section titled “Throws”si el asset tiene escalera, si no se sabe si la tiene, o si
quality no está en 1..100.