Stop thinking about
image optimization.
Rendorix replaces messy query parameters with semantic presets. Define your image system once. Reference it everywhere.
/photo.jpg?p=hero Open source · Built for developers · No dashboard required
The problem
Every image becomes a mini decision.
Image optimization today is unnecessarily complicated. Developers constantly deal with arbitrary options, inconsistent results, and URLs that nobody wants to read.
Arbitrary decisions
Every image forces a micro-decision: 783px or 800? Quality 80 or 85? There's no right answer, so you guess.
Inconsistent sizes
Different developers, different configs. The same image ends up at four different widths across your app.
Bloated URLs
You end up with ?w=837&q=82&f=webp littered across your codebase. Fragile, unreadable, untestable.
Decision fatigue
Image optimization shouldn't require this much thought. Too many options, no sane defaults.
The solution
Presets, not parameters.
Instead of asking "how should I transform this image?" you define "what role does this image play?" — once.
/photo.jpg?w=837&q=82&f=webp Arbitrary numbers nobody agrees on. Duplicated everywhere.
/photo.jpg?p=hero Same intent. Readable. Consistent. No guessing.
1 — Define your presets once
{
"hero": { "w": 1200, "q": 85, "f": "webp" },
"card": { "w": 600, "q": 80, "f": "webp" },
"avatar": { "w": 128, "q": 70, "f": "webp" }
} 2 — Reference by role, everywhere
/photo.jpg?p=hero
/photo.jpg?p=card
/photo.jpg?p=avatar - ✓ No second-guessing
- ✓ Consistent across your entire app
- ✓ Readable URLs at a glance
How it works
Simple by design.
Three steps. No dashboard, no SDK required, no configuration beyond what you care about.
Define your presets
Describe what each image role means — dimensions, quality, format. Write it once in a config file.
Reference by role
Use the preset name in your URL instead of raw parameters. Readable, memorable, consistent.
Delivered and cached
Rendorix transforms the image on-demand, then caches it at the CDN edge. Every subsequent request is instant.
Developer experience
One function call.
That's the whole API.
The Rendorix JS client (coming soon) handles URL construction, parameter canonicalization, signing, and preset resolution — so you don't have to.
// Initialize once
const rx = createRendorix({
baseUrl: process.env.RENDORIX_BASE_URL,
secret: process.env.RENDORIX_SECRET,
}); // Use anywhere — plain JS
rx.img("photo.jpg", { preset: "hero" });
// JSX / React / Astro
<img src={rx.img("photo.jpg", { preset: "hero" })} alt="" /> Coming soon. The JS client is on the roadmap. The URL API works today — no SDK required for the core flow.
Zero URL construction
Stop hand-writing query strings. The client generates the correct URL — parameters, expiry, signature — behind one call.
Built-in signing
HMAC-SHA256 request signing happens automatically, server-side. No secrets ever reach the browser.
Framework-agnostic
React, Astro, Next.js, Express — any JavaScript environment. No framework-specific adapter needed.
Zero-config feel
Two environment variables. One initialization call. That's the entire setup.
Under the hood
Fast by default.
Rendorix runs on AWS. Every unique transformation is computed once and cached at the CloudFront edge globally — so subsequent requests are served in milliseconds, not seconds.
- ✓ Automatic WebP / AVIF format optimization
- ✓ Smart quality defaults via presets
- ✓ Zero redundant processing — compute once, cache forever
- ✓ Secure signed requests via CloudFront Functions
S3
Durable, private storage for original images
Lambda + Sharp
On-demand image processing — runs only when needed
CloudFront
Global CDN caching · edge validation · signed requests
Your app
Receives a transformed, optimized image — instantly
Ready to stop thinking
about image optimization?
Rendorix is open source and in active development. Star the repo to follow progress, or join the waitlist for early access when it launches.
⭐ Star on GitHubJoin the waitlist
Get notified when hosted Rendorix launches. No spam.