Compare commits
52 Commits
v1.38.2_60
...
v1.40.1_63
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1eb9ac8217 | ||
|
|
7810dd1942 | ||
|
|
eeb0456356 | ||
|
|
c032cfd99e | ||
|
|
4545249fa3 | ||
|
|
380f719fd8 | ||
|
|
fdf51a8855 | ||
|
|
2d326f47ec | ||
|
|
9c38cc42f6 | ||
|
|
c27c89a680 | ||
|
|
4e860b024b | ||
|
|
0c896d9e59 | ||
|
|
4f8bc641bd | ||
|
|
e0a6119bb7 | ||
|
|
7dc12dea1e | ||
|
|
ab0a3690f3 | ||
|
|
20c5578470 | ||
|
|
bf921a41f9 | ||
|
|
ab56ab9b27 | ||
|
|
d3bc92c3f8 | ||
|
|
2459eabb05 | ||
|
|
f25809befb | ||
|
|
443182c879 | ||
|
|
452bd04272 | ||
|
|
da9c961fca | ||
|
|
feaf21373a | ||
|
|
752b267399 | ||
|
|
7966c925ea | ||
|
|
832692c8af | ||
|
|
14db7a09e3 | ||
|
|
723a7c563f | ||
|
|
21d6874e54 | ||
|
|
354593a70d | ||
|
|
38bf310eac | ||
|
|
1146e61821 | ||
|
|
8ee7504c45 | ||
|
|
e824b55c20 | ||
|
|
6d09cb6b6d | ||
|
|
2d2b9a2ac9 | ||
|
|
69661879eb | ||
|
|
42e57547f7 | ||
|
|
b88e24678b | ||
|
|
de69d0031e | ||
|
|
8998a79ff9 | ||
|
|
e116f17c43 | ||
|
|
efa1781eb6 | ||
|
|
03e86ed147 | ||
|
|
c754c860fd | ||
|
|
391d00bcb9 | ||
|
|
d7297b567d | ||
|
|
e9cebedb4a | ||
|
|
2edbf64e69 |
33
README.md
@@ -29,12 +29,13 @@
|
|||||||
|
|
||||||
## Content
|
## Content
|
||||||
|
|
||||||
- [Official Documentation](https://immich.app/docs/overview/introduction)
|
- [Official Documentation](https://immich.app/docs)
|
||||||
|
- [Roadmap](https://github.com/orgs/immich-app/projects/1)
|
||||||
- [Demo](#demo)
|
- [Demo](#demo)
|
||||||
- [Features](#features)
|
- [Features](#features)
|
||||||
- [Introduction](https://immich.app/docs/overview/introduction)
|
- [Introduction](https://immich.app/docs/overview/introduction)
|
||||||
- [Installation](https://immich.app/docs/installation/requirements)
|
- [Installation](https://immich.app/docs/install/requirements)
|
||||||
- [Contribution Guidelines](https://immich.app/docs/contribution-guidelines)
|
- [Contribution Guidelines](https://immich.app/docs/overview/support-the-project)
|
||||||
- [Support The Project](#support-the-project)
|
- [Support The Project](#support-the-project)
|
||||||
- [Known Issues](#known-issues)
|
- [Known Issues](#known-issues)
|
||||||
|
|
||||||
@@ -67,17 +68,17 @@ Spec: Free-tier Oracle VM - Amsterdam - 2.4Ghz quad-core ARM64 CPU, 24GB RAM
|
|||||||
| Selective album(s) for backup | Yes | N/A |
|
| Selective album(s) for backup | Yes | N/A |
|
||||||
| Download photos and videos to local device | Yes | Yes |
|
| Download photos and videos to local device | Yes | Yes |
|
||||||
| Multi-user support | Yes | Yes |
|
| Multi-user support | Yes | Yes |
|
||||||
| Album | Yes | Yes |
|
| Album and Shared albums | Yes | Yes |
|
||||||
| Shared Albums | Yes | Yes |
|
| Scrubbable/draggable scrollbar | Yes | Yes |
|
||||||
| Quick navigation with draggable scrollbar | Yes | Yes |
|
|
||||||
| Support RAW (HEIC, HEIF, DNG, Apple ProRaw) | Yes | Yes |
|
| Support RAW (HEIC, HEIF, DNG, Apple ProRaw) | Yes | Yes |
|
||||||
| Metadata view (EXIF, map) | Yes | Yes |
|
| Metadata view (EXIF, map) | Yes | Yes |
|
||||||
| Search by metadata, objects and image tags | Yes | No |
|
| Search by metadata, objects and image tags | Yes | No |
|
||||||
| Administrative functions (user management) | N/A | Yes |
|
| Administrative functions (user management) | N/A | Yes |
|
||||||
| Background backup | Android | N/A |
|
| Background backup | Android | N/A |
|
||||||
| Virtual scroll | Yes | Yes |
|
| Virtual scroll | Yes | Yes |
|
||||||
| OAuth Support | Yes | Yes |
|
| OAuth support | Yes | Yes |
|
||||||
| LivePhotos Backup and Playback (iOS only) | Yes | Yes |
|
| LivePhoto backup and playback | iOS | Yes |
|
||||||
|
| User-defined storage structure | Yes | Yes |
|
||||||
|
|
||||||
# Support the project
|
# Support the project
|
||||||
|
|
||||||
@@ -94,18 +95,8 @@ If you feel like this is the right cause and the app is something you are seeing
|
|||||||
|
|
||||||
# Known Issues
|
# Known Issues
|
||||||
|
|
||||||
## TensorFlow Build Issue
|
## immich-machine-learning fails to start
|
||||||
|
|
||||||
_This is a known issue for incorrect Proxmox setup_
|
Symptoms: the container logs `illegal instruction core dump` and restarts
|
||||||
|
|
||||||
TensorFlow doesn't run with older CPU architecture, it requires a CPU with AVX and AVX2 instruction set. If you encounter the error `illegal instruction core dump` when running the docker-compose command above, check for your CPU flags with the command and make sure you see `AVX` and `AVX2`:
|
Solution: https://immich.app/docs/install/requirements#hardware
|
||||||
|
|
||||||
```bash
|
|
||||||
more /proc/cpuinfo | grep flags
|
|
||||||
```
|
|
||||||
|
|
||||||
If you are running virtualization in Proxmox, the VM doesn't have the flag enabled.
|
|
||||||
|
|
||||||
You need to change the CPU type from `kvm64` to `host` under VMs hardware tab.
|
|
||||||
|
|
||||||
`Hardware > Processors > Edit > Advanced > Type (dropdown menu) > host`
|
|
||||||
|
|||||||
@@ -38,8 +38,8 @@
|
|||||||
- [示例](#示例)
|
- [示例](#示例)
|
||||||
- [功能特性](#功能特性)
|
- [功能特性](#功能特性)
|
||||||
- [介绍](https://immich.app/docs/overview/introduction)
|
- [介绍](https://immich.app/docs/overview/introduction)
|
||||||
- [安装](https://immich.app/docs/installation/requirements)
|
- [安装](https://immich.app/docs/install/requirements)
|
||||||
- [贡献指南](https://immich.app/docs/contribution-guidelines)
|
- [贡献指南](https://immich.app/docs/overview/support-the-project)
|
||||||
- [支持本项目](#support-the-project)
|
- [支持本项目](#support-the-project)
|
||||||
- [已知问题](#known-issues)
|
- [已知问题](#known-issues)
|
||||||
|
|
||||||
|
|||||||
@@ -30,12 +30,6 @@ REDIS_HOSTNAME=immich_redis
|
|||||||
|
|
||||||
UPLOAD_LOCATION=absolute_location_on_your_machine_where_you_want_to_store_the_backup
|
UPLOAD_LOCATION=absolute_location_on_your_machine_where_you_want_to_store_the_backup
|
||||||
|
|
||||||
###################################################################################
|
|
||||||
# Log message level - [simple|verbose]
|
|
||||||
###################################################################################
|
|
||||||
|
|
||||||
LOG_LEVEL=simple
|
|
||||||
|
|
||||||
###################################################################################
|
###################################################################################
|
||||||
# JWT SECRET
|
# JWT SECRET
|
||||||
#
|
#
|
||||||
@@ -79,21 +73,6 @@ PUBLIC_LOGIN_PAGE_MESSAGE=
|
|||||||
# Note: immich-microservices is bound to 3002, but no references are made
|
# Note: immich-microservices is bound to 3002, but no references are made
|
||||||
####################################################################################
|
####################################################################################
|
||||||
|
|
||||||
# IMMICH_WEB_URL=http://immich-web:3000
|
IMMICH_WEB_URL=http://immich-web:3000
|
||||||
# IMMICH_SERVER_URL=http://immich-server:3001
|
IMMICH_SERVER_URL=http://immich-server:3001
|
||||||
# IMMICH_MACHINE_LEARNING_URL=http://immich-machine-learning:3003
|
IMMICH_MACHINE_LEARNING_URL=http://immich-machine-learning:3003
|
||||||
|
|
||||||
####################################################################################
|
|
||||||
# OAuth Setting - Optional
|
|
||||||
#
|
|
||||||
# These setting will enable OAuth login for your instance of Immich
|
|
||||||
# Folow the instructions in the page https://immich.app/docs/usage/oauth to set up your OAuth provider
|
|
||||||
####################################################################################
|
|
||||||
|
|
||||||
# OAUTH_ENABLED=false
|
|
||||||
# OAUTH_ISSUER_URL=
|
|
||||||
# OAUTH_CLIENT_ID=
|
|
||||||
# OAUTH_CLIENT_SECRET=
|
|
||||||
# OAUTH_BUTTON_TEXT=Login with OAuth
|
|
||||||
# OAUTH_AUTO_REGISTER=true
|
|
||||||
# OAUTH_SCOPE="openid profile email"
|
|
||||||
|
|||||||
@@ -14,12 +14,47 @@ sidebar_position: 6
|
|||||||
|
|
||||||
### How can I sync an existing directory with Immich's server?
|
### How can I sync an existing directory with Immich's server?
|
||||||
|
|
||||||
Immich doesn't have the mechanism to sync an existing directory with the server. There is however, a helper CLI tool to help you bulk upload the existing photos and videos to the server. You can find the guide to use the CLI tool [here](/docs/usage/bulk-upload.md).
|
Immich doesn't have the mechanism to sync an existing directory with the server. There is however, a helper CLI tool to help you bulk upload the existing photos and videos to the server. You can find the guide to use the CLI tool [here](/docs/features/bulk-upload.md).
|
||||||
|
|
||||||
### Why doesn't Immich watch an existing photo gallery directory?
|
### Why doesn't Immich watch an existing photo gallery directory?
|
||||||
|
|
||||||
The initial approach of Immich is to become a backup tool, primarily for mobile device usage. Thus, all the assets must be uploaded from the mobile client. The app was architectured to perform that job well.
|
The initial approach of Immich is to become a backup tool, primarily for mobile device usage. Thus, all the assets must be uploaded from the mobile client. The app was architectured to perform that job well.
|
||||||
|
|
||||||
|
### What happens to existing files after I choose a new [Storage Template](/docs/features/storage-template.mdx)?
|
||||||
|
|
||||||
|
Template changes will only apply to new assets. To retroactively apply the template to previously uploaded assets, run the Storage Migration Job, available on the [Jobs](/docs/features/jobs.md) page.
|
||||||
|
|
||||||
|
### Why is object detection not very good?
|
||||||
|
|
||||||
|
The model we used for machine learning is a prebuilt model, so the accuracy is not very good. It will hopefully be replaced with a better solution in the future.
|
||||||
|
|
||||||
|
### How can I see Immich logs?
|
||||||
|
|
||||||
|
Most Immich components are typically deployed using docker. To see logs for deployed docker containers, you can use the [Docker CLI](https://docs.docker.com/engine/reference/commandline/cli/), specifically the `docker logs` command. For examples, see [Docker Help](/docs/guides/docker-help.md)
|
||||||
|
|
||||||
|
### How can I run Immich as a non-root user?
|
||||||
|
|
||||||
|
1. Set the `PUID`/`PGID` environment variables (in `.env`).
|
||||||
|
2. Set the corresponding `user` argument in `docker-compose` for each service.
|
||||||
|
3. Add an additional volume to `immich-microservices` that mounts internally to `/usr/src/app/.reverse-geocoding-dump`.
|
||||||
|
|
||||||
|
The non-root user/group needs will need read/write access to the volume mounts, including `UPLOAD_LOCATION`.
|
||||||
|
|
||||||
### How can I reset the admin password?
|
### How can I reset the admin password?
|
||||||
|
|
||||||
The admin password can be reset by running the [reset-admin-password](/docs/usage/server-commands) command on the immich-server.
|
The admin password can be reset by running the [reset-admin-password](/docs/features/server-commands.md) command on the immich-server.
|
||||||
|
|
||||||
|
### How can I **purge** data from Immich?
|
||||||
|
|
||||||
|
Data for Immich comes in two forms:
|
||||||
|
|
||||||
|
1. **Metadata** stored in a postgres database, persisted via the `pg_data` volume
|
||||||
|
2. **Files** (originals, thumbs, profile, etc.), stored in the `UPLOAD_LOCATION` folder.
|
||||||
|
|
||||||
|
To remove the **Metadata** you can stop Immich and delete the volume.
|
||||||
|
|
||||||
|
```bash title="Remove Immich (containers and volumes)"
|
||||||
|
docker-compose down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
After removing the the containers and volumes, the **Files** can be cleaned up (if necessary) from the `UPLOAD_LOCATION` by simply deleting an unwanted files or folders.
|
||||||
|
|||||||
4
docs/docs/developer/_category_.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"label": "Developer",
|
||||||
|
"position": 4
|
||||||
|
}
|
||||||
39
docs/docs/developer/architecture.md
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
# Architecture
|
||||||
|
|
||||||
|
## High Level Diagram
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
Immich is a full-stack [TypeScript](https://www.typescriptlang.org/) application, with a [Flutter](https://flutter.dev/) mobile app.
|
||||||
|
|
||||||
|
### Mobile
|
||||||
|
|
||||||
|
- [Flutter](https://flutter.dev/)
|
||||||
|
- [Riverpod](https://riverpod.dev/) for state management.
|
||||||
|
|
||||||
|
### Web
|
||||||
|
|
||||||
|
- [SvelteKit](https://kit.svelte.dev/)
|
||||||
|
- [tailwindcss](https://tailwindcss.com/)
|
||||||
|
|
||||||
|
### Server
|
||||||
|
|
||||||
|
- [Node.js](https://nodejs.org/)
|
||||||
|
- [Nest.js](https://nestjs.com/)
|
||||||
|
- [TypeORM](https://typeorm.io/) for database management.
|
||||||
|
- [Jest](https://jestjs.io/) for testing.
|
||||||
|
|
||||||
|
### Database
|
||||||
|
|
||||||
|
- [PostgreSQL](https://www.postgresql.org/)
|
||||||
|
- [Redis](https://redis.io/) for job queuing.
|
||||||
|
|
||||||
|
### Web Server
|
||||||
|
|
||||||
|
- [NGINX](https://www.nginx.com/) for internal communication between containers and load balancing when scaling.
|
||||||
|
Before Width: | Height: | Size: 691 KiB After Width: | Height: | Size: 691 KiB |
7
docs/docs/developer/open-api.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 5
|
||||||
|
---
|
||||||
|
|
||||||
|
# Open API
|
||||||
|
|
||||||
|
Immich uses the [Open API](https://swagger.io/specification/) standard to generate API documentation. To view the published docs see [here](/docs/api).
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 5
|
sidebar_position: 2
|
||||||
---
|
---
|
||||||
|
|
||||||
# Contribution guidelines
|
# Setup
|
||||||
|
|
||||||
## Environment setup
|
## Environment
|
||||||
|
|
||||||
### Server and web app
|
### Server and web app
|
||||||
|
|
||||||
@@ -88,6 +88,7 @@ OpenAPI is used to generate the client (Typescript, Dart) SDK. `openapi-generato
|
|||||||
```bash
|
```bash
|
||||||
npm run api:generate # Run from the `server` directory
|
npm run api:generate # Run from the `server` directory
|
||||||
```
|
```
|
||||||
|
|
||||||
You can find the generated client SDK in the `web/src/api` for Typescript SDK and `mobile/openapi` for Dart SDK.
|
You can find the generated client SDK in the `web/src/api` for Typescript SDK and `mobile/openapi` for Dart SDK.
|
||||||
|
|
||||||
## Database migrations
|
## Database migrations
|
||||||
@@ -95,9 +96,11 @@ You can find the generated client SDK in the `web/src/api` for Typescript SDK an
|
|||||||
After making any changes in the `server/libs/database/src/entities`, a database migration need to run in order to register the changes in the database. Follow the steps below to create a new migration.
|
After making any changes in the `server/libs/database/src/entities`, a database migration need to run in order to register the changes in the database. Follow the steps below to create a new migration.
|
||||||
|
|
||||||
1. Attached to the server container shell.
|
1. Attached to the server container shell.
|
||||||
2. Run
|
2. Run
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run typeorm -- migration:generate ./libs/database/src/<migration-name> -d libs/database/src/config/database.config.ts
|
npm run typeorm -- migration:generate ./libs/database/src/<migration-name> -d libs/database/src/config/database.config.ts
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Check if the migration file makes sense.
|
3. Check if the migration file makes sense.
|
||||||
4. Move the migration file to folder `server/libs/database/src/migrations` in your code editor.
|
4. Move the migration file to folder `server/libs/database/src/migrations` in your code editor.
|
||||||
4
docs/docs/features/_category_.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"label": "Features",
|
||||||
|
"position": 3
|
||||||
|
}
|
||||||
@@ -1,20 +1,19 @@
|
|||||||
---
|
|
||||||
sidebar_position: 2
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
# Automatic Backup
|
# Automatic Backup
|
||||||
|
|
||||||
A guide on how the foreground and background automatic backup works.
|
A guide on how the foreground and background automatic backup works.
|
||||||
|
|
||||||
<img src={require('./img/background-foreground-backup.png').default} width="50%" title="Foreground&Background Backup" />
|
<img src={require('./img/background-foreground-backup.png').default} width="50%" title="Foreground&Background Backup" />
|
||||||
|
|
||||||
On iOS, there is only one option for automatic backup
|
On iOS, there is only one option for automatic backup
|
||||||
* [**Foreground backup**](#foreground-backup)
|
|
||||||
|
|
||||||
On Android, there are two options for automatic backup
|
- [Automatic Backup](#automatic-backup)
|
||||||
* [**Foreground backup**](#foreground-backup)
|
- [Foreground backup](#foreground-backup)
|
||||||
* [**Background backup**](#background-backup)
|
|
||||||
|
On Android, there are two options for automatic backup
|
||||||
|
|
||||||
|
- [Automatic Backup](#automatic-backup)
|
||||||
|
- [Foreground backup](#foreground-backup)
|
||||||
|
- [Background backup](#background-backup)
|
||||||
|
|
||||||
## Foreground backup
|
## Foreground backup
|
||||||
|
|
||||||
@@ -22,14 +21,16 @@ If foreground backup is enabled: whenever the app is opened or resumed, it will
|
|||||||
|
|
||||||
## Background backup
|
## Background backup
|
||||||
|
|
||||||
Background backup is only available on Android thanks to the contribution effort of [@zoodyy](https://github.com/zoodyy).
|
Background backup is only available on Android thanks to the contribution effort of [@zoodyy](https://github.com/zoodyy).
|
||||||
|
|
||||||
If background backup is enabled. The app will periodically check if there are any new photos or videos in the selected album(s) to be uploaded to the cloud. If there are, it will upload them to the cloud in the background.
|
If background backup is enabled. The app will periodically check if there are any new photos or videos in the selected album(s) to be uploaded to the cloud. If there are, it will upload them to the cloud in the background.
|
||||||
|
|
||||||
A native Android notification shows up when the background upload is in progress. You can further customize the notification by going to the app's settings.
|
A native Android notification shows up when the background upload is in progress. You can further customize the notification by going to the app's settings.
|
||||||
|
|
||||||
:::note
|
:::info Note
|
||||||
* The app must be in the background for the backup worker to start running.
|
|
||||||
* 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.
|
- 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.
|
- 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.
|
||||||
|
- 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.
|
||||||
|
|
||||||
:::
|
:::
|
||||||
@@ -1,7 +1,3 @@
|
|||||||
---
|
|
||||||
sidebar_position: 3
|
|
||||||
---
|
|
||||||
|
|
||||||
# Bulk Upload (Using the CLI)
|
# Bulk Upload (Using the CLI)
|
||||||
|
|
||||||
You can use the CLI to upload an existing gallery to the Immich server
|
You can use the CLI to upload an existing gallery to the Immich server
|
||||||
BIN
docs/docs/features/img/admin-jobs-exif.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
docs/docs/features/img/admin-jobs-objects.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
docs/docs/features/img/admin-jobs-template.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
docs/docs/features/img/admin-jobs-thumbnails.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 220 KiB After Width: | Height: | Size: 220 KiB |
BIN
docs/docs/features/img/oauth-settings.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
docs/docs/features/img/reverse-geocoding-mobile1.png
Normal file
|
After Width: | Height: | Size: 189 KiB |
BIN
docs/docs/features/img/reverse-geocoding-mobile2.png
Normal file
|
After Width: | Height: | Size: 277 KiB |
BIN
docs/docs/features/img/user-change-password.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
docs/docs/features/img/user-popup.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
docs/docs/features/img/user-profile.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
23
docs/docs/features/jobs.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# Jobs
|
||||||
|
|
||||||
|
Several Immich functionalities are implemented as jobs, which run in the background. To view the status of a job navigate to the Administration Screen, and then the `Jobs` page.
|
||||||
|
|
||||||
|
|
||||||
|
## Generate Thumbnails
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## Extract Exif
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Detect Objects
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Storage Migration
|
||||||
|
|
||||||
|
This job can be run after changing the [Storage Template](/docs/features/storage-template.mdx), in order to apply the change to the existing library.
|
||||||
|
|
||||||
|

|
||||||
33
docs/docs/features/mobile-app.mdx
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import MobileAppDownload from '../partials/_mobile-app-download.md';
|
||||||
|
import MobileAppLogin from '../partials/_mobile-app-login.md';
|
||||||
|
import MobileAppBackup from '../partials/_mobile-app-login.md';
|
||||||
|
|
||||||
|
# Mobile App
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
To upload from other devices, try using the [Bulk Upload CLI](/docs/features/bulk-upload.md).
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
<MobileAppDownload />
|
||||||
|
|
||||||
|
:::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 />
|
||||||
|
|
||||||
|
## Backup
|
||||||
|
|
||||||
|
<MobileAppBackup />
|
||||||
|
|
||||||
|
:::info
|
||||||
|
You can enable automatic backup on supported devices. For more information see [Automatic Backup](/docs/features/automatic-backup.md).
|
||||||
|
:::
|
||||||
85
docs/docs/features/oauth.md
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
# OAuth Authentication
|
||||||
|
|
||||||
|
This page contains details about using OAuth in Immich.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Immich supports 3rd party authentication via [OpenID Connect][oidc] (OIDC), an identity layer built on top of OAuth2. OIDC is supported by most identity providers, including:
|
||||||
|
|
||||||
|
- [Authentik](https://goauthentik.io/integrations/sources/oauth/#openid-connect)
|
||||||
|
- [Authelia](https://www.authelia.com/configuration/identity-providers/open-id-connect/)
|
||||||
|
- [Okta](https://www.okta.com/openid-connect/)
|
||||||
|
- [Google](https://developers.google.com/identity/openid-connect/openid-connect)
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
Before enabling OAuth in Immich, a new client application needs to be configured in the 3rd-party authentication server. While the specifics of this setup vary from provider to provider, the general approach should be the same.
|
||||||
|
|
||||||
|
1. Create a new (Client) Application
|
||||||
|
|
||||||
|
1. The **Provider** type should be `OpenID Connect` or `OAuth2`
|
||||||
|
2. The **Client type** should be `Confidential`
|
||||||
|
3. The **Application** type should be `Web`
|
||||||
|
4. The **Grant** type should be `Authorization Code`
|
||||||
|
|
||||||
|
2. Configure Redirect URIs/Origins
|
||||||
|
|
||||||
|
The **Sign-in redirect URIs** should include:
|
||||||
|
|
||||||
|
- `app.immich:/` - for logging in with OAuth from the [Mobile App](/docs/features/mobile-app.mdx)
|
||||||
|
- `http://DOMAIN:PORT/auth/login` - for logging in with OAuth from the Web Client
|
||||||
|
- `http://DOMAIN:PORT/user-settings` - for manually linking OAuth in the Web Client
|
||||||
|
|
||||||
|
:::info Redirect URIs
|
||||||
|
|
||||||
|
Redirect URIs should contain all the domains you will be using to access Immich. Some examples include:
|
||||||
|
|
||||||
|
Mobile
|
||||||
|
|
||||||
|
- `app.immich:/` (You **MUST** include this for iOS and Android mobile apps to work properly)
|
||||||
|
|
||||||
|
Localhost
|
||||||
|
|
||||||
|
- `http://localhost:2283/auth/login`
|
||||||
|
- `http://localhost:2283/user-settings`
|
||||||
|
|
||||||
|
Local IP
|
||||||
|
|
||||||
|
- `http://192.168.0.200:2283/auth/login`
|
||||||
|
- `http://192.168.0.200:2283/user-settings`
|
||||||
|
|
||||||
|
Hostname
|
||||||
|
|
||||||
|
- `https://immich.example.com/auth/login`)
|
||||||
|
- `https://immich.example.com/user-settings`)
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Enable OAuth
|
||||||
|
|
||||||
|
Once you have a new OAuth client application configured, Immich can be configured using the Administration Settings page, available on the web (Administration -> Settings).
|
||||||
|
|
||||||
|
| Setting | Type | Default | Description |
|
||||||
|
| ------------- | ------- | -------------------- | ------------------------------------------------------------------------- |
|
||||||
|
| Enabled | boolean | false | Enable/disable OAuth |
|
||||||
|
| Issuer URL | URL | (required) | Required. Self-discovery URL for client (from previous step) |
|
||||||
|
| Client ID | string | (required) | Required. Client ID (from previous step) |
|
||||||
|
| Client secret | string | (required) | Required. Client Secret (previous step) |
|
||||||
|
| Scope | string | openid email profile | Full list of scopes to send with the request (space delimited) |
|
||||||
|
| Button text | string | Login with OAuth | Text for the OAuth button on the web |
|
||||||
|
| Auto register | boolean | true | When true, will automatically register a user the first time they sign in |
|
||||||
|
|
||||||
|
:::info
|
||||||
|
The Issuer URL should look something like the following, and return a valid json document.
|
||||||
|
|
||||||
|
- `https://accounts.google.com/.well-known/openid-configuration`
|
||||||
|
- `http://localhost:9000/application/o/immich/.well-known/openid-configuration`
|
||||||
|
|
||||||
|
The `.well-known/openid-configuration` part of the url is optional and will be automatically added during discovery.
|
||||||
|
:::
|
||||||
|
|
||||||
|
Here's an example of OAuth configured for Authentik:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
[oidc]: https://openid.net/connect/
|
||||||
14
docs/docs/features/reverse-geocoding.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Reverse Geocoding
|
||||||
|
|
||||||
|
Immich supports [Reverse Geocoding](https://en.wikipedia.org/wiki/Reverse_geocoding) using data from the [GeoNames](https://www.geonames.org/) geographical database.
|
||||||
|
|
||||||
|
## Extraction
|
||||||
|
|
||||||
|
During Exif Extraction, assets with latitudes and longitudes are reverse geocoded to determine their City, State, and Country.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Data from a reverse geocode is displayed in the image details, and used in [Search](/docs/features/search.md).
|
||||||
|
|
||||||
|
<img src={require('./img/reverse-geocoding-mobile1.png').default} width='33%' title='Reverse Geocoding' />
|
||||||
|
<img src={require('./img/reverse-geocoding-mobile2.png').default} width='33%' title='Reverse Geocoding' />
|
||||||
16
docs/docs/features/search.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# Search
|
||||||
|
|
||||||
|
:::warning Work In Progress
|
||||||
|
Search is work-in-progress and subject to change. Stay tuned!
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Search by Place
|
||||||
|
|
||||||
|
:::info
|
||||||
|
Searching is currently only implemented in the [Mobile App](/docs/features/mobile-app.mdx)
|
||||||
|
:::
|
||||||
|
|
||||||
|
Searching by the name of a city, state, or country is possible for assets with geolocation data and successful [Reverse Geocoding](/docs/features/reverse-geocoding.md).
|
||||||
|
|
||||||
|
<img src={require('./img/reverse-geocoding-mobile1.png').default} width='33%' title='Reverse Geocoding' />
|
||||||
|
<img src={require('./img/reverse-geocoding-mobile2.png').default} width='33%' title='Reverse Geocoding' />
|
||||||
@@ -1,7 +1,3 @@
|
|||||||
---
|
|
||||||
sidebar_position: 5
|
|
||||||
---
|
|
||||||
|
|
||||||
# Server Commands
|
# Server Commands
|
||||||
|
|
||||||
The `immich-server` docker image comes preinstalled with an administrative CLI that supports the following commands:
|
The `immich-server` docker image comes preinstalled with an administrative CLI that supports the following commands:
|
||||||
5
docs/docs/features/storage-template.mdx
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import StorageTemplate from '../partials/_storage-template.md';
|
||||||
|
|
||||||
|
# Storage Template
|
||||||
|
|
||||||
|
<StorageTemplate />
|
||||||
18
docs/docs/features/user-management.mdx
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import RegisterAdminUser from '../partials/_register-admin.md';
|
||||||
|
import UserCreate from '../partials/_user-create.md';
|
||||||
|
|
||||||
|
# User Management
|
||||||
|
|
||||||
|
Immich supports multiple users, each with their own library.
|
||||||
|
|
||||||
|
## Register the Admin User
|
||||||
|
|
||||||
|
<RegisterAdminUser />
|
||||||
|
|
||||||
|
## Create a New User
|
||||||
|
|
||||||
|
<UserCreate />
|
||||||
|
|
||||||
|
## Delete a User
|
||||||
|
|
||||||
|
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.
|
||||||
23
docs/docs/features/user-settings.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# User Settings
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## User Profile
|
||||||
|
|
||||||
|
View your User ID and email, and update your first and last name.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Change Password
|
||||||
|
|
||||||
|
Users can change their own passwords.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
:::tip Reset Password
|
||||||
|
The admin can reset a password through the [User Management](/docs/features/user-management.mdx) screen.
|
||||||
|
:::
|
||||||
|
|
||||||
|
:::tip Reset Admin Password
|
||||||
|
The admin password can be reset using a [Server Command](/docs/features/server-commands.md)
|
||||||
|
:::
|
||||||
4
docs/docs/guides/_category_.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"label": "Guides",
|
||||||
|
"position": 5
|
||||||
|
}
|
||||||
23
docs/docs/guides/docker-help.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
# Docker Help
|
||||||
|
|
||||||
|
## Logs
|
||||||
|
|
||||||
|
```bash title="Log Examples"
|
||||||
|
docker ps # see a list of running containers
|
||||||
|
docker ps -a # see a list of running and stopped containers
|
||||||
|
docker logs <id or name> # see the logs for a specific container (by id or name)
|
||||||
|
|
||||||
|
docker logs immich_server
|
||||||
|
docker logs immich_microservices
|
||||||
|
docker logs immich_machine_learning
|
||||||
|
docker logs immich_web
|
||||||
|
docker logs immich_proxy
|
||||||
|
```
|
||||||
|
|
||||||
|
:::tip Follow a log
|
||||||
|
Adding `--follow` to a `docker logs <id or name>` command will stream new logs, instead of immediately exiting, which is often useful for debugging.
|
||||||
|
:::
|
||||||
4
docs/docs/install/_category_.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"label": "Install",
|
||||||
|
"position": 2
|
||||||
|
}
|
||||||
@@ -2,14 +2,15 @@
|
|||||||
sidebar_position: 3
|
sidebar_position: 3
|
||||||
---
|
---
|
||||||
|
|
||||||
|
# Docker Compose [Recommended]
|
||||||
|
|
||||||
# Recommended installation
|
Docker Compose is the recommended method to run Immich in production. Below are the steps to deploy Immich with Docker Compose.
|
||||||
|
|
||||||
This is the recommended installation method for production use.
|
|
||||||
|
|
||||||
### Step 1 - Download the required files
|
### Step 1 - Download the required files
|
||||||
|
|
||||||
From a directory of your choice (e.g. `./immich-app`) run the following commands
|
Download [`docker-compose.yml`][compose-file] [`.env.example`][env-file].
|
||||||
|
|
||||||
|
From a directory of your choice (e.g. `./immich-app`) run the following commands:
|
||||||
|
|
||||||
```bash title="Get docker-compose.yml file"
|
```bash title="Get docker-compose.yml file"
|
||||||
wget https://raw.githubusercontent.com/immich-app/immich/main/docker/docker-compose.yml
|
wget https://raw.githubusercontent.com/immich-app/immich/main/docker/docker-compose.yml
|
||||||
@@ -99,9 +100,9 @@ PUBLIC_LOGIN_PAGE_MESSAGE="My Family Photos and Videos Backup Server"
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
* Populate custom database information if necessary.
|
- Populate custom database information if necessary.
|
||||||
* Populate `UPLOAD_LOCATION` with your preferred location for storing backup assets.
|
- Populate `UPLOAD_LOCATION` with your preferred location for storing backup assets.
|
||||||
* Populate a secret value for `JWT_SECRET`. You can use the command below to generate a secure key:
|
- Populate a secret value for `JWT_SECRET`. You can use the command below to generate a secure key:
|
||||||
|
|
||||||
```bash title="Command to generate secure JWT_SECRET key"
|
```bash title="Command to generate secure JWT_SECRET key"
|
||||||
openssl rand -base64 128
|
openssl rand -base64 128
|
||||||
@@ -114,5 +115,16 @@ docker-compose up -d # or `docker compose up -d` based on your docker-compose ve
|
|||||||
```
|
```
|
||||||
|
|
||||||
:::tip
|
:::tip
|
||||||
For more information on how to use the application, please refer to the [Post Installation](/docs/usage/post-installation) guide.
|
For more information on how to use the application, please refer to the [Post Installation](/docs/install/post-install.mdx) guide.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
### Step 4 - Upgrading
|
||||||
|
|
||||||
|
When a new version of Immich is [released](https://github.com/immich-app/immich/releases), the application can be upgraded with the following commands, run in the directory with the `docker-compose.yml` file:
|
||||||
|
|
||||||
|
```bash title="Upgrade Immich"
|
||||||
|
docker-compose pull && docker-compose up -d # Or `docker compose`
|
||||||
|
```
|
||||||
|
|
||||||
|
[compose-file]: https://raw.githubusercontent.com/immich-app/immich/main/docker/docker-compose.yml
|
||||||
|
[env-file]: https://raw.githubusercontent.com/immich-app/immich/main/docker/.env.example
|
||||||
|
Before Width: | Height: | Size: 211 KiB After Width: | Height: | Size: 211 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 202 KiB After Width: | Height: | Size: 202 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 910 B After Width: | Height: | Size: 910 B |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
BIN
docs/docs/install/img/unraid09.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
docs/docs/install/img/unraid10.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
docs/docs/install/img/unraid11.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
docs/docs/install/img/unraid12.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
@@ -50,5 +50,5 @@ openssl rand -base64 128
|
|||||||
|
|
||||||
|
|
||||||
:::tip
|
:::tip
|
||||||
For more information on how to use the application, please refer to the [Post Installation](/docs/usage/post-installation) guide.
|
For more information on how to use the application, please refer to the [Post Installation](/docs/install/post-install.mdx) guide.
|
||||||
:::
|
:::
|
||||||
38
docs/docs/install/post-install.mdx
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 100
|
||||||
|
---
|
||||||
|
|
||||||
|
import RegisterAdminUser from '../partials/_register-admin.md';
|
||||||
|
import UserCreate from '../partials/_user-create.md';
|
||||||
|
import StorageTemplate from '../partials/_storage-template.md';
|
||||||
|
import MobileAppDownload from '../partials/_mobile-app-download.md';
|
||||||
|
import MobileAppLogin from '../partials/_mobile-app-login.md';
|
||||||
|
import MobileAppBackup from '../partials/_mobile-app-backup.md';
|
||||||
|
|
||||||
|
# Post Install Steps
|
||||||
|
|
||||||
|
A list of common steps to take after installing Immich include:
|
||||||
|
|
||||||
|
## Step 1 - Register the Admin User
|
||||||
|
|
||||||
|
<RegisterAdminUser />
|
||||||
|
|
||||||
|
## Step 2 - Create a New User (optional)
|
||||||
|
|
||||||
|
<UserCreate />
|
||||||
|
|
||||||
|
## Step 3 - Update the Storage Template
|
||||||
|
|
||||||
|
<StorageTemplate />
|
||||||
|
|
||||||
|
## Step 4 - Download the Mobile App
|
||||||
|
|
||||||
|
<MobileAppDownload />
|
||||||
|
|
||||||
|
## Step 5 - Login to the Mobile App
|
||||||
|
|
||||||
|
<MobileAppLogin />
|
||||||
|
|
||||||
|
## Step 6 - Backup Your Library
|
||||||
|
|
||||||
|
<MobileAppBackup />
|
||||||
47
docs/docs/install/requirements.md
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
# Requirements
|
||||||
|
Hardware and software requirements for Immich
|
||||||
|
|
||||||
|
## Software
|
||||||
|
|
||||||
|
- [Docker](https://docs.docker.com/get-docker/)
|
||||||
|
- [Docker Compose](https://docs.docker.com/compose/install/)
|
||||||
|
|
||||||
|
:::info Podman
|
||||||
|
You can also use Podman to run the application. However, additional configuration might be required.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Hardware
|
||||||
|
|
||||||
|
- **OS**: Preferred unix-based operating system (Ubuntu, Debian, MacOS, etc). Windows works too, with [Docker Desktop on Windows](https://docs.docker.com/desktop/install/windows-install/)
|
||||||
|
- **RAM**: At least 2GB, preferred 4GB.
|
||||||
|
- **CPU**: At least 2 cores, preferred 4 cores.
|
||||||
|
|
||||||
|
:::info Machine Learning on older CPU
|
||||||
|
|
||||||
|
The TensorFlow version used by Immich doesn't run on older CPU architectures. It requires a CPU with AVX and AVX2 instruction sets. If you encounter the error `illegal instruction core dump` check your CPU flags with the command below and make sure you see `avx` and `avx2`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
grep -E 'avx2?' /proc/cpuinfo
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Promox
|
||||||
|
|
||||||
|
If you are running virtualization in Proxmox, the CPU type of the VM is probably configured incorrectly.
|
||||||
|
|
||||||
|
You need to change the CPU type from `kvm64` to `host` under VMs hardware tab.
|
||||||
|
|
||||||
|
`Hardware > Processors > Edit > Advanced > Type (dropdown menu) > host`
|
||||||
|
|
||||||
|
#### Other platforms
|
||||||
|
|
||||||
|
You can use the machine learning image that is built for Non-AVX CPU. The image is community maintained and can be found in the repository below
|
||||||
|
|
||||||
|
https://github.com/bertmelis/immich-machine-learning-no-avx
|
||||||
|
|
||||||
|
Otherwise, you can safely remove the `immich-machine-learning` service if you do not intend to use Immich's object detection features. Simply remove or comment out the declaration of the service in your compose file.
|
||||||
|
:::
|
||||||
@@ -2,10 +2,10 @@
|
|||||||
sidebar_position: 2
|
sidebar_position: 2
|
||||||
---
|
---
|
||||||
|
|
||||||
# One-step installation
|
# Install Script [Experimental]
|
||||||
|
|
||||||
:::caution
|
:::caution
|
||||||
This method is for evaluation purposes only. It is not recommended for production use. For production usage, please refer to the recommended installation method [here](/docs/installation/recommended-installation).
|
This method is experimental and not currently recommended for production use. For production, please refer to installing with [Docker Compose](/docs/install/docker-compose.md).
|
||||||
:::
|
:::
|
||||||
|
|
||||||
In the shell, from a directory of your choice, run the following command:
|
In the shell, from a directory of your choice, run the following command:
|
||||||
@@ -25,5 +25,5 @@ The web application will be available at `http://<machine-ip-address>:2283`, and
|
|||||||
The directory which is used to store the library files is `./immich-data` relative to the current directory.
|
The directory which is used to store the library files is `./immich-data` relative to the current directory.
|
||||||
|
|
||||||
:::tip
|
:::tip
|
||||||
For more information on how to use the application, please refer to the [Post Installation](/docs/usage/post-installation) guide.
|
For common next steps, see [Post Install Steps](/docs/install/post-install.mdx).
|
||||||
:::
|
:::
|
||||||
@@ -4,7 +4,7 @@ sidebar_position: 5
|
|||||||
|
|
||||||
# Unraid
|
# Unraid
|
||||||
|
|
||||||
Install Immich on Unraid using the [Docker Compose Manager](https://forums.unraid.net/topic/114415-plugin-docker-compose-manager/) plugin from the Unraid Community Apps.
|
Immich can easily be installed and updated on Unraid using the [Docker Compose Manager](https://forums.unraid.net/topic/114415-plugin-docker-compose-manager/) plugin from the Unraid Community Apps.
|
||||||
|
|
||||||
:::info
|
:::info
|
||||||
|
|
||||||
@@ -15,6 +15,8 @@ Install Immich on Unraid using the [Docker Compose Manager](https://forums.unrai
|
|||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
## Installation Steps
|
||||||
|
|
||||||
1. Go to "**Plugins**" and click on "**Compose.Manager**"
|
1. Go to "**Plugins**" and click on "**Compose.Manager**"
|
||||||
2. Click "**Add New Stack**" and when prompted for a label enter "**Immich**"
|
2. Click "**Add New Stack**" and when prompted for a label enter "**Immich**"
|
||||||
|
|
||||||
@@ -103,5 +105,38 @@ alt="Go to Docker Tab and visit the address listed next to immich-proxy"
|
|||||||
</details>
|
</details>
|
||||||
|
|
||||||
:::tip
|
:::tip
|
||||||
For more information on how to use the application once installed, please refer to the [Post Installation](/docs/usage/post-installation) guide.
|
For more information on how to use the application once installed, please refer to the [Post Install](/docs/install/post-install.mdx) guide.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
## Updating Steps
|
||||||
|
|
||||||
|
Updating is extremely easy however it's important to be aware that containers managed via the Docker Compose Manager plugin do not integrate with Unraid's native dockerman ui, the label "_update ready_" will always be present on containers installed via the Docker Compose Manager.
|
||||||
|
|
||||||
|
<img
|
||||||
|
src={require('./img/unraid09.png').default}
|
||||||
|
width="50%"
|
||||||
|
alt="Docker Compose containers always say update ready, ignore it"
|
||||||
|
/>
|
||||||
|
|
||||||
|
You should ignore the "_update ready_" on the Unraid WebUI and update when you receive the notification within the Immich WebUI.
|
||||||
|
<img
|
||||||
|
src={require('./img/unraid10.png').default}
|
||||||
|
width="50%"
|
||||||
|
alt="Immich update notification"
|
||||||
|
/>
|
||||||
|
|
||||||
|
1. Go to the "**Docker**" tab and scroll to the Compose section
|
||||||
|
2. Next to Immich click the "**Update Stack**" button and Unraid will begin to update all Immmich related containers
|
||||||
|
> Note: **Do not** select Compose Down first, it is unecessary.
|
||||||
|
3. Once complete you will see a "_Connection Closed_" message, select "**Done**".
|
||||||
|
<img
|
||||||
|
src={require('./img/unraid11.png').default}
|
||||||
|
width="50%"
|
||||||
|
alt="Wait for Connection Closed and click Done"
|
||||||
|
/>
|
||||||
|
4. Return back to the Immich WebUI and you will see the version has been updated to the latest
|
||||||
|
<img
|
||||||
|
src={require('./img/unraid12.png').default}
|
||||||
|
width="70%"
|
||||||
|
alt="Wait for Connection Closed and click Done"
|
||||||
|
/>
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"label": "Installation",
|
|
||||||
"position": 2,
|
|
||||||
"link": {
|
|
||||||
"type": "generated-index",
|
|
||||||
"description": "Installation methods of Immich"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
---
|
|
||||||
sidebar_position: 1
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
# Requirements
|
|
||||||
Hardware and software requirements for Immich
|
|
||||||
|
|
||||||
## Software
|
|
||||||
|
|
||||||
- [Docker](https://docs.docker.com/get-docker/)
|
|
||||||
- [Docker Compose](https://docs.docker.com/compose/install/)
|
|
||||||
|
|
||||||
:::info Podman
|
|
||||||
You can also use Podman to run the application. However, additional configuration might be required on your end.
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Hardware
|
|
||||||
|
|
||||||
- **OS**: Preferred unix-based operating system (Ubuntu, Debian, MacOS, etc). Windows works too, with [Docker Desktop on Windows](https://docs.docker.com/desktop/install/windows-install/)
|
|
||||||
- **RAM**: At least 2GB, preferred 4GB.
|
|
||||||
- **CPU**: At least 2 cores, preferred 4 cores.
|
|
||||||
|
|
||||||
## Installation methods
|
|
||||||
|
|
||||||
There are a couple installation methods that you can use to install the application. You can choose the one that suits you the best.
|
|
||||||
|
|
||||||
1. [One-step installation (Evaluation only)](/docs/installation/one-step-installation)
|
|
||||||
2. **[Docker Compose with manual configuration (Recommended)](/docs/installation/recommended-installation)**
|
|
||||||
3. [Portainer](/docs/installation/portainer-installation)
|
|
||||||
4. [Unraid (Community contribution)](/docs/installation/unraid-installation)
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
sidebar_position: 4
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
# Mobile app Beta program
|
|
||||||
|
|
||||||
Join the beta release channel to test the latest update of the app
|
|
||||||
|
|
||||||
You can opt-in to join app beta release channel by following 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)
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
{
|
{
|
||||||
"label": "Getting Started",
|
"label": "Overview",
|
||||||
"position": 1,
|
"position": 1
|
||||||
"link": {
|
|
||||||
"type": "generated-index",
|
|
||||||
"description": "Getting to know Immich"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
16
docs/docs/overview/help.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 4
|
||||||
|
---
|
||||||
|
|
||||||
|
# Help Me!
|
||||||
|
|
||||||
|
Running into an issue or have a question? Try the following:
|
||||||
|
|
||||||
|
1. Check the [FAQs](/docs/FAQ.md).
|
||||||
|
2. Read through the [Release Notes][github-releases].
|
||||||
|
3. Search through existing [Github Issues][github-issues].
|
||||||
|
4. Open a help ticket on [Discord][discord-link].
|
||||||
|
|
||||||
|
[github-issues]: https://github.com/immich-app/immich/releases
|
||||||
|
[github-releases]: https://github.com/immich-app/immich/releases
|
||||||
|
[discord-link]: https://discord.com/invite/D8JsnBEuKb
|
||||||
@@ -4,14 +4,12 @@ sidebar_position: 1
|
|||||||
|
|
||||||
# Introduction
|
# Introduction
|
||||||
|
|
||||||
|
<img src={require('./img/feature-panel.png').default} alt='Immich' />
|
||||||
|
|
||||||
|
## Welcome!
|
||||||
|
|
||||||
Hello, I am glad you are here.
|
Hello, I am glad you are here.
|
||||||
|
|
||||||
<p style={{textAlign: 'center'}}>
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
</p>
|
|
||||||
|
|
||||||
My name is Alex. I am an Electrical Engineer by schooling, then turned into a Software Engineer by trade and the pure love of problem solving.
|
My name is Alex. I am an Electrical Engineer by schooling, then turned into a Software Engineer by trade and the pure love of problem solving.
|
||||||
|
|
||||||
We were lying in bed with our newborn, and my wife said, "We are starting to accumulate a lot of photos and videos of our baby, and I don't want to pay for **_App-Which-Must-Not-Be-Named_** anymore. You always want to build something for me, so why don't you build me an app which can do that?"
|
We were lying in bed with our newborn, and my wife said, "We are starting to accumulate a lot of photos and videos of our baby, and I don't want to pay for **_App-Which-Must-Not-Be-Named_** anymore. You always want to build something for me, so why don't you build me an app which can do that?"
|
||||||
@@ -22,4 +20,4 @@ Another motivation that pushed me to deliver my execution of the **_App-Which-Mu
|
|||||||
|
|
||||||
I'm proud to share this creation with you, which values privacy, memories, and the joy of looking back at those moments in an easy-to-use and friendly interface.
|
I'm proud to share this creation with you, which values privacy, memories, and the joy of looking back at those moments in an easy-to-use and friendly interface.
|
||||||
|
|
||||||
If you like the application or it helps you in some way, please consider [supporting](./support-the-project.md) to the project. It will help me to continue to develop and maintain the application.
|
If you like the application or it helps you in some way, please consider [supporting](./support-the-project.md) the project. It will help me to continue to develop and maintain the application.
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
sidebar_position: 2
|
sidebar_position: 2
|
||||||
---
|
---
|
||||||
|
|
||||||
# Logo meaning
|
# Logo
|
||||||
|
|
||||||
Why the colorful flower, you ask?
|
Why the colorful flower, you ask?
|
||||||
|
|
||||||
I really like the Japanese culture, especially the books, history, and food. The current logo is a spin-off of [the Oda clan's symbol](https://en.wikipedia.org/wiki/Oda_clan).
|
I really like the Japanese culture, especially the books, history, and food. The current logo is a spin-off of [the Oda clan's symbol](https://en.wikipedia.org/wiki/Oda_clan).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -2,19 +2,26 @@
|
|||||||
sidebar_position: 3
|
sidebar_position: 3
|
||||||
---
|
---
|
||||||
|
|
||||||
# Support the project
|
# Support The Project
|
||||||
|
|
||||||
I've committed to this project, and I will not stop. I will keep updating the docs, adding new features, and fixing bugs. But I can't do it alone, so I need your help to give me additional motivation to keep going.
|
I am committed to this project, and I will not stop. I will keep updating the docs, adding new features, and fixing bugs. But I can't do it alone, so I need your help to give me additional motivation to keep going.
|
||||||
|
|
||||||
As our hosts in the [selfhosted.show - In the episode 'The-organization-which-must-not-be-named is a Hostile Actor'](https://selfhosted.show/79?t=1418) said, this is a massive undertaking that the team and I are doing. I would love to someday be able to do this full-time, and I am asking for your help to make that happen.
|
As our hosts in the [selfhosted.show - In the episode 'The-organization-which-must-not-be-named is a Hostile Actor'](https://selfhosted.show/79?t=1418) said, this is a massive undertaking that the team and I are doing. I would love to someday be able to do this full-time, and I am asking for your help to make that happen.
|
||||||
|
|
||||||
If you feel like this is the right cause and the app is something you see yourself using for a long time, please consider supporting the project with the options below.
|
If you feel like this is the right cause and the app is something you see yourself using for a long time, please consider supporting the project with one of the options below.
|
||||||
|
|
||||||
## Donation
|
## Donation
|
||||||
|
|
||||||
* Monthly donation via [GitHub Sponsors](https://github.com/sponsors/alextran1502)
|
- Monthly donation via [GitHub Sponsors](https://github.com/sponsors/alextran1502)
|
||||||
* One-time donation via [Github Sponsors](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502)
|
- One-time donation via [Github Sponsors](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502)
|
||||||
|
|
||||||
## Contribution
|
## Contributing
|
||||||
|
|
||||||
If you are a programmer/developer and the app's [technology stack](./technology-stack.md) is something you are familiar with, please consider contributing to the project. The team and I are always looking for new contributors. You can refer to the [contribution guildelines](/docs/contribution-guidelines) to start leaving your mark on the project.
|
There are lots of non-monetary ways to contribute to Immich as well.
|
||||||
|
|
||||||
|
1. Testing - Using Immich and reporting bugs is a great way to help support the project. Found a bug? [Open an issue on Github][github-issue].
|
||||||
|
1. Translations - The Immich mobile app has been translated into [17 languages][github-langs] so far! To contribute with translations, email me at alex.tran1502@gmail.com or send me a message on discord.
|
||||||
|
1. Development - If you are a programmer or developer, take a look at Immich's [technology stack](/docs/developer/architecture.md) and consider fixing bugs or building new features. The team and I are always looking for new contributors. For information about how to contribute as a developer, see the [Developer](/docs/developer/architecture.md) section.
|
||||||
|
|
||||||
|
[github-issue]: https://github.com/immich-app/immich/issues/new/choose
|
||||||
|
[github-langs]: https://github.com/immich-app/immich/tree/main/mobile/assets/i18n
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
---
|
|
||||||
sidebar_position: 4
|
|
||||||
---
|
|
||||||
|
|
||||||
# Technology stack
|
|
||||||
|
|
||||||
The app is built with the following technologies:
|
|
||||||
|
|
||||||
## Frontend
|
|
||||||
* [Flutter](https://flutter.dev/) for the mobile app
|
|
||||||
* [Riverpod](https://riverpod.dev/) as state management.
|
|
||||||
* [SvelteKit](https://kit.svelte.dev/) for the Web.
|
|
||||||
|
|
||||||
## Backend
|
|
||||||
* [Nest.js](https://nestjs.com/) for the server.
|
|
||||||
* [TypeORM](https://typeorm.io/) for database management.
|
|
||||||
* [PostgreSQL](https://www.postgresql.org/) for the database.
|
|
||||||
* [Redis](https://redis.io/) for communication between the core server and the microservices.
|
|
||||||
* [NGINX](https://www.nginx.com/) for internal communication between containers and load balancing when scaling.
|
|
||||||
|
|
||||||
## High level architecture
|
|
||||||
|
|
||||||

|
|
||||||
9
docs/docs/partials/_mobile-app-backup.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
Navigate to the backup screen by clicking on the cloud icon in the top right corner of the screen.
|
||||||
|
|
||||||
|
<img src={require('./img/backup-header.png').default} width='50%' title='Backup button' />
|
||||||
|
|
||||||
|
You can select which album(s) you want to back up to the Immich server from the backup screen.
|
||||||
|
|
||||||
|
<img src={require('./img/album-selection.png').default} width='50%' title='Backup button' />
|
||||||
|
|
||||||
|
Scroll down to the bottom and press "**Start Backup**" to start the backup process.
|
||||||
6
docs/docs/partials/_mobile-app-download.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
The mobile app can be downloaded from the following places:
|
||||||
|
|
||||||
|
- [Google Play Store](https://play.google.com/store/apps/details?id=app.alextran.immich)
|
||||||
|
- [Apple App Store](https://apps.apple.com/us/app/immich/id1613945652)
|
||||||
|
- [F-Droid](https://f-droid.org/packages/app.alextran.immich)
|
||||||
|
- [Github Releases (apk)](https://github.com/immich-app/immich/releases)
|
||||||
3
docs/docs/partials/_mobile-app-login.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Login to the mobile app with the server endpoint URL at `http://<machine-ip-address>:2283/api`
|
||||||
|
|
||||||
|
<img src={require('./img/sign-in-phone.jpeg').default} width='50%' title='Mobile App Sign In' />
|
||||||
7
docs/docs/partials/_register-admin.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
The first user to register will be the admin user. The admin user will be able to add other users to the application.
|
||||||
|
|
||||||
|
To register for the admin user, access the web application at `http://<machine-ip-address>:2283` and click on the **Getting Started** button.
|
||||||
|
|
||||||
|
<img src={require('./img/admin-registration-form.png').default} width="500" title="Admin Registration" />
|
||||||
|
|
||||||
|
Follow the prompts to register as the admin user and log in to the application.
|
||||||
11
docs/docs/partials/_storage-template.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Immich allows the admin user to set the pattern of how the files are uploaded to the Immich would look like. Both in the directory and the filename level.
|
||||||
|
|
||||||
|
The admin user can set the template by using the template builder in the `Administration -> Settings -> Storage Template`. Immich provides a set of variables that you can use in constructing the template, along with additional custom text.
|
||||||
|
|
||||||
|
```bash title="Default template"
|
||||||
|
Year/Year-Month-Day/Filename.Extension
|
||||||
|
```
|
||||||
|
|
||||||
|
<img src={require('./img/storage-template.png').default} width="100%" title="Storage Template Setting" />
|
||||||
|
|
||||||
|
Immich also provides a mechanism to migrate between template so that if the template you set now doesn't work in the future, you can always migrate all the existing files to the new template. The mechanism is run as a job in the Job page.
|
||||||
3
docs/docs/partials/_user-create.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
If you have friends or family members who want to use the application as well, you can create addition accounts. The default password is `password`, and the user can change their password after logging in to the application for the first time.
|
||||||
|
|
||||||
|
<img src={require('./img/create-new-user.png').default} title='Admin Registration' />
|
||||||
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 321 KiB After Width: | Height: | Size: 321 KiB |
BIN
docs/docs/partials/img/storage-template.png
Normal file
|
After Width: | Height: | Size: 335 KiB |
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"label": "Usage",
|
|
||||||
"position": 3,
|
|
||||||
"link": {
|
|
||||||
"type": "generated-index",
|
|
||||||
"description": "Quick start on how to use the app on mobile and the web"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
---
|
|
||||||
sidebar_position: 5
|
|
||||||
---
|
|
||||||
|
|
||||||
# OAuth Authentication
|
|
||||||
|
|
||||||
This page contains details about using OAuth 2 in Immich.
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
Immich supports 3rd party authentication via [OpenID Connect][oidc] (OIDC), an identity layer built on top of OAuth2. OIDC is supported by most identity providers, including:
|
|
||||||
|
|
||||||
- [Authentik](https://goauthentik.io/integrations/sources/oauth/#openid-connect)
|
|
||||||
- [Authelia](https://www.authelia.com/configuration/identity-providers/open-id-connect/)
|
|
||||||
- [Okta](https://www.okta.com/openid-connect/)
|
|
||||||
- [Google](https://developers.google.com/identity/openid-connect/openid-connect)
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
Before enabling OAuth in Immich, a new client application needs to be configured in the 3rd-party authentication server. While the specifics of this setup vary from provider to provider, the general approach should be the same.
|
|
||||||
|
|
||||||
1. Create a new (Client) Application
|
|
||||||
|
|
||||||
1. The **Provider** type should be `OpenID Connect` or `OAuth2`
|
|
||||||
2. The **Client type** should be `Confidential`
|
|
||||||
3. The **Application** type should be `Web`
|
|
||||||
4. The **Grant** type should be `Authorization Code`
|
|
||||||
|
|
||||||
2. Configure Redirect URIs/Origins
|
|
||||||
|
|
||||||
The **Sign-in redirect URIs** should include:
|
|
||||||
|
|
||||||
- All URLs that will be used to access the login page of the Immich web client (eg. `http://localhost:2283/auth/login`, `http://192.168.0.200:2283/auth/login`, `https://immich.example.com/auth/login`)
|
|
||||||
- Mobile app redirect URL `app.immich:/`
|
|
||||||
|
|
||||||
:::caution
|
|
||||||
You **MUST** include `app.immich:/` as the redirect URI for iOS and Android mobile app to work properly.
|
|
||||||
|
|
||||||
**Authentik example**
|
|
||||||
<img src={require('./img/authentik-redirect.png').default} title="Authentik Redirection URL" width="80%" />
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Enable OAuth
|
|
||||||
|
|
||||||
Once you have a new OAuth client application configured, Immich can be configured using the Administration Settings page, available on the web (Administration -> Settings).
|
|
||||||
|
|
||||||
| Setting | Type | Default | Description |
|
|
||||||
| ------------------- | ------- | -------------------- | ------------------------------------------------------------------------- |
|
|
||||||
| OAuth enabled | boolean | false | Enable/disable OAuth2 |
|
|
||||||
| OAuth issuer URL | URL | (required) | Required. Self-discovery URL for client (from previous step) |
|
|
||||||
| OAuth client ID | string | (required) | Required. Client ID (from previous step) |
|
|
||||||
| OAuth client secret | string | (required) | Required. Client Secret (previous step) |
|
|
||||||
| OAuth scope | string | openid email profile | Full list of scopes to send with the request (space delimited) |
|
|
||||||
| OAuth button text | string | Login with OAuth | Text for the OAuth button on the web |
|
|
||||||
| OAuth auto register | boolean | true | When true, will automatically register a user the first time they sign in |
|
|
||||||
|
|
||||||
:::info
|
|
||||||
The Issuer URL should look something like the following, and return a valid json document.
|
|
||||||
|
|
||||||
- `https://accounts.google.com/.well-known/openid-configuration`
|
|
||||||
- `http://localhost:9000/application/o/immich/.well-known/openid-configuration`
|
|
||||||
|
|
||||||
The `.well-known/openid-configuration` part of the url is optional and will be automatically added during discovery.
|
|
||||||
:::
|
|
||||||
|
|
||||||
[oidc]: https://openid.net/connect/
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
---
|
|
||||||
sidebar_position: 1
|
|
||||||
---
|
|
||||||
|
|
||||||
# Post Installation
|
|
||||||
|
|
||||||
This page contains information about what to do after you have installed the application.
|
|
||||||
|
|
||||||
## Step 1 - Download the mobile app
|
|
||||||
|
|
||||||
The mobile app can be downloaded from
|
|
||||||
|
|
||||||
- [Google Play Store](https://play.google.com/store/apps/details?id=app.alextran.immich)
|
|
||||||
- [Apple App Store](https://apps.apple.com/us/app/immich/id1613945652)
|
|
||||||
- [F-Droid](https://f-droid.org/packages/app.alextran.immich)
|
|
||||||
|
|
||||||
## Step 2 - Register the admin user
|
|
||||||
|
|
||||||
The first user to register will be the admin user. The admin user will be able to add other users to the application.
|
|
||||||
|
|
||||||
To register for the admin user, access the web application at `http://<machine-ip-address>:2283` and click on the **Getting Started** button.
|
|
||||||
|
|
||||||
<img src={require('./img/admin-registration-form.png').default} width="500" title="Admin Registration" />
|
|
||||||
|
|
||||||
Follow the prompts to register as the admin user and log in to the application.
|
|
||||||
|
|
||||||
## Step 3 - Create a new user (optional)
|
|
||||||
|
|
||||||
If you have a family member who wants to use the application, you can create a new account. The default password is `password`, and the user can change their password after logging in to the application for the first time.
|
|
||||||
|
|
||||||
<img src={require('./img/create-new-user.png').default} title="Admin Registration" />
|
|
||||||
|
|
||||||
## Step 4 - Access the mobile app
|
|
||||||
|
|
||||||
Login to the mobile app with the server endpoint URL at `http://<machine-ip-address>:2283/api`
|
|
||||||
|
|
||||||
<img src={require('./img/sign-in-phone.jpeg').default} width="50%" title="Mobile App Sign In" />
|
|
||||||
|
|
||||||
## Step 5 - Back up your photos and videos
|
|
||||||
|
|
||||||
Navigate to the backup screen by clicking on the cloud icon in the top right corner of the screen.
|
|
||||||
|
|
||||||
<img src={require('./img/backup-header.png').default} width="50%" title="Backup button" />
|
|
||||||
|
|
||||||
You can select which album(s) you want to back up to the Immich server from the backup screen.
|
|
||||||
|
|
||||||
<img src={require('./img/album-selection.png').default} width="50%" title="Backup button" />
|
|
||||||
|
|
||||||
Scroll down to the bottom and press "**Start Backup**" to start the backup process.
|
|
||||||
|
|
||||||
You can also enable auto foreground or background backup (only on Android). For more information about the app mechanism, please visit the next pages.
|
|
||||||
|
|
||||||
|
|
||||||
:::tip Application Mechanism
|
|
||||||
#### [Foreground and background backup](/docs/usage/automatic-backup)
|
|
||||||
#### [Bulk upload (using the CLI)](/docs/usage/bulk-upload)
|
|
||||||
:::
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
---
|
|
||||||
sidebar_position: 4
|
|
||||||
---
|
|
||||||
|
|
||||||
# Update the application
|
|
||||||
|
|
||||||
If you are using Docker Compose, update the application use the following commands in the directory where the `docker-compose.yml` file is located:
|
|
||||||
|
|
||||||
```bash title="Update Immich"
|
|
||||||
docker-compose pull && docker-compose up -d # Or `docker compose`
|
|
||||||
```
|
|
||||||
@@ -28,6 +28,19 @@ const config = {
|
|||||||
locales: ["en"],
|
locales: ["en"],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
plugins: [
|
||||||
|
async function myPlugin(context, options) {
|
||||||
|
return {
|
||||||
|
name: "docusaurus-tailwindcss",
|
||||||
|
configurePostCss(postcssOptions) {
|
||||||
|
// Appends TailwindCSS and AutoPrefixer.
|
||||||
|
postcssOptions.plugins.push(require("tailwindcss"));
|
||||||
|
postcssOptions.plugins.push(require("autoprefixer"));
|
||||||
|
return postcssOptions;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
],
|
||||||
presets: [
|
presets: [
|
||||||
[
|
[
|
||||||
"docusaurus-preset-openapi",
|
"docusaurus-preset-openapi",
|
||||||
@@ -44,7 +57,7 @@ const config = {
|
|||||||
},
|
},
|
||||||
api: {
|
api: {
|
||||||
path: "../server/immich-openapi-specs.json",
|
path: "../server/immich-openapi-specs.json",
|
||||||
routeBasePath: "/docs/api"
|
routeBasePath: "/docs/api",
|
||||||
},
|
},
|
||||||
// blog: {
|
// blog: {
|
||||||
// showReadingTime: true,
|
// showReadingTime: true,
|
||||||
@@ -60,6 +73,9 @@ const config = {
|
|||||||
themeConfig:
|
themeConfig:
|
||||||
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
|
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
|
||||||
({
|
({
|
||||||
|
colorMode: {
|
||||||
|
defaultMode: "dark",
|
||||||
|
},
|
||||||
announcementBar: {
|
announcementBar: {
|
||||||
id: "site_announcement_immich",
|
id: "site_announcement_immich",
|
||||||
content: `⚠️ The project is under <strong>very active</strong> development. Expect bugs and changes. Do not use it as <strong>the only way</strong> to store your photos and videos!`,
|
content: `⚠️ The project is under <strong>very active</strong> development. Expect bugs and changes. Do not use it as <strong>the only way</strong> to store your photos and videos!`,
|
||||||
@@ -82,19 +98,23 @@ const config = {
|
|||||||
{
|
{
|
||||||
to: "/docs/overview/introduction",
|
to: "/docs/overview/introduction",
|
||||||
position: "right",
|
position: "right",
|
||||||
label: "Documentation",
|
label: "Docs",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: "/docs/api",
|
to: "/docs/api",
|
||||||
position: "right",
|
position: "right",
|
||||||
label: "API"
|
label: "API",
|
||||||
},
|
},
|
||||||
{ to: "/blog", label: "Blog", position: "right" },
|
|
||||||
{
|
{
|
||||||
href: "https://github.com/immich-app/immich",
|
href: "https://github.com/immich-app/immich",
|
||||||
label: "GitHub",
|
label: "GitHub",
|
||||||
position: "right",
|
position: "right",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
href: "https://github.com/orgs/immich-app/projects/1",
|
||||||
|
label: "Roadmap",
|
||||||
|
position: "right",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
footer: {
|
footer: {
|
||||||
@@ -109,7 +129,7 @@ const config = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Installation",
|
label: "Installation",
|
||||||
to: "/docs/installation/requirements",
|
to: "/docs/install/requirements",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -123,16 +143,20 @@ const config = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "More",
|
title: "Links",
|
||||||
items: [
|
items: [
|
||||||
{
|
// {
|
||||||
label: "Blog",
|
// label: "Blog",
|
||||||
to: "/blog",
|
// to: "/blog",
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
label: "GitHub",
|
label: "GitHub",
|
||||||
href: "https://github.com/immich-app/immich",
|
href: "https://github.com/immich-app/immich",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: "Roadmap",
|
||||||
|
href: "https://github.com/orgs/immich-app/projects/1",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -142,6 +166,7 @@ const config = {
|
|||||||
theme: lightCodeTheme,
|
theme: lightCodeTheme,
|
||||||
darkTheme: darkCodeTheme,
|
darkTheme: darkCodeTheme,
|
||||||
},
|
},
|
||||||
|
image: "overview/img/feature-panel.png",
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
417
docs/package-lock.json
generated
@@ -11,11 +11,14 @@
|
|||||||
"@docusaurus/core": "2.1.0",
|
"@docusaurus/core": "2.1.0",
|
||||||
"@docusaurus/preset-classic": "2.1.0",
|
"@docusaurus/preset-classic": "2.1.0",
|
||||||
"@mdx-js/react": "^1.6.22",
|
"@mdx-js/react": "^1.6.22",
|
||||||
|
"autoprefixer": "^10.4.13",
|
||||||
"clsx": "^1.2.1",
|
"clsx": "^1.2.1",
|
||||||
"docusaurus-preset-openapi": "^0.6.3",
|
"docusaurus-preset-openapi": "^0.6.3",
|
||||||
|
"postcss": "^8.4.20",
|
||||||
"prism-react-renderer": "^1.3.5",
|
"prism-react-renderer": "^1.3.5",
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
"react-dom": "^17.0.2",
|
"react-dom": "^17.0.2",
|
||||||
|
"tailwindcss": "^3.2.4",
|
||||||
"url": "^0.11.0"
|
"url": "^0.11.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -3681,6 +3684,35 @@
|
|||||||
"acorn": "^8"
|
"acorn": "^8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/acorn-node": {
|
||||||
|
"version": "1.8.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
|
||||||
|
"integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
|
||||||
|
"dependencies": {
|
||||||
|
"acorn": "^7.0.0",
|
||||||
|
"acorn-walk": "^7.0.0",
|
||||||
|
"xtend": "^4.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/acorn-node/node_modules/acorn": {
|
||||||
|
"version": "7.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
||||||
|
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
|
||||||
|
"bin": {
|
||||||
|
"acorn": "bin/acorn"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/acorn-node/node_modules/acorn-walk": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/acorn-walk": {
|
"node_modules/acorn-walk": {
|
||||||
"version": "8.2.0",
|
"version": "8.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
|
||||||
@@ -3926,9 +3958,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/autoprefixer": {
|
"node_modules/autoprefixer": {
|
||||||
"version": "10.4.12",
|
"version": "10.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz",
|
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
|
||||||
"integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==",
|
"integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
@@ -3941,7 +3973,7 @@
|
|||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"browserslist": "^4.21.4",
|
"browserslist": "^4.21.4",
|
||||||
"caniuse-lite": "^1.0.30001407",
|
"caniuse-lite": "^1.0.30001426",
|
||||||
"fraction.js": "^4.2.0",
|
"fraction.js": "^4.2.0",
|
||||||
"normalize-range": "^0.1.2",
|
"normalize-range": "^0.1.2",
|
||||||
"picocolors": "^1.0.0",
|
"picocolors": "^1.0.0",
|
||||||
@@ -4403,9 +4435,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001425",
|
"version": "1.0.30001441",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001425.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz",
|
||||||
"integrity": "sha512-/pzFv0OmNG6W0ym80P3NtapU0QEiDS3VuYAZMGoLLqiC7f6FJFe1MjpQDREGApeenD9wloeytmVDj+JLXPC6qw==",
|
"integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
@@ -5478,6 +5510,14 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/defined": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/del": {
|
"node_modules/del": {
|
||||||
"version": "6.1.1",
|
"version": "6.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
|
||||||
@@ -5583,6 +5623,22 @@
|
|||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
||||||
},
|
},
|
||||||
|
"node_modules/detective": {
|
||||||
|
"version": "5.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
|
||||||
|
"integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
|
||||||
|
"dependencies": {
|
||||||
|
"acorn-node": "^1.8.2",
|
||||||
|
"defined": "^1.0.0",
|
||||||
|
"minimist": "^1.2.6"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"detective": "bin/detective.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/dezalgo": {
|
"node_modules/dezalgo": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
|
||||||
@@ -5592,6 +5648,11 @@
|
|||||||
"wrappy": "1"
|
"wrappy": "1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/didyoumean": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
|
||||||
|
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
|
||||||
|
},
|
||||||
"node_modules/dir-glob": {
|
"node_modules/dir-glob": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
||||||
@@ -5603,6 +5664,11 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/dlv": {
|
||||||
|
"version": "1.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
|
||||||
|
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
|
||||||
|
},
|
||||||
"node_modules/dns-equal": {
|
"node_modules/dns-equal": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
|
||||||
@@ -8688,6 +8754,14 @@
|
|||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/object-hash": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/object-inspect": {
|
"node_modules/object-inspect": {
|
||||||
"version": "1.12.2",
|
"version": "1.12.2",
|
||||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
|
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
|
||||||
@@ -9242,6 +9316,14 @@
|
|||||||
"url": "https://github.com/sponsors/jonschlinkert"
|
"url": "https://github.com/sponsors/jonschlinkert"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/pify": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/pkg-dir": {
|
"node_modules/pkg-dir": {
|
||||||
"version": "4.2.0",
|
"version": "4.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
|
||||||
@@ -9307,9 +9389,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/postcss": {
|
"node_modules/postcss": {
|
||||||
"version": "8.4.18",
|
"version": "8.4.20",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz",
|
||||||
"integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==",
|
"integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
@@ -9431,6 +9513,68 @@
|
|||||||
"postcss": "^8.2.15"
|
"postcss": "^8.2.15"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/postcss-import": {
|
||||||
|
"version": "14.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
|
||||||
|
"integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
|
||||||
|
"dependencies": {
|
||||||
|
"postcss-value-parser": "^4.0.0",
|
||||||
|
"read-cache": "^1.0.0",
|
||||||
|
"resolve": "^1.1.7"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"postcss": "^8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/postcss-js": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"camelcase-css": "^2.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^12 || ^14 || >= 16"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/postcss/"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"postcss": "^8.3.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/postcss-load-config": {
|
||||||
|
"version": "3.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
|
||||||
|
"integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
|
||||||
|
"dependencies": {
|
||||||
|
"lilconfig": "^2.0.5",
|
||||||
|
"yaml": "^1.10.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/postcss/"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"postcss": ">=8.0.9",
|
||||||
|
"ts-node": ">=9.0.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"postcss": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ts-node": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/postcss-loader": {
|
"node_modules/postcss-loader": {
|
||||||
"version": "7.0.1",
|
"version": "7.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz",
|
||||||
@@ -9614,6 +9758,24 @@
|
|||||||
"postcss": "^8.1.0"
|
"postcss": "^8.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/postcss-nested": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==",
|
||||||
|
"dependencies": {
|
||||||
|
"postcss-selector-parser": "^6.0.10"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/postcss/"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"postcss": "^8.2.14"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/postcss-normalize-charset": {
|
"node_modules/postcss-normalize-charset": {
|
||||||
"version": "5.1.0",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
|
||||||
@@ -10282,6 +10444,17 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"node_modules/quick-lru": {
|
||||||
|
"version": "5.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
|
||||||
|
"integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/randombytes": {
|
"node_modules/randombytes": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
||||||
@@ -10654,6 +10827,14 @@
|
|||||||
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/read-cache": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
|
||||||
|
"dependencies": {
|
||||||
|
"pify": "^2.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/readable-stream": {
|
"node_modules/readable-stream": {
|
||||||
"version": "3.6.0",
|
"version": "3.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||||
@@ -12388,6 +12569,57 @@
|
|||||||
"url": "https://github.com/fb55/entities?sponsor=1"
|
"url": "https://github.com/fb55/entities?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/tailwindcss": {
|
||||||
|
"version": "3.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz",
|
||||||
|
"integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"arg": "^5.0.2",
|
||||||
|
"chokidar": "^3.5.3",
|
||||||
|
"color-name": "^1.1.4",
|
||||||
|
"detective": "^5.2.1",
|
||||||
|
"didyoumean": "^1.2.2",
|
||||||
|
"dlv": "^1.1.3",
|
||||||
|
"fast-glob": "^3.2.12",
|
||||||
|
"glob-parent": "^6.0.2",
|
||||||
|
"is-glob": "^4.0.3",
|
||||||
|
"lilconfig": "^2.0.6",
|
||||||
|
"micromatch": "^4.0.5",
|
||||||
|
"normalize-path": "^3.0.0",
|
||||||
|
"object-hash": "^3.0.0",
|
||||||
|
"picocolors": "^1.0.0",
|
||||||
|
"postcss": "^8.4.18",
|
||||||
|
"postcss-import": "^14.1.0",
|
||||||
|
"postcss-js": "^4.0.0",
|
||||||
|
"postcss-load-config": "^3.1.4",
|
||||||
|
"postcss-nested": "6.0.0",
|
||||||
|
"postcss-selector-parser": "^6.0.10",
|
||||||
|
"postcss-value-parser": "^4.2.0",
|
||||||
|
"quick-lru": "^5.1.1",
|
||||||
|
"resolve": "^1.22.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"tailwind": "lib/cli.js",
|
||||||
|
"tailwindcss": "lib/cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.13.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"postcss": "^8.0.9"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tailwindcss/node_modules/glob-parent": {
|
||||||
|
"version": "6.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
|
||||||
|
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
|
||||||
|
"dependencies": {
|
||||||
|
"is-glob": "^4.0.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.13.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/tapable": {
|
"node_modules/tapable": {
|
||||||
"version": "2.2.1",
|
"version": "2.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
|
||||||
@@ -16634,6 +16866,28 @@
|
|||||||
"integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
|
"integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
|
||||||
"requires": {}
|
"requires": {}
|
||||||
},
|
},
|
||||||
|
"acorn-node": {
|
||||||
|
"version": "1.8.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
|
||||||
|
"integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
|
||||||
|
"requires": {
|
||||||
|
"acorn": "^7.0.0",
|
||||||
|
"acorn-walk": "^7.0.0",
|
||||||
|
"xtend": "^4.0.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"acorn": {
|
||||||
|
"version": "7.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
||||||
|
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
|
||||||
|
},
|
||||||
|
"acorn-walk": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"acorn-walk": {
|
"acorn-walk": {
|
||||||
"version": "8.2.0",
|
"version": "8.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
|
||||||
@@ -16823,12 +17077,12 @@
|
|||||||
"integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
|
"integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
|
||||||
},
|
},
|
||||||
"autoprefixer": {
|
"autoprefixer": {
|
||||||
"version": "10.4.12",
|
"version": "10.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz",
|
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
|
||||||
"integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==",
|
"integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"browserslist": "^4.21.4",
|
"browserslist": "^4.21.4",
|
||||||
"caniuse-lite": "^1.0.30001407",
|
"caniuse-lite": "^1.0.30001426",
|
||||||
"fraction.js": "^4.2.0",
|
"fraction.js": "^4.2.0",
|
||||||
"normalize-range": "^0.1.2",
|
"normalize-range": "^0.1.2",
|
||||||
"picocolors": "^1.0.0",
|
"picocolors": "^1.0.0",
|
||||||
@@ -17158,9 +17412,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"caniuse-lite": {
|
"caniuse-lite": {
|
||||||
"version": "1.0.30001425",
|
"version": "1.0.30001441",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001425.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz",
|
||||||
"integrity": "sha512-/pzFv0OmNG6W0ym80P3NtapU0QEiDS3VuYAZMGoLLqiC7f6FJFe1MjpQDREGApeenD9wloeytmVDj+JLXPC6qw=="
|
"integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg=="
|
||||||
},
|
},
|
||||||
"ccount": {
|
"ccount": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
@@ -17901,6 +18155,11 @@
|
|||||||
"object-keys": "^1.1.1"
|
"object-keys": "^1.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"defined": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q=="
|
||||||
|
},
|
||||||
"del": {
|
"del": {
|
||||||
"version": "6.1.1",
|
"version": "6.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
|
||||||
@@ -17977,6 +18236,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"detective": {
|
||||||
|
"version": "5.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
|
||||||
|
"integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
|
||||||
|
"requires": {
|
||||||
|
"acorn-node": "^1.8.2",
|
||||||
|
"defined": "^1.0.0",
|
||||||
|
"minimist": "^1.2.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"dezalgo": {
|
"dezalgo": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
|
||||||
@@ -17986,6 +18255,11 @@
|
|||||||
"wrappy": "1"
|
"wrappy": "1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"didyoumean": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
|
||||||
|
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
|
||||||
|
},
|
||||||
"dir-glob": {
|
"dir-glob": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
||||||
@@ -17994,6 +18268,11 @@
|
|||||||
"path-type": "^4.0.0"
|
"path-type": "^4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dlv": {
|
||||||
|
"version": "1.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
|
||||||
|
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
|
||||||
|
},
|
||||||
"dns-equal": {
|
"dns-equal": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
|
||||||
@@ -20249,6 +20528,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||||
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
|
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
|
||||||
},
|
},
|
||||||
|
"object-hash": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="
|
||||||
|
},
|
||||||
"object-inspect": {
|
"object-inspect": {
|
||||||
"version": "1.12.2",
|
"version": "1.12.2",
|
||||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
|
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
|
||||||
@@ -20666,6 +20950,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
||||||
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
|
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
|
||||||
},
|
},
|
||||||
|
"pify": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="
|
||||||
|
},
|
||||||
"pkg-dir": {
|
"pkg-dir": {
|
||||||
"version": "4.2.0",
|
"version": "4.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
|
||||||
@@ -20715,9 +21004,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss": {
|
"postcss": {
|
||||||
"version": "8.4.18",
|
"version": "8.4.20",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz",
|
||||||
"integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==",
|
"integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"nanoid": "^3.3.4",
|
"nanoid": "^3.3.4",
|
||||||
"picocolors": "^1.0.0",
|
"picocolors": "^1.0.0",
|
||||||
@@ -20785,6 +21074,33 @@
|
|||||||
"postcss-selector-parser": "^6.0.5"
|
"postcss-selector-parser": "^6.0.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"postcss-import": {
|
||||||
|
"version": "14.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
|
||||||
|
"integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
|
||||||
|
"requires": {
|
||||||
|
"postcss-value-parser": "^4.0.0",
|
||||||
|
"read-cache": "^1.0.0",
|
||||||
|
"resolve": "^1.1.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postcss-js": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
|
||||||
|
"requires": {
|
||||||
|
"camelcase-css": "^2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postcss-load-config": {
|
||||||
|
"version": "3.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
|
||||||
|
"integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
|
||||||
|
"requires": {
|
||||||
|
"lilconfig": "^2.0.5",
|
||||||
|
"yaml": "^1.10.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"postcss-loader": {
|
"postcss-loader": {
|
||||||
"version": "7.0.1",
|
"version": "7.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz",
|
||||||
@@ -20892,6 +21208,14 @@
|
|||||||
"icss-utils": "^5.0.0"
|
"icss-utils": "^5.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"postcss-nested": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==",
|
||||||
|
"requires": {
|
||||||
|
"postcss-selector-parser": "^6.0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"postcss-normalize-charset": {
|
"postcss-normalize-charset": {
|
||||||
"version": "5.1.0",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
|
||||||
@@ -21352,6 +21676,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
|
||||||
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
|
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
|
||||||
},
|
},
|
||||||
|
"quick-lru": {
|
||||||
|
"version": "5.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
|
||||||
|
"integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
|
||||||
|
},
|
||||||
"randombytes": {
|
"randombytes": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
||||||
@@ -21635,6 +21964,14 @@
|
|||||||
"use-latest": "^1.2.1"
|
"use-latest": "^1.2.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"read-cache": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
|
||||||
|
"requires": {
|
||||||
|
"pify": "^2.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"readable-stream": {
|
"readable-stream": {
|
||||||
"version": "3.6.0",
|
"version": "3.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||||
@@ -22967,6 +23304,46 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"tailwindcss": {
|
||||||
|
"version": "3.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz",
|
||||||
|
"integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==",
|
||||||
|
"requires": {
|
||||||
|
"arg": "^5.0.2",
|
||||||
|
"chokidar": "^3.5.3",
|
||||||
|
"color-name": "^1.1.4",
|
||||||
|
"detective": "^5.2.1",
|
||||||
|
"didyoumean": "^1.2.2",
|
||||||
|
"dlv": "^1.1.3",
|
||||||
|
"fast-glob": "^3.2.12",
|
||||||
|
"glob-parent": "^6.0.2",
|
||||||
|
"is-glob": "^4.0.3",
|
||||||
|
"lilconfig": "^2.0.6",
|
||||||
|
"micromatch": "^4.0.5",
|
||||||
|
"normalize-path": "^3.0.0",
|
||||||
|
"object-hash": "^3.0.0",
|
||||||
|
"picocolors": "^1.0.0",
|
||||||
|
"postcss": "^8.4.18",
|
||||||
|
"postcss-import": "^14.1.0",
|
||||||
|
"postcss-js": "^4.0.0",
|
||||||
|
"postcss-load-config": "^3.1.4",
|
||||||
|
"postcss-nested": "6.0.0",
|
||||||
|
"postcss-selector-parser": "^6.0.10",
|
||||||
|
"postcss-value-parser": "^4.2.0",
|
||||||
|
"quick-lru": "^5.1.1",
|
||||||
|
"resolve": "^1.22.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"glob-parent": {
|
||||||
|
"version": "6.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
|
||||||
|
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
|
||||||
|
"requires": {
|
||||||
|
"is-glob": "^4.0.3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"tapable": {
|
"tapable": {
|
||||||
"version": "2.2.1",
|
"version": "2.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
|
||||||
|
|||||||
@@ -18,11 +18,14 @@
|
|||||||
"@docusaurus/core": "2.1.0",
|
"@docusaurus/core": "2.1.0",
|
||||||
"@docusaurus/preset-classic": "2.1.0",
|
"@docusaurus/preset-classic": "2.1.0",
|
||||||
"@mdx-js/react": "^1.6.22",
|
"@mdx-js/react": "^1.6.22",
|
||||||
|
"autoprefixer": "^10.4.13",
|
||||||
"clsx": "^1.2.1",
|
"clsx": "^1.2.1",
|
||||||
"docusaurus-preset-openapi": "^0.6.3",
|
"docusaurus-preset-openapi": "^0.6.3",
|
||||||
|
"postcss": "^8.4.20",
|
||||||
"prism-react-renderer": "^1.3.5",
|
"prism-react-renderer": "^1.3.5",
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
"react-dom": "^17.0.2",
|
"react-dom": "^17.0.2",
|
||||||
|
"tailwindcss": "^3.2.4",
|
||||||
"url": "^0.11.0"
|
"url": "^0.11.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@@ -3,11 +3,15 @@
|
|||||||
* bundles Infima by default. Infima is a CSS framework designed to
|
* bundles Infima by default. Infima is a CSS framework designed to
|
||||||
* work well for content-centric websites.
|
* work well for content-centric websites.
|
||||||
*/
|
*/
|
||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
|
|
||||||
@import url("https://fonts.googleapis.com/css2?family=Overpass:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap");
|
@import url("https://fonts.googleapis.com/css2?family=Overpass:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap");
|
||||||
@import url("https://fonts.googleapis.com/css2?family=Snowburst+One&display=swap");
|
@import url("https://fonts.googleapis.com/css2?family=Snowburst+One&display=swap");
|
||||||
|
|
||||||
html {
|
html,
|
||||||
|
button {
|
||||||
font-family: "Overpass", sans-serif;
|
font-family: "Overpass", sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +0,0 @@
|
|||||||
/**
|
|
||||||
* CSS files with the .module.css suffix will be treated as CSS modules
|
|
||||||
* and scoped locally.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.heroBanner {
|
|
||||||
padding: 4rem 0;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
text-align: center;
|
|
||||||
background: #606c88;
|
|
||||||
background: -webkit-linear-gradient(to top, #4e5362, #606c88);
|
|
||||||
background: linear-gradient(to top, #4e5362, #606c88);
|
|
||||||
color: whitesmoke;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 996px) {
|
|
||||||
.heroBanner {
|
|
||||||
padding: 2rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.buttons {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.buttonsRow {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
margin-bottom: 4rem;
|
|
||||||
gap: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.installButton {
|
|
||||||
background-color: #adcbfa;
|
|
||||||
color: #000000;
|
|
||||||
border-radius: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.installButton:hover {
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.introButton {
|
|
||||||
background-color: #e6ebf5;
|
|
||||||
color: #000000;
|
|
||||||
border-radius: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.introButton:hover {
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.demoButton {
|
|
||||||
background-color: aquamarine;
|
|
||||||
color: #000000;
|
|
||||||
border-radius: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.demoButton:hover {
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
@@ -1,71 +1,54 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import clsx from "clsx";
|
|
||||||
import Link from "@docusaurus/Link";
|
import Link from "@docusaurus/Link";
|
||||||
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
|
|
||||||
import Layout from "@theme/Layout";
|
import Layout from "@theme/Layout";
|
||||||
import HomepageFeatures from "@site/src/components/HomepageFeatures";
|
|
||||||
|
|
||||||
import styles from "./index.module.css";
|
|
||||||
|
|
||||||
function HomepageHeader() {
|
function HomepageHeader() {
|
||||||
const { siteConfig } = useDocusaurusContext();
|
|
||||||
return (
|
return (
|
||||||
<header className={clsx("hero hero--primary", styles.heroBanner)}>
|
<header>
|
||||||
<div className="container">
|
<section className="text-center m-6 p-12 border border-red-400 rounded-[50px] bg-gray-100 dark:bg-immich-dark-gray">
|
||||||
<h1
|
<h1 className="md:text-6xl font-bold mb-10 font-immich-title text-immich-primary dark:text-immich-dark-primary">
|
||||||
className="hero__title"
|
|
||||||
style={{
|
|
||||||
fontFamily: "Snowburst One",
|
|
||||||
color: "#adcbfa",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
IMMICH
|
IMMICH
|
||||||
</h1>
|
</h1>
|
||||||
<p className="hero__subtitle">{siteConfig.tagline}</p>
|
<div className="font-thin sm:text-base md:text-2xl my-12 sm:leading-tight">
|
||||||
<div className={styles.buttonsRow}>
|
<p>SELF-HOSTED BACKUP SOLUTION </p>
|
||||||
<div className={styles.buttons}>
|
<p>FOR PHOTOS AND VIDEOS</p>
|
||||||
<Link
|
<p>ON MOBILE DEVICE</p>
|
||||||
className={clsx("button button--lg", styles.introButton)}
|
</div>
|
||||||
to="docs/overview/introduction"
|
|
||||||
>
|
|
||||||
Introduction
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className={styles.buttons}>
|
<div className="flex place-items-center place-content-center mt-9 mb-16 gap-4 ">
|
||||||
<Link
|
<Link
|
||||||
className={clsx("button button--lg", styles.installButton)}
|
className="flex place-items-center place-content-center py-3 px-8 border bg-immich-primary dark:bg-immich-dark-primary rounded-full no-underline hover:no-underline text-white hover:text-gray-50 dark:text-immich-dark-bg font-bold"
|
||||||
to="docs/installation/requirements"
|
to="docs/overview/introduction"
|
||||||
>
|
>
|
||||||
Installation
|
GET STARTED
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className={styles.buttons}>
|
<Link
|
||||||
<Link
|
className="flex place-items-center place-content-center py-3 px-8 border bg-immich-primary/10 dark:bg-gray-300 rounded-full hover:no-underline text-immich-primary dark:text-immich-dark-bg font-bold"
|
||||||
className={clsx("button button--lg", styles.demoButton)}
|
to="https://demo.immich.app/"
|
||||||
to="https://demo.immich.app/"
|
>
|
||||||
>
|
DEMO PORTAL
|
||||||
Demo
|
</Link>
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<img src="/img/immich-screenshots.webp" alt="logo" />
|
<img src="/img/immich-screenshots.webp" alt="logo" />
|
||||||
</div>
|
</section>
|
||||||
</header>
|
</header>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Home(): JSX.Element {
|
export default function Home(): JSX.Element {
|
||||||
const { siteConfig } = useDocusaurusContext();
|
|
||||||
return (
|
return (
|
||||||
<Layout
|
<Layout
|
||||||
title={`Home`}
|
title={`Home`}
|
||||||
description="immich Self-hosted photo and video backup solution directly from your mobile phone "
|
description="immich Self-hosted photo and video backup solution directly from your mobile phone "
|
||||||
|
noFooter={true}
|
||||||
>
|
>
|
||||||
<HomepageHeader />
|
<HomepageHeader />
|
||||||
<main>{/* <HomepageFeatures /> */}</main>
|
<div className="flex flex-col place-items-center place-content-center">
|
||||||
|
<p>This project is available under MIT license.</p>
|
||||||
|
<p className="text-xs">Privacy should not be a luxury</p>
|
||||||
|
</div>
|
||||||
</Layout>
|
</Layout>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
30
docs/tailwind.config.js
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
// tailwind.config.js
|
||||||
|
/** @type {import('tailwindcss').Config} */
|
||||||
|
module.exports = {
|
||||||
|
corePlugins: {
|
||||||
|
preflight: false, // disable Tailwind's reset
|
||||||
|
},
|
||||||
|
content: ["./src/**/*.{js,jsx,ts,tsx}", "../docs/**/*.mdx"], // my markdown stuff is in ../docs, not /src
|
||||||
|
darkMode: ["class", '[data-theme="dark"]'], // hooks into docusaurus' dark mode settigns
|
||||||
|
theme: {
|
||||||
|
extend: {
|
||||||
|
colors: {
|
||||||
|
// Light Theme
|
||||||
|
"immich-primary": "#4250af",
|
||||||
|
"immich-bg": "white",
|
||||||
|
"immich-fg": "black",
|
||||||
|
"immich-gray": "#F6F6F4",
|
||||||
|
|
||||||
|
// Dark Theme
|
||||||
|
"immich-dark-primary": "#adcbfa",
|
||||||
|
"immich-dark-bg": "black",
|
||||||
|
"immich-dark-fg": "#e5e7eb",
|
||||||
|
"immich-dark-gray": "#212121",
|
||||||
|
},
|
||||||
|
fontFamily: {
|
||||||
|
"immich-title": ["Snowburst One", "cursive"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
plugins: [],
|
||||||
|
};
|
||||||
21
docs/vercel.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"redirects": [
|
||||||
|
{ "source": "/docs", "destination": "/docs/overview/introduction" },
|
||||||
|
{ "source": "/docs/mobile-app-beta-program", "destination": "/docs/features/mobile-app" },
|
||||||
|
{ "source": "/docs/contribution-guidelines", "destination": "/docs/overview/support-the-project#contributing" },
|
||||||
|
{ "source": "/docs/install", "destination": "/docs/install/docker-compose" },
|
||||||
|
{ "source": "/docs/installation/one-step-installation", "destination": "/docs/install/script" },
|
||||||
|
{ "source": "/docs/installation/portainer-installation", "destination": "/docs/install/portainer" },
|
||||||
|
{ "source": "/docs/installation/recommended-installation", "destination": "/docs/install/docker-compose" },
|
||||||
|
{ "source": "/docs/installation/unraid", "destination": "/docs/install/unraid" },
|
||||||
|
{ "source": "/docs/installation/requirements", "destination": "/docs/install/requirements" },
|
||||||
|
{ "source": "/docs/overview/logo-meaning", "destination": "/docs/overview/logo" },
|
||||||
|
{ "source": "/docs/overview/technology-stack", "destination": "/docs/developer/architecture" },
|
||||||
|
{ "source": "/docs/usage/automatic-backup", "destination": "/docs/features/automatic-backup" },
|
||||||
|
{ "source": "/docs/usage/bulk-upload", "destination": "/docs/features/bulk-upload" },
|
||||||
|
{ "source": "/docs/usage/oauth", "destination": "/docs/features/oauth" },
|
||||||
|
{ "source": "/docs/usage/post-installation", "destination": "/docs/install/post-install" },
|
||||||
|
{ "source": "/docs/usage/update", "destination": "/docs/install/docker-compose#step-4---upgrading" },
|
||||||
|
{ "source": "/docs/usage/server-commands", "destination": "/docs/features/server-commands" }
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,11 +1,20 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="app.alextran.immich" xmlns:tools="http://schemas.android.com/tools">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="app.alextran.immich"
|
||||||
<application android:label="Immich" android:name=".ImmichApp" android:usesCleartextTraffic="true" android:icon="@mipmap/ic_launcher" android:requestLegacyExternalStorage="true">
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
|
<application android:label="Immich" android:name=".ImmichApp" android:usesCleartextTraffic="true"
|
||||||
|
android:icon="@mipmap/ic_launcher" android:requestLegacyExternalStorage="true">
|
||||||
|
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop"
|
||||||
|
android:theme="@style/LaunchTheme"
|
||||||
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||||
|
android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
|
||||||
<!-- Specifies an Android theme to apply to this Activity as soon as
|
<!-- Specifies an Android theme to apply to this Activity as soon as
|
||||||
the Android process has started. This theme is visible to the user
|
the
|
||||||
while the Flutter UI initializes. After that, this theme continues
|
Android process has started. This theme is visible to the user
|
||||||
to determine the Window background behind the Flutter UI. -->
|
while the
|
||||||
<meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" />
|
Flutter UI initializes. After that, this theme continues
|
||||||
|
to determine the
|
||||||
|
Window background behind the Flutter UI. -->
|
||||||
|
<meta-data android:name="io.flutter.embedding.android.NormalTheme"
|
||||||
|
android:resource="@style/NormalTheme" />
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
@@ -25,7 +34,8 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<!-- Don't delete the meta-data below.
|
<!-- Don't delete the meta-data below.
|
||||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
This is used by the Flutter tool to
|
||||||
|
generate GeneratedPluginRegistrant.java -->
|
||||||
<meta-data android:name="flutterEmbedding" android:value="2" />
|
<meta-data android:name="flutterEmbedding" android:value="2" />
|
||||||
<!-- Disables default WorkManager initialization to use our custom initialization -->
|
<!-- Disables default WorkManager initialization to use our custom initialization -->
|
||||||
<provider
|
<provider
|
||||||
@@ -33,14 +43,17 @@
|
|||||||
android:authorities="${applicationId}.androidx-startup"
|
android:authorities="${applicationId}.androidx-startup"
|
||||||
tools:node="remove"></provider>
|
tools:node="remove"></provider>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <!-- If you want to read images-->
|
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
||||||
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <!-- If you want to read videos-->
|
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
|
||||||
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <!-- If you want to read audio-->
|
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
||||||
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
|
|
||||||
<queries>
|
<queries>
|
||||||
<intent>
|
<intent>
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ platform :android do
|
|||||||
task: 'bundle',
|
task: 'bundle',
|
||||||
build_type: 'Release',
|
build_type: 'Release',
|
||||||
properties: {
|
properties: {
|
||||||
"android.injected.version.code" => 60,
|
"android.injected.version.code" => 63,
|
||||||
"android.injected.version.name" => "1.38.0",
|
"android.injected.version.name" => "1.40.0",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
|
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
* Hot fix: timeline crash when trying to group invalid date info.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
* Add additional supported translation for CZ, SK, and CN
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
* Added Autofill login form
|
||||||
|
* Added Delete button in detail viewer
|
||||||
|
* Added Disable autocorrection on endpoint URL
|
||||||
|
* Fixed Notification android 13 permission
|
||||||
|
* Fixed Minor typo
|
||||||
@@ -5,17 +5,17 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000201">
|
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000213">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="1: bundleRelease" time="63.132489">
|
<testcase classname="fastlane.lanes" name="1: bundleRelease" time="61.218233">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="38.15883">
|
<testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="41.974053">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|||||||
194
mobile/assets/i18n/cs-CZ.json
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
{
|
||||||
|
"album_info_card_backup_album_excluded": "VYLOUČENO",
|
||||||
|
"album_info_card_backup_album_included": "ZAHRNUTO",
|
||||||
|
"album_thumbnail_card_item": "1 položka",
|
||||||
|
"album_thumbnail_card_items": "{} položky",
|
||||||
|
"album_thumbnail_card_shared": "Sdíleno",
|
||||||
|
"album_viewer_appbar_share_delete": "odstranit album",
|
||||||
|
"album_viewer_appbar_share_err_delete": "Nepodařilo se odstranit album",
|
||||||
|
"album_viewer_appbar_share_err_leave": "Nepodařilo se ukončit album",
|
||||||
|
"album_viewer_appbar_share_err_remove": "Při odstraňování souborů z alba se vyskytly problémy.",
|
||||||
|
"album_viewer_appbar_share_err_title": "Nepodařilo se změnit název alba",
|
||||||
|
"album_viewer_appbar_share_leave": "Opustit album",
|
||||||
|
"album_viewer_appbar_share_remove": "Odstranit z alba",
|
||||||
|
"album_viewer_page_share_add_users": "Přidat uživatele",
|
||||||
|
"asset_list_settings_subtitle": "Nastavení rozložení mřížky fotografií",
|
||||||
|
"asset_list_settings_title": "Fotografická mřížka",
|
||||||
|
"backup_album_selection_page_albums_device": "Alba v zařízení ({})",
|
||||||
|
"backup_album_selection_page_albums_tap": "Klepnutím na položku ji zahrnete, dvojím klepnutím ji vyloučíte",
|
||||||
|
"backup_album_selection_page_assets_scatter": "Soubory mohou být roztroušeny ve více albech. To umožňuje zahrnout nebo vyloučit alba během procesu zálohování.",
|
||||||
|
"backup_album_selection_page_select_albums": "Vybraná alba",
|
||||||
|
"backup_album_selection_page_selection_info": "Informace o výběru",
|
||||||
|
"backup_album_selection_page_total_assets": "Celkový počet jedinečných souborů",
|
||||||
|
"backup_all": "Vše",
|
||||||
|
"backup_background_service_backup_failed_message": "Zálohování zdrojů selhalo. Zkouším to znovu...",
|
||||||
|
"backup_background_service_connection_failed_message": "Nepodařilo se připojit k serveru. Zkouším to znovu...",
|
||||||
|
"backup_background_service_current_upload_notification": "Nahrávání {}",
|
||||||
|
"backup_background_service_default_notification": "Kontrola nových zdrojů {}",
|
||||||
|
"backup_background_service_error_title": "Chyba zálohování",
|
||||||
|
"backup_background_service_in_progress_notification": "Vytvářím kopii vašich zdrojů...",
|
||||||
|
"backup_background_service_upload_failure_notification": "Nepodařilo se nahrát {}",
|
||||||
|
"backup_controller_page_albums": "Zálohovaná alba",
|
||||||
|
"backup_controller_page_background_battery_info_link": "Ukaž mi jak",
|
||||||
|
"backup_controller_page_background_battery_info_message": "Chcete-li dosáhnout nejlepších výsledků při zálohování na pozadí, vypněte všechny optimalizace baterie, které omezují aktivitu na pozadí pro Immich ve vašem zařízení. Jelikož to závisí na zařízení, zkontrolujte požadované informace pro výrobce vašeho zařízení.",
|
||||||
|
"backup_controller_page_background_battery_info_ok": "OK",
|
||||||
|
"backup_controller_page_background_battery_info_title": "Optimalizace baterie",
|
||||||
|
"backup_controller_page_background_charging": "Pouze během nabíjení",
|
||||||
|
"backup_controller_page_background_configure_error": "Nepodařilo se nakonfigurovat službu na pozadí",
|
||||||
|
"backup_controller_page_background_delay": "Zpoždění zálohování nových zdrojů: {}",
|
||||||
|
"backup_controller_page_background_description": "Povolte službu na pozadí pro automatické zálohování všech nových aktiv bez nutnosti otevření aplikace",
|
||||||
|
"backup_controller_page_background_is_off": "Automatické zálohování na pozadí je vypnuto",
|
||||||
|
"backup_controller_page_background_is_on": "Automatické zálohování na pozadí je zapnuto",
|
||||||
|
"backup_controller_page_background_turn_off": "Zakázat službu na pozadí",
|
||||||
|
"backup_controller_page_background_turn_on": "Povolit službu na pozadí",
|
||||||
|
"backup_controller_page_background_wifi": "Jen na WiFi",
|
||||||
|
"backup_controller_page_backup": "Zálohování",
|
||||||
|
"backup_controller_page_backup_selected": "Vybrané: ",
|
||||||
|
"backup_controller_page_backup_sub": "Zálohování fotografií a videí",
|
||||||
|
"backup_controller_page_cancel": "Zrušit",
|
||||||
|
"backup_controller_page_created": "Vytvořeno: {}",
|
||||||
|
"backup_controller_page_desc_backup": "Zapněte zálohování na popředí, aby se nové položky automaticky nahrávaly na server při otevření aplikace.",
|
||||||
|
"backup_controller_page_excluded": "Vyloučeno: ",
|
||||||
|
"backup_controller_page_failed": "Nepodařilo se ({})",
|
||||||
|
"backup_controller_page_filename": "Název souboru: {} [{}]",
|
||||||
|
"backup_controller_page_id": "ID: {}",
|
||||||
|
"backup_controller_page_info": "Informace o zálohování",
|
||||||
|
"backup_controller_page_none_selected": "Žádné vybrané",
|
||||||
|
"backup_controller_page_remainder": "Zbytek",
|
||||||
|
"backup_controller_page_remainder_sub": "Zbývající fotografie a alba, která se mají zálohovat z výběru",
|
||||||
|
"backup_controller_page_select": "Vybrat",
|
||||||
|
"backup_controller_page_server_storage": "Serverové úložiště",
|
||||||
|
"backup_controller_page_start_backup": "Spustit zálohování",
|
||||||
|
"backup_controller_page_status_off": "Automatické zálohování na popředí je vypnuto",
|
||||||
|
"backup_controller_page_status_on": "Automatické zálohování na popředí je zapnuto",
|
||||||
|
"backup_controller_page_storage_format": "{} z {} použitých",
|
||||||
|
"backup_controller_page_to_backup": "Alba, která mají být zálohována",
|
||||||
|
"backup_controller_page_total": "Celkem",
|
||||||
|
"backup_controller_page_total_sub": "Všechny jedinečné fotografie a videa z vybraných alb",
|
||||||
|
"backup_controller_page_turn_off": "Zakázat zálohování na popředí",
|
||||||
|
"backup_controller_page_turn_on": "Povolit zálohování na popředí",
|
||||||
|
"backup_controller_page_uploading_file_info": "Nahrávání informací o souborech",
|
||||||
|
"backup_err_only_album": "Nelze odstranit pouze album",
|
||||||
|
"backup_info_card_assets": "položky",
|
||||||
|
"cache_settings_album_thumbnails": "Náhledy stránek knihovny (položek {})",
|
||||||
|
"cache_settings_clear_cache_button": "Vymazat vyrovnávací paměť",
|
||||||
|
"cache_settings_clear_cache_button_title": "Vymaže vyrovnávací paměť aplikace. To výrazně ovlivní výkon aplikace, dokud se vyrovnávací paměť neobnoví.",
|
||||||
|
"cache_settings_image_cache_size": "Velikost vyrovnávací paměti (položek {})",
|
||||||
|
"cache_settings_statistics_album": "Knihovna náhledů",
|
||||||
|
"cache_settings_statistics_assets": "{} položky ({})",
|
||||||
|
"cache_settings_statistics_full": "Kompletní fotografie",
|
||||||
|
"cache_settings_statistics_shared": "Sdílené náhledy alb",
|
||||||
|
"cache_settings_statistics_thumbnail": "Náhledy",
|
||||||
|
"cache_settings_statistics_title": "Použití vyrovnávací paměti",
|
||||||
|
"cache_settings_subtitle": "Ovládání chování mobilní aplikace Immich v mezipaměti",
|
||||||
|
"cache_settings_thumbnail_size": "Velikost vyrovnávací paměti náhledů (položek {})",
|
||||||
|
"cache_settings_title": "Nastavení vyrovnávací paměti",
|
||||||
|
"control_bottom_app_bar_add_to_album": "Přidat do alba",
|
||||||
|
"control_bottom_app_bar_album_info": "{} položky",
|
||||||
|
"control_bottom_app_bar_album_info_shared": "{} položky - sdílené",
|
||||||
|
"control_bottom_app_bar_create_new_album": "Vytvořit nové album",
|
||||||
|
"control_bottom_app_bar_delete": "Vymazat",
|
||||||
|
"control_bottom_app_bar_share": "Sdílet",
|
||||||
|
"create_album_page_untitled": "Bez názvu",
|
||||||
|
"create_shared_album_page_create": "Vytvořit",
|
||||||
|
"create_shared_album_page_share": "Sdílet",
|
||||||
|
"create_shared_album_page_share_add_assets": "PŘIDAT",
|
||||||
|
"create_shared_album_page_share_select_photos": "Vybrat fotografie",
|
||||||
|
"daily_title_text_date": "EEEE, d MMMM",
|
||||||
|
"daily_title_text_date_year": "EEEE, d MMMM y",
|
||||||
|
"date_format": "EEEE, d MMMM y • H:mm",
|
||||||
|
"delete_dialog_alert": "Tyto položky budou trvale odstraněny z Immich a z vašeho zařízení.",
|
||||||
|
"delete_dialog_cancel": "Zrušit",
|
||||||
|
"delete_dialog_ok": "Vymazat",
|
||||||
|
"delete_dialog_title": "Vymazat trvale",
|
||||||
|
"exif_bottom_sheet_description": "Přidat popis...",
|
||||||
|
"exif_bottom_sheet_details": "PODROBNOSTI",
|
||||||
|
"exif_bottom_sheet_location": "LOKALITA",
|
||||||
|
"experimental_settings_new_asset_list_subtitle": "Probíhající práce",
|
||||||
|
"experimental_settings_new_asset_list_title": "Povolení experimentální mřížky fotografií",
|
||||||
|
"experimental_settings_subtitle": "Používejte na vlastní riziko!",
|
||||||
|
"experimental_settings_title": "Experimentální",
|
||||||
|
"home_page_add_to_album_conflicts": "Přidány {added} položky do alba {album}. {failed} položky jsou již v albu.",
|
||||||
|
"home_page_add_to_album_success": "Přidány položky {added} do alba {album}.",
|
||||||
|
"library_page_albums": "Alba",
|
||||||
|
"library_page_new_album": "Nové album",
|
||||||
|
"login_form_button_text": "Přihlášení",
|
||||||
|
"login_form_email_hint": "tvůjmail@email.com",
|
||||||
|
"login_form_endpoint_hint": "http://ip-tvého-serveru:port/api",
|
||||||
|
"login_form_endpoint_url": "URL adresa serveru",
|
||||||
|
"login_form_err_http": "Prosím, uveďte http:// nebo https://",
|
||||||
|
"login_form_err_invalid_email": "Neplatný e-mail",
|
||||||
|
"login_form_err_leading_whitespace": "Úvodní mezera",
|
||||||
|
"login_form_err_trailing_whitespace": "Koncová mezera",
|
||||||
|
"login_form_failed_get_oauth_server_config": "Chyba přihlášení pomocí OAuth, zkontrolujte adresu URL serveru",
|
||||||
|
"login_form_failed_get_oauth_server_disable": "Funkce OAuth není na tomto serveru dostupná",
|
||||||
|
"login_form_failed_login": "Chyba přihlášení, zkontrolujte url adresu serveru, e-mail a heslo.",
|
||||||
|
"login_form_label_email": "E-mail",
|
||||||
|
"login_form_label_password": "Heslo",
|
||||||
|
"login_form_password_hint": "heslo",
|
||||||
|
"login_form_save_login": "Zůstat přihlášen",
|
||||||
|
"monthly_title_text_date_format": "LLLL y",
|
||||||
|
"profile_drawer_app_logs": "Logy",
|
||||||
|
"profile_drawer_client_server_up_to_date": "Klient a server jsou aktuální",
|
||||||
|
"profile_drawer_settings": "Nastavení",
|
||||||
|
"profile_drawer_sign_out": "Odhlásit se",
|
||||||
|
"search_bar_hint": "Prohledejte své obrázky",
|
||||||
|
"search_page_no_objects": "Žádné informace o objektech",
|
||||||
|
"search_page_no_places": "Žádné informace o místě",
|
||||||
|
"search_page_places": "Místa",
|
||||||
|
"search_page_things": "Věci",
|
||||||
|
"search_result_page_new_search_hint": "Nové vyhledávání",
|
||||||
|
"select_additional_user_for_sharing_page_suggestions": "Návrhy",
|
||||||
|
"select_user_for_sharing_page_err_album": "Nepodařilo se vytvořit album",
|
||||||
|
"select_user_for_sharing_page_share_suggestions": "Návrhy",
|
||||||
|
"setting_image_viewer_help": "V prohlížeči detailů se nejprve načte malá miniatura, poté se načte náhled střední velikosti (je-li povolen) a nakonec se načte originál (je-li povolen).",
|
||||||
|
"setting_image_viewer_original_subtitle": "Umožňuje načíst původní obrázek v plném rozlišení (velký!). Zakázat pro snížení používání dat (v síti iv mezipaměti zařízení).",
|
||||||
|
"setting_image_viewer_original_title": "Načíst původní obrázek",
|
||||||
|
"setting_image_viewer_preview_subtitle": "Umožňuje načíst obrázek se středním rozlišením. Zakažte, pokud chcete přímo načíst originál nebo použít pouze miniaturu.",
|
||||||
|
"setting_image_viewer_preview_title": "Načíst náhled obrázku",
|
||||||
|
"setting_notifications_notify_failures_grace_period": "Oznámení o selhání zálohování na pozadí: {}",
|
||||||
|
"setting_notifications_notify_hours": "{} hodin",
|
||||||
|
"setting_notifications_notify_immediately": "okamžitě",
|
||||||
|
"setting_notifications_notify_minutes": "{} minut",
|
||||||
|
"setting_notifications_notify_never": "nikdy",
|
||||||
|
"setting_notifications_notify_seconds": "{} sekundy",
|
||||||
|
"setting_notifications_single_progress_subtitle": "Podrobné informace o průběhu nahrávání pro položku",
|
||||||
|
"setting_notifications_single_progress_title": "Zobrazit průběh detailů zálohování na pozadí",
|
||||||
|
"setting_notifications_subtitle": "Přizpůsobení předvoleb oznámení",
|
||||||
|
"setting_notifications_title": "Oznámení",
|
||||||
|
"setting_notifications_total_progress_subtitle": "Celkový průběh nahrávání (hotové/celkové položky)",
|
||||||
|
"setting_notifications_total_progress_title": "Zobrazit celkový průběh zálohování na pozadí",
|
||||||
|
"setting_pages_app_bar_settings": "nastavení",
|
||||||
|
"settings_require_restart": "Pro použití tohoto nastavení restartujte Immich",
|
||||||
|
"share_add": "Přidat",
|
||||||
|
"share_add_photos": "Přidat fotografie",
|
||||||
|
"share_add_title": "Přidat název",
|
||||||
|
"share_create_album": "Vytvořit album",
|
||||||
|
"share_dialog_preparing": "Připravuji...",
|
||||||
|
"share_invite": "Pozvat do alba",
|
||||||
|
"sharing_page_album": "Shared albums",
|
||||||
|
"sharing_page_description": "Vytvářejte sdílená alba a sdílejte fotografie a videa s lidmi ve vaší síti.",
|
||||||
|
"sharing_page_empty_list": "Prázný dopis",
|
||||||
|
"sharing_silver_appbar_create_shared_album": "Vytvořit sdílené album",
|
||||||
|
"sharing_silver_appbar_share_partner": "Sdílet s partnerem",
|
||||||
|
"tab_controller_nav_library": "Knihovna",
|
||||||
|
"tab_controller_nav_photos": "Fotografie",
|
||||||
|
"tab_controller_nav_search": "Vyhledávání",
|
||||||
|
"tab_controller_nav_sharing": "Sdílení",
|
||||||
|
"theme_setting_asset_list_storage_indicator_title": "Zobrazit indikátor úložiště na dlaždicích zdrojů",
|
||||||
|
"theme_setting_asset_list_tiles_per_row_title": "Počet aktiv na řádek ({})",
|
||||||
|
"theme_setting_dark_mode_switch": "Tmavé téma",
|
||||||
|
"theme_setting_image_viewer_quality_subtitle": "Přizpůsobení kvality prohlížeče detailů",
|
||||||
|
"theme_setting_image_viewer_quality_title": "Kvalita prohlížeče obrázků",
|
||||||
|
"theme_setting_system_theme_switch": "Automaticky (podle systemového nastavení)",
|
||||||
|
"theme_setting_theme_subtitle": "Vyberte nastavení tématu aplikace",
|
||||||
|
"theme_setting_theme_title": "Téma",
|
||||||
|
"theme_setting_three_stage_loading_subtitle": "Třístupňové načítání může zvýšit výkonnost načítání, ale vede k výrazně vyššímu zatížení sítě.",
|
||||||
|
"theme_setting_three_stage_loading_title": "Povolení třístupňového načítání",
|
||||||
|
"version_announcement_overlay_ack": "Potvrdit",
|
||||||
|
"version_announcement_overlay_release_notes": "poznámky k vydání",
|
||||||
|
"version_announcement_overlay_text_1": "Ahoj, je zde nová verze",
|
||||||
|
"version_announcement_overlay_text_2": "najděte si čas na návštěvu ",
|
||||||
|
"version_announcement_overlay_text_3": " a ujistěte se, že vaše konfigurace docker-compose a .env je aktuální, abyste předešli nesprávné konfiguraci, zvláště pokud používáte WatchTower nebo jakýkoli mechanismus, který podporuje automatické aktualizace serverových aplikací.",
|
||||||
|
"version_announcement_overlay_title": "K dispozici je nová verze serveru \uD83C\uDF89"
|
||||||
|
}
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
"backup_controller_page_background_battery_info_title": "Batterioptimering",
|
"backup_controller_page_background_battery_info_title": "Batterioptimering",
|
||||||
"backup_controller_page_background_charging": "Kun under opladning",
|
"backup_controller_page_background_charging": "Kun under opladning",
|
||||||
"backup_controller_page_background_configure_error": "Fejlede konfigureringen af baggrundsbackup",
|
"backup_controller_page_background_configure_error": "Fejlede konfigureringen af baggrundsbackup",
|
||||||
"backup_controller_page_background_delay": "Delay new assets backup: {}",
|
"backup_controller_page_background_delay": "Udskyd backup af nye billeder og videoer: {}",
|
||||||
"backup_controller_page_background_description": "Slå baggrundsbackup til, for automatisk at tage backup af nye billeder og videoer, uden at skulle åbne appen",
|
"backup_controller_page_background_description": "Slå baggrundsbackup til, for automatisk at tage backup af nye billeder og videoer, uden at skulle åbne appen",
|
||||||
"backup_controller_page_background_is_off": "Automatisk baggrundsbackup er slået fra",
|
"backup_controller_page_background_is_off": "Automatisk baggrundsbackup er slået fra",
|
||||||
"backup_controller_page_background_is_on": "Automatisk baggrundsbackup er slået til",
|
"backup_controller_page_background_is_on": "Automatisk baggrundsbackup er slået til",
|
||||||
@@ -83,10 +83,10 @@
|
|||||||
"cache_settings_subtitle": "Håndter cache-adfærden for Immich-appen.",
|
"cache_settings_subtitle": "Håndter cache-adfærden for Immich-appen.",
|
||||||
"cache_settings_thumbnail_size": "Størrelse af miniaturebillede cache ({} billeder og videoer)",
|
"cache_settings_thumbnail_size": "Størrelse af miniaturebillede cache ({} billeder og videoer)",
|
||||||
"cache_settings_title": "Cache-indstillinger",
|
"cache_settings_title": "Cache-indstillinger",
|
||||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
"control_bottom_app_bar_add_to_album": "Tilføj til album",
|
||||||
"control_bottom_app_bar_album_info": "{} items",
|
"control_bottom_app_bar_album_info": "{} genstande",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
"control_bottom_app_bar_album_info_shared": "{} genstande • Delt",
|
||||||
"control_bottom_app_bar_create_new_album": "Create new album",
|
"control_bottom_app_bar_create_new_album": "Opret nyt album",
|
||||||
"control_bottom_app_bar_delete": "Slet",
|
"control_bottom_app_bar_delete": "Slet",
|
||||||
"control_bottom_app_bar_share": "Del",
|
"control_bottom_app_bar_share": "Del",
|
||||||
"create_album_page_untitled": "Uden titel",
|
"create_album_page_untitled": "Uden titel",
|
||||||
@@ -108,8 +108,8 @@
|
|||||||
"experimental_settings_new_asset_list_title": "Aktiver eksperimentelt fotogitter",
|
"experimental_settings_new_asset_list_title": "Aktiver eksperimentelt fotogitter",
|
||||||
"experimental_settings_subtitle": "Brug på eget ansvar!",
|
"experimental_settings_subtitle": "Brug på eget ansvar!",
|
||||||
"experimental_settings_title": "Eksperimentelle",
|
"experimental_settings_title": "Eksperimentelle",
|
||||||
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
|
"home_page_add_to_album_conflicts": "Tilføjede {added} billeder og videoer til album {album}. {failed} billeder og videoer er allerede i albummet.",
|
||||||
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
"home_page_add_to_album_success": "Tilføjede {added} billeder og videoer til album {album}.",
|
||||||
"library_page_albums": "Albummer",
|
"library_page_albums": "Albummer",
|
||||||
"library_page_new_album": "Nyt album",
|
"library_page_new_album": "Nyt album",
|
||||||
"login_form_button_text": "Log ind",
|
"login_form_button_text": "Log ind",
|
||||||
@@ -120,15 +120,15 @@
|
|||||||
"login_form_err_invalid_email": "Ugyldig email",
|
"login_form_err_invalid_email": "Ugyldig email",
|
||||||
"login_form_err_leading_whitespace": "Mellemrum før",
|
"login_form_err_leading_whitespace": "Mellemrum før",
|
||||||
"login_form_err_trailing_whitespace": "Mellemrum efter",
|
"login_form_err_trailing_whitespace": "Mellemrum efter",
|
||||||
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",
|
"login_form_failed_get_oauth_server_config": "Fejl med at logge på med OAuth. Tjek serveres URL",
|
||||||
"login_form_failed_get_oauth_server_disable": "OAuth feature is not available on this server",
|
"login_form_failed_get_oauth_server_disable": "OAuth er ikke tilgængelig på denne server",
|
||||||
"login_form_failed_login": "Der opstod en vejl ved at logge ind. Tjek server URL, email og kodeordet",
|
"login_form_failed_login": "Der opstod en vejl ved at logge ind. Tjek server URL, email og kodeordet",
|
||||||
"login_form_label_email": "Email",
|
"login_form_label_email": "Email",
|
||||||
"login_form_label_password": "Kodeord",
|
"login_form_label_password": "Kodeord",
|
||||||
"login_form_password_hint": "kodeord",
|
"login_form_password_hint": "kodeord",
|
||||||
"login_form_save_login": "Forbliv logget ind",
|
"login_form_save_login": "Forbliv logget ind",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Log",
|
||||||
"profile_drawer_client_server_up_to_date": "Klient og server er ajour",
|
"profile_drawer_client_server_up_to_date": "Klient og server er ajour",
|
||||||
"profile_drawer_settings": "Indstillinger",
|
"profile_drawer_settings": "Indstillinger",
|
||||||
"profile_drawer_sign_out": "Log ud",
|
"profile_drawer_sign_out": "Log ud",
|
||||||
@@ -141,17 +141,17 @@
|
|||||||
"select_additional_user_for_sharing_page_suggestions": "Anbefalinger",
|
"select_additional_user_for_sharing_page_suggestions": "Anbefalinger",
|
||||||
"select_user_for_sharing_page_err_album": "Fejlede i at oprette et nyt album",
|
"select_user_for_sharing_page_err_album": "Fejlede i at oprette et nyt album",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Anbefalinger",
|
"select_user_for_sharing_page_share_suggestions": "Anbefalinger",
|
||||||
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
"setting_image_viewer_help": "Detaljeret visning indlæser miniaturebilleder først. Herefter indlæses mediumstørrelse forhåndsvisning af billedet (hvis dette er slået til), for til sidst at vise originalen (hvis dette er slået til).",
|
||||||
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
"setting_image_viewer_original_subtitle": "Slå indlæsning af originalbillede i fuld størrelse til (stort!). Deaktiver for at reducere dataforbruget (både på netværket og for enhedscache).",
|
||||||
"setting_image_viewer_original_title": "Load original image",
|
"setting_image_viewer_original_title": "Indlæs originalbillede",
|
||||||
"setting_image_viewer_preview_subtitle": "Enable to load a medium-resolution image. Disable to either directly load the original or only use the thumbnail.",
|
"setting_image_viewer_preview_subtitle": "Slå indlæsning af et mediumstørrelse billede til. Slå fra for enten direkte at indlæse originalen eller kun at bruge miniaturebilledet.",
|
||||||
"setting_image_viewer_preview_title": "Load preview image",
|
"setting_image_viewer_preview_title": "Indlæs forhåndsvisning af billedet",
|
||||||
"setting_notifications_notify_failures_grace_period": "Giv besked om baggrundsbackupfejl: {}",
|
"setting_notifications_notify_failures_grace_period": "Giv besked om baggrundsbackupfejl: {}",
|
||||||
"setting_notifications_notify_hours": "{} timer",
|
"setting_notifications_notify_hours": "{} timer",
|
||||||
"setting_notifications_notify_immediately": "med det samme",
|
"setting_notifications_notify_immediately": "med det samme",
|
||||||
"setting_notifications_notify_minutes": "{} minutter",
|
"setting_notifications_notify_minutes": "{} minutter",
|
||||||
"setting_notifications_notify_never": "aldrig",
|
"setting_notifications_notify_never": "aldrig",
|
||||||
"setting_notifications_notify_seconds": "{} seconds",
|
"setting_notifications_notify_seconds": "{} sekunder",
|
||||||
"setting_notifications_single_progress_subtitle": "Detaljeret uploadstatus pr. billed og video",
|
"setting_notifications_single_progress_subtitle": "Detaljeret uploadstatus pr. billed og video",
|
||||||
"setting_notifications_single_progress_title": "Vis detaljeret baggrundsuploadstatus",
|
"setting_notifications_single_progress_title": "Vis detaljeret baggrundsuploadstatus",
|
||||||
"setting_notifications_subtitle": "Tilpas dine notifikationspræferencer",
|
"setting_notifications_subtitle": "Tilpas dine notifikationspræferencer",
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
"backup_controller_page_status_off": "Automatic foreground backup is off",
|
"backup_controller_page_status_off": "Automatic foreground backup is off",
|
||||||
"backup_controller_page_status_on": "Automatic foreground backup is on",
|
"backup_controller_page_status_on": "Automatic foreground backup is on",
|
||||||
"backup_controller_page_storage_format": "{} of {} used",
|
"backup_controller_page_storage_format": "{} of {} used",
|
||||||
"backup_controller_page_to_backup": "Albums to be backup",
|
"backup_controller_page_to_backup": "Albums to be backed up",
|
||||||
"backup_controller_page_total": "Total",
|
"backup_controller_page_total": "Total",
|
||||||
"backup_controller_page_total_sub": "All unique photos and videos from selected albums",
|
"backup_controller_page_total_sub": "All unique photos and videos from selected albums",
|
||||||
"backup_controller_page_turn_off": "Turn off foreground backup",
|
"backup_controller_page_turn_off": "Turn off foreground backup",
|
||||||
@@ -191,4 +191,4 @@
|
|||||||
"version_announcement_overlay_text_2": "please take your time to visit the ",
|
"version_announcement_overlay_text_2": "please take your time to visit the ",
|
||||||
"version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.",
|
"version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.",
|
||||||
"version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89"
|
"version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,96 +1,96 @@
|
|||||||
{
|
{
|
||||||
"album_info_card_backup_album_excluded": "EXCLUIDOS",
|
"album_info_card_backup_album_excluded": "EXCLUIDOS",
|
||||||
"album_info_card_backup_album_included": "INCLUIDOS",
|
"album_info_card_backup_album_included": "INCLUIDOS",
|
||||||
"album_thumbnail_card_item": "1 item",
|
"album_thumbnail_card_item": "1 elemento",
|
||||||
"album_thumbnail_card_items": "{} items",
|
"album_thumbnail_card_items": "{} elementos",
|
||||||
"album_thumbnail_card_shared": " · Shared",
|
"album_thumbnail_card_shared": " · Compartido",
|
||||||
"album_viewer_appbar_share_delete": "Eliminar álbum ",
|
"album_viewer_appbar_share_delete": "Eliminar álbum",
|
||||||
"album_viewer_appbar_share_err_delete": "No ha podido eliminar el álbum",
|
"album_viewer_appbar_share_err_delete": "No se ha podido eliminar el álbum",
|
||||||
"album_viewer_appbar_share_err_leave": "No ha podido dejar el álbum",
|
"album_viewer_appbar_share_err_leave": "No se ha podido dejar el álbum",
|
||||||
"album_viewer_appbar_share_err_remove": "Hay problemas para eliminar los activos del álbum",
|
"album_viewer_appbar_share_err_remove": "Hay problemas para eliminar contenidos del álbum",
|
||||||
"album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum ",
|
"album_viewer_appbar_share_err_title": "No se ha podido cambiar el título del álbum",
|
||||||
"album_viewer_appbar_share_leave": "Abandonar álbum ",
|
"album_viewer_appbar_share_leave": "Abandonar álbum",
|
||||||
"album_viewer_appbar_share_remove": "Eliminar del álbum ",
|
"album_viewer_appbar_share_remove": "Eliminar del álbum",
|
||||||
"album_viewer_page_share_add_users": "Añadir usuarios",
|
"album_viewer_page_share_add_users": "Añadir usuarios",
|
||||||
"asset_list_settings_subtitle": "Photo grid layout settings",
|
"asset_list_settings_subtitle": "Configuración de la galería",
|
||||||
"asset_list_settings_title": "Photo Grid",
|
"asset_list_settings_title": "Galería",
|
||||||
"backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({})",
|
"backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({})",
|
||||||
"backup_album_selection_page_albums_tap": "Toque para incluir, doble toque para excluir",
|
"backup_album_selection_page_albums_tap": "Toque para incluir, doble toque para excluir",
|
||||||
"backup_album_selection_page_assets_scatter": "Los activos pueden dispersarse en varios álbumes. De este modo, los álbumes pueden ser incluidos o excluidos durante el proceso de copia de seguridad.",
|
"backup_album_selection_page_assets_scatter": "Los elementos pueden estar en varios álbumes. Por eso, los álbumes pueden ser incluidos o excluidos durante el proceso de copia de seguridad.",
|
||||||
"backup_album_selection_page_select_albums": "Seleccionar Álbumes",
|
"backup_album_selection_page_select_albums": "Seleccionar álbumes",
|
||||||
"backup_album_selection_page_selection_info": "Información sobre la Selección",
|
"backup_album_selection_page_selection_info": "Información sobre la selección",
|
||||||
"backup_album_selection_page_total_assets": "Total de activos únicos",
|
"backup_album_selection_page_total_assets": "Total de elementos únicos",
|
||||||
"backup_all": "Todos",
|
"backup_all": "Todos",
|
||||||
"backup_background_service_backup_failed_message": "Failed to backup assets. Retrying…",
|
"backup_background_service_backup_failed_message": "No se ha podido realizar la copia de seguridad. Reintentando…",
|
||||||
"backup_background_service_connection_failed_message": "Failed to connect to the server. Retrying…",
|
"backup_background_service_connection_failed_message": "No se ha podido conectar con el servidor. Reintentando…",
|
||||||
"backup_background_service_current_upload_notification": "Uploading {}",
|
"backup_background_service_current_upload_notification": "Subidendo {}",
|
||||||
"backup_background_service_default_notification": "Checking for new assets…",
|
"backup_background_service_default_notification": "Buscando nuevos elementos…",
|
||||||
"backup_background_service_error_title": "Backup error",
|
"backup_background_service_error_title": "Error de copia de seguridad",
|
||||||
"backup_background_service_in_progress_notification": "Backing up your assets…",
|
"backup_background_service_in_progress_notification": "Subiendo elementos…",
|
||||||
"backup_background_service_upload_failure_notification": "Failed to upload {}",
|
"backup_background_service_upload_failure_notification": "Error al subir {}",
|
||||||
"backup_controller_page_albums": "Álbumes de copia de seguridad",
|
"backup_controller_page_albums": "Álbumes de copia de seguridad",
|
||||||
"backup_controller_page_background_battery_info_link": "Show me how",
|
"backup_controller_page_background_battery_info_link": "Muéstrame cómo",
|
||||||
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.",
|
"backup_controller_page_background_battery_info_message": "Para disfrutar de la mejor experiencia de copia de seguridad en segundo plano, desactive cualquier optimización de la batería que restrinja la actividad en segundo plano para Immich.\nDado que esto es específico de cada dispositivo, busque la información necesaria para el fabricante de su dispositivo.",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "OK",
|
||||||
"backup_controller_page_background_battery_info_title": "Battery optimizations",
|
"backup_controller_page_background_battery_info_title": "Optimización de batería",
|
||||||
"backup_controller_page_background_charging": "Only while charging",
|
"backup_controller_page_background_charging": "Sólo mientras carga",
|
||||||
"backup_controller_page_background_configure_error": "Failed to configure the background service",
|
"backup_controller_page_background_configure_error": "Error al configurar el servicio en segundo plano",
|
||||||
"backup_controller_page_background_delay": "Delay new assets backup: {}",
|
"backup_controller_page_background_delay": "Delay new assets backup: {}",
|
||||||
"backup_controller_page_background_description": "Turn on the background service to automatically backup any new assets without needing to open the app",
|
"backup_controller_page_background_description": "Activar el servicio en segundo plano para realizar copias de seguridad automáticas de los nuevos elementos sin tener que abrir la aplicación",
|
||||||
"backup_controller_page_background_is_off": "Automatic background backup is off",
|
"backup_controller_page_background_is_off": "Copia de seguridad automática apagada",
|
||||||
"backup_controller_page_background_is_on": "Automatic background backup is on",
|
"backup_controller_page_background_is_on": "Copia de seguridad automática encendida",
|
||||||
"backup_controller_page_background_turn_off": "Turn off background service",
|
"backup_controller_page_background_turn_off": "Desactivar el servicio en segundo plano",
|
||||||
"backup_controller_page_background_turn_on": "Turn on background service",
|
"backup_controller_page_background_turn_on": "Activar el servicio en segundo plano",
|
||||||
"backup_controller_page_background_wifi": "Only on WiFi",
|
"backup_controller_page_background_wifi": "Sólo con WiFi",
|
||||||
"backup_controller_page_backup": "Copia de Seguridad",
|
"backup_controller_page_backup": "Copia de Seguridad",
|
||||||
"backup_controller_page_backup_selected": "Seleccionado:",
|
"backup_controller_page_backup_selected": "Seleccionado:",
|
||||||
"backup_controller_page_backup_sub": "Copia de seguridad de fotos y vídeos",
|
"backup_controller_page_backup_sub": "Copia de seguridad de fotos y vídeos",
|
||||||
"backup_controller_page_cancel": "Cancelar",
|
"backup_controller_page_cancel": "Cancelar",
|
||||||
"backup_controller_page_created": "Created on: {}",
|
"backup_controller_page_created": "Creado el: {}",
|
||||||
"backup_controller_page_desc_backup": "Active la copia de seguridad para cargar automáticamente los nuevos activos al servidor.",
|
"backup_controller_page_desc_backup": "Active la copia de seguridad para cargar automáticamente los nuevos elementos al servidor.",
|
||||||
"backup_controller_page_excluded": "Excluido:",
|
"backup_controller_page_excluded": "Excluido:",
|
||||||
"backup_controller_page_failed": "Failed ({})",
|
"backup_controller_page_failed": "Fallido ({})",
|
||||||
"backup_controller_page_filename": "File name: {} [{}]",
|
"backup_controller_page_filename": "Nombre de archivo: {} [{}]",
|
||||||
"backup_controller_page_id": "ID: {}",
|
"backup_controller_page_id": "ID: {}",
|
||||||
"backup_controller_page_info": "Información de la Copia de Seguridad",
|
"backup_controller_page_info": "Información de la copia de seguridad",
|
||||||
"backup_controller_page_none_selected": "Ninguno seleccionado",
|
"backup_controller_page_none_selected": "Ninguno seleccionado",
|
||||||
"backup_controller_page_remainder": "Remanente",
|
"backup_controller_page_remainder": "Restantes",
|
||||||
"backup_controller_page_remainder_sub": "Fotos y álbumes restantes para hacer una copia de seguridad de la selección",
|
"backup_controller_page_remainder_sub": "Fotos y álbumes restantes para hacer una copia de seguridad de la selección",
|
||||||
"backup_controller_page_select": "Seleccionar",
|
"backup_controller_page_select": "Seleccionar",
|
||||||
"backup_controller_page_server_storage": "Almacenamiento en el servidor",
|
"backup_controller_page_server_storage": "Almacenamiento en el servidor",
|
||||||
"backup_controller_page_start_backup": "Iniciar copia de seguridad",
|
"backup_controller_page_start_backup": "Iniciar copia de seguridad",
|
||||||
"backup_controller_page_status_off": "La copia de seguridad está desactivada",
|
"backup_controller_page_status_off": "La copia de seguridad está desactivada",
|
||||||
"backup_controller_page_status_on": "La copia de seguridad está activada",
|
"backup_controller_page_status_on": "La copia de seguridad está activada",
|
||||||
"backup_controller_page_storage_format": "{} de {} usadas",
|
"backup_controller_page_storage_format": "{} de {} usados",
|
||||||
"backup_controller_page_to_backup": "Álbumes a respaldar",
|
"backup_controller_page_to_backup": "Álbumes a respaldar",
|
||||||
"backup_controller_page_total": "Total",
|
"backup_controller_page_total": "Total",
|
||||||
"backup_controller_page_total_sub": "Todas las fotos y vídeos únicos de los álbumes seleccionados",
|
"backup_controller_page_total_sub": "Todas las fotos y vídeos únicos de los álbumes seleccionados",
|
||||||
"backup_controller_page_turn_off": "Apagar la copia de seguridad",
|
"backup_controller_page_turn_off": "Apagar la copia de seguridad",
|
||||||
"backup_controller_page_turn_on": "Activar la copia de seguridad",
|
"backup_controller_page_turn_on": "Activar la copia de seguridad",
|
||||||
"backup_controller_page_uploading_file_info": "Uploading file info",
|
"backup_controller_page_uploading_file_info": "SUbiendo información de archivos",
|
||||||
"backup_err_only_album": "No se puede eliminar el único álbum",
|
"backup_err_only_album": "No se puede eliminar el único álbum",
|
||||||
"backup_info_card_assets": "activos",
|
"backup_info_card_assets": "elementos",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"cach_settings_album_thumbnails": "Miniaturas del álbum ({} elementos)",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"cache_settings_clear_cache_button": "Limpiar caché",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"cache_settings_clear_cache_button_title": "Limpia el caché de la app. Esto afectará significativamente al rendimiento de la aplicación hasta que la caché se haya reconstruido.",
|
||||||
"cache_settings_image_cache_size": "Image cache size ({} assets)",
|
"cache_settings_image_cache_size": "Miniaturas de imágenes ({} elementos)",
|
||||||
"cache_settings_statistics_album": "Library thumbnails",
|
"cache_settings_statistics_album": "Miniaturas del álbum",
|
||||||
"cache_settings_statistics_assets": "{} assets ({})",
|
"cache_settings_statistics_assets": "{} elementos ({})",
|
||||||
"cache_settings_statistics_full": "Full images",
|
"cache_settings_statistics_full": "Imágenes completas",
|
||||||
"cache_settings_statistics_shared": "Shared album thumbnails",
|
"cache_settings_statistics_shared": "Miniaturas del álbum compartido",
|
||||||
"cache_settings_statistics_thumbnail": "Thumbnails",
|
"cache_settings_statistics_thumbnail": "Miniaturas",
|
||||||
"cache_settings_statistics_title": "Cache usage",
|
"cache_settings_statistics_title": "Uso de caché",
|
||||||
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
|
"cache_settings_subtitle": "Controla el comportamiento de almacenamiento en caché de la aplicación de Immich",
|
||||||
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
|
"cache_settings_thumbnail_size": "Tamaño del caché de miniaturas ({} elementos)",
|
||||||
"cache_settings_title": "Caching Settings",
|
"cache_settings_title": "Ajustes del caché",
|
||||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
"control_bottom_app_bar_add_to_album": "Añadir al álbum",
|
||||||
"control_bottom_app_bar_album_info": "{} items",
|
"control_bottom_app_bar_album_info": "{} elementos",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
"control_bottom_app_bar_album_info_shared": "{} elementos · Compartido",
|
||||||
"control_bottom_app_bar_create_new_album": "Create new album",
|
"control_bottom_app_bar_create_new_album": "Crear nuevo álbum",
|
||||||
"control_bottom_app_bar_delete": "Eliminar",
|
"control_bottom_app_bar_delete": "Eliminar",
|
||||||
"control_bottom_app_bar_share": "Share",
|
"control_bottom_app_bar_share": "Compartir",
|
||||||
"create_album_page_untitled": "Untitled",
|
"create_album_page_untitled": "Sin título",
|
||||||
"create_shared_album_page_create": "Create",
|
"create_shared_album_page_create": "Crear",
|
||||||
"create_shared_album_page_share": "Compartir",
|
"create_shared_album_page_share": "Compartir",
|
||||||
"create_shared_album_page_share_add_assets": "AÑADIR ACTIVOS",
|
"create_shared_album_page_share_add_assets": "AÑADIR ACTIVOS",
|
||||||
"create_shared_album_page_share_select_photos": "Seleccionar Fotos",
|
"create_shared_album_page_share_select_photos": "Seleccionar Fotos",
|
||||||
@@ -101,17 +101,17 @@
|
|||||||
"delete_dialog_cancel": "Cancelar",
|
"delete_dialog_cancel": "Cancelar",
|
||||||
"delete_dialog_ok": "Eliminar",
|
"delete_dialog_ok": "Eliminar",
|
||||||
"delete_dialog_title": "Eliminar Permanentemente",
|
"delete_dialog_title": "Eliminar Permanentemente",
|
||||||
"exif_bottom_sheet_description": "Añadir Descripción...",
|
"exif_bottom_sheet_description": "Añadir descripción...",
|
||||||
"exif_bottom_sheet_details": "DETALLES",
|
"exif_bottom_sheet_details": "DETALLES",
|
||||||
"exif_bottom_sheet_location": "LOCALZACIÓN",
|
"exif_bottom_sheet_location": "LOCALZACIÓN",
|
||||||
"experimental_settings_new_asset_list_subtitle": "Work in progress",
|
"experimental_settings_new_asset_list_subtitle": "En desarrollo",
|
||||||
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
"experimental_settings_new_asset_list_title": "Habilitar galería experimental",
|
||||||
"experimental_settings_subtitle": "Use at your own risk!",
|
"experimental_settings_subtitle": "¡Úsalo bajo tu responsabilidad!",
|
||||||
"experimental_settings_title": "Experimental",
|
"experimental_settings_title": "Experimental",
|
||||||
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
|
"home_page_add_to_album_conflicts": "Añadidos {added} elementos al álbum {album}. {failed} elementos ya estaban añadidos.",
|
||||||
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
"home_page_add_to_album_success": "Añadidos {added} elementos al álbum {album}.",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Álbumes",
|
||||||
"library_page_new_album": "New album",
|
"library_page_new_album": "Nuevo álbum",
|
||||||
"login_form_button_text": "Iniciar Sesión",
|
"login_form_button_text": "Iniciar Sesión",
|
||||||
"login_form_email_hint": "tucorreo@correo.com",
|
"login_form_email_hint": "tucorreo@correo.com",
|
||||||
"login_form_endpoint_hint": "http://tu-ip-de-servidor:puerto/api",
|
"login_form_endpoint_hint": "http://tu-ip-de-servidor:puerto/api",
|
||||||
@@ -120,75 +120,75 @@
|
|||||||
"login_form_err_invalid_email": "Correo electrónico no válido",
|
"login_form_err_invalid_email": "Correo electrónico no válido",
|
||||||
"login_form_err_leading_whitespace": "Espacio en blanco inicial",
|
"login_form_err_leading_whitespace": "Espacio en blanco inicial",
|
||||||
"login_form_err_trailing_whitespace": "Espacio en blanco al final",
|
"login_form_err_trailing_whitespace": "Espacio en blanco al final",
|
||||||
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",
|
"login_form_failed_get_oauth_server_config": "Fallo al iniciar sesión con OAuth. Comprueba la URL del servidor.",
|
||||||
"login_form_failed_get_oauth_server_disable": "OAuth feature is not available on this server",
|
"login_form_failed_get_oauth_server_disable": "OAuth no está disponible en este servidor",
|
||||||
"login_form_failed_login": "Error logging you in, check server URL, email and password",
|
"login_form_failed_login": "Fallo al iniciar sesión, comprueba URL, correo y contraseña",
|
||||||
"login_form_label_email": "Correo",
|
"login_form_label_email": "Correo",
|
||||||
"login_form_label_password": "Contraseña",
|
"login_form_label_password": "Contraseña",
|
||||||
"login_form_password_hint": "contraseña",
|
"login_form_password_hint": "contraseña",
|
||||||
"login_form_save_login": "Mantener la sesión iniciada",
|
"login_form_save_login": "Mantener la sesión iniciada",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Registros",
|
||||||
"profile_drawer_client_server_up_to_date": "El Cliente y el Servidor están actualizados",
|
"profile_drawer_client_server_up_to_date": "El cliente y el servidor están actualizados",
|
||||||
"profile_drawer_settings": "Settings",
|
"profile_drawer_settings": "Ajustes",
|
||||||
"profile_drawer_sign_out": "Cerrar Sesión",
|
"profile_drawer_sign_out": "Cerrar Sesión",
|
||||||
"search_bar_hint": "Busca tus fotos",
|
"search_bar_hint": "Buscar fotos",
|
||||||
"search_page_no_objects": "No Objects Info Available",
|
"search_page_no_objects": "No hay información sobre objetos",
|
||||||
"search_page_no_places": "No hay información de lugares disponibles",
|
"search_page_no_places": "No hay información sobre lugares",
|
||||||
"search_page_places": "Lugares",
|
"search_page_places": "Lugares",
|
||||||
"search_page_things": "Cosas",
|
"search_page_things": "Objetos",
|
||||||
"search_result_page_new_search_hint": "Nueva Busqueda",
|
"search_result_page_new_search_hint": "Nueva búsqueda",
|
||||||
"select_additional_user_for_sharing_page_suggestions": "Sugerencias",
|
"select_additional_user_for_sharing_page_suggestions": "Sugerencias",
|
||||||
"select_user_for_sharing_page_err_album": "Fallo al crear el álbum",
|
"select_user_for_sharing_page_err_album": "Fallo al crear el álbum",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
"select_user_for_sharing_page_share_suggestions": "Sugerencias",
|
||||||
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
"setting_image_viewer_help": "El visor carga primero la miniatura pequeña, luego carga la de tamaño medio (si está activada) y por último la original (si está activada).",
|
||||||
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
"setting_image_viewer_original_subtitle": "Activar para cargar la imagen original (¡grande!). Desactivar para reducir el uso de datos (tanto de red como de caché).",
|
||||||
"setting_image_viewer_original_title": "Load original image",
|
"setting_image_viewer_original_title": "Cargar imágenes originales",
|
||||||
"setting_image_viewer_preview_subtitle": "Enable to load a medium-resolution image. Disable to either directly load the original or only use the thumbnail.",
|
"setting_image_viewer_preview_subtitle": "Activar para cargar una imagen de resolución media. Desactivar para cargar directamente el original o utilizar sólo la miniatura.",
|
||||||
"setting_image_viewer_preview_title": "Load preview image",
|
"setting_image_viewer_preview_title": "Cargar miniaturas",
|
||||||
"setting_notifications_notify_failures_grace_period": "Notify background backup failures: {}",
|
"setting_notifications_notify_failures_grace_period": "Notificar fallos de carga en segundo plano: {}",
|
||||||
"setting_notifications_notify_hours": "{} hours",
|
"setting_notifications_notify_hours": "{} horas",
|
||||||
"setting_notifications_notify_immediately": "immediately",
|
"setting_notifications_notify_immediately": "inmediatamente",
|
||||||
"setting_notifications_notify_minutes": "{} minutes",
|
"setting_notifications_notify_minutes": "{} minutos",
|
||||||
"setting_notifications_notify_never": "never",
|
"setting_notifications_notify_never": "nunca",
|
||||||
"setting_notifications_notify_seconds": "{} seconds",
|
"setting_notifications_notify_seconds": "{} segundos",
|
||||||
"setting_notifications_single_progress_subtitle": "Detailed upload progress information per asset",
|
"setting_notifications_single_progress_subtitle": "Información detallada por cada elemento en copia",
|
||||||
"setting_notifications_single_progress_title": "Show background backup detail progress",
|
"setting_notifications_single_progress_title": "Mostrar detalles de la subida",
|
||||||
"setting_notifications_subtitle": "Adjust your notification preferences",
|
"setting_notifications_subtitle": "Ajusta tus preferencias de notificación",
|
||||||
"setting_notifications_title": "Notifications",
|
"setting_notifications_title": "Notificaciones",
|
||||||
"setting_notifications_total_progress_subtitle": "Overall upload progress (done/total assets)",
|
"setting_notifications_total_progress_subtitle": "Progreso general de la subida (subidos/total elementos)",
|
||||||
"setting_notifications_total_progress_title": "Show background backup total progress",
|
"setting_notifications_total_progress_title": "Mostrar progreso de la subida",
|
||||||
"setting_pages_app_bar_settings": "Settings",
|
"setting_pages_app_bar_settings": "Ajustes",
|
||||||
"settings_require_restart": "Please restart Immich to apply this setting",
|
"settings_require_restart": "Por favor, reinica Immich para aplicar estos cambios",
|
||||||
"share_add": "Añadir",
|
"share_add": "Añadir",
|
||||||
"share_add_photos": "Añadir fotos",
|
"share_add_photos": "Añadir fotos",
|
||||||
"share_add_title": "Añadir un título",
|
"share_add_title": "Añadir un título",
|
||||||
"share_create_album": "Crear álbum",
|
"share_create_album": "Crear álbum",
|
||||||
"share_dialog_preparing": "Preparing...",
|
"share_dialog_preparing": "Preparando...",
|
||||||
"share_invite": "Invitar al álbum",
|
"share_invite": "Invitar al álbum",
|
||||||
"sharing_page_album": "Álbumes compartidos",
|
"sharing_page_album": "Álbumes compartidos",
|
||||||
"sharing_page_description": "Crea álbumes compartidos para compartir fotos y vídeos con las personas de tu red.",
|
"sharing_page_description": "Crea álbumes compartidos para compartir fotos y vídeos con otros usuarios.",
|
||||||
"sharing_page_empty_list": "LISTA VACIA",
|
"sharing_page_empty_list": "LISTA VACÍA",
|
||||||
"sharing_silver_appbar_create_shared_album": "Crear un álbum compartido",
|
"sharing_silver_appbar_create_shared_album": "Crear un álbum compartido",
|
||||||
"sharing_silver_appbar_share_partner": "Compartir con el compañero",
|
"sharing_silver_appbar_share_partner": "Compartir con pareja",
|
||||||
"tab_controller_nav_library": "Library",
|
"tab_controller_nav_library": "Álbumes",
|
||||||
"tab_controller_nav_photos": "Fotos",
|
"tab_controller_nav_photos": "Galería",
|
||||||
"tab_controller_nav_search": "Buscar",
|
"tab_controller_nav_search": "Buscar",
|
||||||
"tab_controller_nav_sharing": "Compartiendo",
|
"tab_controller_nav_sharing": "Compartido",
|
||||||
"theme_setting_asset_list_storage_indicator_title": "Show storage indicator on asset tiles",
|
"theme_setting_asset_list_storage_indicator_title": "Mostrar estado de subida en cada elemento",
|
||||||
"theme_setting_asset_list_tiles_per_row_title": "Number of assets per row ({})",
|
"theme_setting_asset_list_tiles_per_row_title": "Número de elementos por fila ({})",
|
||||||
"theme_setting_dark_mode_switch": "Dark mode",
|
"theme_setting_dark_mode_switch": "Modo oscuro",
|
||||||
"theme_setting_image_viewer_quality_subtitle": "Adjust the quality of the detail image viewer",
|
"theme_setting_image_viewer_quality_subtitle": "Ajusta la calidad del visor",
|
||||||
"theme_setting_image_viewer_quality_title": "Image viewer quality",
|
"theme_setting_image_viewer_quality_title": "Calidad del visor",
|
||||||
"theme_setting_system_theme_switch": "Automatic (Follow system setting)",
|
"theme_setting_system_theme_switch": "Automático (Según ajustes del sistema)",
|
||||||
"theme_setting_theme_subtitle": "Choose the app's theme setting",
|
"theme_setting_theme_subtitle": "Elige el tema de la app",
|
||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Tema",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "La carga en tres fases podría aumentar el rendimiento pero provoca una mayor carga de red",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Activar carga en tres fases",
|
||||||
"version_announcement_overlay_ack": "Reconocer",
|
"version_announcement_overlay_ack": "Reconocer",
|
||||||
"version_announcement_overlay_release_notes": "notas de versión",
|
"version_announcement_overlay_release_notes": "Notas de la versión",
|
||||||
"version_announcement_overlay_text_1": "Hola amigo, hay una nueva versión de",
|
"version_announcement_overlay_text_1": "¡Hola! Hay una nueva versión de",
|
||||||
"version_announcement_overlay_text_2": "tómese su tiempo para visitar la ",
|
"version_announcement_overlay_text_2": "tómate tu tiempo para visitar la ",
|
||||||
"version_announcement_overlay_text_3": "y asegurate de que tu configuración de docker-compose y .env está actualizada para evitar cualquier desconfiguración, especialmente si utiliza WatchTower o cualquier mecanismo que se encargue de actualizar su aplicación de servidor automáticamente.",
|
"version_announcement_overlay_text_3": "y asegúrate de que tu docker-compose y .env están actualizados para prevenir cualquier configuración errónea, especialmente si usas WatchTower o cualquier otro mecanismo que automatice la actualización.",
|
||||||
"version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89"
|
"version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89"
|
||||||
}
|
}
|
||||||
|
|||||||