Compare commits

..

36 Commits

Author SHA1 Message Date
mertalev
40dd94d10d better error handling 2026-01-23 14:55:01 -05:00
mertalev
538cc926da tighten dispose 2026-01-23 14:50:27 -05:00
mertalev
a04338e5ad add extra cancellation check 2026-01-23 14:44:36 -05:00
mertalev
f1b1f90fb6 fix eviction race condition 2026-01-23 14:39:30 -05:00
mertalev
3555021173 clear cache button 2026-01-23 02:10:39 -05:00
mertalev
15c9eb12a8 bump concurrency 2026-01-23 02:10:39 -05:00
Alex
cf623a49c6 Merge branch 'main' into feat/mobile-platform-clients 2026-01-22 15:55:25 -06:00
mertalev
c531b95d54 formatting 2026-01-21 18:53:41 -05:00
mertalev
82dde1c3e7 re-enable cache 2026-01-21 18:52:32 -05:00
mertalev
fe07cf6f6d ios optimizations 2026-01-21 18:52:32 -05:00
mertalev
87a1502ef1 fast path for known content length 2026-01-21 18:52:32 -05:00
mertalev
cef5a7cf50 refactor, fix capacity handling 2026-01-21 18:52:32 -05:00
mertalev
9980d06f0c embedded cronet 2026-01-21 18:52:32 -05:00
mertalev
e51547cd28 potential race conditions 2026-01-21 18:52:32 -05:00
mertalev
d898cba04d refactor 2026-01-21 18:52:32 -05:00
mertalev
fd89607142 fixed locking 2026-01-21 18:52:32 -05:00
mertalev
95fad974c1 optimized http 2026-01-21 18:52:32 -05:00
mertalev
00ea98479f flutter-side decode 2026-01-21 18:52:32 -05:00
mertalev
24ff08e094 set user agent 2026-01-21 18:52:32 -05:00
mertalev
495cd8a6de enable disk cache 2026-01-21 18:52:32 -05:00
mertalev
f98b441100 clarify parameter 2026-01-21 18:52:32 -05:00
mertalev
e739aa1667 conditional cronet 2026-01-21 18:52:32 -05:00
mertalev
d83e74dc88 lock approach is slower on ios 2026-01-21 18:52:32 -05:00
mertalev
06467f2c0d memory optimization 2026-01-21 18:52:32 -05:00
mertalev
957ee84636 android impl 2026-01-21 18:52:32 -05:00
mertalev
8ad93ab4b1 remove incremental 2026-01-21 18:52:32 -05:00
mertalev
89f9c136ac optimized decoding 2026-01-21 18:52:32 -05:00
mertalev
4ec0d6df9a disable disk cache by default 2026-01-21 18:52:32 -05:00
mertalev
6cba10513b unrelated change 2026-01-21 18:52:32 -05:00
mertalev
2d4ee03c5b move to bootstrap 2026-01-21 18:52:31 -05:00
mertalev
6e956bfe4c set defaults 2026-01-21 18:52:31 -05:00
mertalev
1e0e0d8066 init before app launch 2026-01-21 18:52:31 -05:00
mertalev
66a0e04489 custom user agent 2026-01-21 18:52:31 -05:00
mertalev
9cae61851c fix hot reload 2026-01-21 18:52:31 -05:00
mertalev
34f7e07be9 uppercase http method 2026-01-21 18:52:31 -05:00
mertalev
e098a8261e platform clients 2026-01-21 18:52:29 -05:00
358 changed files with 3700 additions and 21941 deletions

View File

@@ -178,12 +178,9 @@ jobs:
contents: read
# Run on main branch or workflow_dispatch, or on PRs/other branches (build only, no upload)
if: ${{ !github.event.pull_request.head.repo.fork && fromJSON(needs.pre-job.outputs.should_run).mobile == true }}
runs-on: macos-15
runs-on: macos-latest
steps:
- name: Select Xcode 26
run: sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer
- name: Checkout code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
with:
@@ -269,8 +266,6 @@ jobs:
ENVIRONMENT: ${{ inputs.environment || 'development' }}
BUNDLE_ID_SUFFIX: ${{ inputs.environment == 'production' && '' || 'development' }}
GITHUB_REF: ${{ github.ref }}
FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 120
FASTLANE_XCODEBUILD_SETTINGS_RETRIES: 6
working-directory: ./mobile/ios
run: |
# Only upload to TestFlight on main branch

View File

@@ -24,11 +24,10 @@ jobs:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
packages: write
defaults:
run:
working-directory: ./cli
steps:
- id: token
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
@@ -58,8 +57,10 @@ jobs:
- run: pnpm install --frozen-lockfile
- run: pnpm build
- run: pnpm publish --provenance --no-git-checks
- run: pnpm publish --no-git-checks
if: ${{ github.event_name == 'release' }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
docker:
name: Docker

View File

@@ -109,6 +109,12 @@ jobs:
APP_STORE_CONNECT_API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY }}
IOS_CERTIFICATE_P12: ${{ secrets.IOS_CERTIFICATE_P12 }}
IOS_CERTIFICATE_PASSWORD: ${{ secrets.IOS_CERTIFICATE_PASSWORD }}
IOS_PROVISIONING_PROFILE: ${{ secrets.IOS_PROVISIONING_PROFILE }}
IOS_PROVISIONING_PROFILE_SHARE_EXTENSION: ${{ secrets.IOS_PROVISIONING_PROFILE_SHARE_EXTENSION }}
IOS_PROVISIONING_PROFILE_WIDGET_EXTENSION: ${{ secrets.IOS_PROVISIONING_PROFILE_WIDGET_EXTENSION }}
IOS_DEVELOPMENT_PROVISIONING_PROFILE: ${{ secrets.IOS_DEVELOPMENT_PROVISIONING_PROFILE }}
IOS_DEVELOPMENT_PROVISIONING_PROFILE_SHARE_EXTENSION: ${{ secrets.IOS_DEVELOPMENT_PROVISIONING_PROFILE_SHARE_EXTENSION }}
IOS_DEVELOPMENT_PROVISIONING_PROFILE_WIDGET_EXTENSION: ${{ secrets.IOS_DEVELOPMENT_PROVISIONING_PROFILE_WIDGET_EXTENSION }}
FASTLANE_TEAM_ID: ${{ secrets.FASTLANE_TEAM_ID }}
with:

View File

@@ -12,8 +12,6 @@ jobs:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
packages: write
defaults:
run:
working-directory: ./open-api/typescript-sdk
@@ -44,4 +42,6 @@ jobs:
- name: Build
run: pnpm build
- name: Publish
run: pnpm publish --provenance --no-git-checks
run: pnpm publish --no-git-checks
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

View File

@@ -504,22 +504,16 @@ jobs:
CI: true
run: npx playwright test --project=chromium
if: ${{ !cancelled() }}
- name: Archive web results
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
if: success() || failure()
with:
name: e2e-web-test-results-${{ matrix.runner }}
path: e2e/playwright-report/
- name: Run ui tests (web)
env:
CI: true
run: npx playwright test --project=ui
if: ${{ !cancelled() }}
- name: Archive ui results
- name: Archive test results
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
if: success() || failure()
with:
name: e2e-ui-test-results-${{ matrix.runner }}
name: e2e-web-test-results-${{ matrix.runner }}
path: e2e/playwright-report/
success-check-e2e:
name: End-to-End Tests Success

View File

@@ -36,7 +36,7 @@ jobs:
github-token: ${{ steps.token.outputs.token }}
filters: |
i18n:
- modified: 'i18n/!(en|package)**\.json'
- modified: 'i18n/!(en)**\.json'
skip-force-logic: 'true'
enforce-lock:

View File

