mirror of
https://github.com/immich-app/immich.git
synced 2026-05-22 06:52:33 -04:00
f632d320f52c419697fe7e4445054e45bd4fe6fe
* fix(mobile): clear linkedRemoteAlbumId in reset() so FK refs dont dangle reset() runs with foreign_keys off before wiping remote_* tables, so the ON DELETE SET NULL cascade on linkedRemoteAlbumId doesnt fire. local rows keep pointing at deleted remote ids. affects logout (clearLocalData calls reset()) and the server SyncResetV1 path (30 day idle, etc). after re-login, syncLinkedAlbum either silently warns or fires 400s (those are covered by #28299). null the column manually inside the same transaction. cascade still works for normal SyncAlbumDeleteV1. verified on pixel 9a with this branch built locally: logged out, deleted album from web, logged back in. without fix linkedRemoteAlbumId stayed dangling. with fix all three local rows have linkedRemoteAlbumId = NULL after the logout reset, and recovery is clean once manageLinkedAlbums runs again. * fix(mobile): always re-enable foreign_keys in reset() + simplify the update re-enable foreign_keys inside a try/finally so it always runs even if the transaction throws. without this, a failed reset would leave the connection with foreign_keys = OFF and silently disable cascades for everything after (per copilot review). also drop the where filter on the linkedRemoteAlbumId update, unconditional update-all is simpler and we wipe everything in reset anyway (per ganka review).
High performance self-hosted photo and video management solution
Català Español Français Italiano 日本語 한국어 Deutsch Nederlands Türkçe 简体中文 正體中文 Українська Русский Português Brasileiro Svenska العربية Tiếng Việt ภาษาไทย
Warning
⚠️ Always follow 3-2-1 backup plan for your precious photos and videos!
Note
You can find the main documentation, including installation guides, at https://immich.app/.
Links
Demo
Access the demo here. For the mobile app, you can use https://demo.immich.app for the Server Endpoint URL.
Login credentials
| Password | |
|---|---|
| demo@immich.app | demo |
Features
| Features | Mobile | Web |
|---|---|---|
| Upload and view videos and photos | Yes | Yes |
| Auto backup when the app is opened | Yes | N/A |
| Prevent duplication of assets | Yes | Yes |
| Selective album(s) for backup | Yes | N/A |
| Download photos and videos to local device | Yes | Yes |
| Multi-user support | Yes | Yes |
| Album and Shared albums | Yes | Yes |
| Scrubbable/draggable scrollbar | Yes | Yes |
| Support raw formats | Yes | Yes |
| Metadata view (EXIF, map) | Yes | Yes |
| Search by metadata, objects, faces, and CLIP | Yes | Yes |
| Administrative functions (user management) | No | Yes |
| Background backup | Yes | N/A |
| Virtual scroll | Yes | Yes |
| OAuth support | Yes | Yes |
| API Keys | N/A | Yes |
| LivePhoto/MotionPhoto backup and playback | Yes | Yes |
| Support 360 degree image display | No | Yes |
| User-defined storage structure | Yes | Yes |
| Public Sharing | Yes | Yes |
| Archive and Favorites | Yes | Yes |
| Global Map | Yes | Yes |
| Partner Sharing | Yes | Yes |
| Facial recognition and clustering | Yes | Yes |
| Memories (x years ago) | Yes | Yes |
| Offline support | Yes | No |
| Read-only gallery | Yes | Yes |
| Stacked Photos | Yes | Yes |
| Tags | No | Yes |
| Folder View | Yes | Yes |
Translations
Read more about translations here.
Repository activity
Star history
Contributors
Description
Self-hosted photo and video backup solution directly from your mobile phone.
backup-toolfluttergoogle-photosgoogle-photos-alternativemobile-appnestjsnodejsphoto-galleryphotosself-hostedsveltesveltekitvideos
Readme
591 MiB
Languages
TypeScript
52.4%
Dart
28.8%
Svelte
13.5%
Python
1.6%
Kotlin
1.2%
Other
2.2%