diff --git a/compose.armv7.yaml b/compose.armv7.yaml
index 6680cf517..8bce338ad 100644
--- a/compose.armv7.yaml
+++ b/compose.armv7.yaml
@@ -62,7 +62,7 @@ services:
# PHOTOPRISM_THUMB_SIZE: 4096 # Retina 4K, DCI 4K (requires more storage); 7680 for 8K Ultra HD
PHOTOPRISM_THUMB_SIZE_UNCACHED: 7680 # On-demand rendering size limit (default 7680, min 720, max 7680)
PHOTOPRISM_JPEG_SIZE: 7680 # Size limit for converted image files in pixels (720-30000)
- TF_CPP_MIN_LOG_LEVEL: 0 # Show TensorFlow log messages for development
+ TF_CPP_MIN_LOG_LEVEL: 1 # Show TensorFlow log messages for development
## Enable TensorFlow AVX2 support for modern Intel CPUs (requires starting the container as root):
# PHOTOPRISM_INIT: "tensorflow-amd64-avx2"
## Hardware video transcoding config (optional):
diff --git a/compose.intel.yaml b/compose.intel.yaml
index 17f101b52..826f90584 100644
--- a/compose.intel.yaml
+++ b/compose.intel.yaml
@@ -109,7 +109,7 @@ services:
PHOTOPRISM_THUMB_LIBRARY: "auto" # image processing library to be used for generating thumbnails (auto, imaging, vips)
PHOTOPRISM_THUMB_FILTER: "auto" # downscaling filter (imaging best to worst: blackman, lanczos, cubic, linear, nearest)
PHOTOPRISM_THUMB_UNCACHED: "true" # enables on-demand thumbnail rendering (high memory and cpu usage)
- TF_CPP_MIN_LOG_LEVEL: 0 # show TensorFlow log messages for development
+ TF_CPP_MIN_LOG_LEVEL: 1 # show TensorFlow log messages for development
## Intel Quick Sync Video (QSV) (https://docs.photoprism.app/getting-started/advanced/transcoding/#intel-quick-sync):
PHOTOPRISM_FFMPEG_ENCODER: "intel" # H.264/AVC encoder (software, intel, nvidia, apple, raspberry, or vaapi)
PHOTOPRISM_FFMPEG_SIZE: "1920" # video size limit in pixels (720-7680) (default: 3840)
diff --git a/compose.latest.yaml b/compose.latest.yaml
index 4803d3bcf..7ccbacad1 100644
--- a/compose.latest.yaml
+++ b/compose.latest.yaml
@@ -57,7 +57,7 @@ services:
# PHOTOPRISM_THUMB_SIZE: 4096 # Retina 4K, DCI 4K (requires more storage); 7680 for 8K Ultra HD
PHOTOPRISM_THUMB_SIZE_UNCACHED: 7680 # on-demand rendering size limit (default 7680, min 720, max 7680)
PHOTOPRISM_JPEG_SIZE: 7680 # size limit for converted image files in pixels (720-30000)
- TF_CPP_MIN_LOG_LEVEL: 0 # show TensorFlow log messages for development
+ TF_CPP_MIN_LOG_LEVEL: 1 # show TensorFlow log messages for development
working_dir: "/photoprism"
volumes:
- "./storage:/photoprism/storage"
diff --git a/compose.local.yaml b/compose.local.yaml
index a6933434e..1d1be8340 100644
--- a/compose.local.yaml
+++ b/compose.local.yaml
@@ -58,7 +58,7 @@ services:
# PHOTOPRISM_THUMB_SIZE: 4096 # Retina 4K, DCI 4K (requires more storage); 7680 for 8K Ultra HD
PHOTOPRISM_THUMB_SIZE_UNCACHED: 7680 # on-demand rendering size limit (default 7680, min 720, max 7680)
PHOTOPRISM_JPEG_SIZE: 7680 # size limit for converted image files in pixels (720-30000)
- TF_CPP_MIN_LOG_LEVEL: 0 # show TensorFlow log messages for development
+ TF_CPP_MIN_LOG_LEVEL: 1 # show TensorFlow log messages for development
# PHOTOPRISM_INIT: "http gpu tensorflow" # Options: "update https gpu tensorflow davfs clitools clean"
PHOTOPRISM_FFMPEG_ENCODER: "nvidia" # Options: "software", "intel", "nvidia", "apple", "raspberry"
PHOTOPRISM_STORAGE_PATH: "/photoprism/storage"
diff --git a/compose.nvidia.yaml b/compose.nvidia.yaml
index af5033dc0..5882f3860 100644
--- a/compose.nvidia.yaml
+++ b/compose.nvidia.yaml
@@ -111,7 +111,7 @@ services:
PHOTOPRISM_THUMB_LIBRARY: "auto" # image processing library to be used for generating thumbnails (auto, imaging, vips)
PHOTOPRISM_THUMB_FILTER: "auto" # downscaling filter (imaging best to worst: blackman, lanczos, cubic, linear, nearest)
PHOTOPRISM_THUMB_UNCACHED: "true" # enables on-demand thumbnail rendering (high memory and cpu usage)
- TF_CPP_MIN_LOG_LEVEL: 0 # show TensorFlow log messages for development
+ TF_CPP_MIN_LOG_LEVEL: 1 # show TensorFlow log messages for development
## Nvidia Video Transcoding (https://docs.photoprism.app/getting-started/advanced/transcoding/#nvidia-container-toolkit):
NVIDIA_VISIBLE_DEVICES: "all"
NVIDIA_DRIVER_CAPABILITIES: "all"
diff --git a/compose.postgres.yaml b/compose.postgres.yaml
index 5e8984bbd..af84f85b2 100644
--- a/compose.postgres.yaml
+++ b/compose.postgres.yaml
@@ -65,7 +65,7 @@ services:
# PHOTOPRISM_THUMB_SIZE: 4096 # Retina 4K, DCI 4K (requires more storage); 7680 for 8K Ultra HD
PHOTOPRISM_THUMB_SIZE_UNCACHED: 7680 # on-demand rendering size limit (default 7680, min 720, max 7680)
PHOTOPRISM_JPEG_SIZE: 7680 # size limit for converted image files in pixels (720-30000)
- TF_CPP_MIN_LOG_LEVEL: 0 # show TensorFlow log messages for development
+ TF_CPP_MIN_LOG_LEVEL: 1 # show TensorFlow log messages for development
## PostgreSQL Database Server
## Docs: https://www.postgresql.org/docs/
diff --git a/compose.preview.yaml b/compose.preview.yaml
index fe39d117c..183d34c00 100644
--- a/compose.preview.yaml
+++ b/compose.preview.yaml
@@ -57,7 +57,7 @@ services:
# PHOTOPRISM_THUMB_SIZE: 4096 # Retina 4K, DCI 4K (requires more storage); 7680 for 8K Ultra HD
PHOTOPRISM_THUMB_SIZE_UNCACHED: 7680 # on-demand rendering size limit (default 7680, min 720, max 7680)
PHOTOPRISM_JPEG_SIZE: 7680 # size limit for converted image files in pixels (720-30000)
- TF_CPP_MIN_LOG_LEVEL: 0 # show TensorFlow log messages for development
+ TF_CPP_MIN_LOG_LEVEL: 1 # show TensorFlow log messages for development
working_dir: "/photoprism"
volumes:
- "./storage:/photoprism/storage"
diff --git a/compose.yaml b/compose.yaml
index 08c73354d..7b6a4e5c1 100644
--- a/compose.yaml
+++ b/compose.yaml
@@ -118,7 +118,7 @@ services:
PHOTOPRISM_THUMB_LIBRARY: "auto" # image processing library to be used for generating thumbnails (auto, imaging, vips)
PHOTOPRISM_THUMB_FILTER: "auto" # downscaling filter (imaging best to worst: blackman, lanczos, cubic, linear, nearest)
PHOTOPRISM_THUMB_UNCACHED: "true" # enables on-demand thumbnail rendering (high memory and cpu usage)
- TF_CPP_MIN_LOG_LEVEL: 0 # show TensorFlow log messages for development
+ TF_CPP_MIN_LOG_LEVEL: 1 # show TensorFlow log messages for development
## Video Transcoding (https://docs.photoprism.app/getting-started/advanced/transcoding/):
# PHOTOPRISM_FFMPEG_ENCODER: "software" # H.264/AVC encoder (software, intel, nvidia, apple, raspberry, or vaapi)
# PHOTOPRISM_FFMPEG_SIZE: "1920" # video size limit in pixels (720-7680) (default: 3840)
diff --git a/docker/develop/armv7/Dockerfile b/docker/develop/armv7/Dockerfile
index 5c0f45830..0e081079e 100644
--- a/docker/develop/armv7/Dockerfile
+++ b/docker/develop/armv7/Dockerfile
@@ -31,7 +31,7 @@ ENV PHOTOPRISM_ARCH=$TARGETARCH \
DEBIAN_FRONTEND="noninteractive" \
TMPDIR="/tmp" \
TF_VERSION=1.15.2 \
- TF_CPP_MIN_LOG_LEVEL=0 \
+ TF_CPP_MIN_LOG_LEVEL=1 \
MALLOC_ARENA_MAX=4 \
GOPATH="/go" \
GOBIN="/usr/local/bin" \
diff --git a/docker/develop/bookworm/Dockerfile b/docker/develop/bookworm/Dockerfile
index d7313a2a8..83c581110 100644
--- a/docker/develop/bookworm/Dockerfile
+++ b/docker/develop/bookworm/Dockerfile
@@ -30,7 +30,7 @@ ENV PHOTOPRISM_ARCH=$TARGETARCH \
LD_LIBRARY_PATH="/usr/local/lib:/usr/lib" \
DEBIAN_FRONTEND="noninteractive" \
TMPDIR="/tmp" \
- TF_CPP_MIN_LOG_LEVEL=0 \
+ TF_CPP_MIN_LOG_LEVEL=1 \
TF_ENABLE_ONEDNN_OPTS=1 \
MALLOC_ARENA_MAX=4 \
GOPATH="/go" \
diff --git a/docker/develop/bullseye/Dockerfile b/docker/develop/bullseye/Dockerfile
index 197f68367..eacb1a5ab 100644
--- a/docker/develop/bullseye/Dockerfile
+++ b/docker/develop/bullseye/Dockerfile
@@ -30,7 +30,7 @@ ENV PHOTOPRISM_ARCH=$TARGETARCH \
LD_LIBRARY_PATH="/usr/local/lib:/usr/lib" \
DEBIAN_FRONTEND="noninteractive" \
TMPDIR="/tmp" \
- TF_CPP_MIN_LOG_LEVEL=0 \
+ TF_CPP_MIN_LOG_LEVEL=1 \
TF_ENABLE_ONEDNN_OPTS=1 \
MALLOC_ARENA_MAX=4 \
GOPATH="/go" \
diff --git a/docker/develop/buster/Dockerfile b/docker/develop/buster/Dockerfile
index d930db2b4..72a96ae2a 100644
--- a/docker/develop/buster/Dockerfile
+++ b/docker/develop/buster/Dockerfile
@@ -30,7 +30,7 @@ ENV PHOTOPRISM_ARCH=$TARGETARCH \
NODE_ENV="production" \
DEBIAN_FRONTEND="noninteractive" \
TMPDIR="/tmp" \
- TF_CPP_MIN_LOG_LEVEL=0 \
+ TF_CPP_MIN_LOG_LEVEL=1 \
TF_ENABLE_ONEDNN_OPTS=1 \
MALLOC_ARENA_MAX=4 \
GOPATH="/go" \
diff --git a/docker/develop/impish/Dockerfile b/docker/develop/impish/Dockerfile
index d49ed6172..0b2afe86f 100644
--- a/docker/develop/impish/Dockerfile
+++ b/docker/develop/impish/Dockerfile
@@ -30,7 +30,7 @@ ENV PHOTOPRISM_ARCH=$TARGETARCH \
NODE_ENV="production" \
DEBIAN_FRONTEND="noninteractive" \
TMPDIR="/tmp" \
- TF_CPP_MIN_LOG_LEVEL=0 \
+ TF_CPP_MIN_LOG_LEVEL=1 \
TF_ENABLE_ONEDNN_OPTS=1 \
MALLOC_ARENA_MAX=4 \
GOPATH="/go" \
diff --git a/docker/develop/jammy/Dockerfile b/docker/develop/jammy/Dockerfile
index 87b6c95b4..a36be7659 100644
--- a/docker/develop/jammy/Dockerfile
+++ b/docker/develop/jammy/Dockerfile
@@ -30,7 +30,7 @@ ENV PHOTOPRISM_ARCH=$TARGETARCH \
LD_LIBRARY_PATH="/usr/local/lib:/usr/lib" \
DEBIAN_FRONTEND="noninteractive" \
TMPDIR="/tmp" \
- TF_CPP_MIN_LOG_LEVEL=0 \
+ TF_CPP_MIN_LOG_LEVEL=1 \
TF_ENABLE_ONEDNN_OPTS=1 \
MALLOC_ARENA_MAX=4 \
GOPATH="/go" \
diff --git a/docker/develop/lunar/Dockerfile b/docker/develop/lunar/Dockerfile
index 45b31d7ca..13d35bee6 100644
--- a/docker/develop/lunar/Dockerfile
+++ b/docker/develop/lunar/Dockerfile
@@ -30,7 +30,7 @@ ENV PHOTOPRISM_ARCH=$TARGETARCH \
LD_LIBRARY_PATH="/usr/local/lib:/usr/lib" \
DEBIAN_FRONTEND="noninteractive" \
TMPDIR="/tmp" \
- TF_CPP_MIN_LOG_LEVEL=0 \
+ TF_CPP_MIN_LOG_LEVEL=1 \
TF_ENABLE_ONEDNN_OPTS=1 \
MALLOC_ARENA_MAX=4 \
GOPATH="/go" \
diff --git a/docker/develop/mantic/Dockerfile b/docker/develop/mantic/Dockerfile
index 55e3555f0..a765ca9ce 100644
--- a/docker/develop/mantic/Dockerfile
+++ b/docker/develop/mantic/Dockerfile
@@ -30,7 +30,7 @@ ENV PHOTOPRISM_ARCH=$TARGETARCH \
LD_LIBRARY_PATH="/usr/local/lib:/usr/lib" \
DEBIAN_FRONTEND="noninteractive" \
TMPDIR="/tmp" \
- TF_CPP_MIN_LOG_LEVEL=0 \
+ TF_CPP_MIN_LOG_LEVEL=1 \
TF_ENABLE_ONEDNN_OPTS=1 \
MALLOC_ARENA_MAX=4 \
GOPATH="/go" \
diff --git a/docker/develop/noble/Dockerfile b/docker/develop/noble/Dockerfile
index 91ba4546a..1bd54b123 100644
--- a/docker/develop/noble/Dockerfile
+++ b/docker/develop/noble/Dockerfile
@@ -30,7 +30,7 @@ ENV PHOTOPRISM_ARCH=$TARGETARCH \
LD_LIBRARY_PATH="/usr/local/lib:/usr/lib" \
DEBIAN_FRONTEND="noninteractive" \
TMPDIR="/tmp" \
- TF_CPP_MIN_LOG_LEVEL=0 \
+ TF_CPP_MIN_LOG_LEVEL=1 \
TF_ENABLE_ONEDNN_OPTS=1 \
MALLOC_ARENA_MAX=4 \
GOPATH="/go" \
diff --git a/docker/develop/oracular/Dockerfile b/docker/develop/oracular/Dockerfile
index c571bdd03..c8dee7f4b 100644
--- a/docker/develop/oracular/Dockerfile
+++ b/docker/develop/oracular/Dockerfile
@@ -30,7 +30,7 @@ ENV PHOTOPRISM_ARCH=$TARGETARCH \
LD_LIBRARY_PATH="/usr/local/lib:/usr/lib" \
DEBIAN_FRONTEND="noninteractive" \
TMPDIR="/tmp" \
- TF_CPP_MIN_LOG_LEVEL=0 \
+ TF_CPP_MIN_LOG_LEVEL=1 \
TF_ENABLE_ONEDNN_OPTS=1 \
MALLOC_ARENA_MAX=4 \
GOPATH="/go" \
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 09552167b..93b419de7 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -3795,15 +3795,15 @@
}
},
"node_modules/@pkgr/core": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.2.tgz",
- "integrity": "sha512-25L86MyPvnlQoX2MTIV2OiUcb6vJ6aRbFa9pbwByn95INKD5mFH2smgjDhq+fwJoqAgvgbdJLj6Tz7V9X5CFAQ==",
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz",
+ "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==",
"license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.18.0 || >=16.0.0"
},
"funding": {
- "url": "https://opencollective.com/unts"
+ "url": "https://opencollective.com/pkgr"
}
},
"node_modules/@polka/url": {
@@ -6342,9 +6342,9 @@
}
},
"node_modules/cssdb": {
- "version": "8.2.4",
- "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.4.tgz",
- "integrity": "sha512-3KSCVkjZJe/QxicVXnbyYSY26WsFc1YoMY7jep1ZKWMEVc7jEm6V2Xq2r+MX8WKQIuB7ofGbnr5iVI+aZpoSzg==",
+ "version": "8.2.5",
+ "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.5.tgz",
+ "integrity": "sha512-leAt8/hdTCtzql9ZZi86uYAmCLzVKpJMMdjbvOGVnXFXz/BWFpBmM1MHEHU/RqtPyRYmabVmEW1DtX3YGLuuLA==",
"funding": [
{
"type": "opencollective",
@@ -6995,9 +6995,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.136",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.136.tgz",
- "integrity": "sha512-kL4+wUTD7RSA5FHx5YwWtjDnEEkIIikFgWHR4P6fqjw1PPLlqYkxeOb++wAauAssat0YClCy8Y3C5SxgSkjibQ==",
+ "version": "1.5.137",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.137.tgz",
+ "integrity": "sha512-/QSJaU2JyIuTbbABAo/crOs+SuAZLS+fVVS10PVrIT9hrRkmZl8Hb0xPSkKRUUWHQtYzXHpQUW3Dy5hwMzGZkA==",
"license": "ISC"
},
"node_modules/emmet": {
@@ -7747,9 +7747,9 @@
}
},
"node_modules/eslint-webpack-plugin": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-5.0.0.tgz",
- "integrity": "sha512-iDhXf2r55KO1UhMfpus8oGp93wdNF+934q5kEkwa7qn3BH9f51QEC11xQidt+8jfqRnEYYZa2/8lhac7U/vqWw==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-5.0.1.tgz",
+ "integrity": "sha512-Ur100Vi+z0uP7j4Z8Ccah0pXmNHhl3f7P2hCYZj3mZCOSc33G5c1R/vZ4KCapwWikPgRyD4dkangx6JW3KaVFQ==",
"license": "MIT",
"dependencies": {
"@types/eslint": "^9.6.1",
@@ -10709,9 +10709,9 @@
}
},
"node_modules/maplibre-gl": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-5.3.0.tgz",
- "integrity": "sha512-qru6B6jHlDPR4Q9/P4W1zEPbPofR4wwYbrrjiHKWI7yLtyXmpJ1/G1KaIYDr5uNdFbPZ7uiZAWdqtfdNLmIhGg==",
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-5.3.1.tgz",
+ "integrity": "sha512-Ihx+oUUSsZkjMou1Cw5J6silE+5OtFFQSPslWF9+7v4yFC/XDHrpsORYO9lWE4KZI0djCEUpZQJpkpnMArAbeA==",
"license": "BSD-3-Clause",
"dependencies": {
"@mapbox/geojson-rewind": "^0.5.2",
@@ -15270,12 +15270,12 @@
}
},
"node_modules/synckit": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.3.tgz",
- "integrity": "sha512-szhWDqNNI9etJUvbZ1/cx1StnZx8yMmFxme48SwR4dty4ioSY50KEZlpv0qAfgc1fpRzuh9hBXEzoCpJ779dLg==",
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.4.tgz",
+ "integrity": "sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==",
"license": "MIT",
"dependencies": {
- "@pkgr/core": "^0.2.1",
+ "@pkgr/core": "^0.2.3",
"tslib": "^2.8.1"
},
"engines": {
diff --git a/frontend/src/common/config.js b/frontend/src/common/config.js
index e13fe3280..cef1de4dd 100644
--- a/frontend/src/common/config.js
+++ b/frontend/src/common/config.js
@@ -859,6 +859,10 @@ export default class Config {
}
getIcon() {
+ if (this.theme?.variables?.icon) {
+ return this.theme.variables.icon;
+ }
+
switch (this.get("appIcon")) {
case "crisp":
case "mint":
@@ -869,6 +873,15 @@ export default class Config {
}
}
+ getLoginIcon() {
+ const loginTheme = themes.Get("login");
+ if (loginTheme?.variables?.icon) {
+ return loginTheme?.variables?.icon;
+ }
+
+ return this.getIcon();
+ }
+
getVersion() {
return this.version;
}
diff --git a/frontend/src/component/auth/footer.vue b/frontend/src/component/auth/footer.vue
index a965fdf2f..66cac4e0c 100644
--- a/frontend/src/component/auth/footer.vue
+++ b/frontend/src/component/auth/footer.vue
@@ -5,7 +5,11 @@
{{ about }}
-
+
+ {{ loginInfo }}
+ {{ loginInfo }}
+
+
{{ legalInfo }}
{{ legalInfo }}
@@ -32,6 +36,7 @@ export default {
caption: config.values.siteCaption ? config.values.siteCaption : config.values.siteTitle,
legalUrl: config.values.legalUrl,
legalInfo: config.values.legalInfo,
+ loginInfo: config.values.loginInfo,
config: config.values,
rtl: this.$isRtl,
};
diff --git a/frontend/src/options/themes.js b/frontend/src/options/themes.js
index 4f3c9c930..166acd4a7 100644
--- a/frontend/src/options/themes.js
+++ b/frontend/src/options/themes.js
@@ -934,6 +934,15 @@ export const Set = (name, theme) => {
themes[name] = theme;
};
+// Assign adds or replaces multiple themes at once.
+export const Assign = (t) => {
+ for (const theme of t) {
+ if (theme?.name && theme?.colors) {
+ Set(theme.name, theme);
+ }
+ }
+};
+
// Remove deletes a theme by name.
export const Remove = (name) => {
delete themes[name];
diff --git a/frontend/src/page/auth/login.vue b/frontend/src/page/auth/login.vue
index 9961be344..0ae9e53be 100644
--- a/frontend/src/page/auth/login.vue
+++ b/frontend/src/page/auth/login.vue
@@ -131,7 +131,7 @@