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.
Prefer to run it yourself? It's free and open-source — see the docs on GitHub, or try the interactive demo first.
Real output
bg_remove actually does.No mockups — these are real product photos run through Fottly's own background removal, unedited. Hover (or tap) each card to see the result. Works best on solid, well-lit subjects; thin straps and fine detail are still a work in progress.
Sneakers — bg_remove,f_png
Perfume bottle — bg_remove,f_png
Wristwatch — bg_remove,f_png
Wallet — bg_remove,f_png
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.
Fottly Cloud
Same API, same URL syntax, zero infrastructure to maintain. We host Fottly for you — point your app at your own subdomain and go.
Starter
Up to 10,000 images/month.
Card required to start the trial — you're not charged for 7 days.
Growth
Up to 40,000 images/month.
Card required to start the trial — you're not charged for 7 days.
Business
Up to 100,000 images/month.
Card required to start the trial — you're not charged for 7 days.
Prefer to run it yourself? It's free and open-source — see the docs on GitHub.
Your card is charged automatically once the 7 days end, at the plan and rate shown at signup — locked in forever for founding customers. Cancel anytime before that from your billing portal and you won't be charged at all.
Yes. Cloud runs the same open-source engine, so the same URL syntax works against your own server whenever you're ready — no rewrite, no lock-in.
On Fottly Cloud's storage, on EU infrastructure (Hetzner, Germany), reachable only over HTTPS via your own API key and subdomain.
Get started
No bucket and no account to set up first — clone it, bring up the stack, and post an image straight to the API. Under 5 minutes end to end.
:3000 together with the AI background-removal
worker, running privately inside the compose network. No S3 bucket required yet.
git clone https://github.com/Noah-1919/Fottly.git
cd Fottly
docker compose up --build
curl -X POST \
-H "Authorization: Bearer dev-secret-key" \
-F "file=@product.jpg" \
"http://localhost:3000/transform/bg_remove,f_png" \
-o cutout.png
S3_*
environment variables at your own bucket (AWS S3, Cloudflare R2, or MinIO) to switch
on cached, public <img src="..."> delivery URLs behind your own domain.