Compare commits

...

59 Commits

Author SHA1 Message Date
github-actions
840d99ed25 chore: version v1.124.0 2025-01-07 19:00:42 +00:00
Sebastian Schneider
b4c1304b46 feat(web): Improve duplicate suggestion (#14947)
* feat: Improve duplicate suggestion

* format

* feat(web): Add deduplication info popup

* fix: lint

* fmt

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-07 18:30:11 +00:00
Jonathan Jogenfors
23f3e737fd fix(server): don't delete offline files from disk when trash empties (#14777)
fix: don't delete offline files from disk when emptying trash

Move logic to asset deletion check
2025-01-07 18:25:43 +00:00
Weblate (bot)
10e569cc1c chore(web): update translations (#14759)
Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: AMIR IZZUDDIN <amirizzuddin@outlook.com>
Co-authored-by: Abhishek Kumar <abyshek.kumar@gmail.com>
Co-authored-by: Alan Ye <git@wrye.dev>
Co-authored-by: Alan Ye <me@wrye.dev>
Co-authored-by: Alexander Roumeliotis <alexroumeli@gmail.com>
Co-authored-by: Benjamin Freeman <b.t.freeman16@gmail.com>
Co-authored-by: Berkan Özkan <ozkanberkan@yandex.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Bohuslav Uličný <justadreamer@duck.com>
Co-authored-by: Christian Shannon <dargelf@gmail.com>
Co-authored-by: Chuckame <antoine.michaud.17@gmail.com>
Co-authored-by: Cristi Bklash <bklash3@gmail.com>
Co-authored-by: Denis Saamiev <samievdenis@gmail.com>
Co-authored-by: Dominik <dominik.falis@proton.me>
Co-authored-by: Eirik Rolland Enger <engeir@pm.me>
Co-authored-by: Eshgin <eshqin.quluzade1@gmail.com>
Co-authored-by: Evgenij Spitsyn <evgeniy@spitsyn.net>
Co-authored-by: Filip <fjokovic0@gmail.com>
Co-authored-by: Fredrik Andersson <membership@fredande.se>
Co-authored-by: Heine Olsen <olsen10051988@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Jordy H <jordy@hoebergen.net>
Co-authored-by: Jozef Pistej <pistej2@gmail.com>
Co-authored-by: Kalilinoe Alohilani <akalilinoe@gmail.com>
Co-authored-by: Kamil Warczek <kamilwarczek@gmail.com>
Co-authored-by: Kenji Opdam <kenji.opdam@gmail.com>
Co-authored-by: Lab Forensic <recoverylabkor@gmail.com>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Leon S. Kennedy <leonsk29@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Manar Aldroubi <droubi@gmail.com>
Co-authored-by: Matteo Morari <matteo.morari04@gmail.com>
Co-authored-by: Max <mail@heavygale.de>
Co-authored-by: Michal Micech <michal.micech@gmail.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mystically <github@mytrydas.com>
Co-authored-by: Nicolai Bonde <git@nicolaibonde.dk>
Co-authored-by: Noisy Fridge <pureprince.habib@gmail.com>
Co-authored-by: OskarSidor <oskar.sidor@gmail.com>
Co-authored-by: PPNplus <ppnplus@protonmail.com>
Co-authored-by: Pascal Dietrich <pascal.1.dietrich@hotmail.com>
Co-authored-by: Paul Kupper <p@ul-kupper.de>
Co-authored-by: Paul Murphy <djxistenz@gmail.com>
Co-authored-by: Petri Hämäläinen <petri.hamalainen@mailbox.org>
Co-authored-by: Rekku484 <rekku484@gmail.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Roger Veciana Rovira <rveciana@gmail.com>
Co-authored-by: Sander Brilman <brilmansander@gmail.com>
Co-authored-by: Sedat Albayrak <sedat.albayrak@icloud.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Shogo Takata <pineapplehunter.daniel@gmail.com>
Co-authored-by: Stijn <gielisstijn@gmail.com>
Co-authored-by: Sylvain Pichon <Sp_@users.noreply.hosted.weblate.org>
Co-authored-by: Tal Sitton <tal.sitton04@gmail.com>
Co-authored-by: Thomas Möller <thomas.moeller@mailbox.org>
Co-authored-by: Torben Eims <torben.eims@gmx.de>
Co-authored-by: Venkateswaran Ganesan <vganes3@gmail.com>
Co-authored-by: Vojta Linha <vojtech.linha+weblate@gmail.com>
Co-authored-by: WilliamNT <hwbendeguz@gmail.com>
Co-authored-by: Yuki IWATA <daburutti@gmail.com>
Co-authored-by: aln <imyapear@gmail.com>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: gjarek98 <gjarek48@gmail.com>
Co-authored-by: grgergo <gergo_g@proton.me>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: pyorot <FMasic@hotmail.co.uk>
Co-authored-by: quitroot <quitroot@gmail.com>
Co-authored-by: rezi nagro <rezinagro@hotmail.com>
Co-authored-by: scudo <whiteshield.tg@protonmail.com>
Co-authored-by: sibber5 <ghasjado@gmail.com>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Álvaro Orduna León <alvaro.orduna.92@gmail.com>
Co-authored-by: Ľubomír Dlhý <dlhylubomir@gmail.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: Мĕтри Сантăр ывалĕ Упа-Миччи <mefisteron@gmail.com>
Co-authored-by: Пламен Марков <tsmhunter@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
2025-01-07 17:13:40 +00:00
Alex
61c9c14ba6 fix(mobile): mismatch language (#15141) 2025-01-07 17:02:52 +00:00
Alex
d0ec24ef08 chore(mobile): translations update (#15139)
chore(mobile): translation update
2025-01-07 16:52:25 +00:00
David Koňařík
fa0b352bd0 feat: "add to album" shortcut and generic menu option shortcuts (#15056)
* Add shortcut prop to MenuOption

* Add "add to album" shortcut in photo grid
2025-01-07 10:29:22 -06:00
John Stef
c148a28a82 fix(mobile): fix text search (#14873)
* fix(mobile): fix text search

* chore(mobile): add tests for SearchPage

* fix(mobile): fix render overflow for small screens

Needed for SearchPage test to not throw overflow error

* chore(mobile): update import_rule_openapi

* styling

* preserve styling and skip a test

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-07 16:26:14 +00:00
Zack Pollard
776be7d205 fix: reverse geocoding data import don't use unlogged tables (#15136) 2025-01-07 15:36:07 +00:00
Alex
c937097db4 chore(mobile): add new language locales (#15138)
chore(mobile): add new languages locale
2025-01-07 15:30:52 +00:00
Jordan
ff7a66a2c5 docs: add warning about superuser requirement for automated database backups. (#15045)
Add warning about superuser requirement for automated database backups.
2025-01-07 09:04:04 -06:00
Jason Rasmussen
9bc13aca7c chore: use 307 for redirects (#15119) 2025-01-06 17:51:18 -05:00
Ovidijus R
a13b7b364e feat(mobile): add ability to force view original videos (#15094) 2025-01-06 15:29:47 -05:00
scottdesilva
1f0ffd634a fix(server): unit test for creating tag with color (#15120)
* Pass color to tag repo on creation

* unit test for creating tag with optional color
2025-01-06 13:33:48 -06:00
scottdesilva
c78e9d6ad5 fix(server): save color when creating tag (#15106)
Pass color to tag repo on creation
2025-01-06 12:21:55 -05:00
loowiz
6fd9f93375 docs: Add disable iOS low power mode suggestion (#15110)
* docs: Add disable iOS low power mode suggestion

Just added the suggestion under "Why is background backup on iOS not working?" to also disable low power mode.
I've seen so many people who just have low power mode permanently on, but this can affect background app refresh (https://support.apple.com/en-us/101604)

* Update FAQ.mdx

* Make wording more consistent in docs/docs/FAQ.mdx

Co-authored-by: Alex <alex.tran1502@gmail.com>

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-06 15:38:36 +00:00
Matthew Momjian
e7667a7896 docs: warning for LXC use (#15071)
warn for LXC use
2025-01-05 16:10:00 -05:00
Matthew Momjian
a81fb73faf feat(docs): additional corruption checks (#15102)
corruption checks
2025-01-05 18:03:53 +00:00
Buan
6a9d57ad33 docs: update Spanish README (#15081)
* Update README_es_ES.md

* Add Traduction and activity section, and corrected a string
2025-01-04 13:00:46 -06:00
Mattia Natali
d29bdd6308 feat(web): Swipe down shows slideshow controlbar on mobile (#15080)
Swipe down show slideshow controlbar on mobile
2025-01-04 18:18:05 +00:00
Mert
fcd372238f chore(server): add support for .m2t (#15064)
* add m2t

* ordering
2025-01-03 16:28:32 -06:00
Arno
b45ff8d09f feat(web): Enable selection interactions in folder view (#15049)
* feat(web): Enable selection interactions in folder view

* feat(web): Add link to parent folder in detail pane, if folders are enabled

* Added invalidation and refreshing of asset cache on changes

* fix: removed unused imports and changed link

* chore: styling

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-01-03 16:09:31 +00:00
mehring
007caa26bd chore(web): remove tree item thumbnail class 'max-h-[500px]' (#14901)
* fix tree item thumbnail class 'max-h-[500px]'

* fix tag/folder navigation bar on the top all the time.
2025-01-02 12:14:44 -06:00
pyorot
c792f72469 chore(web): transcoding settings cleanup (#14765)
* rearrangement only

* add accordions (requiring new localisation keys)

* localisation string adjustments

* capitalisation fix in existing code

* suggestions from @mertalev + revert accidental EOF \n deletion

* linting

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-02 10:38:33 -06:00
waclaw66
d19a749903 fix(mobile): album tile translation and consolidation with card appereance (#15032)
fix(mobile): album tile translation and consolidation with card

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-01-02 10:19:55 -06:00
Alex
6239365f68 chore(docs): clean up and add new content (#15003)
* wip: Install

* wip: sharing

* wip: features

* wip: features

* wip: tags and folder view

* update links

* fix: broken reference to page sections

* pr feedback

* Update docs/docs/overview/comparison.md

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>

* webp

* webp is glory

* webp is glory

---------

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-01-02 10:04:14 -06:00
Ionuț Ciocîrlan
8641ab82e1 fix(web): fix input autofocus (#15028)
applies to tag creation modal, and possibly other places
2025-01-02 09:02:03 -06:00
Deluxe-7
6e78499fc9 chore(docs): Updated the docker-compose.mdx to account for additional bugs. (#15026)
Updated the docker-compose.mdx to account for another bug

I have found that receiving a permission denied error is likely due to the Docker engine not being installed.
2025-01-02 09:01:43 -06:00
bo0tzz
dbd10e4704 chore: add clarifying warning to backup page (#15000)
* chore: add clarifying warning to backup page

* add extra note
2025-01-02 09:01:29 -06:00
bo0tzz
953a643922 fix(docs): roadmap ordering (#15034)
Followup for #15023
2025-01-02 15:01:10 +00:00
bo0tzz
3e456dcb45 chore: add sub-path warning to reverse proxy docs (#15039) 2025-01-02 15:00:53 +00:00
Chuckame
3c35b467f4 feat(server): use the earliest date between file creation and modification timestamps when missing exif tags (#14874)
* feat(server): Use the earliest date between file creation and modification timestamps when missing exif tags

* PR fixes

* PR fixes

* Switch log to debug

* fix linter for min date

* apply prettier
2025-01-02 04:50:15 +00:00
Tom Graham
5111ceffac fix(mobile): playing a live photo causes the gallery to redraw the wrong image (#15027)
Fixed an issue where playing a motion video caused the gallery to re-render on the wrong image.

Co-authored-by: Tom graham <tomg@questps.com.au>
2025-01-01 22:46:06 -06:00
Matthew Momjian
4d6d5537b7 fix(docs): discourage docker desktop (#15020)
* discourage docker desktop

* callout *nix OS as supported

* change order, clarify mac
2025-01-01 19:58:53 -05:00
Matthew Momjian
fabf878637 fix(docs): month (#15024)
why is the date index at 0??
2025-01-01 18:34:01 -06:00
Matthew Momjian
efa24d26e6 fix(docs): push roadmap for 2025 (#15023)
* update roadmap.

* oops
2025-01-01 18:17:13 -06:00
Landon Thull
8fd5cdafd4 fix: spelling error in facial recognition docs (#15011) 2025-01-01 12:26:00 +00:00
jon6fingrs
ccf57458c7 docs: add immich-dl to community projects (#15005) 2025-01-01 12:25:25 +00:00
Felix Bühler
4448143197 chore(docs): add reference to metric ports (#14887)
chore(docs): add refference to metric ports
2024-12-28 17:49:06 -05:00
mehring
34ce61d03a feat(web): create tag on the fly (#14726) 2024-12-27 17:29:57 +00:00
Lukas
0250a7a23a fix(web): Fix for failing to load pictures (#14943)
* attempt at fix for failing to load pictures

* comments

* remove unused files

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-12-27 16:16:07 +00:00
renovate[bot]
b91f39d1af chore(deps): update base-image to v20241224 (major) (#14905)
chore(deps): update base-image to v20241224

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-27 09:51:42 -06:00
Daniel Dietzler
139090715e fix: trusted proxies (#14888) 2024-12-27 09:51:07 -06:00
Sam Debruyn
05cea0fc69 chore(mobile): remove duplicate settingsservice (#14946)
remove duplicate settingsservice
2024-12-27 09:45:23 -06:00
Yaros
2255f3e966 feat(mobile): Modified draggable area of detail modal (#14953)
Modified draggable area of detail modal
2024-12-27 09:28:54 -06:00
Yaros
2be1cb7de2 fix(mobile): Fixed resolution format in Details (#14954)
Fixed resolution format on mobile
2024-12-27 09:20:07 -06:00
indam
227eb4b0a6 docs: Update Chinese README (#14926)
* Update Chinese README

* retrigger checks
2024-12-25 08:09:47 -05:00
bo0tzz
23461e98fb fix: clarify PR label validation message (#14925) 2024-12-25 08:07:52 -05:00
renovate[bot]
ef0070c3fd fix(deps): update machine-learning (#14891) 2024-12-23 20:04:55 -05:00
renovate[bot]
6b08e82cf7 fix(deps): update dependency @nestjs/swagger to v8 (#13881)
* fix(deps): update dependency @nestjs/swagger to v8

* chore: generate open api

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2024-12-23 21:03:34 +00:00
Ben
b88f98bf66 feat(web): Add "set as featured" option for an asset (#14879) 2024-12-23 12:26:53 -06:00
Jonathan Jogenfors
c3be74c450 fix(server): support import paths with special chars (#14856) 2024-12-22 16:22:16 -06:00
Jonathan Jogenfors
4bc2aa5451 feat(server): Handle sidecars in external libraries (#14800)
* handle sidecars in external libraries

* don't add separate source
2024-12-21 20:50:07 -06:00
Alex
6080e6e827 fix(web): infinite loop browser navigation crash admin settings page (#14850)
* fix(web): infinite loop browser navigation crash admin settings page

* pr feedback
2024-12-21 19:26:01 +00:00
Lukas
d5906c2efe feat(web): Adds toggle to disable sorting of faces (#14830)
* Allows for toggling of sorting in the merge face selector

* Adds toggle to the side panel for faces

* Improve layout and fix toggle

* chore: ui cleanup

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-12-21 16:53:37 +00:00
Matthew Momjian
b3821c50d7 chore(docs): FAQ cleanup (#14835)
* FAQ cleanup

* link fix

* copy paste error
2024-12-20 23:40:33 -06:00
Matthew Momjian
1cec3af98c chore(docs): fix broken link in FAQ (#14834)
broken link
2024-12-20 16:36:42 -06:00
Ben McCann
da70a1e457 chore: migrate to SvelteKit app state (#14807)
* chore: migrate to SvelteKit app state

* update package-lock.json
2024-12-20 17:18:22 -05:00
Alex
a14735846c chore(mobile): add timeout when reading video files (#14831) 2024-12-20 13:52:42 -06:00
461 changed files with 7083 additions and 2882 deletions

View File

@@ -19,3 +19,4 @@ jobs:
use_regex: true
labels: "changelog:.*"
add_comment: true
message: "Label error. Requires {{errorString}} {{count}} of: {{ provided }}. Found: {{ applied }}. A maintainer will add the required label."

6
cli/package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@immich/cli",
"version": "2.2.37",
"version": "2.2.38",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@immich/cli",
"version": "2.2.37",
"version": "2.2.38",
"license": "GNU Affero General Public License version 3",
"dependencies": {
"fast-glob": "^3.3.2",
@@ -52,7 +52,7 @@
},
"../open-api/typescript-sdk": {
"name": "@immich/sdk",
"version": "1.123.0",
"version": "1.124.0",
"dev": true,
"license": "GNU Affero General Public License version 3",
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "@immich/cli",
"version": "2.2.37",
"version": "2.2.38",
"description": "Command Line Interface (CLI) for Immich",
"type": "module",
"exports": "./dist/index.js",

View File

@@ -49,6 +49,7 @@ The behaviors differ based on your device manufacturer and operating system, but
On iOS (iPhone and iPad), the operating system determines if a particular app can invoke background tasks based on multiple factors, most of which the Immich app has no control over. To increase the likelihood that the background backup task is run, follow the steps below:
- Enable Background App Refresh for Immich in the iOS settings at `Settings > General > Background App Refresh`.
- Disable **Low Power Mode** when not needed, as this can prevent apps from running in the background.
- Disable Background App Refresh for apps that don't need background tasks to run. This will reduce the competition for background task invocation for Immich.
- Use the Immich app more often.
@@ -69,7 +70,8 @@ However, Immich will delete original files that have been trashed when the trash
### Why do my file names appear as a random string in the file manager?
When Storage Template is off (default) Immich saves the file names in a random string (also known as random UUIDs) to prevent duplicate file names. To retrieve the original file names, you must enable the Storage Template and then run the STORAGE TEMPLATE MIGRATION job.
When Storage Template is off (default) Immich saves the file names in a random string (also known as random UUIDs) to prevent duplicate file names.
To retrieve the original file names, you must enable the Storage Template and then run the STORAGE TEMPLATE MIGRATION job.
It is recommended to read about [Storage Template](https://immich.app/docs/administration/storage-template) before activation.
### Can I add my existing photo library?
@@ -82,11 +84,20 @@ Template changes will only apply to _new_ assets. To retroactively apply the tem
### Why are only photos and not videos being uploaded to Immich?
This often happens when using a reverse proxy (such as Nginx or Cloudflare tunnel) in front of Immich. Make sure to set your reverse proxy to allow large `POST` requests. In `nginx`, set `client_max_body_size 50000M;` or similar. Also, check the disk space of your reverse proxy. In some cases, proxies cache requests to disk before passing them on, and if disk space runs out, the request fails.
This often happens when using a reverse proxy in front of Immich.
Make sure to [set your reverse proxy](/docs/administration/reverse-proxy/) to allow large requests.
Also, check the disk space of your reverse proxy.
In some cases, proxies cache requests to disk before passing them on, and if disk space runs out, the request fails.
If you are using Cloudflare Tunnel, please know that they set a maxiumum filesize of 100 MB that cannot be changed.
At times, files larger than this may work, potentially up to 1 GB. However, the official limit is 100 MB.
If you are having issues, we recommend switching to a different network deployment.
### Why are some photos stored in the file system with the wrong date?
There are a few different scenarios that can lead to this situation. The solution is to rerun the storage migration job. The job is only automatically run once per asset after upload. If metadata extraction originally failed, the jobs were cleared/canceled, etc., the job may not have run automatically the first time.
There are a few different scenarios that can lead to this situation. The solution is to rerun the storage migration job.
The job is only automatically run once per asset after upload. If metadata extraction originally failed, the jobs were cleared/canceled, etc.,
the job may not have run automatically the first time.
### How can I hide photos from the timeline?
@@ -116,7 +127,8 @@ Also, there are additional jobs for person (face) thumbnails.
### Why do files from WhatsApp not appear with the correct date?
Files sent on WhatsApp are saved without metadata on the file. Therefore, Immich has no way of knowing the original date of the file when files are uploaded from WhatsApp, not the order of arrival on the device. [See #3527](https://github.com/immich-app/immich/issues/3527).
Files sent on WhatsApp are saved without metadata on the file. Therefore, Immich has no way of knowing the original date of the file when files are uploaded from WhatsApp,
not the order of arrival on the device. [See #9116](https://github.com/immich-app/immich/discussions/9116).
### What happens if an asset exists in more than one account?
@@ -191,7 +203,7 @@ Immich uses CLIP models. An ML model converts each image to an "embedding", whic
### How does facial recognition work?
See [How Facial Recognition Works](/docs/features/facial-recognition#How-Facial-Recognition-Works) for details.
See [How Facial Recognition Works](/docs/features/facial-recognition#how-facial-recognition-works) for details.
### How can I disable machine learning?
@@ -213,7 +225,7 @@ No, this is not supported. Only models listed in the [Hugging Face][huggingface]
### I want to be able to search in other languages besides English. How can I do that?
You can change to a multilingual CLIP model. See [here](/docs/features/smart-search#CLIP-model) for instructions.
You can change to a multilingual CLIP model. See [here](/docs/features/searching#clip-model) for instructions.
### Does Immich support Facial Recognition for videos?
@@ -224,7 +236,7 @@ Scanning the entire video for faces may be implemented in the future.
No.
:::tip
You can use [Smart Search](/docs/features/smart-search.md) for this to some extent. For example, if you have a Golden Retriever and a Chihuahua, type these words in the smart search and watch the results.
You can use [Smart Search](/docs/features/searching.md) for this to some extent. For example, if you have a Golden Retriever and a Chihuahua, type these words in the smart search and watch the results.
:::
### I'm getting a lot of "faces" that aren't faces, what can I do?
@@ -308,7 +320,7 @@ Do not exaggerate with the job concurrency because you're probably thoroughly ov
### My server shows Server Status Offline | Version Unknown. What can I do?
You need to enable WebSockets on your reverse proxy.
You need to [enable WebSockets](/docs/administration/reverse-proxy/) on your reverse proxy.
---
@@ -339,7 +351,7 @@ The non-root user/group needs read/write access to the volume mounts, including
The Docker Compose top level volume element does not support non-root access, all of the above volumes must be local volume mounts.
:::
For a further hardened system, you can add the following block to every container except for `immich_postgres`.
For a further hardened system, you can add the following block to every container.
<details>
<summary>docker-compose.yml</summary>
@@ -388,22 +400,21 @@ If the error says the worker is exiting, then this is normal. This is a feature
There are a few reasons why this can happen.
If the error mentions SIGKILL or error code 137, it most likely means the service is running out of memory. Consider either increasing the server's RAM or moving the service to a server with more RAM.
If the error mentions SIGKILL or error code 137, it most likely means the service is running out of memory.
Consider either increasing the server's RAM or moving the service to a server with more RAM.
If it mentions SIGILL (note the lack of a K) or error code 132, it most likely means your server's CPU is incompatible. This is unlikely to occur on version 1.92.0 or later. Consider upgrading if your version of Immich is below that.
If your version of Immich is below 1.92.0 and the crash occurs after logs about tracing or exporting a model, consider either upgrading or disabling the Tag Objects job.
If it mentions SIGILL (note the lack of a K) or error code 132, it most likely means your server's CPU is incompatible with Immich.
## Database
### Why am I getting database ownership errors?
If you get database errors such as `FATAL: data directory "/var/lib/postgresql/data" has wrong ownership` upon database startup, this is likely due to an issue with your filesystem.
NTFS and ex/FAT/32 filesystems are not supported. See [here](/docs/install/environment-variables#supported-filesystems) for more details.
NTFS and ex/FAT/32 filesystems are not supported. See [here](/docs/install/requirements#special-requirements-for-windows-users) for more details.
### How can I verify the integrity of my database?
If you installed Immich using v1.104.0 or later, you likely have database checksums enabled by default. You can check this by running the following command.
Database checksums are enabled by default for new installations since v1.104.0. You can check if they are enabled by running the following command.
A result of `on` means that checksums are enabled.
<details>
@@ -419,7 +430,7 @@ docker exec -it immich_postgres psql --dbname=immich --username=<DB_USERNAME> --
</details>
If checksums are enabled, you can check the status of the database with the following command. A normal result is all zeroes.
If checksums are enabled, you can check the status of the database with the following command. A normal result is all `0`s.
<details>
<summary>Check for database corruption</summary>
@@ -437,6 +448,24 @@ docker exec -it immich_postgres psql --dbname=immich --username=<DB_USERNAME> --
</details>
You can also scan the Postgres database file structure for errors:
<details>
<summary>Scan for file structure errors</summary>
```bash
docker exec -it immich_postgres pg_amcheck --username=postgres --heapallindexed --parent-check --rootdescend --progress --all --install-missing
```
A normal result will end something like this and return with an exit code of `0`:
```bash
7470/8832 relations (84%), 730829/734735 pages (99%)
8425/8832 relations (95%), 734367/734735 pages (99%)
8832/8832 relations (100%), 734735/734735 pages (100%)
```
</details>
If corruption is detected, you should immediately make a backup before performing any other work in the database.
To do so, you may need to set the `zero_damaged_pages=on` flag for the database server to allow `pg_dumpall` to succeed.
After taking a backup, the recommended next step is to restore the database from a healthy backup before corruption was detected.

View File

@@ -5,6 +5,10 @@ import TabItem from '@theme/TabItem';
A [3-2-1 backup strategy](https://www.backblaze.com/blog/the-3-2-1-backup-strategy/) is recommended to protect your data. You should keep copies of your uploaded photos/videos as well as the Immich database for a comprehensive backup solution. This page provides an overview on how to backup the database and the location of user-uploaded pictures and videos. A template bash script that can be run as a cron job is provided [here](/docs/guides/template-backup-script.md)
:::danger
The instructions on this page show you how to prepare your Immich instance to be backed up, and which files to take a backup of. You still need to take care of using an actual backup tool to make a backup yourself.
:::
## Database
:::caution
@@ -21,7 +25,8 @@ It is not recommended to directly backup the `DB_DATA_LOCATION` folder. Doing so
### Automatic Database Backups
Immich will automatically create database backups by default. The backups are stored in `UPLOAD_LOCATION/backups`.
For convenience, Immich will automatically create database backups by default. The backups are stored in `UPLOAD_LOCATION/backups`.
As mentioned above, you should make your own backup of these together with the asset folders as noted below.
You can adjust the schedule and amount of kept backups in the [admin settings](http://my.immich.app/admin/system-settings?isOpen=backup).
By default, Immich will keep the last 14 backups and create a new backup every day at 2:00 AM.

View File

@@ -18,10 +18,10 @@ You can use [this guide](/docs/guides/smtp-gmail) to use Gmail's SMTP server.
Users can manage their email notification settings from their account settings page on the web. They can choose to turn email notifications on or off for the following events:
<img src={require('./img/user-notifications-settings.png').default} width="80%" title="User notification settings" />
<img src={require('./img/user-notifications-settings.webp').default} width="80%" title="User notification settings" />
## Notification templates
You can override the default notification text with custom templates in HTML format. You can use tags to show dynamic tags in your templates.
<img src={require('./img/user-notifications-templates.png').default} width="80%" title="User notification templates" />
<img src={require('./img/user-notifications-templates.webp').default} width="80%" title="User notification templates" />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -48,8 +48,4 @@ When a new asset is uploaded it kicks off a series of jobs, which include metada
Additionally, some jobs run on a schedule, which is every night at midnight. This schedule, with the exception of [External Libraries](/docs/features/libraries) scanning, cannot be changed.
:::info
Storage Migration job can be run after changing the [Storage Template](/docs/administration/storage-template.mdx), in order to apply the change to the existing library.
:::
<img src={require('./img/admin-jobs.webp').default} width="60%" title="Admin jobs" />

View File

@@ -42,6 +42,10 @@ Typically Immich expects superuser permission in the database, which you can gra
This method is recommended for **advanced users only** and often requires manual intervention when updating Immich.
:::
:::danger
Currently, automated backups require superuser permission due to the usage of `pg_dumpall`.
:::
Immich can run without superuser permissions by following the below instructions at the `psql` prompt to prepare the database.
```sql title="Set up Postgres for Immich"

View File

@@ -1,31 +0,0 @@
# Repair Page
:::warning
This feature is currently disabled and will be reworked in the near future.
:::
The repair page is designed to give information to the system administrator about files that are not tracked, or offline paths.
## Natural State
In this situation, everything is in its place and there is no problem that the system administrator should be aware of.
<img src={require('./img/repair-page.png').default} title="server statistic" />
## Any Other Situation
:::note RAM Usage
Several users report a situation where the page fails to load. In order to solve this problem you should try to allocate more RAM to Immich, if the problem continues, you should stop using the reverse proxy while loading the page.
:::
In any other situation, there are 3 different options that can appear:
- MATCHES - These files are matched by their checksums.
- OFFLINE PATHS - These files are the result of manually deleting files from immich or a failed file move in the past (losing track of a file).
- UNTRACKED FILES - These files are not tracked by the application. They can be the result of failed moves, interrupted uploads, or left behind due to a bug.
In addition, you can download the information from a page, mark everything (in order to check hashing) and correct the problem if a match is found in the hashing.
<img src={require('./img/repair-page-1.png').default} title="server statistic" />

View File

@@ -6,6 +6,10 @@ Users can deploy a custom reverse proxy that forwards requests to Immich. This w
The Repair page can take a long time to load. To avoid server timeouts or errors, we recommend specifying a timeout of at least 10 minutes on your proxy server.
:::
:::caution
Immich does not support being served on a sub-path such as `location /immich {`. It has to be served on the root path of a (sub)domain.
:::
### Nginx example config
Below is an example config for nginx. Make sure to set `public_url` to the front-facing URL of your instance, and `backend_url` to the path of the Immich server.

View File

@@ -1,13 +1,9 @@
# Server Stats
Server statistics to show the total number of videos, photos, and usage per user.
:::info
If a storage quota has been defined for the user, the usage number will be displayed as a percentage of the total storage quota allocated to them.
:::
Server statistics to show the total number of videos, photos, usage and quota per user.
:::info External library
External libraries are not included in the storage quota.
External libraries are not included in the storage quota due to custom mount points.
:::
<img src={require('./img/server-stats.png').default} title="server statistic" />
<img src={require('./img/server-stats.webp').default} title="server statistic" />

View File

@@ -1,10 +1,6 @@
# System Settings
On the system settings page, the administrator can manage global settings for the Immich instance.
:::note
Viewing and modifying the system settings is restricted to the Administrator.
:::
The admin user can manage settings for the Immich instance here.
:::tip
You can always return to the default settings by clicking the `Reset to default` button.
@@ -104,8 +100,7 @@ You can choose to disable a certain type of machine learning, for example smart
### Smart Search
The [smart search](/docs/features/smart-search) settings are designed to allow the search tool to be used using [CLIP](https://openai.com/research/clip) models that [can be changed](/docs/FAQ#can-i-use-a-custom-clip-model), different models will necessarily give better results but may consume more processing power, when changing a model it is mandatory to re-run the
Smart Search job on all images to fully apply the change.
The [smart search](/docs/features/searching) settings allow you to change the [CLIP model](https://openai.com/research/clip). Larger models will typically provide [more accurate search results](https://github.com/immich-app/immich/discussions/11862) but consume more processing power and RAM. When [changing the CLIP model](/docs/FAQ#can-i-use-a-custom-clip-model) it is mandatory to re-run the Smart Search job on all images to fully apply the change.
:::info Internet connection
Changing models requires a connection to the Internet to download the model.

View File

@@ -41,7 +41,7 @@ The system administrator can see the usage quota percentage of all users in Serv
External libraries don't take up space from the storage quota.
:::
<img src={require('./img/user-quota-size.png').default} width="40%" title="Set Quota Size" />
<img src={require('./img/user-quota-size.webp').default} width="40%" title="Set Quota Size" />
## Set Storage Label For User
@@ -51,13 +51,13 @@ To apply a storage template, go to the Administration page -> click on the penci
To apply the Storage Label to previously uploaded assets, run the Storage Migration Job.
:::
<img src={require('./img/user-storage-label.png').default} width="40%" title="Delete User" />
<img src={require('./img/user-storage-label.webp').default} width="40%" title="Delete User" />
## Password Reset
To reset a user's password, click the pencil icon to edit a user, then click "Reset Password". The user's password will be reset to random password and they have to change it next time the sign in.
<img src={require('./img/user-management-update.png').default} width="40%" title="Reset Password" />
<img src={require('./img/user-management-update.webp').default} width="40%" title="Reset Password" />
## Delete a User
@@ -72,7 +72,7 @@ You can customize the time of the deletion of the users from the Administration
The user deletion job runs at midnight to check for users that are ready for deletion. Changes to this setting will be evaluated at the next execution.
:::
<img src={require('./img/customize-delete-user.png').default} width="80%" title="Customize Delete User" />
<img src={require('./img/customize-delete-user.webp').default} width="80%" title="Customize Delete User" />
### Immediately Remove User
@@ -80,4 +80,4 @@ You can choose to delete a user immediately by checking the box
`Queue user and assets for immediate deletion` in the deletion process, this will immediately remove the user and all assets.
This cannot be undone and the files cannot be recovered.
<img src={require('./img/immediately-remove-user.png').default} width="40%" title="Customize Delete User" />
<img src={require('./img/immediately-remove-user.webp').default} width="40%" title="Customize Delete User" />

View File

@@ -2,7 +2,7 @@
sidebar_position: 1
---
import AppArchitecture from './img/app-architecture.png';
import AppArchitecture from './img/app-architecture.webp';
import MobileArchitecture from './img/immich_mobile_architecture.svg';
# Architecture

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1,8 +1,14 @@
# Automatic Backup
A guide on how the foreground and background automatic backup works.
Immich supports uploading photos and videos from your mobile device to the server automatically.
<img src={require('./img/background-foreground-backup.png').default} width="50%" title="Foreground&Background Backup" />
---
You can enable the settings by accessing the upload options from the upload page
<img src={require('./img/backup-settings-access.webp').default} width="50%" title="Backup option selection" />
<img src={require('./img/background-foreground-backup.webp').default} width="50%" title="Foreground&Background Backup" />
## Foreground backup
@@ -10,9 +16,9 @@ If foreground backup is enabled: whenever the app is opened or resumed, it will
## Background backup
Background backup is available thanks to the contribution effort of [@fyfrey](https://github.com/fyfrey) and [@martyfuhry](https://github.com/martyfuhry).
This feature is intended for everyday use. For initial bulk uploading, please use the foreground upload feature. For more information on why background upload is not working as expected, please refer to the [FAQ](/docs/FAQ#why-does-foreground-backup-stop-when-i-navigate-away-from-the-app-shouldnt-it-transfer-the-job-to-background-backup).
If background backup is enabled. The app will periodically check if there are any new photos or videos in the selected album(s) to be uploaded to the cloud. If there are, it will upload them to the cloud in the background.
If background backup is enabled. The app will periodically check if there are any new photos or videos in the selected album(s) to be uploaded to the server. If there are, it will upload them to the cloud in the background.
:::info Note
@@ -30,7 +36,7 @@ If background backup is enabled. The app will periodically check if there are an
- You must enable **Background App Refresh** for the app to work in the background. You can enable it in the Settings app under General > Background App Refresh.
<div style={{textAlign: 'center'}}>
<img src={require('./img/background-app-refresh.png').default} width="30%" title="background-app-refresh" />
<img src={require('./img/background-app-refresh.webp').default} width="30%" title="background-app-refresh" />
</div>
:::

View File

@@ -170,4 +170,4 @@ immich upload --include-hidden --recursive directory/
The API key can be obtained in the user setting panel on the web interface.
![Obtain Api Key](./img/obtain-api-key.png)
![Obtain Api Key](./img/obtain-api-key.webp)

View File

@@ -6,15 +6,15 @@ Immich recognizes faces in your photos and videos and groups them together into
The list of people is shown in the Explore page.
<img src={require('./img/facial-recognition-1.png').default} title='Facial Recognition 1' />
<img src={require('./img/facial-recognition-1.webp').default} title='Facial Recognition 1' />
Upon clicking on a person, a list of assets that contain their face will be shown.
<img src={require('./img/facial-recognition-2.png').default} title='Facial Recognition 2' />
<img src={require('./img/facial-recognition-2.webp').default} title='Facial Recognition 2' />
The asset detail view will also show the faces that are recognized in the asset.
<img src={require('./img/facial-recognition-3.png').default} title='Facial Recognition 3' />
<img src={require('./img/facial-recognition-3.webp').default} title='Facial Recognition 3' />
## Actions
@@ -28,7 +28,7 @@ Additional actions you can do include:
It can be found from the app bar when you access the detail view of a person.
<img src={require('./img/facial-recognition-4.png').default} title='Facial Recognition 4' width="70%"/>
<img src={require('./img/facial-recognition-4.webp').default} title='Facial Recognition 4' width="70%"/>
## How Face Detection Works
@@ -77,7 +77,7 @@ There are a few different models available; the default is typically considered
### Minimum detection score
This setting affects whether a result from the face detecton model is filtered out as a false positive. It may seem tempting to set this low to detect more faces, but it can lead to false positives that are difficult to deal with and can harm facial recognition. It is strongly recommended not to go below 0.5 for this setting. Setting it to a very high number like 0.9 is also not recommended: the default is already biased toward precision, so a threshold that high leads to many undetected faces.
This setting affects whether a result from the face detection model is filtered out as a false positive. It may seem tempting to set this low to detect more faces, but it can lead to false positives that are difficult to deal with and can harm facial recognition. It is strongly recommended not to go below 0.5 for this setting. Setting it to a very high number like 0.9 is also not recommended: the default is already biased toward precision, so a threshold that high leads to many undetected faces.
After changing this setting, it will only apply to new face detection jobs. To apply the new setting to all assets, you need to re-run face detection for all assets.

View File

@@ -0,0 +1,17 @@
# Folder View
Folder view provides an additional view besides the timeline that is similar to a file explorer. It allows you to navigate through the folders and files in the library. This feature is handy for a highly curated and customized external library or a nicely configured storage template.
You can enable this feature under [`Account Settings > Features > Folder View`](https://my.immich.app/user-settings?isOpen=feature+folders)
## Enable folder view
<img src={require('./img/folder-view-enable.webp').default} width="80%" title='Folder view enable' />
## Usage
You can then navigate to the view from the sidebar to explore the folders and files in your library.
<img src={require('./img/folder-access.webp').default} width="30%" title='Folder view access' />
<img src={require('./img/folder-view-1.webp').default} width="100%" title='Folder view' />

View File

@@ -1,4 +1,4 @@
# Hardware Transcoding [Experimental]
# Hardware Transcoding
This feature allows you to use a GPU to accelerate transcoding and reduce CPU load.
Note that hardware transcoding produces significantly larger videos than software transcoding with similar settings, typically with lower quality. Using slow presets and preferring more efficient codecs can narrow this gap.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 524 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 416 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 379 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Some files were not shown because too many files have changed in this diff Show More