Conversation
This was referenced Sep 12, 2026
Pin storage-preview 0.0.2 and bind per-format backgrounds through direct URLs and authorized redirects. Keep JPEG opaque and make its color explicit. Sync the canonical recursive import schema from API2 #9057 and document the confirmed cache-key and two-key contracts. Cover alpha and fallback pixels in the packed browser fixture; record the separate live canary DNS limitation.
Address the five final round-3 council findings: retain receipt-file errors, print safe post-write recovery details, clarify invalid fixed sources and subpixel crops, and remove the stale import-extension prerequisite. Reproduce all findings red-first, then verify affected packages, legacy parity, the full workspace and all 48 packed browser cases before pushing.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Store one original, commit its catalog, and import
StorageImagefrom the package.No
image initor generated application factory on the default path; responsive image bytesgo directly from Smart CDN to the browser, never through Next's image optimizer.
This consolidates #497–#499.
What
storage store --publicexplicitly publishes the destination directory (including futureobjects), checkpoints the receipt, and generates
transloadit-images.d.tsfor typed paths.storage store --hashedinserts eight input-MD5 hex digits before the extension. Catalog keys,generated types and printed JSX use that exact name;
sourceretains the local basename.Same-workspace/API-origin receipts with matching full MD5 and size skip repeat uploads.
Changed bytes get another name; short-hash conflicts never overwrite. Keep the committed catalog.
StorageImagefrom@transloadit/img/next, bound by onewithTransloaditImages()config wrapper.The plugin bundles the catalog; no cwd-based zero-config runtime fallback is promised.
transloadit.authorize.ts, a packageroute re-export and a separate application signing key. Authorization runs on image requests;
redirects return no image bytes. Explicit factories and opt-in scaffolding remain available.
CLI browser login, publication and atomic catalog recovery remain covered.
placeholder="blur"needs noclient load handler; alpha, letterboxed and private redirect images omit retained blur pixels.
parameters. This deliberately changes cache keys before release. Private signatures cover the
final query; public outputs respect the Built-in's 4096px / quality-85 limits.
vremains an unverified cache-busting tag, not object versioning. Prefer--hashedfor imagesyou will replace. Older servers that transform uploaded bytes cannot treat an unchanged local
original as a matching replay; the diagnostic now explains that hard failure.
The README and post-write CLI error distinguish committed-catalog/Console recovery from the
Storage read API that is not yet enabled in production.
Refs #270
Implements browser/code
auth login, credentials in~/.transloadit,--no-browserand--stdinfallbacks. Still open:npm create transloadit-scaffoldand Playwright E2E of the actualConsole login/approval page. Refs, not Fixes.
Verification and rollout
DX documentation follow-up: 13a239c, exact-head CI.
Green: all ten applicable jobs, including the packed Next browser fixture; three reporting-only
jobs are skipped by their existing conditions. Local
yarn check,yarn verifyand strictTypeScript checking of the new server-upload snippet pass. CLI-first signup, the discoverable
storeImage()recipe and the parent-constrained fill example address the fresh independent DXreview. Runtime code and dependencies are unchanged; the legacy README was regenerated.
A separate live Uppy parameter-builder → local Assembly → stored-byte probe confirms all three
collision policies: omitted policy overwrites,
errorpreserves the original and rejects thesecond write, and
renamepreserves both. Five helper tests pass. No Uppy default was changed;application-image recipes use server-owned unique paths and explicit conflict refusal. This is
local contract evidence, not hosted delivery or browser/Companion coverage.
Round 15: 945c798, exact-head CI.
Green: all ten applicable jobs, including fast/full verification, Node 20/22/24, E2E,
package build, release dry run and the packed Next fixture. Local final verification passes
319 img / 636 Node tests (+ one existing skip), root 30 / utils 59 / MCP 3 / notify 22.
Downloaded exact-head browser artifacts were independently audited: 122 first-attempt passes
(56 cacheComponents enabled, 56 omitted, 10 development), zero retries/skips/flakes/unexpected
errors. The eight new hashed-image cases decode the catalog path at desktop/mobile widths in
Chromium and WebKit. Local packed tests also pass all 122 cases on functional head ff776b6;
the final CLI-message-only commit is covered by final local verification and exact-head CI.
Red-first coverage protects filename placement, catalog/types/JSX agreement, repeated and changed
uploads, complete-checksum/size validation, API-origin binding, explicit-workspace batch dedup,
path-length limits and refusal to overwrite. Council's four valid findings were fixed with tests;
Opus's focused post-fix review confirms them. Its last adjacent recovery-message caveat was also
fixed red-first. Generated legacy documentation was regenerated, not hand-edited.
The first packed attempt exposed test isolation: changing login files in one cached CLI cwd was
correctly treated as untrusted. The corrected seed uses its own app cwd, retains the ownership
check, and copies its verified catalog/types into the browser app. No production auth change.
Owned live Next desktop/mobile and exploratory evidence confirms native hashed delivery,
one Assembly for repeated identical uploads, unsigned public HTML/Flight, no console/page/network
errors and retained SPA state. Local contract fakes are not hosted or production measurements.
No merge/publication: img remains private at 0.0.0. Coordinate API2/Console rollout, ordinary
registry installation, sustained Content dogfood and production Bunny measurements before release.
Known limits
@transloadit/utils/nodegetSmartCdnImageCandidatespublic-templateheight-limit bug remains explicitly deferred. StorageImage does not use this helper and
enforces its own public limits. Correct that generic helper before advertising it for the
public Built-in; reproduction and the separate scope are in the living plan.
actual Bunny cache/cost measurements remain rollout gates. Whole-query caching is configured
on
*.tlcdn.com, not a universal Bunny default. Edge runtime is unsupported.smart_cdn:sign(
assemblies:writealso accepted), plus application session/per-object authorization.It fails closed for absent/different API provenance and mismatched or transformed bytes.
img-src data:.Sharp is optional; encoding is bounded by 32 MiB input, 40 MP, a 100×100 hash input and a two-second
decoder timeout. Fresh List + HEAD recovery cannot reconstruct missing ThumbHash/alpha metadata.
Quickstart
· Reference
· Living plan