Extract Storage-only Smart CDN image package - #481

Merged
kvz merged 5 commits into
mainfrom
img-package
Aug 31, 2026
Merged

Extract Storage-only Smart CDN image package#481
kvz merged 5 commits into
mainfrom
img-package

Conversation

@kvz

@kvzkvz commented Aug 31, 2026

Copy link
Copy Markdown
Member

Why

Responsive Transloadit Storage previews should be a small reusable primitive, with image bytes
traveling directly from Smart CDN to the browser. The initial public-URL prototype still made an
arbitrary-origin Built-in part of the package contract; there are no adopters yet, so this PR
narrows that boundary before publication instead of carrying a risky compatibility surface.

What

  • adds a private @transloadit/img@0.0.0 workspace with a framework-neutral model, native
    <picture> rendering, and one configured Next.js Server Component
  • accepts only relative Transloadit Storage object paths through the native-looking
    src="website/photo.jpg" API, with intrinsic width/height
  • defaults to signed builtin/storage-preview@0.0.1 and permits one trusted factory-level Template
    override; individual images cannot select Templates
  • keeps direct signed Smart CDN delivery as the gallery default and supports an opt-in authorized
    redirect route for request-time object access checks and stable cached markup
  • validates Storage paths and prefixes, duplicate/unknown/tampered capabilities, bounded
    transformations, and strict boolean authorization without exposing object details
  • makes the lower-level @transloadit/utils candidate helper require both an explicit trusted
    Template and an explicit browser fallback URL; it no longer selects builtin/serve-image
  • cleans TypeScript output before packing so deleted artifacts cannot survive incremental builds

Security and performance evidence

  • the package never accepts arbitrary HTTP origins and never lets an image choose its Template
  • packed-fixture probes cover direct delivery, authorized GET/HEAD redirects, denied access,
    capability tampering, route binding, secret leakage, and private-path leakage
  • at 100 images, direct delivery produced 391,054 raw / about 25 KB Brotli HTML and zero app image
    requests; redirect delivery produced 280,008 raw / about 64 KB Brotli HTML plus 100 authorization
    redirects
  • the Next.js 16.3 fixture proves Partial Prerendering for direct delivery and static markup for
    redirect delivery
  • council review found the Template-input/fallback ambiguity; a fail-before/pass-after regression
    now keeps them separate. Its semver concern is intentionally handled as a patch replacement under
    the agreed zero-consumer policy for this newly introduced API.

Verification

  • yarn check
  • yarn verify:full
  • yarn release:pack:dry-run
  • yarn test:img:fixture
  • inspected the packed tarball to prove removed public-URL artifacts are absent

Rollout

Storage delivery depends on transloadit/api2#8844. Content can separately bridge its existing
public originals through a signed, origin-pinned workspace Template, then migrate those originals
to Transloadit Storage. Only after those consumers are deployed should API2 remove
builtin/serve-image; the dependency order and evidence live in
docs/prompts/2026-08-31-img-delivery-dx.md.

@kvzkvz changed the title Extract responsive Smart CDN image packageExtract Storage-only Smart CDN image packageAug 31, 2026
@kvz
kvz merged commit ed75f00 into mainAug 31, 2026
13 checks passed
@kvz
kvz deleted the img-package branch August 31, 2026 13:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kvz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Extract Storage-only Smart CDN image package - #481

Merged
kvz merged 5 commits into
mainfrom
img-package
Aug 31, 2026
Merged

Extract Storage-only Smart CDN image package#481
kvz merged 5 commits into
mainfrom
img-package

Conversation

@kvz

@kvzkvz commented Aug 31, 2026

Copy link
Copy Markdown
Member

Why

Responsive Transloadit Storage previews should be a small reusable primitive, with image bytes
traveling directly from Smart CDN to the browser. The initial public-URL prototype still made an
arbitrary-origin Built-in part of the package contract; there are no adopters yet, so this PR
narrows that boundary before publication instead of carrying a risky compatibility surface.

