Everything you need to transform and deliver images with Image Foundry.
Get up and running in under 2 minutes
Resize, crop, format, filters & overlays
Switch from Imgix, ImageBoss, or Cloudinary
Get started in under 2 minutes:
https://img./my-source/width/800/format:auto/photo.jpg
https://my-source./photo.jpg?w=800&auto=format
A source connects to a storage provider where your original images live. Each source has its own slug, URL mode (ImageBoss or Imgix), configuration, and usage tracking. You can have multiple sources per project.
Master images are unique original images discovered by Image Foundry. When you request /photo.jpg?w=400 and /photo.jpg?w=800, that counts as 1 master image and 2 transformations. Master image counts help you understand the actual size of your image library vs. the number of URL variants being served.
Each source runs in one of two compatibility modes:
/source/operation/dimensions/options/image.jpg/source/image.jpg?w=400&h=300&fit=cropCreate your account from the dashboard. Once logged in, you can create projects, add sources, configure custom domains, and view usage analytics — all from the dashboard.
A project groups your sources, domains, and usage together. You can create multiple projects to separate different applications or environments (e.g. production vs. staging).
Each project has an API key for programmatic access (e.g. purging cache from your CI/CD pipeline). Find your API key in the project settings on the dashboard. You can rotate it at any time — the old key is immediately invalidated.
Connect your image storage. Click a provider below for setup instructions.
Connect to any S3 bucket. Your IAM credentials need s3:GetObject permission.
images/)s3://my-bucket/prefix or https://my-bucket.s3.us-east-1.amazonaws.com and all fields are auto-filled.For MinIO or other S3-compatible services, enter the Endpoint URL and enable Force path-style. Force path-style uses endpoint/bucket/key addressing instead of bucket.endpoint/key — required by services that don't support virtual-hosted style DNS.
Minimal permissions needed:
s3:GetObject — on arn:aws:s3:::my-bucket/*
s3:ListBucket — on arn:aws:s3:::my-bucket (optional, for health checks)
R2 is S3-compatible with zero egress fees.
https://ACCOUNT_ID.r2.cloudflarestorage.com/bucket to auto-detect.Connect using a GCP service account with storage.objects.get permission.
gs://my-bucket/prefix to auto-detect bucket and prefix.Connect using your Azure storage account credentials.
https://myaccount.blob.core.windows.net/container to auto-detect.Spaces is S3-compatible. The endpoint is auto-configured from your region.
nyc3, sfo3, ams3)Wasabi offers S3-compatible hot storage. The endpoint is auto-configured from your region.
us-east-1, eu-central-1)B2 provides low-cost S3-compatible storage. The endpoint is auto-configured from your region.
us-west-004)Linode Object Storage is S3-compatible. The endpoint is auto-configured from your region.
us-east-1, eu-central-1)Proxy and transform images from any public HTTP(S) URL. Great for existing CDNs or image servers.
https://cdn.example.com/images)Image Foundry fetches originals from baseUrl + /path/to/image.jpg, applies transformations, and caches the result.
Image Foundry transforms images on-the-fly via URL. The format depends on which mode you chose when creating your source.
Operations are embedded in the path: /:source/:operation/:dimensions/:options/*path
/my-source/cover/300x300/photo.jpg # Smart crop to 300x300
/my-source/width/800/format:auto,quality:75/photo.jpg # Resize + auto format
/my-source/height/600/grayscale:true/photo.jpg # Resize + grayscale
/my-source/cdn/photo.jpg # No resize, optimize only
/my-source/cover/400x300/fp-x:0.3,fp-y:0.7/portrait.jpg # Focal point crop
Subroute (recommended): https://img./my-source/width/800/photo.jpg
Subdomain: https://my-source./width/800/photo.jpg
Parameters are passed as query strings: /path/to/image.jpg?w=WIDTH&h=HEIGHT&...
/photo.jpg?w=800&h=600&fit=crop&auto=format # Crop + auto format
/photo.jpg?w=400&blur=50&mono=44768B # Blur + grayscale tint
/photo.jpg?w=800&sharp=30&q=80 # Sharpen + quality
/photo.jpg?w=600&h=400&fit=crop&fp-x=0.3&fp-y=0.7 # Focal point crop
/photo.jpg?w=500&dpr=2&auto=format,compress # Retina + optimize
Subdomain (recommended): https://my-source./photo.jpg?w=400
Subroute: https://img./my-source/photo.jpg?w=400
Serve images from your own domain with full SSL:
img.yourdomain.com) and select the source to attach it toimg.yourdomain.com → proxy.https://img.yourdomain.com/width/800/photo.jpg| Operation | ImageBoss | Imgix | Description |
|---|---|---|---|
| Width | /width/400/img.jpg | /img.jpg?w=400 | Resize to width, maintain aspect ratio |
| Height | /height/300/img.jpg | /img.jpg?h=300 | Resize to height, maintain aspect ratio |
| Cover (Crop) | /cover/400x300/img.jpg | /img.jpg?w=400&h=300&fit=crop | Crop to exact dimensions |
| Contain (Fit) | /cover:contain/400x300/img.jpg | /img.jpg?w=400&h=300&fit=fill | Fit within dimensions, pad if needed |
| Inside | /cover:inside/400x300/img.jpg | /img.jpg?w=400&h=300&fit=clip | Fit within without padding |
| CDN (Passthrough) | /cdn/img.jpg | /img.jpg | No resize, just optimize |
| Mode | ImageBoss | Imgix | Description |
|---|---|---|---|
| Smart (default) | /cover/WxH/ | ?fit=crop | Sharp's default attention-based crop |
| Attention | /cover:attention/WxH/ | ?fit=crop&crop=edges | Focus on dominant areas |
| Entropy | /cover:entropy/WxH/ | ?fit=crop&crop=entropy | Focus on areas of detail |
| Center | /cover:center/WxH/ | ?fit=crop&crop=center | Center crop |
| Directional | /cover:north/WxH/ | ?fit=crop&crop=top | north, south, east, west, and combinations |
| Focal Point | fp-x:0.3,fp-y:0.7 | ?crop=focalpoint&fp-x=0.3&fp-y=0.7 | 0.0–1.0 coordinates for crop center |
| Parameter | ImageBoss | Imgix | Values |
|---|---|---|---|
| Format | format:webp | fm=webp | jpg, png, webp, avif, auto |
| Auto Format | format:auto | auto=format | Best format for client (Accept header negotiation) |
| Quality | quality:75 | q=75 | 1–100 (default: 80) |
| DPR | dpr:2 | dpr=2 | 1–3 (device pixel ratio multiplier) |
| Auto Compress | — | auto=compress | Automatic quality optimization |
Accept header and serves AVIF > WebP > original format, choosing the smallest file size.| Filter | ImageBoss | Imgix | Description |
|---|---|---|---|
| Blur | blur:5 | blur=100 | Gaussian blur (IB: 0.3–100 sigma, Imgix: 0–2000 radius) |
| Sharpen | sharpen:2 | sharp=20 | Unsharp mask sharpening |
| Grayscale | grayscale:true | mono=44768B | Convert to grayscale (Imgix: with tint color) |
| Trim | trim:10 | trim=auto | Trim whitespace/borders |
| Gamma | gamma:2.2 | gam=220 | Gamma correction |
| Brightness | brightness:20 | bri=20 | Brightness adjustment |
| Contrast | contrast:15 | con=15 | Contrast adjustment |
| Rotation | rotate:90 | rot=90 | Rotate 0/90/180/270 degrees |
| Flip | flip:h | flip=h | h (horizontal), v (vertical), hv (both) |
| Background | bg:ff0000 | bg=ff0000 | Background fill color (for transparent images or padding) |
# ImageBoss:
/width/700/wmk-path:%2Flogo.png,wmk-position:southeast,wmk-opacity:80/photo.jpg
# Imgix-style:
/photo.jpg?w=700&wmk-path=%2Flogo.png&wmk-position=southeast&wmk-opacity=80
| Parameter | Values | Description |
|---|---|---|
wmk-path | URL-encoded path | Path to watermark image (from same source) |
wmk-position | center, north, south, east, west, northeast, northwest, southeast, southwest | Position of watermark |
wmk-opacity | 0–100 | Watermark opacity |
wmk-scale | 0.0–1.0 | Scale relative to main image |
# ImageBoss:
/width/700/txt:Hello%20World,txt-size:60,txt-color:ffffff,txt-position:south/photo.jpg
Automatic optimizations that require no manual configuration:
format:auto or auto=format to serve the best formatImage Foundry caches transformed images for fast delivery. When you update an original image, you can purge the cache to serve the new version immediately.
Purging an image path removes all variants of that image — every size, format, and quality combination. For example, purging /photos/hero.jpg clears the 400px webp version, the 800px avif version, and every other cached variant.
Track your image delivery performance from the dashboard. Each project shows real-time usage metrics:
| Metric | What it means |
|---|---|
| Requests | Total HTTP requests for images (includes cache hits) |
| Transformations | Images that needed processing (cache misses) |
| Master Images | Unique original images discovered — /photo.jpg?w=400 and /photo.jpg?w=800 count as 1 master image |
| Bandwidth | Total bytes served to clients |
| Cache Hit Rate | Percentage of requests served from cache — higher is better |
Usage is shown per source and per day, so you can spot trends and identify which sources drive the most traffic.
Prevent unauthorized image transformations with HMAC SHA-256 signed URLs. Set a signing secret per source in the dashboard under source settings.
const crypto = require('crypto');
function signUrl(secret, path) {
return crypto
.createHmac('sha256', secret)
.update(path)
.digest('hex');
}
// ImageBoss style:
const path = '/width/400/photo.jpg';
const sig = signUrl('your-signing-secret', path);
const url = \`https://my-source.\${path}?s=\${sig}\`;
// Imgix style:
const imgixPath = '/photo.jpg?w=400';
const sig2 = signUrl('your-signing-secret', imgixPath);
const url2 = \`https://my-source.\${imgixPath}&s=\${sig2}\`;
Image Foundry is designed to sit behind Cloudflare or any CDN. All image responses include cache-friendly headers:
Cache-Control: public, max-age=2592000, s-maxage=2592000
CDN-Cache-Control: max-age=2592000
ETag: "sha256hash"
Vary: Accept
The Vary: Accept header ensures CDNs cache different formats (WebP, AVIF, JPEG) separately when auto-format is enabled.
Image Foundry supports conditional requests. Clients sending If-None-Match with a cached ETag receive 304 Not Modified with zero body, saving bandwidth.
Image delivery has no rate limit — images are served from cache and designed for high-traffic production use. Dashboard and account actions are rate-limited to prevent abuse (10 requests/minute for login, 100 requests/minute for other actions).
my-site.imgix.net → my-source.?w=, ?h=, ?fit=, ?auto=, etc.) work as-isimg.imageboss.me/your-source/ with img./your-source/c_fill → fit=crop, c_fit → fit=clip, w_400 → w=400, f_auto → auto=format| Status | Code | Description |
|---|---|---|
| 400 | BAD_REQUEST | Invalid parameters or missing required fields |
| 401 | UNAUTHORIZED | Missing or invalid authentication |
| 403 | FORBIDDEN | Invalid signature or insufficient permissions |
| 404 | NOT_FOUND | Source, image, or resource not found |
| 409 | CONFLICT | Resource already exists (duplicate slug, domain) |
| 413 | PAYLOAD_TOO_LARGE | Source image exceeds size limit |
| 429 | TOO_MANY_REQUESTS | Rate limit exceeded |
| 500 | INTERNAL_ERROR | Server error during processing |
| 502 | BAD_GATEWAY | Failed to fetch from upstream source |
Error responses return JSON:
{
"error": "NOT_FOUND",
"message": "Image not found in source: photos/nonexistent.jpg"
}