┌─────────────────────────────────────────────────────────────────┐ │ ▄█ █▀▄▀█ █▀▀▄ ▀█▀ █▀▀█ █▀▀█ ▀▄▀ █ █ │ │ █ █ ▀ █ █▄▄█ ▀▄█▄▀ █ █ █▄▄▀ █ █ █▄▄ │ │ │ │ upload → transform → share · self-hosted · no telemetry │ └─────────────────────────────────────────────────────────────────┘
drag & drop an image here, or click to choose
max 25 MB · png / jpg / webp / gif / heic / bmp / tiff
files auto-purge after 72h · URL can expire sooner





imgproxy OSS handles the fast path. Pillow sidecar adds Pro-equivalent filters. Modal serverless GPU adds AI on burst (no idle bill, $1/day hard cap).
no subscription. no SaaS gate. when a feature isn't here, it's being built — not sold to you.
https://img.goku.codes/<HMAC-SHA256 sig>/<processing options>/plain/s3://<bucket>/<path>
POST /api/upload multipart file (max 25MB) → {key, s3_path, expires_at}
POST /api/sign {s3_path, opts, ttl_hours} → {url, expires_at}
GET /api/health → {status, captcha_required, max_upload_mb, retention_days}
GET /api/stats → 7-day upload/sign counters
rs:fit:300:300 resize · fit rs:fill:300:300 resize · fill (crop) blur:5 gaussian blur radius sharpen:1.5 unsharp mask amount pixelate:12 mosaic block size rotate:90 0 / 90 / 180 / 270 quality:50 0-100 format:webp png / jpg / webp / gif / avif crop:200:200 crop to size trim:10 auto-trim border padding:10 pad border background:ff0000 bg color (hex) exp:<unix_ts> URL expires at ts
$ curl -F file=@cat.png https://img.goku.codes/api/upload
{"key":"a7Kp9mNqR2vL.png","s3_path":"s3://media-tmp/a7Kp9mNqR2vL.png",
"expires_at":1747000000,"size":48291,"mime":"image/png"}
$ curl -XPOST https://img.goku.codes/api/sign \
-H content-type:application/json \
-d '{"s3_path":"s3://media-tmp/a7Kp9mNqR2vL.png",
"opts":"rs:fit:300:300/rotate:90","ttl_hours":24}'
{"url":"https://img.goku.codes/<sig>/rs:fit:300:300/rotate:90/exp:.../plain/s3://media-tmp/a7Kp9mNqR2vL.png",
"expires_at":1746500000}