Compare commits
7 Commits
v1.41.0_64
...
v1.41.1_64
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a648da021f | ||
|
|
d1d69bfaf4 | ||
|
|
221e03488e | ||
|
|
2ffb7cab2e | ||
|
|
acffabf9de | ||
|
|
0a464f9d28 | ||
|
|
7add754fc3 |
@@ -20,7 +20,7 @@ npm i -g immich
|
|||||||
Specify user's credentials, Immich's server address and port, and the directory you would like to upload videos/photos from.
|
Specify user's credentials, Immich's server address and port, and the directory you would like to upload videos/photos from.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
immich upload --email testuser@email.com --password password --server http://192.168.1.216:2283/api -d your/target/directory
|
immich upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api -d your/target/directory
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -31,26 +31,32 @@ immich upload --email testuser@email.com --password password --server http://192
|
|||||||
| ---------------- | ------------------------------------------------------------------- |
|
| ---------------- | ------------------------------------------------------------------- |
|
||||||
| --yes / -y | Assume yes on all interactive prompts |
|
| --yes / -y | Assume yes on all interactive prompts |
|
||||||
| --delete / -da | Delete local assets after upload |
|
| --delete / -da | Delete local assets after upload |
|
||||||
| --email / -e | User's email |
|
| --key / -k | User's API key |
|
||||||
| --password / -pw | User's password |
|
|
||||||
| --server / -s | Immich's server address |
|
| --server / -s | Immich's server address |
|
||||||
| --directory / -d | Directory to upload from |
|
| --directory / -d | Directory to upload from |
|
||||||
| --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 |
|
||||||
|
|
||||||
|
### Obtain the API Key
|
||||||
|
|
||||||
|
The API key can be obtained in the user setting panel on the web interface.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
### Run via Docker
|
### Run via Docker
|
||||||
|
|
||||||
Be aware that as this runs inside a container it mounts your current directory as a volume, and for the -d flag you need to use the path inside the container.
|
Be aware that as this runs inside a container it mounts your current directory as a volume, and for the -d flag you need to use the path inside the container.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -it --rm -v $(pwd):/import ghcr.io/immich-app/immich-cli:latest upload --email testuser@email.com --password password --server http://192.168.1.216:2283/api -d /import
|
docker run -it --rm -v $(pwd):/import ghcr.io/immich-app/immich-cli:latest upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api -d /import
|
||||||
```
|
```
|
||||||
|
|
||||||
Optionally, you can create an alias:
|
Optionally, you can create an alias:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
alias immich="docker run -it --rm -v $(pwd):/import ghcr.io/immich-app/immich-cli:latest"
|
alias immich="docker run -it --rm -v $(pwd):/import ghcr.io/immich-app/immich-cli:latest"
|
||||||
immich upload --email testuser@email.com --password password --server http://192.168.1.216:2283/api -d /import
|
immich upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api -d /import
|
||||||
```
|
```
|
||||||
|
|
||||||
### Run from source
|
### Run from source
|
||||||
@@ -68,5 +74,5 @@ npm run build
|
|||||||
```
|
```
|
||||||
|
|
||||||
```bash title="Run the command"
|
```bash title="Run the command"
|
||||||
node bin/index.js upload --email testuser@email.com --password password --server http://192.168.1.216:2283/api -d your/target/directory
|
node bin/index.js upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api -d your/target/directory
|
||||||
```
|
```
|
||||||
|
|||||||
BIN
docs/docs/features/img/obtain-api-key.png
Normal file
BIN
docs/docs/features/img/obtain-api-key.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 44 KiB |
@@ -8,4 +8,4 @@ COPY start.sh /start.sh
|
|||||||
|
|
||||||
STOPSIGNAL SIGQUIT
|
STOPSIGNAL SIGQUIT
|
||||||
|
|
||||||
CMD /start.sh
|
ENTRYPOINT ["/start.sh"]
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
#! /bin/bash
|
#! /bin/sh
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
export IMMICH_WEB_URL=${IMMICH_WEB_URL:-http://immich-web:3000}
|
export IMMICH_WEB_URL="${IMMICH_WEB_URL:-http://immich-web:3000}"
|
||||||
IMMICH_WEB_SCHEME=$(echo "$IMMICH_WEB_URL" | grep -Eo '^https?://' || echo "http://")
|
IMMICH_WEB_SCHEME=$(echo "$IMMICH_WEB_URL" | grep -Eo '^https?://' || echo "http://")
|
||||||
export IMMICH_WEB_SCHEME
|
export IMMICH_WEB_SCHEME
|
||||||
IMMICH_WEB_HOST=$(echo "$IMMICH_WEB_URL" | cut -d '/' -f 3)
|
IMMICH_WEB_HOST=$(echo "$IMMICH_WEB_URL" | cut -d '/' -f 3)
|
||||||
export IMMICH_WEB_HOST
|
export IMMICH_WEB_HOST
|
||||||
export IMMICH_SERVER_URL=${IMMICH_SERVER_URL:-http://immich-server:3001}
|
export IMMICH_SERVER_URL="${IMMICH_SERVER_URL:-http://immich-server:3001}"
|
||||||
IMMICH_SERVER_SCHEME=$(echo "$IMMICH_WEB_URL" | grep -Eo '^https?://' || echo "http://")
|
IMMICH_SERVER_SCHEME=$(echo "$IMMICH_WEB_URL" | grep -Eo '^https?://' || echo "http://")
|
||||||
export IMMICH_SERVER_SCHEME
|
export IMMICH_SERVER_SCHEME
|
||||||
IMMICH_SERVER_HOST=$(echo "$IMMICH_SERVER_URL" | cut -d '/' -f 3)
|
IMMICH_SERVER_HOST=$(echo "$IMMICH_SERVER_URL" | cut -d '/' -f 3)
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ export class ShareCore {
|
|||||||
|
|
||||||
async getSharedLinkById(id: string): Promise<SharedLinkEntity> {
|
async getSharedLinkById(id: string): Promise<SharedLinkEntity> {
|
||||||
const link = await this.sharedLinkRepository.getById(id);
|
const link = await this.sharedLinkRepository.getById(id);
|
||||||
|
|
||||||
if (!link) {
|
if (!link) {
|
||||||
throw new BadRequestException('Shared link not found');
|
throw new BadRequestException('Shared link not found');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,15 +57,29 @@ export class SharedLinkRepository implements ISharedLinkRepository {
|
|||||||
id: id,
|
id: id,
|
||||||
},
|
},
|
||||||
relations: {
|
relations: {
|
||||||
assets: true,
|
assets: {
|
||||||
|
exifInfo: true,
|
||||||
|
},
|
||||||
album: {
|
album: {
|
||||||
assets: {
|
assets: {
|
||||||
assetInfo: true,
|
assetInfo: {
|
||||||
|
exifInfo: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
order: {
|
order: {
|
||||||
createdAt: 'DESC',
|
createdAt: 'DESC',
|
||||||
|
assets: {
|
||||||
|
createdAt: 'ASC',
|
||||||
|
},
|
||||||
|
album: {
|
||||||
|
assets: {
|
||||||
|
assetInfo: {
|
||||||
|
createdAt: 'ASC',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,7 @@
|
|||||||
</span>
|
</span>
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
|
|
||||||
<div class=" max-h-[400px] overflow-y-auto immich-scrollbar">
|
<div class="max-h-[300px] overflow-y-auto immich-scrollbar">
|
||||||
{#if selectedUsers.length > 0}
|
{#if selectedUsers.length > 0}
|
||||||
<div class="flex gap-4 py-2 px-5 overflow-x-auto place-items-center mb-2">
|
<div class="flex gap-4 py-2 px-5 overflow-x-auto place-items-center mb-2">
|
||||||
<p class="font-medium">To</p>
|
<p class="font-medium">To</p>
|
||||||
|
|||||||
@@ -23,14 +23,6 @@
|
|||||||
export let publicSharedKey = '';
|
export let publicSharedKey = '';
|
||||||
export let showNavigation = true;
|
export let showNavigation = true;
|
||||||
|
|
||||||
$: {
|
|
||||||
appearsInAlbums = [];
|
|
||||||
|
|
||||||
api.albumApi.getAllAlbums(undefined, asset.id).then((result) => {
|
|
||||||
appearsInAlbums = result.data;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const dispatch = createEventDispatcher();
|
const dispatch = createEventDispatcher();
|
||||||
let halfLeftHover = false;
|
let halfLeftHover = false;
|
||||||
let halfRightHover = false;
|
let halfRightHover = false;
|
||||||
@@ -41,8 +33,15 @@
|
|||||||
let shouldPlayMotionPhoto = false;
|
let shouldPlayMotionPhoto = false;
|
||||||
const onKeyboardPress = (keyInfo: KeyboardEvent) => handleKeyboardPress(keyInfo.key);
|
const onKeyboardPress = (keyInfo: KeyboardEvent) => handleKeyboardPress(keyInfo.key);
|
||||||
|
|
||||||
onMount(() => {
|
onMount(async () => {
|
||||||
document.addEventListener('keydown', onKeyboardPress);
|
document.addEventListener('keydown', onKeyboardPress);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const { data } = await api.albumApi.getAllAlbums(undefined, asset.id);
|
||||||
|
appearsInAlbums = data;
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Error getting album that asset belong to', e);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
onDestroy(() => {
|
onDestroy(() => {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
drawMap(asset.exifInfo.latitude, asset.exifInfo.longitude);
|
drawMap(asset.exifInfo.latitude, asset.exifInfo.longitude);
|
||||||
}
|
}
|
||||||
|
|
||||||
export let albums: AlbumResponseDto[];
|
export let albums: AlbumResponseDto[] = [];
|
||||||
|
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
if (browser) {
|
if (browser) {
|
||||||
|
|||||||
@@ -226,7 +226,7 @@
|
|||||||
|
|
||||||
{#if isShowSharedLink}
|
{#if isShowSharedLink}
|
||||||
<div class="flex w-full gap-4">
|
<div class="flex w-full gap-4">
|
||||||
<input class="immich-form-input w-full" bind:value={sharedLink} />
|
<input class="immich-form-input w-full" bind:value={sharedLink} disabled />
|
||||||
|
|
||||||
<button
|
<button
|
||||||
on:click={() => handleCopy()}
|
on:click={() => handleCopy()}
|
||||||
|
|||||||
Reference in New Issue
Block a user