Librephotos
A self-hosted open source photo management service.
A self-hosted, open-source photo management service with automatic face recognition, object detection, and semantic search — powered by modern machine learning. The project is written primarily in Python, distributed under the MIT License license, first published in 2020. It has gained significant community traction with 7,996 stars and 377 forks on GitHub. Key topics include: django, exif, hacktoberfest, machine-learning, photo.
<a href="https://hosted.weblate.org/engage/librephotos/">
<img src="https://hosted.weblate.org/widgets/librephotos/-/librephotos-frontend/svg-badge.svg" alt="Translation status" />
</a>
LibrePhotos

<sub>Mockup designed by rawpixel.com / Freepik</sub>
A self-hosted, open-source photo management service with automatic face recognition, object detection, and semantic search — powered by modern machine learning.
- Stable demo is available here: https://demo1.librephotos.com/ . User is
demo, password isdemo1234(with sample images). - Latest development demo is available here: https://demo2.librephotos.com/ (same user/password)
- You can watch development videos on Niaz Faridani-Rad's channel
- You can join our Discord.
Repository layout
This is a monorepo that consolidates what was previously five separate repositories.
| Path | What it is | Previous repo |
|---|---|---|
apps/backend/ | Django 5 API, machine-learning pipelines, background jobs | librephotos |
apps/frontend/ | React 18 + Vite web client, i18next localization | librephotos-frontend |
apps/mobile/ | React Native mobile client (Android) | librephotos-mobile |
apps/docs/ | Docusaurus site published to https://docs.librephotos.com | librephotos.docs |
deploy/ | Dockerfiles, Compose configs, proxy, Kubernetes manifests | librephotos-docker |
Commit history from all five repositories is preserved — git log --follow apps/<app>/<file> works across the move.
Installation
Step-by-step installation instructions are available in our documentation.
System Requirements
| Resource | Minimum | Recommended |
|---|---|---|
| RAM | 4 GB | 8 GB+ |
| Storage | 10 GB (plus your photo library) | SSD recommended |
| CPU | 2 cores | 4+ cores |
| OS | Any Docker-compatible OS | Linux |
Note: Machine learning features (face recognition, scene classification, image captioning) are memory-intensive. 8 GB+ RAM is strongly recommended for smooth operation.
Features
- Support for all types of photos including raw photos
- Support for videos
- Timeline view
- Scans pictures on the file system
- Multiuser support
- Generate albums based on events like "Thursday in Berlin"
- Face recognition / Face classification
- Reverse geocoding
- Object / Scene detection
- Semantic image search
- Search by metadata
Tech Stack
Backend
- Framework: Django 5 with Django REST Framework
- Database: PostgreSQL
- Task Queue: Django-Q2
- Image Conversion: ImageMagick
- Video Conversion: FFmpeg
- Exif Support: ExifTool
Frontend
- UI: React 18 with TypeScript
- Build Tool: Vite
- Component Library: Mantine
- Routing: TanStack Router
- Data Fetching: TanStack Query
- Maps: MapLibre GL
- Internationalization: i18next
Machine Learning
- Face detection: face_recognition
- Face classification/clustering: scikit-learn and hdbscan
- Image captioning: im2txt
- Scene classification: places365
- Reverse geocoding: geopy
Infrastructure
- Deployment: Docker & Docker Compose
- Reverse Proxy: Nginx
API Documentation
After starting LibrePhotos, interactive API docs are available at:
- Swagger UI:
http://localhost:3000/api/swagger - ReDoc:
http://localhost:3000/api/redoc
Development
See CONTRIBUTING.md and the per-app READMEs:
The Docker Compose-based dev environment lives in deploy/compose/ and is described in the development install guide.
How to help out
- ⭐ Star this repository if you like this project!
- 🚀 Developing: Get started in less than 30 minutes by following this guide. Also see our CONTRIBUTING.md for detailed development setup, code quality standards, and PR guidelines.
- 🗒️ Documentation: Improving the documentation is as simple as submitting a pull request here
- 🧪 Testing: If you want to help find bugs, use the
devtag and update it regularly. If you find a bug, open an issue. - 🧑🤝🧑 Outreach: Talk about this project with other people and help them to get started too!
- 🌐 Translations: Make LibrePhotos accessible to more people with weblate.
- 💸 Donate to the developers of LibrePhotos
License
This project is licensed under the MIT License.
Contributors
Showing top 12 contributors by commit count.