@@ -1,6 +1,6 @@
{
"name": "@immich/cli",
"version": "2.5.1",
"version": "2.2.105",
"description": "Command Line Interface (CLI) for Immich",
"type": "module",
"exports": "./dist/index.js",
@@ -20,7 +20,7 @@
"@types/lodash-es": "^4.17.12",
"@types/micromatch": "^4.0.9",
"@types/mock-fs": "^4.13.1",
"@types/node": "^24.10.9",
"@types/node": "^24.10.8",
"@vitest/coverage-v8": "^3.0.0",
"byte-size": "^9.0.0",
"cli-progress": "^3.12.0",

View File

@@ -2,8 +2,6 @@
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import { mdiAlertCircle, mdiCheckCircle } from '@mdi/js';
import Icon from '@mdi/react';
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](/guides/template-backup-script.md)
@@ -13,127 +11,47 @@ The instructions on this page show you how to prepare your Immich instance to be
## Database
Immich stores [file paths](https://github.com/immich-app/immich/discussions/3299) and user metadata in the database. It does not scan the library folder, so database backups are essential.
### Automatic Database Backups
Immich automatically creates database backups for disaster-recovery purposes. These backups are stored in `UPLOAD_LOCATION/backups` and can be managed through the web interface.
You can adjust the backup schedule and retention settings in **Administration > Settings > Backup** (default: keep last 14 backups, create daily at 2:00 AM).
:::caution
Database backups do **not** contain photos or videos — only metadata. They must be used together with a copy of the files in `UPLOAD_LOCATION` as outlined below.
Immich saves [file paths in the database](https://github.com/immich-app/immich/discussions/3299), it does not scan the library folder to update the database so backups are crucial.
:::
#### Creating a Backup
You can trigger a database backup manually:
1. Go to **Administration > Job Queues**
2. Click **Create job** in the top right
3. Select **Create Database Backup** and click **Confirm**
The backup will appear in `UPLOAD_LOCATION/backups` and counts toward your retention limit.
### Restoring a Database Backup
Immich provides two ways to restore a database backup: through the web interface or via the command line. The web interface is the recommended method for most users.
#### Restore from Settings {#restore-from-settings}
If you have an existing Immich installation:
<img
src={require('./img/restore-from-settings.webp').default}
title="Restore from settings"
/>
1. Go to **Administration > Maintenance**
2. Expand the **Restore database backup** section
3. You'll see a list of available backups with their version and creation date
4. Click **Restore** next to the backup you want to restore
5. Confirm the restore operation
:::info
Restoring a backup will wipe the current database and replace it with the backup. A restore point is automatically created before the operation begins, allowing rollback if the restore fails.
Refer to the official [postgres documentation](https://www.postgresql.org/docs/current/backup.html) for details about backing up and restoring a postgres database.
:::
#### Restore from Onboarding {#restore-from-onboarding}
If you're setting up Immich on a fresh installation and want to restore from an existing backup:
1. Download and populate `.env` and `docker-compose.yml` as per the [installation instructions](/install/docker-compose).
2. Move the previous's instance data directories containing `backups`, `encoded-video`, `library`, `profile`, `thumbs` and `upload` into the new `UPLOAD_LOCATION`
3. **(For external libraries)** If you used external library feature in your previous instance, make sure that the mount settings in your new `docker-compose.yml` reflect the same structure. You may need to move files accordingly.
:::info Example
Assuming your previous `UPLOAD_LOCATION` was `UPLOAD_LOCATION=/my-broken-instance/media` and your new one is `UPLOAD_LOCATION=/a-brand-new-instance/data`, you will need to perform the following file moves:
```
/my-broken-instance/media/backups -> /a-brand-new-instance/data/backups
/my-broken-instance/media/encoded-video -> /a-brand-new-instance/data/encoded-video
/my-broken-instance/media/library -> /a-brand-new-instance/data/library
/my-broken-instance/media/profile -> /a-brand-new-instance/data/profile
/my-broken-instance/media/thumbs -> /a-brand-new-instance/data/thumbs
/my-broken-instance/media/upload -> /a-brand-new-instance/data/upload
```
:::caution
It is not recommended to directly backup the `DB_DATA_LOCATION` folder. Doing so while the database is running can lead to a corrupted backup that cannot be restored.
:::
4. Start the Immich services with `docker compose up -d`
<img
src={require('./img/restore-from-onboarding.webp').default}
title="Restore from onboarding"
/>
5. On the welcome screen, click **Restore from backup**
6. Immich will enter maintenance mode and display integrity checks for your storage folders
7. Review the folder status to ensure your library files are accessible
8. Click **Next** to proceed to backup selection
9. Select a backup from the list or upload a backup file (`.sql.gz`)
10. Click **Restore** to begin the restoration process
:::tip
Before restoring, ensure your `UPLOAD_LOCATION` folders contain the same files that existed when the backup was created. The integrity check will show you which folders are readable/writable and how many files they contain.
:::
### Uploading a Backup File {#uploading-backup}
You can upload a database backup file directly:
1. In the **Restore database backup** section, click **Select from computer**
2. Choose a `.sql.gz` file
3. The uploaded backup will appear in the list with an `uploaded-` prefix
4. Click **Restore** to restore from the uploaded file
### Backup Version Compatibility {#backup-compatibility}
When viewing backups, Immich displays compatibility indicators based on the current version and the information from the filename:
- <Icon path={mdiCheckCircle} size={1} color="green"/> Backup version matches current Immich version
- <Icon path={mdiAlertCircle} size={1} color="#feb001"/> Backup was created with a different Immich version
- <Icon path={mdiAlertCircle} size={1} color="red"/> Could not determine backup version
### Automatic Database Dumps
:::warning
Restoring a backup from a different Immich version may require database migrations. The restore process will attempt to run migrations automatically, but you should ensure you're restoring to a compatible version when possible.
The automatic database dumps can be used to restore the database in the event of damage to the Postgres database files.
There is no monitoring for these dumps and you will not be notified if they are unsuccessful.
:::
### Restore Process {#restore-process}
:::caution
The database dumps do **NOT** contain any pictures or videos, only metadata. They are only usable with a copy of the other files in `UPLOAD_LOCATION` as outlined below.
:::
During restoration, Immich will:
For disaster-recovery purposes, Immich will automatically create database dumps. The dumps are stored in `UPLOAD_LOCATION/backups`.
Please be sure to make your own, independent backup of the database together with the asset folders as noted below.
You can adjust the schedule and amount of kept database dumps in the [admin settings](http://my.immich.app/admin/system-settings?isOpen=backup).
By default, Immich will keep the last 14 database dumps and create a new dump every day at 2:00 AM.
1. Create a backup of the current database (restore point)
2. Restore the selected backup
3. Run database migrations if needed
4. Perform a health check to verify the restore succeeded
#### Trigger Dump
If the restore fails (e.g., corrupted backup or missing admin user), Immich will automatically roll back to the restore point.
You are able to trigger a database dump in the [admin job status page](http://my.immich.app/admin/queues).
Visit the page, open the "Create job" modal from the top right, select "Create Database Dump" and click "Confirm".
A job will run and trigger a dump, you can verify this worked correctly by checking the logs or the `backups/` folder.
This dumps will count towards the last `X` dumps that will be kept based on your settings.
### Restore via Command Line {#restore-cli}
#### Restoring
For advanced users or automated recovery scenarios, you can restore a database backup using the command line.
We hope to make restoring simpler in future versions, for now you can find the database dumps in the `UPLOAD_LOCATION/backups` folder on your host.
Then please follow the steps in the following section for restoring the database.
### Manual Backup and Restore
<Tabs>
<TabItem value="Linux system" label="Linux system" default>
@@ -188,12 +106,10 @@ docker compose up -d # Start remainder of Immich ap
</TabItem>
</Tabs>
:::note
For the database restore to proceed properly, it requires a completely fresh install (i.e., the Immich server has never run since creating the Docker containers). If the Immich app has run, you may encounter Postgres conflicts (relation already exists, violated foreign key constraints, etc.). In this case, delete the `DB_DATA_LOCATION` folder to reset the database.
:::
Note that for the database restore to proceed properly, it requires a completely fresh install (i.e. the Immich server has never run since creating the Docker containers). If the Immich app has run, Postgres conflicts may be encountered upon database restoration (relation already exists, violated foreign key constraints, multiple primary keys, etc.), in which case you need to delete the `DB_DATA_LOCATION` folder to reset the database.
:::tip
Some deployment methods make it difficult to start the database without also starting the server. In these cases, set the environment variable `DB_SKIP_MIGRATIONS=true` before starting the services. This prevents the server from running migrations that interfere with the restore process. Remove this variable and restart services after the database is restored.
Some deployment methods make it difficult to start the database without also starting the server. In these cases, you may set the environment variable `DB_SKIP_MIGRATIONS=true` before starting the services. This will prevent the server from running migrations that interfere with the restore process. Be sure to remove this variable and restart the services after the database is restored.
:::
## Filesystem
@@ -241,14 +157,17 @@ for more info read the [release notes](https://github.com/immich-app/immich/rele
- **Encoded Assets:**
- Videos that have been re-encoded from the original for wider compatibility. The original is not removed.
- Stored in `UPLOAD_LOCATION/encoded-video/<userID>`.
- **Database Dump Backups:**
- Automatic database backups created by Immich for disaster recovery.
- Stored in `UPLOAD_LOCATION/backups/`.
- **Postgres**
- The Immich database containing all the information to allow the system to function properly.
**Note:** This folder will only appear to users who have made the changes mentioned in [v1.102.0](https://github.com/immich-app/immich/discussions/8930) (an optional, non-mandatory change) or who started with this version.
- Stored in `DB_DATA_LOCATION`.
:::danger
A backup of this folder does not constitute a backup of your database!
Follow the instructions listed [here](/administration/backup-and-restore#database) to learn how to perform a proper backup.
:::
</TabItem>
<TabItem value="Storage Template On" label="Storage Template On">
@@ -284,14 +203,16 @@ When you turn off the storage template engine, it will leave the assets in `UPLO
- Files uploaded through mobile apps.
- Temporarily located in `UPLOAD_LOCATION/upload/<userID>`.
- Transferred to `UPLOAD_LOCATION/library/<userID>` upon successful upload.
- **Database Dump Backups:**
- Automatic database backups created by Immich for disaster recovery.
- Stored in `UPLOAD_LOCATION/backups/`.
- **Postgres**
- The Immich database containing all the information to allow the system to function properly.
**Note:** This folder will only appear to users who have made the changes mentioned in [v1.102.0](https://github.com/immich-app/immich/discussions/8930) (an optional, non-mandatory change) or who started with this version.
- Stored in `DB_DATA_LOCATION`.
:::danger
A backup of this folder does not constitute a backup of your database!
Follow the instructions listed [here](/administration/backup-and-restore#database) to learn how to perform a proper backup.
:::
</TabItem>
</Tabs>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 323 KiB

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -50,7 +50,7 @@ When a new asset is uploaded it kicks off a series of jobs, which include metada
Additionally, some jobs (such as memories generation) run on a schedule, which is every night at midnight by default. To change when they run or enable/disable a job navigate to System Settings -> [Nightly Tasks Settings](https://my.immich.app/admin/system-settings?isOpen=nightly-tasks).
<img src={require('./img/admin-nightly-tasks.webp').default} width="80%" title="Admin nightly tasks" />
<img src={require('./img/admin-nightly-tasks.webp').default} width="60%" title="Admin nightly tasks" />
:::note
Some jobs ([External Libraries](/features/libraries) scanning, Database Dump) are configured in their own sections in System Settings.

View File

@@ -4,7 +4,7 @@ Maintenance mode is used to perform administrative tasks such as restoring backu
You can enter maintenance mode by either:
- Selecting "Switch to maintenance mode" in `Maintenance` tab in administration.
- Selecting "enable maintenance mode" in system settings in administration.
- Running the enable maintenance mode [administration command](./server-commands.md).
## Logging in during maintenance

View File

@@ -31,7 +31,7 @@ Admin can send a welcome email if the Email option is set, you can learn here ho
Admin can specify the storage quota for the user as the instance's admin; once the limit is reached, the user won't be able to upload to the instance anymore.
In order to select a storage quota, click on the edit user icon and enter the storage quota in GiB. You can choose an unlimited quota by leaving it empty (default).
In order to select a storage quota, click on the pencil icon and enter the storage quota in GiB. You can choose an unlimited quota by leaving it empty (default).
:::tip
The system administrator can see the usage quota percentage of all users in Server Stats page.
@@ -41,12 +41,12 @@ 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.webp').default} width="80%" title="Set Quota Size" />
<img src={require('./img/user-quota-size.webp').default} width="40%" title="Set Quota Size" />
## Set Storage Label For User
The admin can add a custom label for each user, so instead of `upload/{userId}/your-template` it will be `upload/{custom_user_label}/your-template`.
To apply a storage template, go to the `Administration > Users`, then click on the context menu button next to the user.
To apply a storage template, go to the Administration page -> click on the pencil button next to the user.
:::note
To apply the Storage Label to previously uploaded assets, run the Storage Migration Job.
:::
@@ -55,21 +55,25 @@ To apply the Storage Label to previously uploaded assets, run the Storage Migrat
## Password Reset
<img src={require('./img/user-edit-menu.webp').default} width="80%" title="Customize Delete User" />
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.
To reset a user's password, go to `Administration > Users`, then click on the context menu button next to the user, then click "Reset Password". The user's password will be reset to a random password and they have to change it next time they sign in.
<img src={require('./img/user-management-update.webp').default} width="40%" title="Reset Password" />
## Delete a User
If you need to remove a user from Immich, go to `Administration > Users`, then click on the context menu button next to the user. The user account will immediately become disabled and their library and all associated data will be removed after 7 days by default.
If you need to remove a user from Immich, head to "Administration", where users can be scheduled for deletion. The user account will immediately become disabled and their library and all associated data will be removed after 7 days by default.
<img src={require('./img/delete-user.webp').default} width="40%" title="Delete User" />
### Delete Delay
You can customize the time of the deletion of the users from `Administration -> Settings -> User Settings`.
You can customize the time of the deletion of the users from the Administration -> Settings -> User Settings.
:::info user deletion job
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.webp').default} width="80%" title="Customize Delete User" />
### Immediately Remove User
You can choose to delete a user immediately by checking the box

View File

@@ -37,8 +37,7 @@ All the services are packaged to run as with single Docker Compose command.
1. Clone the project repo.
2. Run `cp docker/example.env docker/.env`.
3. Edit `docker/.env` to provide values for the required variable `UPLOAD_LOCATION`.
4. Install dependencies - `pnpm i`
5. From the root directory, run:
4. From the root directory, run:
```bash title="Start development server"
make dev # required Makefile installed on the system.

View File

@@ -0,0 +1,42 @@
# Automatic Backup
Immich supports uploading photos and videos from your mobile device to the server automatically.
---
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
If foreground backup is enabled: whenever the app is opened or resumed, it will check if any photos or videos in the selected album(s) have yet to be uploaded to the cloud (the remainder count). If there are any, they will be uploaded.
## Background backup
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](/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 server. If there are, it will upload them to the cloud in the background.
:::info Note
#### General
- The app must be in the background for the backup worker to start running.
- If you reopen the app and the first page you see is the backup page, the counts will not reflect the background uploaded result. You have to navigate out of the page and come back to see the updated counts.
#### Android
- It is a well-known problem that some Android models are very strict with battery optimization settings, which can cause a problem with the background worker. Please visit [Don't kill my app](https://dontkillmyapp.com/) for a guide on disabling this setting on your phone.
#### iOS
- 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.webp').default} width="30%" title="background-app-refresh" />
</div>
:::

View File

@@ -188,8 +188,6 @@ immich upload --dry-run . | tail -n +6 | jq .newFiles[]
### Obtain the API Key
The API key can be obtained in the user setting panel on the web interface. You can also specify permissions for the key to limit its access.
The API key can be obtained in the user setting panel on the web interface.
![Obtain Api Key](./img/obtain-api-key.webp)
![Specify permissions for the key](./img/obtain-api-key-2.webp)

View File

@@ -1,19 +0,0 @@
# Editing
Immich supports non-destructive editing of photos. This means that any edits you make to an asset do not modify the original file, but instead create a new version of the asset with the edits applied. You can always revert back to the original asset if needed.
## Supported Edits
Currently, Immich supports the following types of edits:
- Cropping
- Rotation
- Mirroring
<img src={require('./img/web-edit-interface.webp').default} title="Web edit interface" />
## Download
When you download an edited asset, Immich provides the edited version of the asset by default. However, you can choose to download the original version if needed.
<img src={require('./img/web-edit-download.webp').default} title="Web edit download" />

View File

@@ -21,14 +21,14 @@ The asset detail view will also show the faces that are recognized in the asset.
Additional actions you can do include:
- Changing the feature photo of the person
- Setting a person's date of birth
- Merging two or more detected faces into one person
- Hiding the faces of a person from the Explore page and detail view
- Setting a person's date of birth, so that the age of the person can be shown at the time the photo was taken
- Merging two or more detected people into one person
- Favoriting a person to pin them to the top of the list
- Assigning an unrecognized face to a person
It can be found from the app bar when you access the detail view of a person.
<img src={require('./img/facial-recognition-4.webp').default} title='Facial Recognition 4' />
<img src={require('./img/facial-recognition-4.webp').default} title='Facial Recognition 4' width="70%"/>
## How Face Detection Works

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 286 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 231 KiB

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 KiB

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

View File

@@ -118,35 +118,46 @@ _Remember to run `docker compose up -d` to register the changes. Make sure you c
These actions must be performed by the Immich administrator.
- Click on your avatar in the upper right corner.
- Click on `Administration -> External Libraries`.
- Click on `Create Library`.
- Select which user owns the library, this **can not** be changed later
- You are now entering the library management page.
- Click on `Add` in the `Folders` section.
- Enter `/mnt/media/christmas-trip` then click Add.
- Click on `Edit` Library and rename it to "Christmas Trip".
- Click on your avatar in the upper right corner
- Click on Administration -> External Libraries
- Click on Create an external library
- Select which user owns the library, this can not be changed later
- Enter `/mnt/media/christmas-trip` then click Add
- Click on Save
- Click the drop-down menu on the newly created library
- Click on Scan
- Click the drop-down menu on the newly created library
- Click on Rename Library and rename it to "Christmas Trip"
NOTE: We have to use the `/mnt/media/christmas-trip` path and not the `/mnt/nas/christmas-trip` path since all paths have to be what the Docker containers see.
Next, we'll add an exclusion pattern to filter out raw files.
- Click on `Add` in the `Exclusion Patterns` section.
- Enter `**/Raw/**` and click Add.
- Click on `Scan`
- Click the drop-down menu on the newly-created Christmas library
- Click on Manage
- Click on Scan Settings
- Click on Add Exclusion Pattern
- Enter `**/Raw/**` and click save.
- Click save
- Click the drop-down menu on the newly created library
- Click on Scan
The christmas trip library will now be scanned in the background. In the meantime, let's add the videos and old photos to another library.
- Go back to `Administration -> External Libraries`.
- Click on `Create Library`.
- Select which user owns the library,
- You are now entering the library management page.
- Click on `Add` in the `Folders` section.
- Click on Create External Library.
:::note
If you get an error here, please rename the other external library to something else. This is a bug that will be fixed in a future release.
:::
- Click the drop-down menu on the newly created library
- Click Edit Import Paths
- Click on Add Path
- Enter `/mnt/media/old-pics` then click Add
- Click on `Add` in the `Folders` section.
- Click on Add Path
- Enter `/mnt/media/videos` then click Add
- Click on `Scan`
- Click on `Edit` Library and rename it to "Old videos and photos".
- Click Save
- Click on Scan
Within seconds, the assets from the old-pics and videos folders should show up in the main timeline.

View File

@@ -20,6 +20,14 @@ Below are the SHA-256 fingerprints for the certificates signing the android appl
:::
:::info Beta Program
The beta release channel allows users to test upcoming changes before they are officially released. To join the channel use the links below.
- Android: Invitation link from [web](https://play.google.com/store/apps/details?id=app.alextran.immich) or from [mobile](https://play.google.com/store/apps/details?id=app.alextran.immich)
- iOS: [TestFlight invitation link](https://testflight.apple.com/join/1vYsAa8P)
:::
## Login
<MobileAppLogin />
@@ -28,11 +36,15 @@ Below are the SHA-256 fingerprints for the certificates signing the android appl
<MobileAppBackup />
:::info
You can enable automatic backup on supported devices. For more information see [Automatic Backup](/features/automatic-backup.md).
:::
## Sync only selected photos
If you have a large number of photos on the device, and you would prefer not to backup all the photos, then it might be prudent to only backup selected photos from device to the Immich server.
First, you need to enable the Storage Indicator in your app's settings. Navigate to **<ins>Settings -> Photo Grid</ins>** and enable **`Show Storage indicator on asset tiles`**; this makes it easy to distinguish local-only assets and synced assets.
First, you need to enable the Storage Indicator in your app's settings. Navigate to **<ins>Settings -> Photo Grid</ins>** and enable **"Show Storage indicator on asset tiles"**; this makes it easy to distinguish local-only assets and synced assets.
:::note
@@ -43,8 +55,13 @@ This will enable a small cloud icon on the bottom right corner of the asset tile
:::
Now make sure that the local album is selected in the backup screen (steps 1-2 above). You can find these albums listed in **<ins>Library -> On this device</ins>**. To selectively upload photos from these albums, simply select the local-only photos and tap on the `Upload` button in the dynamic bottom menu.
Now make sure that the local album is selected in the backup screen (steps 1-2 above). You can find these albums listed in **<ins>Library -> On this device</ins>**. To selectively upload photos from these albums, simply select the local-only photos and tap on "Upload" button in the dynamic bottom menu.
<img
src={require('./img/mobile-upload-open-photo.webp').default}
width="50%"
title="Upload button on local asset preview"
/>
<img
src={require('./img/mobile-upload-selected-photos.webp').default}
width="40%"
@@ -53,46 +70,53 @@ Now make sure that the local album is selected in the backup screen (steps 1-2 a
## Free Up Space
**Free Up Space** allows you to remove local media files from your device that have already been successfully backed up to your Immich server (and are not in Immich trash). This helps reclaim storage on your mobile device without losing your memories.
The **Free Up Space** tool allows you to remove local media files from your device that have already been successfully backed up to your Immich server (and are not in the Immich trash). This helps reclaim storage on your mobile device without losing your memories.
### How it works
<img src={require('./img/free-up-space.webp').default} title="Free up space" />
1. **Configuration:**
- **Cutoff date:** Free Up Space will only look for photos and videos **on or before** this date. Photos removed from the device don't show up in other (messaging) apps and have to be shared from Immich in order to send them.
- **Keep favorites:** This works the same way `Keep albums` does. By default, favorited assets are preserved on your device.
- **Keep albums:** Hold all photos and videos in the selected albums on your device, regardless of other settings. By default, `WhatsApp` [related albums](#external-app-dependencies) are selected to be kept on the device. Assets not already on the device will not be re-downloaded.
- **Keep on device:** You can choose to restrict removal to `Always keep` **All photos** or **All videos**, regardless of other settings. This setting can hamper freeing up space significantly — with 80 GB of videos and 40 GB photos, selecting `Always keep photos` retains thousands of photos on your device.
- **Cutoff Date:** You can select a cutoff date. The tool will only look for photos and videos **on or before** this date.
- **Filter Options:** You can choose to remove **All** assets, or restrict removal to **Photos only** or **Videos only**.
- **Keep Favorites:** By default, local assets marked as favorites are preserved on your device, even if they match the cutoff date.
2. **Scan & Review:** Before any files are removed, you are presented with a review screen to verify which items will be deleted.
3. **Deletion:** Confirmed items are moved to your device's native Trash/Recycle Bin. They will be permanently removed by the OS based on your system settings (usually after 30 days).
2. **Scan & Review:** Before any files are removed, you are presented with a review screen to verify which items will be deleted and how much storage is reclamable.
3. **Deletion:** Confirmed items are moved to your device's native Trash/Recycle Bin.
:::info Android Permissions
For the smoothest experience on Android, you should grant Immich special delete privileges. Without this, you may be prompted to confirm deletion for every single image.
:::info reclaim storage
To use the reclaimed space right away, you must empty the system/gallery trash manually outside of Immich.
Go to **Immich Settings > Advanced** and enable **"Media Management Access"**.
:::
Provided the server is healthy and [backed up](/administration/backup-and-restore.md), assets removed by Free Up Space can always be accessed in the Immich app.
### iCloud Photos (iOS Users)
### iCloud Photos
If you use **iCloud Photos** alongside Immich, it is vital to understand how deletion affects your data. After using **Free Up Space**, the photo will be stored **only** on your Immich server (and your phone's "Recently Deleted" folder for 30 days).
Assets that are part of an **iCloud Shared Album** are automatically excluded from the cleanup scan because iCloud does not allow removing the items in Shared Album from the device.
If you use **iCloud Photos** alongside Immich, it is vital to understand how deletion affects your data. iCloud utilizes a two-way sync; this means deleting a photo from your iPhone to free up space will **also delete it from iCloud**.
:::warning iCloud & Backups
If, in addition to Immich, you rely on iCloud as a secondary backup (as part of your [3-2-1](https://www.backblaze.com/blog/the-3-2-1-backup-strategy/) backup strategy), you should instead use `Optimize iPhone Storage` in [iCloud Photos](https://support.apple.com/en-us/105061).
If you rely on iCloud as a secondary backup (part of a 3-2-1 backup strategy), using the Free Up Space feature in Immich will remove the file from both your phone and iCloud.
iCloud utilizes a two-way sync; this means deleting a photo, or using Free Up Space from your iPhone will **also delete it from iCloud** and all other devices (Mac, iPad) where you're signed in with the same Apple Account. See [Apple Support](https://support.apple.com/en-us/108922#iCloud_photo_library) for more info.
Once deleted, the photo will exist **only** on your Immich server (and your phone's "Recently Deleted" folder for 30 days).
When you use iCloud Photos and delete a photo or video on one device, it's also deleted on all other devices where you're signed in with the same Apple Account.
More information on the [Apple Support](https://support.apple.com/en-us/108922#iCloud_photo_library) website
**Shared Albums**
Assets that are part of an **iCloud Shared Album** are automatically excluded from the cleanup scan to ensure they remain viewable to others in the shared album.
:::
### External App Dependencies (WhatsApp, etc.) \{#external-app-dependencies\}
### External App Dependencies (WhatsApp, etc.)
:::danger WhatsApp & Local Files
Android applications like **WhatsApp** rely on local files to display media in chat history.
If Immich backs up your WhatsApp folder and you run **Free Up Space**, the local copies of these images will be deleted. Consequently, **media in your WhatsApp chats will appear blurry or missing.** You will only be able to view these photos inside the Immich app; they will no longer be visible within the WhatsApp interface.
**Recommendation:** If keeping chat history intact is important, exclude WhatsApp with `Keep albums` in Free Up Space and review the deletion list carefully. You have to enable [Album Sync](#album-sync) for WhatsApp to show up in the list. Alternatively, don't [back up](#backup) WhatsApp with Immich.
**Recommendation:** If keeping chat history intact is important, please ensure you review the deletion list carefully or consider excluding WhatsApp folders from the backup if you intend to use this feature frequently.
:::
:::info reclaim storage
You must empty the system/gallery trash manually to reclaim storage.
:::
## Album Sync
@@ -114,19 +138,10 @@ You can sync or mirror an album from your phone to the Immich server on your acc
### Synchronizing albums from the past
<img src={require('./img/backup-album-sync.webp').default} width="400px" title="Backup album synchronization option" />
Albums can be synchronized to the server even if they did not exist on the server before. You can enable this feature at any time and use the **Reorganize into album** button to backfill existing uploads into their corresponding albums.
Albums can be synchronized to the server even if they did not exist on the server before. In order to apply this setting you have to:
Enter the cloud on the top right -> cog wheel on the top right -> select the sync option under Sync albums.
:::info Sync albums delete/move photos
If you delete/move photos in the local album on your device, it will not be reflected in the album on the server **even if** you click Sync albums
It will only reflect files you add.
:::
## Read-only/kid Mode
You can set the app to read-only mode to prevent accidental deletion of photos from your device, and only allow viewing photos on the timeline.
To toggle this feature, long-press the profile icon or go to `Settings > Advanced > Read-only Mode`.
<img src={require('./img/read-only-mode.webp').default} width="800px" title="Read-only mode" />

View File

@@ -1,85 +0,0 @@
---
sidebar_position: 1
---
# Mobile Backup
## Overview
Immich supports uploading photos and videos from your mobile device to the server automatically.
When backup is enabled, Immich will upload new photos and videos from selected albums when you open or resume the app, as well as periodically in the background.
<img
src={require('./img/enable-backup-button.webp').default}
width="400px"
title="Upload button"
/>
## General Features
### Backup albums selection
<img
src={require('./img/backup-album-selection.webp').default}
width="400px"
title="Backup album selection"
/>
You can select which albums on your mobile device to back up to the server. You can also exclude specific albums (by double-tapping on them) from being backed up. This is useful for iOS users since assets can belong to multiple albums. For example, you may want to back up all assets except those in the "Videos" album.
### Deduplication
When you first select albums for backup, Immich calculates a checksum for each file's content. This checksum identifies assets already on the server—whether uploaded via CLI, web interface, or another device. Files matching existing assets are skipped, preventing duplicate uploads and saving bandwidth.
### Networking requirements
By default, Immich will only upload photos and videos when connected to Wi-Fi. You can change this behavior in the backup settings page.
<img
src={require('./img/backup-options.webp').default}
width="400px"
title="Upload button"
/>
### Backup album synchronization
<img
src={require('./img/backup-album-sync.webp').default}
width="400px"
title="Backup album synchronization option"
/>
When enabled, Immich automatically creates albums on the server that mirror the albums on your mobile device. Photos and videos are organized into these server-side albums to match your device's album structure, making it easy to find and browse your content the same way you do on your phone.
This is a one-way sync from your device to the server. You can enable this feature at any time and use the **Reorganize into album** button to backfill existing uploads into their corresponding albums.
## Platform Specific Features
### Android
<img
src={require('./img/android-backup-options.webp').default}
width="400px"
title="Android backup options"
/>
- It is a well-known problem that some Android models are very strict with battery optimization settings, which can cause a problem with the background worker. Please visit [Don't kill my app](https://dontkillmyapp.com/) for a guide on disabling this setting on your phone.
- You can allow the background task to run only when the device is charging.
- You can set the minimum delay from the time a photo is taken to when the background upload task will run.
### iOS
- 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.webp').default} width="30%" title="background-app-refresh" />
</div>
- iOS automatically manages background tasks; the app cannot control when the background upload task will run. The more frequently you open the app, the more often background tasks will run.
#### iCloud Backup
Local albums containing assets from iCloud and marked for backup in Immich will be pulled from iCloud and temporarily stored in the app's cache folder. Once the hashing and uploading process is completed, the temporary files will be emptied.
This process may consume additional data and storage space on your device, especially if you have a large number of iCloud photos and videos. Please ensure you have sufficient storage space and monitor your data usage if you are not connected to Wi-Fi.

View File

@@ -11,25 +11,45 @@ Contextual CLIP search is powered by the [VectorChord](https://github.com/tensor
In addition, Immich offers advanced search functionality, allowing you to find specific content using customizable search filters. These filters include location, one or more faces, specific albums, and more. You can try out the search filters on the [Demo site](https://demo.immich.app).
You can search the following types of content:
The filters smart search allows you to search by include:
| Type | Description |
| ----------------------------------- | ----------------------------------------------------- |
| People | Faces that are recognized in your photos/videos. |
| Contextual | Content of the photos and videos. |
| File name or extension | Full or partial file's name, or file's extension |
| Description | Description added to assets. |
| Optical Character Recognition (OCR) | Text in images |
| Locations | Cities, states, and countries from reverse geocoding. |
| Tags | Tags assigned or extracted from assets. |
| Camera | make, model and lens model |
| Time frame | Start and end date of a specific time bucket |
| Media type | Image or video or both |
| Display options | In Archive, in Favorites or Not in any album |
| Start rating | User-assigned start rating |
- People
- Location
- Country
- State
- City
- Camera
- Make
- Model
- Date range
- File name or extension
- Media type
- Image (including live/motion photos)
- Video
- All
- Condition
- Not in any album
- Archived
- Favorited
- Rating
<Tabs>
<TabItem value="Computer" label="Computer" default>
Some search examples:
<img src={require('./img/advanced-search-filters.webp').default} width="70%" title='Advanced search filters' />
<img src={require('./img/search-ex-1.webp').default} width="70%" title='Search Example 1' />
</TabItem>
<TabItem value="Mobile" label="Mobile">
<img src={require('./img/mobile-smart-search.webp').default} width="30%" title='Smart search on mobile' />
</TabItem>
</Tabs>
## Configuration
Navigating to `Administration > Settings > Machine Learning Settings > Smart Search` will show the options available.

View File

@@ -30,17 +30,26 @@ In the Immich web UI:
- click the **Administration** link in the upper right corner.
<img src={require('./img/administration-link.webp').default} width="50%" title="Administration link" />
- Select the **External Libraries** tab and click the **Create Library** button
<img src={require('./img/create-external-library.webp').default} width="80%" title="Create Library button" />
- Select the **External Libraries** tab
<img src={require('./img/external-libraries.webp').default} width="50%" title="External Libraries tab" />
- Click the **Create Library** button
<img src={require('./img/create-external-library.webp').default} width="50%" title="Create Library button" />
- In the dialog, select which user should own the new library
<img src={require('./img/library-owner.webp').default} width="50%" title="Library owner dialog" />
- You are now entering the library management page.
<img src={require('./img/library-management-page.webp').default} width="80%" title="Library management page" />
- Click the three-dots menu and select **Edit Import Paths**
<img src={require('./img/edit-import-paths.webp').default} width="50%" title="Edit Import Paths menu option" />
- Click `Add` in the Folder section to specify a path for scanning and enter **/home/user/photos1** as the path and click Add
<img src={require('./img/edit-import-path.webp').default} width="50%" title="Add an import path" />
- Click Add path
<img src={require('./img/add-path-button.webp').default} width="50%" title="Add Path button" />
- Enter **/home/user/photos1** as the path and click Add
<img src={require('./img/add-path-field.webp').default} width="50%" title="Add Path field" />
- Save the new path
<img src={require('./img/path-save.webp').default} width="50%" title="Path Save button" />
- Click the three-dots menu and select **Scan New Library Files**
<img src={require('./img/scan-new-library-files.webp').default} width="50%" title="Scan New Library Files menu option" />
@@ -55,3 +64,4 @@ In the Immich web UI:
- You should see non-zero Active jobs for
Library, Generate Thumbnails, and Extract Metadata.
<img src={require('./img/job-status.webp').default} width="50%" title="Job Status display" />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@@ -17,11 +17,11 @@ If this does not work, try running `docker compose up -d --force-recreate`.
## Docker Compose
| Variable | Description | Default | Containers |
| :----------------- | :------------------------------ | :-----: | :----------------------- |
| `IMMICH_VERSION` | Image tags | `v2` | server, machine learning |
| `UPLOAD_LOCATION` | Host path for uploads | | server |
| `DB_DATA_LOCATION` | Host path for Postgres database | | database |
| Variable | Description | Default | Containers |
| :----------------- | :------------------------------ | :-------: | :----------------------- |
| `IMMICH_VERSION` | Image tags | `release` | server, machine learning |
| `UPLOAD_LOCATION` | Host path for uploads | | server |
| `DB_DATA_LOCATION` | Host path for Postgres database | | database |
:::tip
These environment variables are used by the `docker-compose.yml` file and do **NOT** affect the containers directly.

View File

@@ -10,7 +10,7 @@ to install and use it.
## Requirements
- A system with at least 6GB of RAM and 2 CPU cores.
- A system with at least 4GB of RAM and 2 CPU cores.
- [Docker](https://docs.docker.com/engine/install/)
> For a more detailed list of requirements, see the [requirements page](/install/requirements).
@@ -63,9 +63,9 @@ The backup time differs depending on how many photos are on your mobile device.
take quite a while.
To quickly get going, you can selectively upload few photos first, by following this [guide](/features/mobile-app#sync-only-selected-photos).
You can select the **Job Queues** tab to see Immich processing your photos.
You can select the **Jobs** tab to see Immich processing your photos.
<img src={require('/docs/guides/img/jobs-tab.webp').default} title="Job Queues tab" width={300} />
<img src={require('/docs/guides/img/jobs-tab.webp').default} title="Jobs tab" width={300} />
---
@@ -90,4 +90,4 @@ You may want to [upload photos from your own archive](/features/command-line-int
You may want to incorporate a pre-existing archive of photos from an [External Library](/features/libraries); there's a [guide](/guides/external-library) for that.
You may want your mobile device to [back photos up to your server automatically](/features/mobile-backup).
You may want your mobile device to [back photos up to your server automatically](/features/automatic-backup).

View File

@@ -6,8 +6,4 @@
<img src={require('./img/album-selection.webp').default} width='50%' title='Backup button' />
3. Scroll down to the bottom and press "**Enable Backup**" to start the backup process. This will upload all the assets in the selected albums.
:::info
You can read more about backup options [here](/features/mobile-backup.md).
:::
3. Scroll down to the bottom and press "**Start Backup**" to start the backup process. This will upload all the assets in the selected albums.

View File

@@ -2,6 +2,6 @@ If you have friends or family members who want to use the application as well, y
<img src={require('./img/create-new-user.webp').default} width="90%" title='New User Registration' />
On the **Administration > Users** page, you can click on the **Create user** button, and you'll be presented with the following dialog:
In the Administration panel, you can click on the **Create user** button, and you'll be presented with the following dialog:
<img src={require('./img/create-new-user-dialog.webp').default} width="40%" title='New User Registration Dialog' />
<img src={require('./img/create-new-user-dialog.webp').default} width="90%" title='New User Registration Dialog' />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 260 KiB

After

Width:  |  Height:  |  Size: 105 KiB

View File

@@ -76,10 +76,6 @@ const config = {
autoCollapseCategories: false,
},
},
tableOfContents: {
minHeadingLevel: 2,
maxHeadingLevel: 4,
},
navbar: {
logo: {
alt: 'Immich Logo',

View File

@@ -69,13 +69,7 @@ h6 {
--ifm-color-primary-lighter: #e9f1fe;
--ifm-color-primary-lightest: #ffffff;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
--ifm-navbar-background-color: #0c0c0c;
--ifm-footer-background-color: #0c0c0c;
}
[data-theme='dark'] body,
[data-theme='dark'] .main-wrapper {
background-color: #070707;
--ifm-background-color: #000000;
}
div[class^='announcementBar_'] {

View File

@@ -34,4 +34,3 @@
/overview/introduction /overview/quick-start 307
/overview/welcome /overview/quick-start 307
/docs/* /:splat 307
/features/automatic-backup /features/mobile-backup 307

View File

@@ -1,20 +1,36 @@
[
{
"label": "v2.5.1",
"url": "https://docs.v2.5.1.archive.immich.app"
},
{
"label": "v2.4.1",
"url": "https://docs.v2.4.1.archive.immich.app"
},
{
"label": "v2.4.0",
"url": "https://docs.v2.4.0.archive.immich.app"
},
{
"label": "v2.3.1",
"url": "https://docs.v2.3.1.archive.immich.app"
},
{
"label": "v2.3.0",
"url": "https://docs.v2.3.0.archive.immich.app"
},
{
"label": "v2.2.3",
"url": "https://docs.v2.2.3.archive.immich.app"
},
{
"label": "v2.2.2",
"url": "https://docs.v2.2.2.archive.immich.app"
},
{
"label": "v2.2.1",
"url": "https://docs.v2.2.1.archive.immich.app"
},
{
"label": "v2.2.0",
"url": "https://docs.v2.2.0.archive.immich.app"
},
{
"label": "v2.1.0",
"url": "https://docs.v2.1.0.archive.immich.app"
@@ -23,10 +39,18 @@
"label": "v2.0.1",
"url": "https://docs.v2.0.1.archive.immich.app"
},
{
"label": "v2.0.0",
"url": "https://docs.v2.0.0.archive.immich.app"
},
{
"label": "v1.144.1",
"url": "https://docs.v1.144.1.archive.immich.app"
},
{
"label": "v1.144.0",
"url": "https://docs.v1.144.0.archive.immich.app"
},
{
"label": "v1.143.1",
"url": "https://docs.v1.143.1.archive.immich.app"

View File

@@ -17,9 +17,9 @@ module.exports = {
// Dark Theme
'immich-dark-primary': '#adcbfa',
'immich-dark-bg': '#000000',
'immich-dark-bg': '#070a14',
'immich-dark-fg': '#e5e7eb',
'immich-dark-gray': '#111111',
'immich-dark-gray': '#212121',
},
},
},

View File

@@ -1,6 +1,6 @@
{
"name": "immich-e2e",
"version": "2.5.1",
"version": "2.4.1",
"description": "",
"main": "index.js",
"type": "module",
@@ -27,7 +27,7 @@
"@playwright/test": "^1.44.1",
"@socket.io/component-emitter": "^3.1.2",
"@types/luxon": "^3.4.2",
"@types/node": "^24.10.9",
"@types/node": "^24.10.8",
"@types/pg": "^8.15.1",
"@types/pngjs": "^6.0.4",
"@types/supertest": "^6.0.2",

View File

@@ -5,10 +5,8 @@
"acknowledge": "أُدرك ذلك",
"action": "عملية",
"action_common_update": "تحديث",
"action_description": "مجموعة من الفعاليات التي يجب تنفيذها على الأصول التي تم تصفيتها",
"actions": "عمليات",
"active": "نشط",
"active_count": "فعال: {count}",
"activity": "نشاط",
"activity_changed": "النشاط {enabled, select, true {مُفْعل} other {معطّل}}",
"add": "إضافة",
@@ -16,14 +14,9 @@
"add_a_location": "إضافة موقع",
"add_a_name": "إضافة إسم",
"add_a_title": "إضافة عنوان",
"add_action": "اضف فعالية",
"add_action_description": "اضغط لإضافة فعالية لتنفيذها",
"add_assets": "اضف اصول",
"add_birthday": "أضف تاريخ الميلاد",
"add_endpoint": "اضف نقطة نهاية",
"add_exclusion_pattern": "إضافة نمط إستثناء",
"add_filter": "اضف تصفية",
"add_filter_description": "اضغط لاضافة شرط تصفية",
"add_location": "إضافة موقع",
"add_more_users": "إضافة مستخدمين آخرين",
"add_partner": "أضف شريكًا",
@@ -38,11 +31,10 @@
"add_to_album_toggle": "تبديل التحديد لـ{album}",
"add_to_albums": "إضافة الى البومات",
"add_to_albums_count": "إضافه إلى البومات ({count})",
"add_to_bottom_bar": "اضافه الى",
"add_to_bottom_bar": "اضف الى",
"add_to_shared_album": "إضافة إلى ألبوم مشارك",
"add_upload_to_stack": "اضف رفع الى حزمة",
"add_url": "إضافة رابط",
"add_workflow_step": "اضف خطوة سير عمل",
"added_to_archive": "أُضيفت للأرشيف",
"added_to_favorites": "أُضيفت للمفضلات",
"added_to_favorites_count": "تم إضافة {count, number} إلى المفضلات",
@@ -60,20 +52,20 @@
"backup_keep_last_amount": "مقدار التفريغات السابقة للاحتفاظ بها",
"backup_onboarding_1_description": "نسخة خارج الموقع في موقع آخر.",
"backup_onboarding_2_description": "نسخ محلية على أجهزة مختلفة. يشمل ذلك الملفات الرئيسية ونسخة احتياطية محلية منها.",
"backup_onboarding_3_description": "إجمالي نُسخ بياناتك، بما في ذلك الملفات الأصلية. يشمل ذلك نسخةً واحدةً خارج الموقع ونسختين محليتين.",
"backup_onboarding_3_description": "إجمالي نسخ بياناتك، بما في ذلك الملفات الأصلية. يشمل ذلك نسخةً واحدةً خارج الموقع ونسختين محليتين.",
"backup_onboarding_description": "يُنصح باتباع <backblaze-link>استراتيجية النسخ الاحتياطي 3-2-1</backblaze-link> لحماية بياناتك. احتفظ بنسخ احتياطية من صورك/فيديوهاتك المحمّلة، بالإضافة إلى قاعدة بيانات Immich، لضمان حل نسخ احتياطي شامل.",
"backup_onboarding_footer": "لمزيد من المعلومات حول النسخ الاحتياطي لـ Immich، يرجى الرجوع إلى <link> التعليمات </link>.",
"backup_onboarding_parts_title": "يتضمن النسخ الاحتياطي 3-2-1 ما يلي:",
"backup_onboarding_title": "النسخ الاحتياطية",
"backup_settings": "إعدادات تفريغ قاعدة البيانات",
"backup_settings_description": "إدارة إعدادات تفريغ قاعدة البيانات.",
"cleared_jobs": "تم إخلاء مهام ل: {job}",
"cleared_jobs": "تم إخلاء مهام: {job}",
"config_set_by_file": "الإعدادات حاليًا معينة عن طريق ملف الاعدادات",
"confirm_delete_library": "هل أنت متأكد أنك تريد حذف مكتبة {library}؟",
"confirm_delete_library_assets": "هل أنت متأكد أنك تريد حذف هذه المكتبة؟ سيؤدي ذلك إلى حذف {count, plural, one {# محتوى موجود} other {جميع # المحتويات الموجودة}} من Immich ولا يمكن التراجع عنه. ستظل الملفات موجودة على القرص.",
"confirm_email_below": "للتأكيد، اكتب \"{email}\" بالأسفل",
"confirm_reprocess_all_faces": "هل أنت متأكد أنك تريد إعادة معالجة جميع الوجوه؟ سيخلي هذا كل الأشخاص الذين سَميتَهم.",
"confirm_user_password_reset": "هل أنت متأكد أنك تريد إعادة تعيين كلمة المرور ل {user}؟",
"confirm_user_password_reset": "هل أنت متأكد أنك تريد إعادة تعيين كلمة مرور {user}؟",
"confirm_user_pin_code_reset": "هل انت متاكد من اعادة ضبط رمز PIN الخاص ب {user}؟",
"copy_config_to_clipboard_description": "انسخ اعدادات النظام الحالية بتنسيق JSON الى الحافظة",
"create_job": "إنشاء وظيفة",
@@ -104,8 +96,6 @@
"image_preview_description": "صورة متوسطة الحجم مع بيانات وصفية مجردة، تُستخدم عند عرض أصل واحد وللتعلم الآلي",
"image_preview_quality_description": "جودة المعاينة من 1 إلى 100. كلما كانت القيمة أعلى كان ذلك أفضل، ولكنها تنتج ملفات أكبر وقد تقلل من استجابة التطبيق. قد يؤثر ضبط قيمة منخفضة على جودة التعلم الآلي.",
"image_preview_title": "إعدادات المعاينة",
"image_progressive": "متدرج",
"image_progressive_description": "ترميز صور JPEG تدريجياً لعرضها بشكل تدريجي. هذا لا يؤثر على صور WebP.",
"image_quality": "الجودة",
"image_resolution": "الدقة",
"image_resolution_description": "يمكن للدقة العالية الحفاظ على مزيد من التفاصيل ولكنها تستغرق وقتًا أطول للترميز، وتحتوي على أحجام ملفات أكبر ويمكن أن تقلل من استجابة التطبيق.",
@@ -122,7 +112,6 @@
"job_settings_description": "إدارة تزامن الوظائف",
"jobs_delayed": "{jobCount, plural, other {# مؤجلة}}",
"jobs_failed": "{jobCount, plural, other {# فشلت}}",
"jobs_over_time": "الوظائف بمرور الوقت",
"library_created": "تم إنشاء المكتبة: {library}",
"library_deleted": "تم حذف المكتبة",
"library_details": "تفاصيل المكتبة",
@@ -190,21 +179,10 @@
"machine_learning_smart_search_enabled": "تفعيل البحث الذكي",
"machine_learning_smart_search_enabled_description": "إذا تم تعطيله، فلن يتم ترميز الصور للبحث الذكي.",
"machine_learning_url_description": "عنوان URL لخادم التعلم الآلي. إذا تم توفير أكثر من عنوان URL واحد، سيتم محاولة الاتصال بكل خادم على حدة حتى يستجيب أحدهم بنجاح، بدءًا من الأول إلى الأخير. سيتم تجاهل الخوادم التي لا تستجيب مؤقتًا حتى تعود للعمل.",
"maintenance_delete_backup": "حذف النسخ الاحتياطي",
"maintenance_delete_backup_description": "هذا الملف سيتم حذفه بشكل لا رجعه فيه.",
"maintenance_delete_error": "فشل حذف النسخ الاحتياطي.",
"maintenance_restore_backup": "استعادة النسخ الاحتياطي",
"maintenance_restore_backup_description": "سيتم مسح بيانات Immich واستعادتها من النسخة الاحتياطي المختار. سيتم إنشاء نسخة احتياطية قبل المتابعة.",
"maintenance_restore_backup_different_version": "هذا النسخ الاحتياطي تم انشائه باستخدام اصدار مختلف من Immich!",
"maintenance_restore_backup_unknown_version": "لا يمكن التحقق من اصدار النسخ الاحتياطي.",
"maintenance_restore_database_backup": "استعادة النسخ الاحتياطي لقاعدة البيانات",
"maintenance_restore_database_backup_description": "استعادة حالة قاعدة البيانات السابقة باستخدام ملف النسخ الاحتياطي",
"maintenance_settings": "صيانة",
"maintenance_settings_description": "ضع Immich في وضع الصيانة.",
"maintenance_start": "التحزيل الى وضع الصيانة",
"maintenance_start": "ابدأ وضع الصيانة",
"maintenance_start_error": "فشل البدء في وضع الصيانة.",
"maintenance_upload_backup": "رفع ملف النسخ الاحتياطي لقاعدة البيانات",
"maintenance_upload_backup_error": "لم يتم رفع الخزن الاحتياطي, هل الملف بصيغة .sql/.sql.gz?",
"manage_concurrency": "إدارة التزامن",
"manage_concurrency_description": "انتقل الى صفحة الاعمال لادارة تزامن المهام",
"manage_log_settings": "إدارة إعدادات السجلات",
@@ -296,14 +274,10 @@
"password_settings_description": "إدارة تسجيل الدخول بكلمة المرور",
"paths_validated_successfully": "تم التحقق من صحة كافة المسارات بنجاح",
"person_cleanup_job": "تنظيف الشخص",
"queue_details": "تفاصيل الطابور",
"queues": "طوابير الوظائف",
"queues_page_description": "صفحة طوابير وظائف المدير",
"quota_size_gib": "حجم الحصة (جيجابايت)",
"refreshing_all_libraries": "تحديث كافة المكتبات",
"registration": "تسجيل المدير",
"registration_description": "بما أنك أول مستخدم في النظام، سيتم تعيينك كمسؤول وستكون مسؤولًا عن المهام الإدارية، وسيتم إنشاء مستخدمين إضافيين بواسطتك.",
"remove_failed_jobs": "ازالة العمليات التي فشلت",
"require_password_change_on_login": "الطلب من المستخدم تغيير كلمة المرور عند تسجيل الدخول الأول",
"reset_settings_to_default": "إعادة ضبط الإعدادات إلى الوضع الافتراضي",
"reset_settings_to_recent_saved": "إعادة ضبط الإعدادات إلى الإعدادات المحفوظة مؤخرًا",
@@ -383,7 +357,7 @@
"transcoding_hardware_acceleration": "التسريع العتادي",
"transcoding_hardware_acceleration_description": "تجريبي: ترميز اسرع لكن قد يقلل من الجودة مع معدل بت اقل",
"transcoding_hardware_decoding": "فك تشفير الأجهزة",
"transcoding_hardware_decoding_setting_description": ُمكّن من تسريع من البداية إلى النهاية بدلاً من تسريع عملية التشفير فقط. قد لا يعمل مع جميع مقاطع الفيديو.",
"transcoding_hardware_decoding_setting_description": نطبق ذلك فقط على NVENC، QSV، و RKMPP. يمكن التسريع من طرف لطرف بدلاً من تسريع الترميز فقط. قد لا يعمل على جميع مقاطع الفيديو.",
"transcoding_max_b_frames": "أقصى عدد من الإطارات B",
"transcoding_max_b_frames_description": "القيم الأعلى تعزز كفاءة الضغط، ولكنها تبطئ عملية الترميز. قد لا تكون متوافقة مع التسريع العتادي على الأجهزة القديمة. قيمة 0 تعطل إطارات B، بينما تضبط القيمة -1 هذا القيمة تلقائيًا.",
"transcoding_max_bitrate": "الحد الأقصى لمعدل البت",
@@ -451,9 +425,6 @@
"admin_password": "كلمة سر المشرف",
"administration": "الإدارة",
"advanced": "متقدم",
"advanced_settings_clear_image_cache": "مسح ذاكرة التخزين المؤقت للصور",
"advanced_settings_clear_image_cache_error": "فشل مسح ذاكرة التخزين المؤقت للصور",
"advanced_settings_clear_image_cache_success": "تم المسح بنجاح {size}",
"advanced_settings_enable_alternate_media_filter_subtitle": "استخدم هذا الخيار لتصفية الوسائط اثناء المزامنه بناء على معايير بديلة. جرب هذا الخيار فقط كان لديك مشاكل مع التطبيق بالكشف عن جميع الالبومات.",
"advanced_settings_enable_alternate_media_filter_title": "[تجريبي] استخدم جهاز تصفية مزامنه البومات بديل",
"advanced_settings_log_level_title": "مستوى السجل: {level}",
@@ -490,12 +461,10 @@
"album_remove_user": "هل ترغب في إزالة المستخدم؟",
"album_remove_user_confirmation": "هل أنت متأكد أنك تريد إزالة {user}؟",
"album_search_not_found": "لم يتم ايجاد البوم مطابق لبحثك",
"album_selected": "اختير البوم",
"album_share_no_users": "يبدو أنك قمت بمشاركة هذا الألبوم مع جميع المستخدمين أو ليس لديك أي مستخدم للمشاركة معه.",
"album_summary": "ملخص الألبوم",
"album_updated": "تم تحديث الألبوم",
"album_updated_setting_description": "تلقي إشعارًا عبر البريد الإلكتروني عندما يحتوي الألبوم المشترك على محتويات جديدة",
"album_upload_assets": "رفع الاصول من جهاز الكومبيوتر الخاص بك و اضافتها الى البوم",
"album_user_left": "تم ترك {album}",
"album_user_removed": "تم إزالة {user}",
"album_viewer_appbar_delete_confirm": "هل أنت متأكد أنك تريد حذف هذا الألبوم من حسابك؟",
@@ -513,11 +482,9 @@
"albums_default_sort_order_description": "ترتيب فرز الأصول الأولي عند إنشاء ألبومات جديدة.",
"albums_feature_description": "مجموعة من الأصول التي يمكن مشاركتها مع مستخدمين آخرين.",
"albums_on_device_count": "عدد الالبومات على الجهاز ({count})",
"albums_selected": "{count, plural, one {# البوم مختار} other {# البومات مختارة}}",
"all": "الكل",
"all_albums": "جميع الألبومات",
"all_people": "جميع الأشخاص",
"all_photos": "جميع الصور",
"all_videos": "جميع الفيديوهات",
"allow_dark_mode": "السماح بالوضع المعتم",
"allow_edits": "إسمح بالتعديل",
@@ -525,9 +492,6 @@
"allow_public_user_to_upload": "السماح للمستخدم العام بالرفع",
"allowed": "مسموح",
"alt_text_qr_code": "صورة رمز الاستجابة السريعة (QR)",
"always_keep": "دائما حافظ على",
"always_keep_photos_hint": "سيحتفظ تحرير المساحة بجميع الصور على هذا الجهاز.",
"always_keep_videos_hint": "سيحتفظ تحرير المساحة بجميع الفديوات على هذا الجهاز.",
"anti_clockwise": "عكس اتجاه عقارب الساعة",
"api_key": "مفتاح API",
"api_key_description": "سيتم عرض هذه القيمة مرة واحدة فقط. يرجى التأكد من نسخها قبل إغلاق النافذة.",
@@ -554,12 +518,10 @@
"archived_count": "{count, plural, other {الأرشيف #}}",
"are_these_the_same_person": "هل هؤلاء هم نفس الشخص؟",
"are_you_sure_to_do_this": "هل انت متأكد من أنك تريد أن تفعل هذا؟",
"array_field_not_fully_supported": "حقول المصفوفة تتطلب تعديل يدوي لJSON",
"asset_action_delete_err_read_only": "لا يمكن حذف الأصول ذات للقراءة فقط، وسوف يتم التخطي",
"asset_action_share_err_offline": "لا يمكن جلب الأصول غير المتصلة بالإنترنت، وسوف يتم التخطي",
"asset_added_to_album": "تمت إضافته إلى الألبوم",
"asset_adding_to_album": "جارٍ الإضافة إلى الألبوم…",
"asset_created": "انشئ اصل",
"asset_description_updated": "تم تحديث وصف المحتوى",
"asset_filename_is_offline": "الأصل {filename} غير متصل",
"asset_has_unassigned_faces": "يحتوي الأصل على وجوه غير مخصصة",
@@ -684,7 +646,6 @@
"backup_options_page_title": "خيارات النسخ الاحتياطي",
"backup_setting_subtitle": "ادارة اعدادات التحميل في الخلفية والمقدمة",
"backup_settings_subtitle": "إدارة إعدادات التحميل",
"backup_upload_details_page_more_details": "اضغط لتفاصيل اضافية",
"backward": "الى الوراء",
"biometric_auth_enabled": "المصادقة البايومترية مفعله",
"biometric_locked_out": "لقد قفلت عنك المصادقة البيومترية",
@@ -743,8 +704,6 @@
"change_password_form_password_mismatch": "كلمة المرور غير مطابقة",
"change_password_form_reenter_new_password": "أعد إدخال كلمة مرور جديدة",
"change_pin_code": "تغيير رمز PIN",
"change_trigger": "تغيير المفعل",
"change_trigger_prompt": "هل انت متاكد انك تريد تغيير المفعل؟ هذا سيزيل كل الاجرائات والتصفيات.",
"change_your_password": "غير كلمة المرور الخاصة بك",
"changed_visibility_successfully": "تم تغيير الرؤية بنجاح",
"charging": "الشحن",
@@ -753,21 +712,8 @@
"check_corrupt_asset_backup_button": "اجراء فحص",
"check_corrupt_asset_backup_description": "قم بإجراء هذا الفحص فقط عبر شبكة Wi-Fi وبعد نسخ جميع الأصول احتياطيًا. قد يستغرق الإجراء بضع دقائق.",
"check_logs": "تحقق من السجلات",
"checksum": "مجموع التحقق",
"choose_matching_people_to_merge": "اختر الأشخاص المتطابقين لدمجهم",
"city": "المدينة",
"cleanup_confirm_description": "Immich وجد {count} اصول (انشئت قبل {date}) تم خزنها احتياطيا الى الخادم. ازالة النسخ المحلية من هذا الجهاز?",
"cleanup_confirm_prompt_title": "ازالة من هذا الجهاز؟",
"cleanup_deleted_assets": "تم نقل {count} اصول الى سلة المهملات",
"cleanup_deleting": "جاري النقل الى المهملات...",
"cleanup_found_assets": "تم ايجاد {count} اصول تم خزنها احتياطيا",
"cleanup_found_assets_with_size": "تم العثور عل {count} عناصر تم خزنها احتياطيا ({size})",
"cleanup_icloud_shared_albums_excluded": "البومات iCloud المشاركة مستثناة من البحث",
"cleanup_no_assets_found": "­لم يتم ايجاد اصول تطابق المعايير. بالاضافه. تحرير المساحة يمكن ان يحذف فقط العناصر التي تم خزنها احتياطياً الى الخادم",
"cleanup_preview_title": "اصول ليتم ازالتها ({count})",
"cleanup_step3_description": "ابحث عن اصول تم خزنها احتياطيا تطابق بياناتك و احتفظ بالاعدادات.",
"cleanup_step4_summary": "{count} اصول (أنشأت قبل {date}) ليتم ازالتها من جهازك المحلي. ستظل الصور متاحة من خلال تطبيق Immich .",
"cleanup_trash_hint": "لاستعادة مساحة التخزين بالكامل، افتح تطبيق معرض النظام وأفرغ سلة المهملات",
"clear": "إخلاء",
"clear_all": "إخلاء الكل",
"clear_all_recent_searches": "مسح جميع عمليات البحث الأخيرة",
@@ -833,7 +779,6 @@
"create_album": "إنشاء ألبوم",
"create_album_page_untitled": "بدون اسم",
"create_api_key": "إنشاء مفتاح API",
"create_first_workflow": "إنشاء سير العمل الأول",
"create_library": "إنشاء مكتبة",
"create_link": "إنشاء رابط",
"create_link_to_share": "إنشاء رابط للمشاركة",
@@ -848,25 +793,17 @@
"create_tag": "إنشاء علامة",
"create_tag_description": "أنشئ علامة جديدة. بالنسبة للعلامات المتداخلة، يرجى إدخال المسار الكامل للعلامة بما في ذلك الخطوط المائلة للأمام.",
"create_user": "إنشاء مستخدم",
"create_workflow": "إنشاء سير العمل",
"created": "تم الإنشاء",
"created_at": "مخلوق",
"creating_linked_albums": "جاري إنشاء الألبومات المرتبطة...",
"crop": "قص",
"crop_aspect_ratio_fixed": "تم الاصلاح",
"crop_aspect_ratio_free": "حر",
"crop_aspect_ratio_original": "اصلي",
"curated_object_page_title": "أشياء",
"current_device": "الجهاز الحالي",
"current_pin_code": "رمز PIN الحالي",
"current_server_address": "عنوان الخادم الحالي",
"custom_date": "تاريخ مخصص",
"custom_locale": "لغة مخصصة",
"custom_locale_description": "تنسيق التواريخ والأرقام بناءً على اللغة والمنطقة",
"custom_url": "رابط مخصص",
"cutoff_date_description": "احتفظ بالصور من آخر…",
"cutoff_day": "{count, plural, one {يوم} other {ايام}}",
"cutoff_year": "{count, plural, one {سنة} other {سنوات}}",
"daily_title_text_date": "E ، MMM DD",
"daily_title_text_date_year": "E ، MMM DD ، yyyy",
"dark": "معتم",
@@ -922,7 +859,6 @@
"deselect_all": "الغاء تحديد الكل",
"details": "تفاصيل",
"direction": "الإتجاه",
"disable": "ابطال",
"disabled": "معطل",
"disallow_edits": "منع التعديلات",
"discord": "دسكورد",
@@ -948,18 +884,16 @@
"download_include_embedded_motion_videos": "مقاطع الفيديو المدمجة",
"download_include_embedded_motion_videos_description": "تضمين مقاطع الفيديو المضمنة في الصور المتحركة كملف منفصل",
"download_notfound": "لم يعثر على التنزيل",
"download_original": "تحميل الأصلي",
"download_paused": "توقف التنزيل",
"download_settings": "التنزيل",
"download_paused": "اوقف التنزيل",
"download_settings": "التنزيلات",
"download_settings_description": "إدارة الإعدادات المتعلقة بتنزيل المحتويات",
"download_started": "بدأ التنزيل",
"download_started": "بدا التنزيل",
"download_sucess": "نجح التنزيل",
"download_sucess_android": "تم تحميل الوسائط الى DCIM/Immich",
"download_waiting_to_retry": "الانتظار لاعادة المحاولة",
"download_waiting_to_retry": "الانتظار للمحاولة",
"downloading": "جارٍ التنزيل",
"downloading_asset_filename": "جاري تنزيل الاصل {filename}",
"downloading_from_icloud": "التنزيل من iCloud",
"downloading_media": "تنزيل الوسائط",
"downloading_asset_filename": "{filename} قيد التنزيل",
"downloading_media": "تحميل الوسائط",
"drop_files_to_upload": "قم بإسقاط الملفات في أي مكان لرفعها",
"duplicates": "التكرارات",
"duplicates_description": "قم بحل كل مجموعة من خلال الإشارة إلى التكرارات، إن وجدت",
@@ -987,17 +921,11 @@
"edit_tag": "تعديل العلامة",
"edit_title": "تعديل العنوان",
"edit_user": "تعديل المستخدم",
"edit_workflow": "تعديل سير العمل",
"editor": "محرر",
"editor_close_without_save_prompt": "لن يتم حفظ التغييرات",
"editor_close_without_save_title": "إغلاق المحرر؟",
"editor_confirm_reset_all_changes": "هل أنت متأكد من إعادة ضبط جميع التغييرات؟",
"editor_flip_horizontal": "اقلب أفقيًا",
"editor_flip_vertical": "اقلب عموديًا",
"editor_orientation": "اتجاه",
"editor_reset_all_changes": "اعادة ظبط التغييرات",
"editor_rotate_left": "أدر 90° عكس اتجاه عقارب الساعة",
"editor_rotate_right": "ادر 90° باتجاه عقارب الساعة",
"editor_crop_tool_h2_aspect_ratios": "نسب العرض إلى الارتفاع",
"editor_crop_tool_h2_rotation": "التدوير",
"email": "البريد الإلكتروني",
"email_notifications": "تنبيهات البريد الالكتروني",
"empty_folder": "هذا المجلد فارغ",
@@ -1006,7 +934,7 @@
"enable": "تفعيل",
"enable_backup": "تشغيل النسخ الاحتياطي",
"enable_biometric_auth_description": "أدخل رمز PIN الخاص بك لتمكين المصادقة البيومترية",
"enabled": "مفعَل",
"enabled": "مفعل",
"end_date": "تاريخ الإنتهاء",
"enqueued": "مُدرج في الطابور",
"enter_wifi_name": "ادخل اسم Wi-Fi",
@@ -1016,14 +944,11 @@
"error_change_sort_album": "فشل في تغيير ترتيب الألبوم",
"error_delete_face": "حدث خطأ في حذف الوجه من الأصول",
"error_getting_places": "خطأ أثناء استرجاع بيانات المواقع",
"error_loading_albums": "خطأ في تحميل الالبومات",
"error_loading_image": "حدث خطأ أثناء تحميل الصورة",
"error_loading_partners": "خطأ بتحميل بيانات الشركاء: {error}",
"error_retrieving_asset_information": "خطأ في استعادة معلومات الاصل",
"error_saving_image": "خطأ: {error}",
"error_tag_face_bounding_box": "خطأ في وضع علامة على الوجه - لا يمكن الحصول على إحداثيات المربع المحيط",
"error_title": "خطأ - حدث خللٌ ما",
"error_while_navigating": "حدث خطأ أثناء الانتقال إلى الأصل",
"errors": {
"cannot_navigate_next_asset": "لا يمكن الانتقال إلى المحتوى التالي",
"cannot_navigate_previous_asset": "لا يمكن الانتقال إلى المحتوى السابق",
@@ -1081,7 +1006,6 @@
"unable_to_complete_oauth_login": "غير قادر على إكمال تسجيل الدخول عبر OAuth",
"unable_to_connect": "غير قادر على الإتصال",
"unable_to_copy_to_clipboard": "لا يمكن النسخ إلى الحافظة، تأكد من استخدامك للصفحة عبر https",
"unable_to_create": "تعذر إنشاء سير العمل",
"unable_to_create_admin_account": "غير قادر على إنشاء حساب المسؤول",
"unable_to_create_api_key": "غير قادر على إنشاء مفتاح API جديد",
"unable_to_create_library": "غير قادر على إنشاء مكتبة",
@@ -1092,7 +1016,6 @@
"unable_to_delete_exclusion_pattern": "غير قادر على حذف نمط الاستبعاد",
"unable_to_delete_shared_link": "غير قادر على حذف الرابط المشترك",
"unable_to_delete_user": "غير قادر على حذف المستخدم",
"unable_to_delete_workflow": "تعذر حذف سير العمل",
"unable_to_download_files": "غير قادر على تنزيل الملفات",
"unable_to_edit_exclusion_pattern": "غير قادر على تعديل نمط الاستبعاد",
"unable_to_empty_trash": "غير قادر على إفراغ سلة المهملات",
@@ -1132,7 +1055,6 @@
"unable_to_scan_library": "غير قادر على فحص المكتبة",
"unable_to_set_feature_photo": "غير قادر على تعيين الصورة المميزة",
"unable_to_set_profile_picture": "غير قادر على تعيين صورة الملف الشخصي",
"unable_to_set_rating": "تعذر تحديد التقييم",
"unable_to_submit_job": "غير قادر على تقديم الوظيفة",
"unable_to_trash_asset": "غير قادر على نقل المحتويات إلى سلة المهملات",
"unable_to_unlink_account": "غير قادر على إلغاء ربط الحساب",
@@ -1144,10 +1066,8 @@
"unable_to_update_settings": "غير قادر على تحديث الإعدادات",
"unable_to_update_timeline_display_status": "غير قادر على تحديث حالة عرض المخطط الزمني",
"unable_to_update_user": "غير قادر على تحديث المستخدم",
"unable_to_update_workflow": "تعذر تحديث سير العمل",
"unable_to_upload_file": "تعذر رفع الملف"
},
"errors_text": "اخطاء",
"exclusion_pattern": "نمط استبعاد",
"exif": "Exif (صيغة ملف صوري قابل للتبادل)",
"exif_bottom_sheet_description": "اضف وصفا...",
@@ -1179,7 +1099,6 @@
"external_network_sheet_info": "عندما لا يتواجد على شبكة Wi-Fi المفضلة، فإنه سيتصل بالخادم من خلال أول عناوين URL أدناه التي يمكنه الوصول إليها، بدءًا من الأعلى إلى الأسفل",
"face_unassigned": "غير معين",
"failed": "فشل",
"failed_count": "فشل: {count}",
"failed_to_authenticate": "فشل في المصادقة",
"failed_to_load_assets": "فشل تحميل الأصول",
"failed_to_load_folder": "فشل تحميل المجلد",
@@ -1192,16 +1111,14 @@
"features": "الميزات",
"features_in_development": "الميزات قيد التطوير",
"features_setting_description": "إدارة ميزات التطبيق",
"file_name": "اسم الملف: {file_name}",
"file_name": "إسم الملف",
"file_name_or_extension": "اسم الملف أو امتداده",
"file_size": "حجم الملف",
"filename": "اسم الملف",
"filetype": "نوع الملف",
"filter": "تصفية",
"filter_description": "شروط تصفية الأصول المستهدفة",
"filter_people": "تصفية الاشخاص",
"filter_places": "تصفية الاماكن",
"filters": "التصفيات",
"find_them_fast": "يمكنك العثور عليها بسرعة بالاسم من خلال البحث",
"first": "الاول",
"fix_incorrect_match": "إصلاح المطابقة غير الصحيحة",
@@ -1211,16 +1128,12 @@
"folders_feature_description": "تصفح عرض المجلد للصور ومقاطع الفيديو الموجودة على نظام الملفات",
"forgot_pin_code_question": "هل نسيت رمز الPIN الخاص بك؟",
"forward": "إلى الأمام",
"free_up_space": "تحرير المساحة",
"free_up_space_description": "نقل الصور والفديوات التي تم خزنها احتياطياالى سلة المهملات الخاصه بجهازك لتحرير المساحة. نسخك على اىخادم ستبقى بأمان.",
"free_up_space_settings_subtitle": "تحرير خزن الجهاز",
"full_path": "مسار كامل:{path}",
"gcast_enabled": "كوكل كاست",
"gcast_enabled_description": "تقوم هذه الميزة بتحميل الموارد الخارجية من Google حتى تعمل.",
"general": "عام",
"geolocation_instruction_location": "انقر على الاصل الذي يحتوي على إحداثيات نظام تحديد المواقع لاستخدام موقعه، أو اختر الموقع مباشرة من الخريطة",
"get_help": "الحصول على المساعدة",
"get_people_error": "خطأ استعادة الأشخاص",
"get_wifiname_error": "تعذر الحصول على اسم شبكة Wi-Fi. تأكد من منح الأذونات اللازمة واتصالك بشبكة Wi-Fi",
"getting_started": "البدء",
"go_back": "الرجوع للخلف",
@@ -1246,14 +1159,12 @@
"header_settings_header_name_input": "اسم الرأس",
"header_settings_header_value_input": "قيمة الرأس",
"headers_settings_tile_title": "رؤوس وكيل مخصصة",
"height": "الطول",
"hi_user": "مرحبا {name} ({email})",
"hide_all_people": "إخفاء جميع الأشخاص",
"hide_gallery": "اخفاء المعرض",
"hide_named_person": "إخفاء الشخص {name}",
"hide_password": "اخفاء كلمة المرور",
"hide_person": "اخفاء الشخص",
"hide_schema": "اخفاء المخطط",
"hide_text_recognition": "اخفاء التعرف على النص",
"hide_unnamed_people": "إخفاء الأشخاص بدون إسم",
"home_page_add_to_album_conflicts": "تمت إضافة {added} أصول إلى الألبوم {album}. {failed} أصول موجودة بالفعل في الألبوم.",
@@ -1326,18 +1237,9 @@
"ios_debug_info_processing_ran_at": "المعالجة جرت في {dateTime}",
"items_count": "{count, plural, one {# عنصر} other {# عناصر}}",
"jobs": "الوظائف",
"json_editor": "محرر JSON",
"json_error": "خطأ JSON",
"keep": "احتفظ",
"keep_albums": "الاحتفاظ بالالبومات",
"keep_albums_count": "الاحتفاظ ب{count} {count, plural, one {البوم} other {البومات}}",
"keep_all": "احتفظ بالكل",
"keep_description": "اختر ما يبقى على جهازك عند تحرير المساحة.",
"keep_favorites": "الاحتفاظ بالمفضلات",
"keep_on_device": "احتفظ على الجهاز",
"keep_on_device_hint": "اختر العناصر التي تريد ابقائها على الجهاز",
"keep_this_delete_others": "احتفظ بهذا، واحذف الآخرين",
"keeping": "الاحتفاظ ب: {items}",
"kept_this_deleted_others": "تم الاحتفاظ بهذا الأصل وحذف {count, plural, one {# asset} other {# assets}}",
"keyboard_shortcuts": "اختصارات لوحة المفاتيح",
"language": "اللغة",
@@ -1347,7 +1249,7 @@
"language_setting_description": "اختر لغتك المفضلة",
"large_files": "ملفات كبيرة",
"last": "الاخير",
"last_months": "{count, plural, one {شهر فائت} other {فائتة # اشهر}}",
"last_months": "{count, plural, one {شهر فائت} other {اشهر # فائتة}}",
"last_seen": "اخر ظهور",
"latest_version": "احدث اصدار",
"latitude": "خط العرض",
@@ -1379,7 +1281,6 @@
"local": "محلّي",
"local_asset_cast_failed": "غير قادر على بث أصل لم يتم تحميله إلى الخادم",
"local_assets": "أُصول (ملفات) محلية",
"local_id": "الهوية المحلية",
"local_media_summary": "ملخص الملفات المحلية",
"local_network": "شبكة محلية",
"local_network_sheet_info": "سيتصل التطبيق بالخادم من خلال عنوان URL هذا عند استخدام شبكة Wi-Fi المحددة",
@@ -1431,28 +1332,10 @@
"loop_videos_description": "فَعْل لتكرار مقطع فيديو تلقائيًا في عارض التفاصيل.",
"main_branch_warning": "أنت تستخدم إصداراً قيد التطوير؛ ونحن نوصي بشدة باستخدام إصدار النشر!",
"main_menu": "القائمة الرئيسية",
"maintenance_action_restore": "استعادة قاعدة البيانات",
"maintenance_description": "يجب وضع Immich في وضع الصيانة <link>وضع الصيانة</link>.",
"maintenance_end": "انهاء وضع الصيانة",
"maintenance_end_error": "فشل في انهاء وضع الصيانة.",
"maintenance_logged_in_as": "حاليا مسجل باسم {user}",
"maintenance_restore_from_backup": "استعادة من الخزن الاحتياطي",
"maintenance_restore_library": "استعادة المكتبه الخاصة بك",
"maintenance_restore_library_confirm": "إذا بدا هذا صحيحا، فتابع عملية استعادة النسخة الاحتياطية!",
"maintenance_restore_library_description": "استعادة قاعدة البيانات",
"maintenance_restore_library_folder_has_files": "{folder} يحتوي {count} مجلد(ات)",
"maintenance_restore_library_folder_no_files": "{folder} لا يحتوي على ملفات!",
"maintenance_restore_library_folder_pass": "قابل للقراءة والكتابة",
"maintenance_restore_library_folder_read_fail": "غير قابل للقراءة",
"maintenance_restore_library_folder_write_fail": "غير قابل للكتابة",
"maintenance_restore_library_hint_missing_files": "قد تكون بعض الملفات المهمة مفقودة",
"maintenance_restore_library_hint_regenerate_later": "يمكنك إعادة إنشاء هذه لاحقًا في الإعدادات",
"maintenance_restore_library_hint_storage_template_missing_files": "هل تستخدم قالب تخزين؟ قد تكون بعض الملفات مفقودة",
"maintenance_restore_library_loading": "جارٍ تحميل فحوصات السلامة والأساليب الاستدلالية…",
"maintenance_task_backup": "جاري انشاء نسخة احتياطية لقاعدة البيانات الموجودة…",
"maintenance_task_migrations": "تشغيل عمليات ترحيل قواعد البيانات…",
"maintenance_task_restore": "جارٍ استعادة النسخة الاحتياطية المختارة…",
"maintenance_task_rollback": "فشلت عملية الاستعادة، جارٍ التراجع إلى نقطة الاستعادة…",
"maintenance_title": "غير متوفر مؤقتا",
"make": "صنع",
"manage_geolocation": "إدارة الموقع",
@@ -1514,8 +1397,6 @@
"minimize": "تصغير",
"minute": "دقيقة",
"minutes": "دقائق",
"mirror_horizontal": "افقي",
"mirror_vertical": "عمودي",
"missing": "المفقودة",
"mobile_app": "تطبيق الجوال",
"mobile_app_download_onboarding_note": "قم بتنزيل التطبيق المصاحب للهاتف المحمول باستخدام الخيارات التالية",
@@ -1524,14 +1405,11 @@
"monthly_title_text_date_format": "ط ط ط",
"more": "المزيد",
"move": "تحريك",
"move_down": "انزل الى الاسفل",
"move_off_locked_folder": "تحريك خارج المجلد المقفل",
"move_to": "نقل الى",
"move_to_device_trash": "نقل إلى سلة مهملات الجهاز",
"move_to_lock_folder_action_prompt": "{count} اضيف إلى المجلد المقفل",
"move_to_locked_folder": "النقل الى مجلد مغلق",
"move_to_locked_folder_confirmation": "هذه الصور والفديوات ستتم ازالتها من جميع الالبومات، ويمكنان تتم مشاهدتها فقط من خلال المجلد المقفل",
"move_up": "تحرك الى الاعلى",
"moved_to_archive": "تم نقل {count, plural, one {# اصل} other {# اصول}} الى الارشيف",
"moved_to_library": "تم نقل {count, plural, one {# اصل} other {# اصول}} الى المكتبة",
"moved_to_trash": "تم النقل إلى سلة المهملات",
@@ -1541,7 +1419,6 @@
"my_albums": "ألبوماتي",
"name": "الاسم",
"name_or_nickname": "الاسم أو اللقب",
"name_required": "الاسم مطلوب",
"navigate": "التنقل",
"navigate_to_time": "انتقل إلى الوقت",
"network_requirement_photos_upload": "استخدام بيانات الهاتف المحمول لعمل نسخة احتياطية للصور",
@@ -1566,8 +1443,6 @@
"next": "التالي",
"next_memory": "الذكرى التالية",
"no": "لا",
"no_actions_added": "لم تتم إضافة إجراءات حتى الان",
"no_albums_found": "لم يتم ايجاد البومات",
"no_albums_message": "قم بإنشاء ألبوم لتنظيم الصور ومقاطع الفيديو الخاصة بك",
"no_albums_with_name_yet": "يبدو أنه ليس لديك أي ألبومات بهذا الاسم حتى الآن.",
"no_albums_yet": "يبدو أنه ليس لديك أي ألبومات حتى الآن.",
@@ -1577,13 +1452,11 @@
"no_cast_devices_found": "لم يتم ايجاد جهاز بث",
"no_checksum_local": "لا توجد بيانات تحقق متاحة - يتعذر تحميل الاصول المحلية",
"no_checksum_remote": "لا يوجد رمز تحقق متاح - يتعذر تحميل الاصل من الموقع البعيد",
"no_configuration_needed": "لا حاجة إلى أي إعدادات",
"no_devices": "لا يوجد اجهزة مرخصة",
"no_duplicates_found": "لم يتم العثور على أي تكرارات.",
"no_exif_info_available": "لا تتوفر معلومات exif",
"no_explore_results_message": "قم برفع المزيد من الصور لاستكشاف مجموعتك.",
"no_favorites_message": "أضف المفضلة للعثور بسرعة على أفضل الصور ومقاطع الفيديو",
"no_filters_added": "لم تتم إضافة أي فلتر بعد",
"no_libraries_message": "إنشاء مكتبة خارجية لعرض الصور ومقاطع الفيديو الخاصة بك",
"no_local_assets_found": "لم يتم العثور على أي اصول محلية تتطابق مع قيمة التحقق هذه",
"no_location_set": "لم يتم تحديد موقع",
@@ -1597,7 +1470,6 @@
"no_results_description": "جرب كلمة رئيسية مرادفة أو أكثر عمومية",
"no_shared_albums_message": "قم بإنشاء ألبوم لمشاركة الصور ومقاطع الفيديو مع الأشخاص في شبكتك",
"no_uploads_in_progress": "لا يوجد اي ملفات قيد الرفع",
"none": "لا يوجد",
"not_allowed": "غير مسموح",
"not_available": "غير متاح",
"not_in_any_album": "ليست في أي ألبوم",
@@ -1680,7 +1552,6 @@
"people": "الأشخاص",
"people_edits_count": "تم تعديل {count, plural, one {# شخص } other {# أشخاص }}",
"people_feature_description": "تصفح الصور ومقاطع الفيديو المجمعة حسب الأشخاص",
"people_selected": "{count, plural, one {# شخص مختار} other {# اشخاص مختارين}}",
"people_sidebar_description": "عرض رابط للأشخاص في الشريط الجانبي",
"permanent_deletion_warning": "تحذير الحذف الدائم",
"permanent_deletion_warning_setting_description": "إظهار تحذير عند حذف المحتويات نهائيًا",
@@ -1705,14 +1576,11 @@
"person_age_years": "{years, plural, other {# اعوام}} من العمر",
"person_birthdate": "ولد في {date}",
"person_hidden": "{name}{hidden, select, true { (مخفي)} other {}}",
"person_recognized": "شخص تم التعرف عليه",
"person_selected": "شخص مختار",
"photo_shared_all_users": "يبدو أنك شاركت صورك مع جميع المستخدمين أو ليس لديك أي مستخدم للمشاركة معه.",
"photos": "الصور",
"photos_and_videos": "الصور ومقاطع الفيديو",
"photos_count": "{count, plural, one {{count, number} صورة} other {{count, number} صور}}",
"photos_from_previous_years": "صور من السنوات السابقة",
"photos_only": "صور فقط",
"pick_a_location": "اختر موقعًا",
"pick_custom_range": "نطاق مخصص",
"pick_date_range": "حدد نطاق التاريخ",
@@ -1788,12 +1656,10 @@
"purchase_settings_server_activated": "يتم إدارة مفتاح منتج الخادم من قبل مدير النظام",
"query_asset_id": "استعلام عن معرف الأصل",
"queue_status": "يتم الاضافة الى قائمة انتظار النسخ الاحتياطي {count}/{total}",
"rate_asset": "تقييم الاصل",
"rating": "تقييم نجمي",
"rating_clear": "مسح التقييم",
"rating_count": "{count, plural, one {# نجمة} other {# نجوم}}",
"rating_description": "‫‌اعرض تقييم EXIF في لوحة المعلومات",
"rating_set": "تم تحديد التصنيف {rating, plural, one {# نجمة} other {# نجوم}}",
"reaction_options": "خيارات رد الفعل",
"read_changelog": "قراءة سجل التغيير",
"readonly_mode_disabled": "تم تعطيل وضع القراءة فقط",
@@ -1893,11 +1759,9 @@
"saved_settings": "تم حفظ الإعدادات",
"say_something": "قل شيئًا",
"scaffold_body_error_occurred": "حدث خطأ",
"scan": "بحث",
"scan_all_libraries": "فحص كل المكتبات",
"scan_library": "مسح",
"scan_settings": "إعدادات الفحص",
"scanning": "جاري البحث",
"scanning_for_album": "جارٍ الفحص عن ألبوم...",
"search": "البحث",
"search_albums": "البحث في الألبومات",
@@ -1927,7 +1791,6 @@
"search_filter_media_type_title": "اختر نوع الوسائط",
"search_filter_ocr": "البحث عن طريق التعرف البصري على الحروف",
"search_filter_people_title": "اختر الاشخاص",
"search_filter_star_rating": "تقييم النجوم",
"search_for": "البحث عن",
"search_for_existing_person": "البحث عن شخص موجود",
"search_no_more_result": "لا توجد نتائج اضافية",
@@ -1962,23 +1825,17 @@
"second": "ثانية",
"see_all_people": "عرض جميع الأشخاص",
"select": "إختر",
"select_album": "اختر البوم",
"select_album_cover": "تحديد غلاف الألبوم",
"select_albums": "اختر البومات",
"select_all": "تحديد الكل",
"select_all_duplicates": "تحديد جميع النسخ المكررة",
"select_all_in": "اختر الكل في {group}",
"select_avatar_color": "تحديد لون الصورة الشخصية",
"select_count": "{count, plural, one {اختر #} other {اختر #}}",
"select_cutoff_date": "حدد تاريخ القطع",
"select_face": "تحديد وجه",
"select_featured_photo": "تحديد الصورة المميزة",
"select_from_computer": "تحديد من الحاسب الآلي",
"select_keep_all": "تحديد الأحتفاظ بالكل",
"select_library_owner": "تحديد مالِك المكتبة",
"select_new_face": "تحديد وجه جديد",
"select_people": "اختر الاشخاص",
"select_person": "اختر شخص",
"select_person_to_tag": "اختر شخص لوضع علامة",
"select_photos": "تحديد الصور",
"select_trash_all": "تحديد حذف الكلِ",
@@ -2114,7 +1971,6 @@
"show_password": "إظهار كلمة المرور",
"show_person_options": "إظهار خيارات الشخص",
"show_progress_bar": "إظهار شريط التقدم",
"show_schema": "أظهر المخطط",
"show_search_options": "إظهار خيارات البحث",
"show_shared_links": "عرض الروابط المشتركة",
"show_slideshow_transition": "إظهار انتقال عرض الشرائح",
@@ -2132,8 +1988,6 @@
"skip_to_folders": "تخطي إلى المجلدات",
"skip_to_tags": "تخطي إلى العلامات",
"slideshow": "عرض الشرائح",
"slideshow_repeat": "اعادة عرض الشرائح",
"slideshow_repeat_description": "العودة إلى البداية عند انتهاء عرض الشرائح",
"slideshow_settings": "إعدادات عرض الشرائح",
"sort_albums_by": "رتب الألبومات حسب...",
"sort_created": "تاريخ الإنشاء",
@@ -2210,7 +2064,6 @@
"theme_setting_theme_subtitle": "اختر إعدادات مظهر التطبيق",
"theme_setting_three_stage_loading_subtitle": "قد يزيد التحميل من ثلاث مراحل من أداء التحميل ولكنه يسبب تحميل شبكة أعلى بكثير",
"theme_setting_three_stage_loading_title": "تمكين تحميل ثلاث مراحل",
"then": "ثم",
"they_will_be_merged_together": "سيتم دمجهم معًا",
"third_party_resources": "موارد الطرف الثالث",
"time": "وقت",
@@ -2245,13 +2098,6 @@
"trash_page_select_assets_btn": "اختر الأصول",
"trash_page_title": "سلة المهملات ({count})",
"trashed_items_will_be_permanently_deleted_after": "سيتم حذفُ العناصر المحذوفة نِهائيًا بعد {days, plural, one {# يوم} other {# أيام }}.",
"trigger": "مفعِل",
"trigger_asset_uploaded": "تم رفع الاصل",
"trigger_asset_uploaded_description": "يتم تفعيله عند تحميل أصل جديد",
"trigger_description": "حدث يبدأ سير العمل",
"trigger_person_recognized": "تم التعرف على شخص",
"trigger_person_recognized_description": "يتم تفعيله عند اكتشاف شخص",
"trigger_type": "نوع المفعل",
"troubleshoot": "استكشاف المشاكل",
"type": "النوع",
"unable_to_change_pin_code": "تفيير رمز PIN غير ممكن",
@@ -2266,7 +2112,6 @@
"unhide_person": "أظهر الشخص",
"unknown": "غير معروف",
"unknown_country": "بلد غير معروف",
"unknown_date": "تاريخ غير معروف",
"unknown_year": "سنة غير معروفة",
"unlimited": "غير محدود",
"unlink_motion_video": "إلغاء ربط فيديو الحركة",
@@ -2283,14 +2128,13 @@
"unstack": "فك الكومه",
"unstack_action_prompt": "تم ازالة تكديس {count}",
"unstacked_assets_count": "تم إخراج {count, plural, one {# الأصل} other {# الأصول}} من التكديس",
"unsupported_field_type": "نوع حقل غير مدعوم",
"untagged": "غير مُعَلَّم",
"untitled_workflow": "خطة سير عمل بدون عنوان",
"up_next": "التالي",
"update_location_action_prompt": "تحديث موقع {count} عناصر محددة على النحو التالي:",
"updated_at": "تم التحديث",
"updated_password": "تم تحديث كلمة المرور",
"upload": "رفع",
"upload_action_prompt": "{count} ملف في قائمة الانتظار للرفع",
"upload_concurrency": "الرفع المتزامن",
"upload_details": "تفاصيل الرفع",
"upload_dialog_info": "هل تريد النسخ الاحتياطي للأصول (الأصول) المحددة إلى الخادم؟",
@@ -2330,7 +2174,6 @@
"utilities": "أدوات",
"validate": "تحقْق",
"validate_endpoint_error": "الرجاء ادخال عنوان URL صالح",
"validation_error": "خطأ في التحقق",
"variables": "المتغيرات",
"version": "الإصدار",
"version_announcement_closing": "صديقك، أليكس",
@@ -2342,12 +2185,10 @@
"video_hover_setting_description": "تشغيل الصورة المصغرة للفيديو عند تحريك الماوس فوق العنصر. حتى عند التعطيل، يمكن بدء التشغيل عن طريق التمرير فوق رمز التشغيل.",
"videos": "فيديوهات",
"videos_count": "{count, plural, one {# مقطع فيديو } other {# مقاطع الفيديو }}",
"videos_only": "الفديوات فقط",
"view": "عرض",
"view_album": "عرض الألبوم",
"view_all": "عرض الكل",
"view_all_users": "عرض كافة المستخدمين",
"view_asset_owners": "عرض مالكي الأصول",
"view_details": "رؤية التفاصيل",
"view_in_timeline": "عرض في الجدول الزمني",
"view_link": "عرض الرابط",
@@ -2363,36 +2204,19 @@
"viewer_stack_use_as_main_asset": "استخدم كأصل رئيسي",
"viewer_unstack": "فك الكومه",
"visibility_changed": "الرؤية تغيرت لـ {count, plural, one {شخص واحد} other {# عدة أشخاص}}",
"visual": "مرئي",
"visual_builder": "اداة نشاء مرئية",
"waiting": "في الانتظار",
"waiting_count": "الانتظار: {count}",
"warning": "تحذير",
"week": "أسبوع",
"welcome": "مرحباً",
"welcome_to_immich": "مرحباً بك في Immich",
"width": "عُرض",
"wifi_name": "اسم شبكة Wi-Fi",
"workflow_delete_prompt": "هل أنت متأكد من حذف سير العمل هذا؟",
"workflow_deleted": "تم حذف سير العمل",
"workflow_description": "وصف سير العمل",
"workflow_info": "معلومات سير العمل",
"workflow_json": "ملف JSON لسير العمل",
"workflow_json_help": "قم بتعديل إعدادات سير العمل بصيغة JSON. ستتم مزامنة التغييرات مع أداة الإنشاء المرئية.",
"workflow_name": "اسم سير العمل",
"workflow_navigation_prompt": "هل انت متاكد من المغادرة بدون حفظ التغييرات؟",
"workflow_summary": "ملخص سير العمل",
"workflow_update_success": "تم تحديث سير العمل بنجاح",
"workflow_updated": "تم تحديث سير العمل",
"workflows": "سير العمل",
"workflows_help_text": "تعمل سير العمل على أتمتة الإجراءات على أصولك بناءً على المفعلات والفلاتر",
"workflow": "سير العمل",
"wrong_pin_code": "رمز التعريف الشخصي خاطئ",
"year": "سنة",
"years_ago": "{years, plural, one {# سنة} other {# سنوات}} مضت",
"yes": "نعم",
"you_dont_have_any_shared_links": "ليس لديك أي روابط مشتركة",
"your_wifi_name": "اسم شبكة الاتصال اللاسلكي الخاص بك",
"zero_to_clear_rating": "اضغط 0 لمسح تصنيف الاصول",
"zoom_image": "تكبير الصورة",
"zoom_to_bounds": "تكبير حتى حدود المنطقة"
}

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