Fottly is a self-hosted image transformation service with AI background removal built in. Resize, convert, crop and watermark through plain URL parameters — running on your own infrastructure, storing into your own S3 bucket, with no per-credit metering in the middle.
The problem
Hosted services meter credits against bandwidth, storage and transformations. A campaign that goes well, a bot that crawls your catalogue, or simply growing traffic all move the invoice — and the pipeline your product depends on lives in someone else's account.
Features
No SDK to install and no build step. Point an <img>
tag at your server and the transformation is described right there in the path.
Set width and height with w_ and h_. Choose c_fill to crop to an exact box, or c_fit to keep the whole image inside it.
Convert on the fly with f_webp, f_avif, f_jpeg or f_png, and tune compression with q_80.
Add bg_remove to cut the main subject out onto a transparent background, powered by Rembg running as an internal service.
Overlay any image from your bucket with wm_, and control corner, size and opacity with wg_, ws_ and wo_.
Every result is cached in your bucket, so the same request is never processed twice. Deleting or renaming a file clears its derived cache.
Works with AWS S3, Cloudflare R2 or a local MinIO. Point it at a bucket with environment variables — no proprietary storage layer.
Upload, rename and delete through a small authenticated API. Cache invalidation is handled for you on every change.
Files that aren't transformable images — PDFs, audio, animated GIFs — are served untouched instead of erroring out.
URL API
Stack transformations in a single path segment. Delivery URLs are public, so
they drop straight into an <img src>
with no headers or signing.
# Resize to 400x300 and convert to WebP /t/w_400,h_300,f_webp/photo.jpg # Fit inside a 300x300 box without cropping /t/w_300,h_300,c_fit,f_webp/photo.jpg # Cut out the subject, keep transparency with PNG /t/bg_remove,f_png/product.jpg # Watermark, centered, 35% wide at 90% opacity /t/w_600,wm_logo.png,wg_center,ws_35,wo_90/photo.jpg # Everything at once /t/w_800,c_fit,bg_remove,wm_logo.png,f_webp,q_75/product.jpg
Self-hosted & AGPL-3.0
Fottly runs as a small set of containers next to your own services. Source images and every cached result are written to your S3-compatible bucket — AWS S3, Cloudflare R2, or MinIO on your own box.
Nothing is metered by a third party and nothing leaves your network unless you put it there. Background removal runs locally too: the AI service is internal to the compose stack and isn't exposed to the host.
Management endpoints sit behind an API key, with per-IP rate limiting and an upload size cap you configure.
Fottly is released under the GNU Affero General Public License v3.0. You can run it, study it, modify it and deploy it — including inside a company, for commercial work — at no cost.
The one obligation: if you modify Fottly and offer that modified version to others over a network, you must make your modified source available to those users under the same license.
Running it unmodified for your own product triggers no publishing obligation. It's the clause that keeps the project from being closed up and resold as a black box.
Get started
The compose file brings up the service together with a local MinIO and the background-removal worker, so you can try everything without an external account.
docker compose up --build
:3000, a MinIO console on :9001, and the AI worker
running privately inside the compose network.
mc CLI, or the authenticated upload endpoint.
localhost:3000/t/w_400,h_300,f_webp/your-image.jpg in a browser —
delivery URLs are public, so it just works.