I spent the last 6 months building Openinary, and I believe it fills a real gap in the self-hosted ecosystem.
The Problem
You know what’s wild?
- There’s Nextcloud for file storage
- There’s Immich for photos
- But there was nothing for image processing and delivery at scale, fully self-hosted
Most SaaS image platforms follow the same pattern:
- A great API
- Strong lock-in
- A bill that keeps growing
Cloudinary gates your media.
Uploadcare does the same.
I was paying $90/month for Cloudinary.
For what?
- Resizing images
- Processing a demo video
- Adding watermarks
- Optimizing formats
The Solution
Openinary is what I built.
A self-hosted, open-source alternative to Cloudinary, focused on simplicity and control.
What it does
- Self-hosted, runs on your own infrastructure via Docker
-
Simple URL-based API
- Example:
/w_1500,h_500,f_avif/sample.jpg
- Example:
Smart caching with invalidation
S3-compatible storage
Works with AWS S3, Cloudflare R2, MinIO
-
Automatic format optimization
- WebP, AVIF, best format per browser
Open source, AGPL-3.0 license
Why It Matters
The self-hosted movement is real.
People are moving away from SaaS lock-in, especially for core infrastructure.
Until now, one piece was missing:
You couldn’t process and deliver media at scale on your own infrastructure.
Openinary aims to fill that gap.
Current Status
- ⭐ 83 GitHub stars
- 🔥 Featured on GitHub Trending (Dec 9)
- 🎥 8,000+ views on the feature video
- 🎯 Goal: 100 stars by Dec 31 (yes, I’m chasing this 😅)
Tech Stack
- Runtime: Node.js
- Deployment: Docker, one command
- Storage: S3-compatible (AWS, Cloudflare R2, MinIO)
- License: AGPL-3.0
Try It
-
Deploy guides:
Looking For
- Early feedback, especially from Cloudinary users
- Ideas on what to build next
- Help spreading the word before the end of the year
If you’ve hit the wall with expensive image services, or wanted to self-host but couldn’t find a solid solution, I’d love to hear from you.
Questions?
Drop them in the comments.
Happy to discuss the architecture, use cases, or why I built this instead of using existing solutions.
Top comments (0)