Built for production teams · v1.0

Your team's image CDN,
without the per-asset bill.

img-cloud stores your originals once, deduplicates them, and serves any size, crop or format on demand — with signed URLs, role-based access, SDKs for Node and Python, and a delivery API that just works.

10,000+ transforms / minute capacity sha-256 deduplicated storage HSTS + CSP on every response Single-tenant by default
Platform

Everything a Cloudinary replacement needs.

One API for upload, one for delivery, one URL grammar for every size. Sane defaults, hard limits where it matters.

One-call upload

POST a file with a folder, some tags, and a visibility flag. We probe dimensions, hash for dedup, and return a stable public_id.

URL-based transforms

Need a 400×400 WebP at q_80 with a Gaussian blur? Just put it in the path. Cached on disk after the first hit.

Signed, expiring URLs

Private assets get HMAC-signed, time-limited URLs. Cloudflare won't cache them past their TTL. Public assets are immutable + edge-cached.

SDKs for Node & Python

Drop-in clients with upload(), urlFor(), signedUrl(), delete(). No proprietary types to learn.

User + API-key auth

Admins manage users in the dashboard. Services authenticate with revocable, scoped API keys. Brute-force protection at the edge and app layer.

Audit-friendly storage

Content-addressable on disk, single SQLite file for metadata, transparent cache for derivatives. Back up two directories and you've backed up everything.

Developers

Built for engineers, not marketers.

Real REST + multipart endpoints. No magic, no SDK lock-in. Use the official Node or Python client, or curl — whatever fits.

  • Content-addressable originals — upload the same image twice, store it once.
  • Cache on demand — first request triggers the transform, subsequent ones are O(1).
  • Strict input filtering — SVGs rejected, magic-byte sniffing, pixel-count caps prevent decoding bombs.
  • EXIF stripped automatically on every served transform.
View full docs →
const { createClient } = require('cloudimg');

const cli = createClient({
  baseUrl: 'https://img-cloud.org',
  keyId: process.env.CLOUDIMG_KEY_ID,
  keySecret: process.env.CLOUDIMG_KEY_SECRET,
});

const asset = await cli.upload('./hero.jpg', {
  folder: 'marketing',
  tags: ['homepage', 'hero'],
});

console.log(asset.public_id);
//=> hero-3a7f9c81b2e4

// 400×400 WebP at q_80 — no extra call needed.
console.log(cli.urlFor(asset.public_id, {
  w: 400, h: 400, c: 'fill', f: 'webp', q: 80,
}));
Built for

Drop into whatever you're shipping.

img-cloud sits behind your CDN, terminates your image transformations, and gets out of the way.

Product catalogs

Single source of truth for product imagery. Tag, search, and serve responsive variants from one base URL.

Marketing CMS

Editors upload originals; the site fetches whatever size the layout needs. No re-exporting, no duplicate assets.

User-generated content

Per-user private folders, signed URLs, automatic EXIF stripping. Upload from mobile, deliver to web.

Internal docs & tools

Use it for screenshots, dashboards, diagrams. Faster than S3 + Lambda, simpler than running ImageMagick on every box.

Ready to consolidate your image stack?

Sign in to your account, mint an API key, ship your first transform in under five minutes.

Sign in to img-cloud →