What

  • adds a private @transloadit/img@0.0.0 workspace with a framework-neutral model, native
    <picture> rendering, and one configured Next.js Server Component
  • accepts only relative Transloadit Storage object paths through the native-looking
    src="website/photo.jpg" API, with intrinsic width/height
  • defaults to signed builtin/storage-preview@0.0.1 and permits one trusted factory-level Template
    override; individual images cannot select Templates
  • keeps direct signed Smart CDN delivery as the gallery default and supports an opt-in authorized
    redirect route for request-time object access checks and stable cached markup
  • validates Storage paths and prefixes, duplicate/unknown/tampered capabilities, bounded
    transformations, and strict boolean authorization without exposing object details
  • makes the lower-level @transloadit/utils candidate helper require both an explicit trusted
    Template and an explicit browser fallback URL; it no longer selects builtin/serve-image
  • cleans TypeScript output before packing so deleted artifacts cannot survive incremental builds

Security and performance evidence

  • the package never accepts arbitrary HTTP origins and never lets an image choose its Template
  • packed-fixture probes cover direct delivery, authorized GET/HEAD redirects, denied access,
    capability tampering, route binding, secret leakage, and private-path leakage
  • at 100 images, direct delivery produced 391,054 raw / about 25 KB Brotli HTML and zero app image
    requests; redirect delivery produced 280,008 raw / about 64 KB Brotli HTML plus 100 authorization
    redirects
  • the Next.js 16.3 fixture proves Partial Prerendering for direct delivery and static markup for
    redirect delivery
  • council review found the Template-input/fallback ambiguity; a fail-before/pass-after regression
    now keeps them separate. Its semver concern is intentionally handled as a patch replacement under
    the agreed zero-consumer policy for this newly introduced API.

Verification

  • yarn check
  • yarn verify:full
  • yarn release:pack:dry-run
  • yarn test:img:fixture
  • inspected the packed tarball to prove removed public-URL artifacts are absent

Rollout

Storage delivery depends on transloadit/api2#8844. Content can separately bridge its existing
public originals through a signed, origin-pinned workspace Template, then migrate those originals
to Transloadit Storage. Only after those consumers are deployed should API2 remove
builtin/serve-image; the dependency order and evidence live in
docs/prompts/2026-08-31-img-delivery-dx.md.

@kvzkvz changed the title Extract responsive Smart CDN image packageExtract Storage-only Smart CDN image packageAug 31, 2026
@kvz
kvz merged commit ed75f00 into mainAug 31, 2026
13 checks passed
@kvz
kvz deleted the img-package branch August 31, 2026 13:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kvz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Extract Storage-only Smart CDN image package - #481

Merged
kvz merged 5 commits into
mainfrom
img-package
Aug 31, 2026
Merged

Extract Storage-only Smart CDN image package#481
kvz merged 5 commits into
mainfrom
img-package

Conversation

@kvz

@kvzkvz commented Aug 31, 2026

Copy link
Copy Markdown
Member

Why

Responsive Transloadit Storage previews should be a small reusable primitive, with image bytes
traveling directly from Smart CDN to the browser. The initial public-URL prototype still made an
arbitrary-origin Built-in part of the package contract; there are no adopters yet, so this PR
narrows that boundary before publication instead of carrying a risky compatibility surface.

What

  • adds a private @transloadit/img@0.0.0 workspace with a framework-neutral model, native
    <picture> rendering, and one configured Next.js Server Component
  • accepts only relative Transloadit Storage object paths through the native-looking
    src="website/photo.jpg" API, with intrinsic width/height
  • defaults to signed builtin/storage-preview@0.0.1 and permits one trusted factory-level Template
    override; individual images cannot select Templates
  • keeps direct signed Smart CDN delivery as the gallery default and supports an opt-in authorized
    redirect route for request-time object access checks and stable cached markup
  • validates Storage paths and prefixes, duplicate/unknown/tampered capabilities, bounded
    transformations, and strict boolean authorization without exposing object details
  • makes the lower-level @transloadit/utils candidate helper require both an explicit trusted
    Template and an explicit browser fallback URL; it no longer selects builtin/serve-image
  • cleans TypeScript output before packing so deleted artifacts cannot survive incremental builds

Security and performance evidence

  • the package never accepts arbitrary HTTP origins and never lets an image choose its Template
  • packed-fixture probes cover direct delivery, authorized GET/HEAD redirects, denied access,
    capability tampering, route binding, secret leakage, and private-path leakage
  • at 100 images, direct delivery produced 391,054 raw / about 25 KB Brotli HTML and zero app image
    requests; redirect delivery produced 280,008 raw / about 64 KB Brotli HTML plus 100 authorization
    redirects
  • the Next.js 16.3 fixture proves Partial Prerendering for direct delivery and static markup for
    redirect delivery
  • council review found the Template-input/fallback ambiguity; a fail-before/pass-after regression
    now keeps them separate. Its semver concern is intentionally handled as a patch replacement under
    the agreed zero-consumer policy for this newly introduced API.

