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.
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.
One API for upload, one for delivery, one URL grammar for every size. Sane defaults, hard limits where it matters.
POST a file with a folder, some tags, and a visibility flag. We probe dimensions, hash for dedup, and return a stable public_id.
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.
Private assets get HMAC-signed, time-limited URLs. Cloudflare won't cache them past their TTL. Public assets are immutable + edge-cached.
Drop-in clients with upload(), urlFor(), signedUrl(), delete(). No proprietary types to learn.
Admins manage users in the dashboard. Services authenticate with revocable, scoped API keys. Brute-force protection at the edge and app layer.
Content-addressable on disk, single SQLite file for metadata, transparent cache for derivatives. Back up two directories and you've backed up everything.
Real REST + multipart endpoints. No magic, no SDK lock-in. Use the official Node or Python client, or curl — whatever fits.
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,
}));
from cloudimg import Cloudimg
cli = Cloudimg(
base_url="https://img-cloud.org",
key_id=os.environ["CLOUDIMG_KEY_ID"],
key_secret=os.environ["CLOUDIMG_KEY_SECRET"],
)
asset = cli.upload(
"hero.jpg",
folder="marketing",
tags=["homepage", "hero"],
)
print(asset["public_id"])
# => hero-3a7f9c81b2e4
print(cli.url_for(
asset["public_id"],
w=400, h=400, c="fill", f="webp", q=80,
))
curl -X POST https://img-cloud.org/v1/upload \ -H "Authorization: ApiKey $CLOUDIMG_KEY_ID:$CLOUDIMG_KEY_SECRET" \ -F "[email protected]" \ -F "folder=marketing" \ -F "tags=homepage,hero" # 400x400 WebP delivery URL — no separate call: # https://img-cloud.org/v1/image/w_400,h_400,c_fill,q_80,f_webp/hero-3a7f9c81b2e4
img-cloud sits behind your CDN, terminates your image transformations, and gets out of the way.
Single source of truth for product imagery. Tag, search, and serve responsive variants from one base URL.
Editors upload originals; the site fetches whatever size the layout needs. No re-exporting, no duplicate assets.
Per-user private folders, signed URLs, automatic EXIF stripping. Upload from mobile, deliver to web.
Use it for screenshots, dashboards, diagrams. Faster than S3 + Lambda, simpler than running ImageMagick on every box.
Sign in to your account, mint an API key, ship your first transform in under five minutes.