Self-hosted Open source · AGPL-3.0 AI background removal built in

Your images, your server, your bill.

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.

https://media.yoursite.com/t/w_800,c_fit,bg_remove,wm_logo.png,f_webp/product.jpg
your server transformations file in your bucket

The problem

Closed image CDNs bill you for traffic you don't control.

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.

Hosted image CDN

  • · Usage-based credits that move with your traffic
  • · Your originals live in a third-party account
  • · Pricing and limits can change under you
  • · Migrating away means rewriting every image URL
  • · Background removal is usually a paid add-on

Fottly, self-hosted

  • · Runs on hardware you already pay for
  • · Originals and cache stay in your own S3 bucket
  • · AGPL-3.0 — the source can't be taken away from you
  • · You own the URL scheme and the domain serving it
  • · AI background removal included, not an add-on

Features

Everything happens through the URL.

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.

Resize & crop

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.

Modern formats

Convert on the fly with f_webp, f_avif, f_jpeg or f_png, and tune compression with q_80.

AI background removal

Add bg_remove to cut the main subject out onto a transparent background, powered by Rembg running as an internal service.

Configurable watermarks

Overlay any image from your bucket with wm_, and control corner, size and opacity with wg_, ws_ and wo_.

Automatic caching

Every result is cached in your bucket, so the same request is never processed twice. Deleting or renaming a file clears its derived cache.

S3-compatible storage

Works with AWS S3, Cloudflare R2 or a local MinIO. Point it at a bucket with environment variables — no proprietary storage layer.

File management

Upload, rename and delete through a small authenticated API. Cache invalidation is handled for you on every change.

Safe passthrough

Files that aren't transformable images — PDFs, audio, animated GIFs — are served untouched instead of erroring out.

URL API

Composable parameters, comma separated.

Stack transformations in a single path segment. Delivery URLs are public, so they drop straight into an <img src> with no headers or signing.

Transformation examples
# 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
w_ width in pixels
h_ height in pixels
f_ webp · avif · jpeg · png
q_ quality, 0–100
c_ fill (crop) · fit (contain)
bg_remove AI cutout
wm_ watermark file
wg_ watermark corner
ws_ watermark size %
wo_ watermark opacity %

Self-hosted & AGPL-3.0

Infrastructure you control, licensed so it stays that way.

What self-hosting gets you

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.

What AGPL-3.0 means for you

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

One command to a running stack.

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.

Terminal
docker compose up --build
1
Bring up the stack. You get the transformation service on :3000, a MinIO console on :9001, and the AI worker running privately inside the compose network.
2
Add an image. Drop a file into the bucket from the MinIO console, the mc CLI, or the authenticated upload endpoint.
3
Request a transformation. Open localhost:3000/t/w_400,h_300,f_webp/your-image.jpg in a browser — delivery URLs are public, so it just works.
4
Point it at real storage. Swap the S3 environment variables for your own bucket and put it behind your domain.