Verification

  • yarn check
  • yarn verify:full
  • yarn release:pack:dry-run
  • yarn test:img:fixture
  • inspected the packed tarball to prove removed public-URL artifacts are absent

Rollout

Storage delivery depends on transloadit/api2#8844. Content can separately bridge its existing
public originals through a signed, origin-pinned workspace Template, then migrate those originals
to Transloadit Storage. Only after those consumers are deployed should API2 remove
builtin/serve-image; the dependency order and evidence live in
docs/prompts/2026-08-31-img-delivery-dx.md.

@kvzkvz changed the title Extract responsive Smart CDN image packageExtract Storage-only Smart CDN image packageAug 31, 2026
@kvz
kvz merged commit ed75f00 into mainAug 31, 2026
13 checks passed
@kvz
kvz deleted the img-package branch August 31, 2026 13:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kvz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Extract Storage-only Smart CDN image package - #481

Merged
kvz merged 5 commits into
mainfrom
img-package
Aug 31, 2026
Merged

Extract Storage-only Smart CDN image package#481
kvz merged 5 commits into
mainfrom
img-package

Conversation

@kvz

@kvzkvz commented Aug 31, 2026

Copy link
Copy Markdown
Member

Why

Responsive Transloadit Storage previews should be a small reusable primitive, with image bytes
traveling directly from Smart CDN to the browser. The initial public-URL prototype still made an
arbitrary-origin Built-in part of the package contract; there are no adopters yet, so this PR
narrows that boundary before publication instead of carrying a risky compatibility surface.

What

  • adds a private @transloadit/img@0.0.0 workspace with a framework-neutral model, native
    <picture> rendering, and one configured Next.js Server Component
  • accepts only relative Transloadit Storage object paths through the native-looking
    src="website/photo.jpg" API, with intrinsic width/height
  • defaults to signed builtin/storage-preview@0.0.1 and permits one trusted factory-level Template
    override; individual images cannot select Templates
  • keeps direct signed Smart CDN delivery as the gallery default and supports an opt-in authorized
    redirect route for request-time object access checks and stable cached markup
  • validates Storage paths and prefixes, duplicate/unknown/tampered capabilities, bounded
    transformations, and strict boolean authorization without exposing object details
  • makes the lower-level @transloadit/utils candidate helper require both an explicit trusted
    Template and an explicit browser fallback URL; it no longer selects builtin/serve-image
  • cleans TypeScript output before packing so deleted artifacts cannot survive incremental builds

Security and performance evidence

  • the package never accepts arbitrary HTTP origins and never lets an image choose its Template
  • packed-fixture probes cover direct delivery, authorized GET/HEAD redirects, denied access,
    capability tampering, route binding, secret leakage, and private-path leakage
  • at 100 images, direct delivery produced 391,054 raw / about 25 KB Brotli HTML and zero app image
    requests; redirect delivery produced 280,008 raw / about 64 KB Brotli HTML plus 100 authorization
    redirects
  • the Next.js 16.3 fixture proves Partial Prerendering for direct delivery and static markup for
    redirect delivery
  • council review found the Template-input/fallback ambiguity; a fail-before/pass-after regression
    now keeps them separate. Its semver concern is intentionally handled as a patch replacement under
    the agreed zero-consumer policy for this newly introduced API.

Verification

  • yarn check
  • yarn verify:full
  • yarn release:pack:dry-run
  • yarn test:img:fixture
  • inspected the packed tarball to prove removed public-URL artifacts are absent

Rollout

Storage delivery depends on transloadit/api2#8844. Content can separately bridge its existing
public originals through a signed, origin-pinned workspace Template, then migrate those originals
to Transloadit Storage. Only after those consumers are deployed should API2 remove
builtin/serve-image; the dependency order and evidence live in
docs/prompts/2026-08-31-img-delivery-dx.md.

@kvzkvz changed the title Extract responsive Smart CDN image packageExtract Storage-only Smart CDN image packageAug 31, 2026
@kvz
kvz merged commit ed75f00 into mainAug 31, 2026
13 checks passed
@kvz
kvz deleted the img-package branch August 31, 2026 13:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kvz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Extract Storage-only Smart CDN image package - #481

