Immich

Website
Github
F-Droid

An Open Source, self-hosted photo storage solution - a Privacy Tool to live by. Interface is very similar to Google Photos and Apple Photos, but with more customization and complete privacy, at the expense of having to self-host.

The features are just as extensive as any commercial product. It has facial recognition software, automatic uploads, backups, albums, and more. A particularly useful feature is the ability to create shareable album links where anyone with the link can download the original images with no compression.

The mobile app (available on F-Droid) provides full access to both user and admin dashboards, making it easy to manage your photo library from anywhere.

Random Troubleshoots

Password Reset Procedure

If you lose access to Immich accounts, reset passwords directly via the PostgreSQL database:

# 1. Generate bcrypt hash for new password (use single quotes to avoid bash issues)
python3 -c 'import bcrypt; print(bcrypt.hashpw(b"YourNewPassword", bcrypt.gensalt(rounds=10)).decode())'

# 2. Update password in database (CRITICAL: use single quotes and '\'' for embedded quotes to prevent $ expansion)
docker exec -it immich_postgres psql -U postgres -d immich -c 'UPDATE "user" SET password = '\''PASTE_HASH_HERE'\'', "shouldChangePassword" = false WHERE email = '\''user@example.com'\'';'

# 3. Verify the password was set correctly (should show full hash starting with $2b$10$)
docker exec -it immich_postgres psql -U postgres -d immich -c 'SELECT email, password FROM "user" WHERE email = '\''user@example.com'\'';'

# 4. Restart Immich
docker restart immich_server

Important Notes:

Troubleshooting

Admin UI Freezing Browser

Symptom: Web UI becomes unresponsive when logged in as admin, browser tab freezes

Cause: Frontend JavaScript bug in older Immich versions (confirmed in v2.2.3)

Solution: Update Immich to latest version

cd /path/to/immich/
docker compose pull
docker compose up -d

Note: This was a known bug fixed in v2.4.1. The backend was healthy - logs showed no errors. The issue was purely in the admin dashboard frontend code causing an infinite loop or memory leak in the browser.

Workaround (if update not possible): Use regular user account with admin privileges, or access admin functions via API directly.