@nitida/sdk 0.36.0 → 0.36.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitida/sdk",
3
- "version": "0.36.0",
3
+ "version": "0.36.1",
4
4
  "description": "nitida — the media SDK: browser and mobile upload with resume, client-side compression, on-the-fly transforms behind a CDN, video transcode, HLS ladders and AI proxies. Multi-tenant.",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -190,11 +190,24 @@ everyone, and the ladder buys you nothing.
190
190
 
191
191
  > Full measurements, with the method: <https://nitida.gofuture.space/guides/transform-benchmark/>
192
192
 
193
- `/t/` short-circuits to the smallest **stored variant** that covers the request
194
- — and that variant is already a WebP
195
- that went through one lossy pass. **The short-circuit only fires when the
196
- request carries an explicit numeric `quality`**, so **passing any explicit numeric `quality` at all** is
197
- exactly what turns it on.
193
+ `/t/` can short-circuit to the smallest **stored variant** that covers the request
194
+ — and that variant is already a WebP that went through one lossy pass.
195
+
196
+ 🔴 **Until 2026-08-31 that shortcut fired on `typeof quality === "number"`**, so
197
+ the parameter named "quality" was the one that chose WHICH BYTES to decode, and
198
+ pinning it *lowered* quality. **That is fixed at the server.** `quality` now only
199
+ sets the encoder; the cheap source has to be asked for by name, `source=nearest`
200
+ (default `master`), and a bogus value is a 400.
201
+
202
+ Verified against production the day it shipped, same asset, cold DSLs:
203
+ `quality=61` → `x-transform-source: lg` before · `quality=62` → `original` after ·
204
+ `quality=64,source=nearest` → `lg`, deliberately.
205
+
206
+ ⇒ **You cannot trigger a second lossy pass by accident any more.** The numbers
207
+ below are the honest cost of one, i.e. what `source=nearest` buys today. And
208
+ `source` is deliberately NOT in `TransformOptions`: the only legitimate consumer
209
+ is a bulk pipeline that hand-builds URLs, and keeping it off the typed surface is
210
+ what stops an ordinary caller from landing there.
198
211
 
199
212
  Measured at `width=800` on five photographs, same photo uploaded twice (full
200
213
  ladder vs `["original"]` only):