Merged
kvz merged 5 commits into
mainfrom
img-package
Aug 31, 2026
Merged

Extract Storage-only Smart CDN image package#481
kvz merged 5 commits into
mainfrom
img-package

Conversation

@kvz

@kvzkvz commented Aug 31, 2026

Copy link
Copy Markdown
Member

Why

Responsive Transloadit Storage previews should be a small reusable primitive, with image bytes
traveling directly from Smart CDN to the browser. The initial public-URL prototype still made an
arbitrary-origin Built-in part of the package contract; there are no adopters yet, so this PR
narrows that boundary before publication instead of carrying a risky compatibility surface.

What

  • adds a private @transloadit/img@0.0.0 workspace with a framework-neutral model, native
    <picture> rendering, and one configured Next.js Server Component
  • accepts only relative Transloadit Storage object paths through the native-looking
    src="website/photo.jpg" API, with intrinsic width/height
  • defaults to signed builtin/storage-preview@0.0.1 and permits one trusted factory-level Template
    override; individual images cannot select Templates
  • keeps direct signed Smart CDN delivery as the gallery default and supports an opt-in authorized
    redirect route for request-time object access checks and stable cached markup
  • validates Storage paths and prefixes, duplicate/unknown/tampered capabilities, bounded
    transformations, and strict boolean authorization without exposing object details
  • makes the lower-level @transloadit/utils candidate helper require both an explicit trusted
    Template and an explicit browser fallback URL; it no longer selects builtin/serve-image
  • cleans TypeScript output before packing so deleted artifacts cannot survive incremental builds

Security and performance evidence

  • the package never accepts arbitrary HTTP origins and never lets an image choose its Template
  • packed-fixture probes cover direct delivery, authorized GET/HEAD redirects, denied access,
    capability tampering, route binding, secret leakage, and private-path leakage
  • at 100 images, direct delivery produced 391,054 raw / about 25 KB Brotli HTML and zero app image
    requests; redirect delivery produced 280,008 raw / about 64 KB Brotli HTML plus 100 authorization
    redirects
  • the Next.js 16.3 fixture proves Partial Prerendering for direct delivery and static markup for
    redirect delivery
  • council review found the Template-input/fallback ambiguity; a fail-before/pass-after regression
    now keeps them separate. Its semver concern is intentionally handled as a patch replacement under
    the agreed zero-consumer policy for this newly introduced API.

Verification

  • yarn check
  • yarn verify:full
  • yarn release:pack:dry-run
  • yarn test:img:fixture
  • inspected the packed tarball to prove removed public-URL artifacts are absent

Rollout

Storage delivery depends on transloadit/api2#8844. Content can separately bridge its existing
public originals through a signed, origin-pinned workspace Template, then migrate those originals
to Transloadit Storage. Only after those consumers are deployed should API2 remove
builtin/serve-image; the dependency order and evidence live in
docs/prompts/2026-08-31-img-delivery-dx.md.

@kvzkvz changed the title Extract responsive Smart CDN image packageExtract Storage-only Smart CDN image packageAug 31, 2026
@kvz
kvz merged commit ed75f00 into mainAug 31, 2026
13 checks passed
@kvz
kvz deleted the img-package branch August 31, 2026 13:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kvz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Extract Storage-only Smart CDN image package - #481

Merged
kvz merged 5 commits into
mainfrom
img-package
Aug 31, 2026
Merged

Extract Storage-only Smart CDN image package#481
kvz merged 5 commits into
mainfrom
img-package

Conversation

@kvz

@kvzkvz commented Aug 31, 2026

Copy link
Copy Markdown
Member

Why

Responsive Transloadit Storage previews should be a small reusable primitive, with image bytes
traveling directly from Smart CDN to the browser. The initial public-URL prototype still made an
arbitrary-origin Built-in part of the package contract; there are no adopters yet, so this PR
narrows that boundary before publication instead of carrying a risky compatibility surface.

