Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bbb6bca605 | ||
|
|
a8e5a1de15 | ||
|
|
bba4c44182 | ||
|
|
7c76249e1f | ||
|
|
294955db17 | ||
|
|
752ad2d2eb |
@@ -42,6 +42,7 @@ immich upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api --recur
|
|||||||
| --server / -s | Immich's server address |
|
| --server / -s | Immich's server address |
|
||||||
| --threads / -t | Number of threads to use (Default 5) |
|
| --threads / -t | Number of threads to use (Default 5) |
|
||||||
| --album/ -al | Create albums for assets based on the parent folder or a given name |
|
| --album/ -al | Create albums for assets based on the parent folder or a given name |
|
||||||
|
| --import/ -i | Import gallery |
|
||||||
|
|
||||||
### Obtain the API Key
|
### Obtain the API Key
|
||||||
|
|
||||||
|
|||||||
BIN
docs/docs/features/img/me.png
Normal file
BIN
docs/docs/features/img/me.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 64 KiB |
BIN
docs/docs/features/img/my-wife.png
Normal file
BIN
docs/docs/features/img/my-wife.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 64 KiB |
103
docs/docs/features/read-only-gallery.md
Normal file
103
docs/docs/features/read-only-gallery.md
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
# Read-only Gallery [Experimental]
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
This feature enables users to use an existing gallery without uploading the assets to Immich.
|
||||||
|
|
||||||
|
Upon syncing the file information, it will be read by Immich to generate supported files.
|
||||||
|
|
||||||
|
:::caution
|
||||||
|
|
||||||
|
This feature is still in an experimental stage. And this is an initial implementation and will receive improvements in the future.
|
||||||
|
|
||||||
|
The current limitations of this feature are:
|
||||||
|
|
||||||
|
- Assets are not automatically synced and must instead be manually synced with the CLI tool.
|
||||||
|
- Only new files that are added to the gallery will be detected.
|
||||||
|
- Deleted and moved files will not be detected.
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
:::tip Example scenario
|
||||||
|
|
||||||
|
On the VM/system that Immich is running, I have 2 galleries that I want to use with Immich.
|
||||||
|
|
||||||
|
- My gallery is stored at `/mnt/media/precious-memory`
|
||||||
|
- My wife's gallery is stored at `/mnt/media/childhood-memory`
|
||||||
|
|
||||||
|
We will use those values in the steps below.
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
### Mount the gallery to the containers.
|
||||||
|
|
||||||
|
`immich-server` and `immich-microservices` containers will need access to the gallery. Mount the directory path as in the example below
|
||||||
|
|
||||||
|
```diff title="docker-compose.yml"
|
||||||
|
immich-server:
|
||||||
|
container_name: immich_server
|
||||||
|
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
|
||||||
|
command: [ "start.sh", "immich" ]
|
||||||
|
volumes:
|
||||||
|
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||||
|
+ - /mnt/media/precious-memory:/mnt/media/precious-memory
|
||||||
|
+ - /mnt/media/childhood-memory:/mnt/media/childhood-memory
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
- database
|
||||||
|
- typesense
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
immich-microservices:
|
||||||
|
container_name: immich_microservices
|
||||||
|
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
|
||||||
|
command: [ "start.sh", "microservices" ]
|
||||||
|
volumes:
|
||||||
|
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||||
|
+ - /mnt/media/precious-memory:/mnt/media/precious-memory
|
||||||
|
+ - /mnt/media/childhood-memory:/mnt/media/childhood-memory
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
- database
|
||||||
|
- typesense
|
||||||
|
restart: always
|
||||||
|
```
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
Internal and external path have to be identical.
|
||||||
|
:::
|
||||||
|
|
||||||
|
_Remember to bring the container down/up to register the changes. Make sure you can see the mounted path in the container._
|
||||||
|
|
||||||
|
### Register the path for the user.
|
||||||
|
|
||||||
|
This action is done by the admin of the instance.
|
||||||
|
|
||||||
|
- Navigate to `Administration > Users` page on the web.
|
||||||
|
- Click on the user edit button.
|
||||||
|
- Add the gallery path to the `External Path` field for the corresponding user and confirm the changes.
|
||||||
|
|
||||||
|
<img src={require('./img/me.png').default} width='33%' title='My Account Storage Path' />
|
||||||
|
|
||||||
|
<img src={require('./img/my-wife.png').default} width='33%' title='My Wifes Account Storage Path' />
|
||||||
|
|
||||||
|
### Sync with the CLI tool.
|
||||||
|
|
||||||
|
- Install or update the [CLI Tool](/docs/features/bulk-upload.md). The import feature is supported from version `v0.39.0` of the CLI
|
||||||
|
- Run the command below to sync the gallery with Immich.
|
||||||
|
|
||||||
|
```bash title="Import my gallery"
|
||||||
|
immich upload --key <my-api-key> --server http://my-server-ip:2283/api /mnt/media/precious-memory --recursive --import
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash title="Import my wife gallery"
|
||||||
|
immich upload --key <my-wife-api-key> --server http://my-server-ip:2283/api /mnt/media/childhood-memory --recursive --import
|
||||||
|
```
|
||||||
|
|
||||||
|
The `--import` flag will tell Immich to import the files by path instead of uploading them.
|
||||||
@@ -36,7 +36,7 @@ platform :android do
|
|||||||
build_type: 'Release',
|
build_type: 'Release',
|
||||||
properties: {
|
properties: {
|
||||||
"android.injected.version.code" => 86,
|
"android.injected.version.code" => 86,
|
||||||
"android.injected.version.name" => "1.63.0",
|
"android.injected.version.name" => "1.63.2",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
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')
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ platform :ios do
|
|||||||
desc "iOS Beta"
|
desc "iOS Beta"
|
||||||
lane :beta do
|
lane :beta do
|
||||||
increment_version_number(
|
increment_version_number(
|
||||||
version_number: "1.63.0"
|
version_number: "1.63.2"
|
||||||
)
|
)
|
||||||
increment_build_number(
|
increment_build_number(
|
||||||
build_number: latest_testflight_build_number + 1,
|
build_number: latest_testflight_build_number + 1,
|
||||||
|
|||||||
2
mobile/openapi/README.md
generated
2
mobile/openapi/README.md
generated
@@ -3,7 +3,7 @@ Immich API
|
|||||||
|
|
||||||
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
||||||
|
|
||||||
- API version: 1.63.0
|
- API version: 1.63.2
|
||||||
- Build package: org.openapitools.codegen.languages.DartClientCodegen
|
- Build package: org.openapitools.codegen.languages.DartClientCodegen
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ name: immich_mobile
|
|||||||
description: Immich - selfhosted backup media file on mobile phone
|
description: Immich - selfhosted backup media file on mobile phone
|
||||||
|
|
||||||
publish_to: "none"
|
publish_to: "none"
|
||||||
version: 1.63.0+86
|
version: 1.63.2+86
|
||||||
isar_version: &isar_version 3.1.0+1
|
isar_version: &isar_version 3.1.0+1
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -4374,7 +4374,7 @@
|
|||||||
"info": {
|
"info": {
|
||||||
"title": "Immich",
|
"title": "Immich",
|
||||||
"description": "Immich API",
|
"description": "Immich API",
|
||||||
"version": "1.63.0",
|
"version": "1.63.2",
|
||||||
"contact": {}
|
"contact": {}
|
||||||
},
|
},
|
||||||
"tags": [],
|
"tags": [],
|
||||||
|
|||||||
4
server/package-lock.json
generated
4
server/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "immich",
|
"name": "immich",
|
||||||
"version": "1.63.0",
|
"version": "1.63.2",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "immich",
|
"name": "immich",
|
||||||
"version": "1.63.0",
|
"version": "1.63.2",
|
||||||
"license": "UNLICENSED",
|
"license": "UNLICENSED",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.20.13",
|
"@babel/runtime": "^7.20.13",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "immich",
|
"name": "immich",
|
||||||
"version": "1.63.0",
|
"version": "1.63.2",
|
||||||
"description": "",
|
"description": "",
|
||||||
"author": "",
|
"author": "",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ const validMimeTypes = [
|
|||||||
'image/jpeg',
|
'image/jpeg',
|
||||||
'image/jxl',
|
'image/jxl',
|
||||||
'image/png',
|
'image/png',
|
||||||
|
'image/dng',
|
||||||
'image/tiff',
|
'image/tiff',
|
||||||
'image/webp',
|
'image/webp',
|
||||||
'image/x-adobe-dng',
|
'image/x-adobe-dng',
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { SharedLinkType } from '@app/infra/entities';
|
import { SharedLinkType } from '@app/infra/entities';
|
||||||
import { ApiProperty } from '@nestjs/swagger';
|
import { ApiProperty } from '@nestjs/swagger';
|
||||||
|
import { Type } from 'class-transformer';
|
||||||
import { IsBoolean, IsDate, IsEnum, IsOptional, IsString } from 'class-validator';
|
import { IsBoolean, IsDate, IsEnum, IsOptional, IsString } from 'class-validator';
|
||||||
import { ValidateUUID } from '../../immich/decorators/validate-uuid.decorator';
|
import { ValidateUUID } from '../../immich/decorators/validate-uuid.decorator';
|
||||||
|
|
||||||
@@ -19,6 +20,7 @@ export class SharedLinkCreateDto {
|
|||||||
description?: string;
|
description?: string;
|
||||||
|
|
||||||
@IsDate()
|
@IsDate()
|
||||||
|
@Type(() => Date)
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
expiresAt?: Date | null = null;
|
expiresAt?: Date | null = null;
|
||||||
|
|
||||||
|
|||||||
2
web/src/api/open-api/api.ts
generated
2
web/src/api/open-api/api.ts
generated
@@ -4,7 +4,7 @@
|
|||||||
* Immich
|
* Immich
|
||||||
* Immich API
|
* Immich API
|
||||||
*
|
*
|
||||||
* The version of the OpenAPI document: 1.63.0
|
* The version of the OpenAPI document: 1.63.2
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
|||||||
2
web/src/api/open-api/base.ts
generated
2
web/src/api/open-api/base.ts
generated
@@ -4,7 +4,7 @@
|
|||||||
* Immich
|
* Immich
|
||||||
* Immich API
|
* Immich API
|
||||||
*
|
*
|
||||||
* The version of the OpenAPI document: 1.63.0
|
* The version of the OpenAPI document: 1.63.2
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
|||||||
2
web/src/api/open-api/common.ts
generated
2
web/src/api/open-api/common.ts
generated
@@ -4,7 +4,7 @@
|
|||||||
* Immich
|
* Immich
|
||||||
* Immich API
|
* Immich API
|
||||||
*
|
*
|
||||||
* The version of the OpenAPI document: 1.63.0
|
* The version of the OpenAPI document: 1.63.2
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
|||||||
2
web/src/api/open-api/configuration.ts
generated
2
web/src/api/open-api/configuration.ts
generated
@@ -4,7 +4,7 @@
|
|||||||
* Immich
|
* Immich
|
||||||
* Immich API
|
* Immich API
|
||||||
*
|
*
|
||||||
* The version of the OpenAPI document: 1.63.0
|
* The version of the OpenAPI document: 1.63.2
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
|||||||
2
web/src/api/open-api/index.ts
generated
2
web/src/api/open-api/index.ts
generated
@@ -4,7 +4,7 @@
|
|||||||
* Immich
|
* Immich
|
||||||
* Immich API
|
* Immich API
|
||||||
*
|
*
|
||||||
* The version of the OpenAPI document: 1.63.0
|
* The version of the OpenAPI document: 1.63.2
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
|||||||
Reference in New Issue
Block a user