Immich is a high-performance self-hosted photo and video management solution built primarily in TypeScript. It serves as a privacy-focused alternative to cloud-based photo services like Google Photos, allowing users to maintain complete control over their media libraries by running the application on their own infrastructure. The project is licensed under AGPLv3 and maintains an active community with a public Discord server.
The application provides both mobile and web interfaces for accessing and managing photos and videos. The mobile app, built with Flutter, supports automatic backup when opened and background backup functionality, while the web interface is constructed using SvelteKit and Svelte. Both platforms enable users to upload, view, download, and organize their media with features including multi-user support, shared albums, and public sharing capabilities. The system prevents duplicate asset uploads and supports raw image formats alongside standard photo and video types.
Advanced search and discovery features distinguish Immich from simpler gallery applications. Users can search by metadata including EXIF data, by detected objects, by faces through facial recognition and clustering, and using CLIP-based semantic search. The application displays metadata through an integrated map view and supports 360-degree image viewing on the web platform. Additional organizational features include the ability to create archives, mark favorites, view memories from previous years, stack similar photos, and organize content through folder views and tags.
The backend infrastructure runs on Node.js with NestJS, providing a robust server component that handles user management, API key generation, OAuth support, and administrative functions. Users can define custom storage structures for their media library, and the system supports partner sharing alongside standard album sharing. The mobile app includes offline support capabilities, allowing access to previously synced content without internet connectivity.
The README includes translations in over twenty languages, reflecting the application's international user base and commitment to accessibility.