What

  • adds a private @transloadit/img@0.0.0 workspace with a framework-neutral model, native
    <picture> rendering, and one configured Next.js Server Component
  • accepts only relative Transloadit Storage object paths through the native-looking
    src="website/photo.jpg" API, with intrinsic width/height
  • defaults to signed builtin/storage-preview@0.0.1 and permits one trusted factory-level Template
    override; individual images cannot select Templates
  • keeps direct signed Smart CDN delivery as the gallery default and supports an opt-in authorized
    redirect route for request-time object access checks and stable cached markup
  • validates Storage paths and prefixes, duplicate/unknown/tampered capabilities, bounded
    transformations, and strict boolean authorization without exposing object details
  • makes the lower-level @transloadit/utils candidate helper require both an explicit trusted
    Template and an explicit browser fallback URL; it no longer selects builtin/serve-image
  • cleans TypeScript output before packing so deleted artifacts cannot survive incremental builds

Security and performance evidence

  • the package never accepts arbitrary HTTP origins and never lets an image choose its Template
  • packed-fixture probes cover direct delivery, authorized GET/HEAD redirects, denied access,
    capability tampering, route binding, secret leakage, and private-path leakage
  • at 100 images, direct delivery produced 391,054 raw / about 25 KB Brotli HTML and zero app image
    requests; redirect delivery produced 280,008 raw / about 64 KB Brotli HTML plus 100 authorization
    redirects
  • the Next.js 16.3 fixture proves Partial Prerendering for direct delivery and static markup for
    redirect delivery
  • council review found the Template-input/fallback ambiguity; a fail-before/pass-after regression
    now keeps them separate. Its semver concern is intentionally handled as a patch replacement under
    the agreed zero-consumer policy for this newly introduced API.

Verification

  • yarn check
  • yarn verify:full
  • yarn release:pack:dry-run
  • yarn test:img:fixture
  • inspected the packed tarball to prove removed public-URL artifacts are absent

Rollout

Storage delivery depends on transloadit/api2#8844. Content can separately bridge its existing
public originals through a signed, origin-pinned workspace Template, then migrate those originals
to Transloadit Storage. Only after those consumers are deployed should API2 remove
builtin/serve-image; the dependency order and evidence live in
docs/prompts/2026-08-31-img-delivery-dx.md.

@kvzkvz changed the title Extract responsive Smart CDN image packageExtract Storage-only Smart CDN image packageAug 31, 2026
@kvz
kvz merged commit ed75f00 into mainAug 31, 2026
13 checks passed
@kvz
kvz deleted the img-package branch August 31, 2026 13:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kvz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Extract Storage-only Smart CDN image package - #481

Merged
kvz merged 5 commits into
mainfrom
img-package
Aug 31, 2026
Merged

Extract Storage-only Smart CDN image package#481
kvz merged 5 commits into
mainfrom
img-package

Conversation

@kvz

@kvzkvz commented Aug 31, 2026

Copy link
Copy Markdown
Member

Why

Responsive Transloadit Storage previews should be a small reusable primitive, with image bytes
traveling directly from Smart CDN to the browser. The initial public-URL prototype still made an
arbitrary-origin Built-in part of the package contract; there are no adopters yet, so this PR
narrows that boundary before publication instead of carrying a risky compatibility surface.

What

  • adds a private @transloadit/img@0.0.0 workspace with a framework-neutral model, native
    <picture> rendering, and one configured Next.js Server Component
  • accepts only relative Transloadit Storage object paths through the native-looking
    src="website/photo.jpg" API, with intrinsic width/height
  • defaults to signed builtin/storage-preview@0.0.1 and permits one trusted factory-level Template
    override; individual images cannot select Templates
  • keeps direct signed Smart CDN delivery as the gallery default and supports an opt-in authorized
    redirect route for request-time object access checks and stable cached markup
  • validates Storage paths and prefixes, duplicate/unknown/tampered capabilities, bounded
    transformations, and strict boolean authorization without exposing object details
  • makes the lower-level @transloadit/utils candidate helper require both an explicit trusted
    Template and an explicit browser fallback URL; it no longer selects builtin/serve-image
  • cleans TypeScript output before packing so deleted artifacts cannot survive incremental builds

Security and performance evidence

  • the package never accepts arbitrary HTTP origins and never lets an image choose its Template
  • packed-fixture probes cover direct delivery, authorized GET/HEAD redirects, denied access,
    capability tampering, route binding, secret leakage, and private-path leakage
  • at 100 images, direct delivery produced 391,054 raw / about 25 KB Brotli HTML and zero app image
    requests; redirect delivery produced 280,008 raw / about 64 KB Brotli HTML plus 100 authorization
    redirects
  • the Next.js 16.3 fixture proves Partial Prerendering for direct delivery and static markup for
    redirect delivery
  • council review found the Template-input/fallback ambiguity; a fail-before/pass-after regression
    now keeps them separate. Its semver concern is intentionally handled as a patch replacement under
    the agreed zero-consumer policy for this newly introduced API.

