.github | ||
design | ||
docker | ||
fastlane | ||
machine_learning | ||
microservices | ||
mobile | ||
server | ||
.gitignore | ||
LICENSE | ||
Makefile | ||
PR_CHECKLIST.md | ||
README.md |
Immich
Self-hosted photo and video backup solution directly from your mobile phone.
Loading ~4000 images/videos
Screenshots
Note
!! NOT READY FOR PRODUCTION! DO NOT USE TO STORE YOUR ASSETS !!
This project is under heavy development, there will be continous functions, features and api changes.
Features
- Upload and view assets (videos/images).
- Download asset to local device.
- Multi-user supported.
- Quick navigation with drag scroll bar.
- Auto Backup.
- Support HEIC/HEIF Backup.
- Extract and display EXIF info.
- Real-time render from multi-device upload event.
- Image Tagging/Classification based on ImageNet dataset
- Object detection based on COCO SSD.
- Search assets based on tags and exif data (lens, make, model, orientation)
- [Optional] Reverse geocoding using Mapbox (Generous free-tier of 100,000 search/month)
- Show asset's location information on map (OpenStreetMap).
- Show curated places on the search page
- Show curated objects on the search page
- Shared album with users on the same server
System Requirement
OS: Preferred Linux-based operating system (Ubuntu, Debian, MacOS...etc). I haven't tested with Docker for Windows
as well as WSL
on Windows
RAM: At least 2GB, preffered 4GB.
Cores: At least 2 cores, preffered 4 cores.
Development and Testing out the application
You can use docker compose for development and testing out the application, there are several services that compose Immich:
- NestJs - Backend of the application
- PostgreSQL - Main database of the application
- Redis - For sharing websocket instance between docker instances and background tasks message queue.
- Nginx - Load balancing and optimized file uploading.
- TensorFlow - Object Detection and Image Classification.
Step 1: Populate .env file
Navigate to docker
directory and run
cp .env.example .env
Then populate the value in there.
Notice that if set ENABLE_MAPBOX
to true
, you will have to provide MAPBOX_KEY
for the server to run.
Pay attention to the key UPLOAD_LOCATION
, this directory must exist and is owned by the user that run the docker-compose
command below.
Example
# Database
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_DATABASE_NAME=immich
# Upload File Config
UPLOAD_LOCATION=<put-the-path-of-the-upload-folder-here>
# JWT SECRET
JWT_SECRET=randomstringthatissolongandpowerfulthatnoonecanguess
# MAPBOX
## ENABLE_MAPBOX is either true of false -> if true, you have to provide MAPBOX_KEY
ENABLE_MAPBOX=false
MAPBOX_KEY=
Step 2: Start the server
To start, run
docker-compose -f ./docker/docker-compose.yml up
If you have a few thousand photos/videos, I suggest running docker-compose with scaling option for the immich_server
container to handle high I/O load when using fast scrolling.
docker-compose -f ./docker/docker-compose.yml up --scale immich_server=5
The server will be running at http://your-ip:2283
through Nginx
Step 3: Register User
Use the command below on your terminal to create user as we don't have user interface for this function yet.
curl --location --request POST 'http://your-server-ip:2283/auth/signUp' \
--header 'Content-Type: application/json' \
--data-raw '{
"email": "testuser@email.com",
"password": "password"
}'
Step 4: Run mobile app
The app is distributed on several platforms below.
F-Droid
You can get the app on F-droid by clicking the image below.
Android
Get the app on Google Play Store here
The App version might be lagging behind the latest release due to the review process.
iOS
Get the app on Apple AppStore here:
The App version might be lagging behind the latest release due to the review process.
Support
If you like the app, find it helpful, and want to support me to offset the cost of publishing to AppStores, you can sponsor the project with Github Sponsore, or one time donation with Buy Me a coffee link below.
This is also a meaningful way to give me motivation and encounragment to continue working on the app.
Cheer! 🎉
Known Issue
TensorFlow Build Issue
This is a known issue on RaspberryPi 4 arm64-v7 and incorrect Promox setup
TensorFlow doesn't run with older CPU architecture, it requires CPU with AVX and AVX2 instruction set. If you encounter the error illegal instruction core dump
when running the docker-compose command above, check for your CPU flags with the command and make sure you see AVX
and AVX2
:
more /proc/cpuinfo | grep flags
If you are running virtualization in Promox, the VM doesn't have the flag enable.
You need to change the CPU type from kvm64
to host
under VMs hardware tab.
Hardware > Processors > Edit > Advanced > Type (dropdown menu) > host
Otherwise you can:
- edit
docker-compose.yml
file and comment the wholeimmich_microservices
service which will disable machine learning features like object detection and image classification - switch to a different VM/desktop with different architecture.