Connect Any Image Origin

5 backend types supporting 10+ services: S3, GCS, Azure Blob, Cloudflare R2, MinIO, DigitalOcean Spaces, Backblaze B2, Wasabi, local filesystem, and any HTTP/HTTPS URL.

Supported Backends

☁️

Amazon S3

S3 buckets plus all S3-compatible services: MinIO, Cloudflare R2, DigitalOcean Spaces, Backblaze B2, Wasabi.

πŸ”΅

Google Cloud Storage

GCS with Application Default Credentials, service account keys, or workload identity.

🟦

Azure Blob Storage

Azure Blob with account key, managed identity, or connection string authentication.

πŸ“

Filesystem

Local disk, Docker volumes, NFS mounts, or EFS. Lowest latency of all backends.

🌐

Web Proxy

Fetch from any HTTP/HTTPS URL β€” WordPress, headless CMS, existing CDN, or internal APIs.

3 Configuration Layers

LayerMethodBest For
1. Config StoreRedis + REST API (/api/sources)Production, multi-tenant, dynamic CRUD
2. YAML filesources.yml (hot-reloaded)GitOps, simple deployments
3. Inline configconfig.yml sources:Static fallback, development

Checked in priority order β€” Redis overrides YAML which overrides inline. Change storage backends without restarting the service.

Multi-Source Architecture

Combine multiple backends for different image categories:

/products/width/400/shoe.jpg         β†’ Amazon S3
/avatars/cover/100x100/user.jpg      β†’ Google Cloud Storage
/blog/width/800/post-header.jpg      β†’ WordPress (web proxy)
/static/cdn/logo.png                 β†’ Local filesystem
/archive/width/600/old-photo.jpg     β†’ Azure Blob Storage

Health Monitoring

The /health endpoint checks connectivity for every configured source in real-time:

GET /health β†’ {
  "status": "healthy",
  "sources": {
    "products": { "status": "ok", "type": "s3", "latencyMs": 45 },
    "avatars": { "status": "ok", "type": "gcs", "latencyMs": 62 },
    "blog": { "status": "error", "type": "web-proxy", "error": "ECONNREFUSED" }
  }
}

Connect Your First Source in 2 Minutes

Any storage, any cloud, any origin.

Get Started Free Read the Docs