Verification

  • yarn check
  • yarn verify:full
  • yarn release:pack:dry-run
  • yarn test:img:fixture
  • inspected the packed tarball to prove removed public-URL artifacts are absent

Rollout

Storage delivery depends on transloadit/api2#8844. Content can separately bridge its existing
public originals through a signed, origin-pinned workspace Template, then migrate those originals
to Transloadit Storage. Only after those consumers are deployed should API2 remove
builtin/serve-image; the dependency order and evidence live in
docs/prompts/2026-08-31-img-delivery-dx.md.

@kvzkvz changed the title Extract responsive Smart CDN image packageExtract Storage-only Smart CDN image packageAug 31, 2026
@kvz
kvz merged commit ed75f00 into mainAug 31, 2026
13 checks passed
@kvz
kvz deleted the img-package branch August 31, 2026 13:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kvz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Extract Storage-only Smart CDN image package - #481

Merged
kvz merged 5 commits into
mainfrom
img-package
Aug 31, 2026
Merged

Extract Storage-only Smart CDN image package#481
kvz merged 5 commits into
mainfrom
img-package

Conversation

@kvz

@kvzkvz commented Aug 31, 2026

Copy link
Copy Markdown
Member

Why

Responsive Transloadit Storage previews should be a small reusable primitive, with image bytes
traveling directly from Smart CDN to the browser. The initial public-URL prototype still made an
arbitrary-origin Built-in part of the package contract; there are no adopters yet, so this PR
narrows that boundary before publication instead of carrying a risky compatibility surface.

What

  • adds a private @transloadit/img@0.0.0 workspace with a framework-neutral model, native
    <picture> rendering, and one configured Next.js Server Component
  • accepts only relative Transloadit Storage object paths through the native-looking
    src="website/photo.jpg" API, with intrinsic width/height
  • defaults to signed builtin/storage-preview@0.0.1 and permits one trusted factory-level Template
    override; individual images cannot select Templates
  • keeps direct signed Smart CDN delivery as the gallery default and supports an opt-in authorized
    redirect route for request-time object access checks and stable cached markup
  • validates Storage paths and prefixes, duplicate/unknown/tampered capabilities, bounded
    transformations, and strict boolean authorization without exposing object details
  • makes the lower-level @transloadit/utils candidate helper require both an explicit trusted
    Template and an explicit browser fallback URL; it no longer selects builtin/serve-image
  • cleans TypeScript output before packing so deleted artifacts cannot survive incremental builds

Security and performance evidence

  • the package never accepts arbitrary HTTP origins and never lets an image choose its Template
  • packed-fixture probes cover direct delivery, authorized GET/HEAD redirects, denied access,
    capability tampering, route binding, secret leakage, and private-path leakage
  • at 100 images, direct delivery produced 391,054 raw / about 25 KB Brotli HTML and zero app image
    requests; redirect delivery produced 280,008 raw / about 64 KB Brotli HTML plus 100 authorization
    redirects
  • the Next.js 16.3 fixture proves Partial Prerendering for direct delivery and static markup for
    redirect delivery
  • council review found the Template-input/fallback ambiguity; a fail-before/pass-after regression
    now keeps them separate. Its semver concern is intentionally handled as a patch replacement under
    the agreed zero-consumer policy for this newly introduced API.

Verification

  • yarn check
  • yarn verify:full
  • yarn release:pack:dry-run
  • yarn test:img:fixture
  • inspected the packed tarball to prove removed public-URL artifacts are absent

Rollout

Storage delivery depends on transloadit/api2#8844. Content can separately bridge its existing
public originals through a signed, origin-pinned workspace Template, then migrate those originals
to Transloadit Storage. Only after those consumers are deployed should API2 remove
builtin/serve-image; the dependency order and evidence live in
docs/prompts/2026-08-31-img-delivery-dx.md.

@kvzkvz changed the title Extract responsive Smart CDN image packageExtract Storage-only Smart CDN image packageAug 31, 2026
@kvz
kvz merged commit ed75f00 into mainAug 31, 2026
13 checks passed
@kvz
kvz deleted the img-package branch August 31, 2026 13:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kvz