From a9a053720ebad4be20f6509ca51072d81572e054 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Thu, 5 Mar 2026 14:40:44 +0100 Subject: [PATCH] cleanup --- ct/booklore.sh | 113 ------ ct/frigate.sh | 43 --- ct/immich.sh | 408 --------------------- ct/immichframe.sh | 75 ---- ct/seaweedfs.sh | 55 --- frontend/public/json/cronmaster.json | 35 -- frontend/public/json/frigate.json | 35 -- frontend/public/json/immichframe.json | 40 --- frontend/public/json/seaweedfs.json | 48 --- install/booklore-install.sh | 88 ----- install/frigate-install.sh | 401 --------------------- install/immich-install.sh | 488 -------------------------- install/immichframe-install.sh | 99 ------ install/seaweedfs-install.sh | 51 --- 14 files changed, 1979 deletions(-) delete mode 100644 ct/booklore.sh delete mode 100644 ct/frigate.sh delete mode 100644 ct/immich.sh delete mode 100644 ct/immichframe.sh delete mode 100644 ct/seaweedfs.sh delete mode 100644 frontend/public/json/cronmaster.json delete mode 100644 frontend/public/json/frigate.json delete mode 100644 frontend/public/json/immichframe.json delete mode 100644 frontend/public/json/seaweedfs.json delete mode 100644 install/booklore-install.sh delete mode 100644 install/frigate-install.sh delete mode 100644 install/immich-install.sh delete mode 100644 install/immichframe-install.sh delete mode 100644 install/seaweedfs-install.sh diff --git a/ct/booklore.sh b/ct/booklore.sh deleted file mode 100644 index 0bf6c4ed2..000000000 --- a/ct/booklore.sh +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/booklore-app/BookLore - -APP="BookLore" -var_tags="${var_tags:-books;library}" -var_cpu="${var_cpu:-3}" -var_ram="${var_ram:-3072}" -var_disk="${var_disk:-7}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - - if [[ ! -d /opt/booklore ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - if check_for_gh_release "booklore" "booklore-app/BookLore"; then - JAVA_VERSION="25" setup_java - NODE_VERSION="22" setup_nodejs - setup_mariadb - setup_yq - - msg_info "Stopping Service" - systemctl stop booklore - msg_ok "Stopped Service" - - if grep -qE "^BOOKLORE_(DATA_PATH|BOOKDROP_PATH|BOOKS_PATH|PORT)=" /opt/booklore_storage/.env 2>/dev/null; then - msg_info "Migrating old environment variables" - sed -i 's/^BOOKLORE_DATA_PATH=/APP_PATH_CONFIG=/g' /opt/booklore_storage/.env - sed -i 's/^BOOKLORE_BOOKDROP_PATH=/APP_BOOKDROP_FOLDER=/g' /opt/booklore_storage/.env - sed -i '/^BOOKLORE_BOOKS_PATH=/d' /opt/booklore_storage/.env - sed -i '/^BOOKLORE_PORT=/d' /opt/booklore_storage/.env - msg_ok "Migrated old environment variables" - fi - - msg_info "Backing up old installation" - mv /opt/booklore /opt/booklore_bak - msg_ok "Backed up old installation" - - fetch_and_deploy_gh_release "booklore" "booklore-app/BookLore" "tarball" - - msg_info "Building Frontend" - cd /opt/booklore/booklore-ui - $STD npm install --force - $STD npm run build --configuration=production - msg_ok "Built Frontend" - - msg_info "Embedding Frontend into Backend" - mkdir -p /opt/booklore/booklore-api/src/main/resources/static - cp -r /opt/booklore/booklore-ui/dist/booklore/browser/* /opt/booklore/booklore-api/src/main/resources/static/ - msg_ok "Embedded Frontend into Backend" - - msg_info "Building Backend" - cd /opt/booklore/booklore-api - APP_VERSION=$(get_latest_github_release "booklore-app/BookLore") - yq eval ".app.version = \"${APP_VERSION}\"" -i src/main/resources/application.yaml - $STD ./gradlew clean build -x test --no-daemon - mkdir -p /opt/booklore/dist - JAR_PATH=$(find /opt/booklore/booklore-api/build/libs -maxdepth 1 -type f -name "booklore-api-*.jar" ! -name "*plain*" | head -n1) - if [[ -z "$JAR_PATH" ]]; then - msg_error "Backend JAR not found" - exit - fi - cp "$JAR_PATH" /opt/booklore/dist/app.jar - msg_ok "Built Backend" - - if systemctl is-active --quiet nginx 2>/dev/null; then - msg_info "Removing Nginx (no longer needed)" - systemctl disable --now nginx - $STD apt-get purge -y nginx nginx-common - msg_ok "Removed Nginx" - fi - - if ! grep -q "^SERVER_PORT=" /opt/booklore_storage/.env 2>/dev/null; then - echo "SERVER_PORT=6060" >>/opt/booklore_storage/.env - fi - - sed -i 's|ExecStart=/usr/bin/java -jar|ExecStart=/usr/bin/java -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompactObjectHeaders -jar|' /etc/systemd/system/booklore.service - systemctl daemon-reload - - msg_info "Starting Service" - systemctl start booklore - rm -rf /opt/booklore_bak - msg_ok "Started Service" - msg_ok "Updated successfully!" - fi - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6060${CL}" diff --git a/ct/frigate.sh b/ct/frigate.sh deleted file mode 100644 index e6b38894d..000000000 --- a/ct/frigate.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) - -# Copyright (c) 2021-2026 community-scripts ORG -# Authors: MickLesk (CanbiZ) | Co-Author: remz1337 -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://frigate.video/ - -APP="Frigate" -var_tags="${var_tags:-nvr}" -var_cpu="${var_cpu:-4}" -var_ram="${var_ram:-4096}" -var_disk="${var_disk:-20}" -var_os="${var_os:-debian}" -var_version="${var_version:-12}" -var_unprivileged="${var_unprivileged:-0}" -var_gpu="${var_gpu:-yes}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -f /etc/systemd/system/frigate.service ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_error "To update Frigate, create a new container and transfer your configuration." - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}" diff --git a/ct/immich.sh b/ct/immich.sh deleted file mode 100644 index 2b9648086..000000000 --- a/ct/immich.sh +++ /dev/null @@ -1,408 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: vhsdream -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://immich.app - -APP="immich" -var_tags="${var_tags:-photos}" -var_disk="${var_disk:-20}" -var_cpu="${var_cpu:-4}" -var_ram="${var_ram:-6144}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" -var_gpu="${var_gpu:-yes}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/immich ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - if [[ -f /etc/apt/sources.list.d/immich.list ]]; then - msg_error "Wrong Debian version detected!" - msg_error "You must upgrade your LXC to Debian Trixie before updating." - msg_error "Please visit https://github.com/community-scripts/ProxmoxVE/discussions/7726 for details." - echo "${TAB3} If you have upgraded your LXC to Trixie and you still see this message, please open an Issue in the Community-Scripts repo." - exit - fi - - setup_uv - PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')" - NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs - - if [[ ! -f /etc/apt/preferences.d/preferences ]]; then - msg_info "Adding Debian Testing repo" - sed -i 's/ trixie-updates/ trixie-updates testing/g' /etc/apt/sources.list.d/debian.sources - cat </etc/apt/preferences.d/preferences -Package: * -Pin: release a=unstable -Pin-Priority: 450 - -Package: * -Pin:release a=testing -Pin-Priority: 450 -EOF - if [[ -f /etc/apt/preferences.d/immich ]]; then - rm /etc/apt/preferences.d/immich - fi - $STD apt update - msg_ok "Added Debian Testing repo" - fi - - if ! dpkg -l "libmimalloc3" | grep -q '3.1' || ! dpkg -l "libde265-dev" | grep -q '1.0.16'; then - msg_info "Installing/upgrading Testing repo packages" - $STD apt install -t testing libmimalloc3 libde265-dev -y - msg_ok "Installed/upgraded Testing repo packages" - fi - - if [[ ! -f /etc/apt/sources.list.d/mise.list ]]; then - msg_info "Installing Mise" - curl -fSs https://mise.jdx.dev/gpg-key.pub | tee /etc/apt/keyrings/mise-archive-keyring.pub 1>/dev/null - echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=amd64] https://mise.jdx.dev/deb stable main" >/etc/apt/sources.list.d/mise.list - $STD apt update - $STD apt install -y mise - msg_ok "Installed Mise" - fi - - STAGING_DIR=/opt/staging - BASE_DIR=${STAGING_DIR}/base-images - SOURCE_DIR=${STAGING_DIR}/image-source - cd /tmp - if [[ -f ~/.intel_version ]]; then - curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/Dockerfile - readarray -t INTEL_URLS < <( - sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $2}' - sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}' - ) - INTEL_RELEASE="$(grep "intel-opencl-icd_" ./Dockerfile | awk -F '_' '{print $2}')" - if [[ "$INTEL_RELEASE" != "$(cat ~/.intel_version)" ]]; then - msg_info "Updating Intel iGPU dependencies" - for url in "${INTEL_URLS[@]}"; do - curl -fsSLO "$url" - done - $STD apt-mark unhold libigdgmm12 - $STD apt install -y ./libigdgmm12*.deb - rm ./libigdgmm12*.deb - $STD apt install -y ./*.deb - rm ./*.deb - $STD apt-mark hold libigdgmm12 - dpkg-query -W -f='${Version}\n' intel-opencl-icd >~/.intel_version - msg_ok "Intel iGPU dependencies updated" - fi - rm ./Dockerfile - fi - if [[ -f ~/.immich_library_revisions ]]; then - libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips") - cd "$BASE_DIR" - msg_info "Checking for updates to custom image-processing libraries" - $STD git pull - for library in "${libraries[@]}"; do - compile_"$library" - done - msg_ok "Image-processing libraries up to date" - fi - - RELEASE="v2.5.2" - if check_for_gh_tag "immich" "immich-app/immich" "${RELEASE}"; then - msg_info "Stopping Services" - systemctl stop immich-web - systemctl stop immich-ml - msg_ok "Stopped Services" - VCHORD_RELEASE="0.5.3" - if [[ ! -f ~/.vchord_version ]] || [[ "$VCHORD_RELEASE" != "$(cat ~/.vchord_version)" ]]; then - msg_info "Upgrading VectorChord" - curl -fsSL "https://github.com/tensorchord/vectorchord/releases/download/${VCHORD_RELEASE}/postgresql-16-vchord_${VCHORD_RELEASE}-1_amd64.deb" -o vchord.deb - $STD apt install -y ./vchord.deb - systemctl restart postgresql - $STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vector UPDATE;" - $STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;" - $STD sudo -u postgres psql -d immich -c "REINDEX INDEX face_index;" - $STD sudo -u postgres psql -d immich -c "REINDEX INDEX clip_index;" - echo "$VCHORD_RELEASE" >~/.vchord_version - rm ./vchord.deb - msg_ok "Upgraded VectorChord to v${VCHORD_RELEASE}" - fi - if ! dpkg -l | grep -q ccache; then - $STD apt install -yqq ccache - fi - - INSTALL_DIR="/opt/${APP}" - UPLOAD_DIR="$(sed -n '/^IMMICH_MEDIA_LOCATION/s/[^=]*=//p' /opt/immich/.env)" - SRC_DIR="${INSTALL_DIR}/source" - APP_DIR="${INSTALL_DIR}/app" - PLUGIN_DIR="${APP_DIR}/corePlugin" - ML_DIR="${APP_DIR}/machine-learning" - GEO_DIR="${INSTALL_DIR}/geodata" - - cp "$ML_DIR"/ml_start.sh "$INSTALL_DIR" - if grep -qs "set -a" "$APP_DIR"/bin/start.sh; then - cp "$APP_DIR"/bin/start.sh "$INSTALL_DIR" - else - cat <"$INSTALL_DIR"/start.sh -#!/usr/bin/env bash - -set -a -. ${INSTALL_DIR}/.env -set +a - -/usr/bin/node ${APP_DIR}/dist/main.js "\$@" -EOF - chmod +x "$INSTALL_DIR"/start.sh - fi - - ( - shopt -s dotglob - rm -rf "${APP_DIR:?}"/* - ) - - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "immich" "immich-app/immich" "tag" "${RELEASE}" "$SRC_DIR" - - msg_info "Updating Immich web and microservices" - cd "$SRC_DIR"/server - export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 - export CI=1 - corepack enable - - # server build - export SHARP_IGNORE_GLOBAL_LIBVIPS=true - $STD pnpm --filter immich --frozen-lockfile build - unset SHARP_IGNORE_GLOBAL_LIBVIPS - export SHARP_FORCE_GLOBAL_LIBVIPS=true - $STD pnpm --filter immich --frozen-lockfile --prod --no-optional deploy "$APP_DIR" - cp "$APP_DIR"/package.json "$APP_DIR"/bin - sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin - - # openapi & web build - cd "$SRC_DIR" - echo "packageImportMethod: hardlink" >>./pnpm-workspace.yaml - $STD pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install - unset SHARP_FORCE_GLOBAL_LIBVIPS - export SHARP_IGNORE_GLOBAL_LIBVIPS=true - $STD pnpm --filter @immich/sdk --filter immich-web build - cp -a web/build "$APP_DIR"/www - cp LICENSE "$APP_DIR" - - # cli build - $STD pnpm --filter @immich/sdk --filter @immich/cli --frozen-lockfile install - $STD pnpm --filter @immich/sdk --filter @immich/cli build - $STD pnpm --filter @immich/cli --prod --no-optional deploy "$APP_DIR"/cli - cd "$APP_DIR" - mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin - - # plugins - cd "$SRC_DIR" - $STD mise trust --ignore ./mise.toml - $STD mise trust ./plugins/mise.toml - cd plugins - $STD mise install - $STD mise run build - mkdir -p "$PLUGIN_DIR" - cp -r ./dist "$PLUGIN_DIR"/dist - cp ./manifest.json "$PLUGIN_DIR" - msg_ok "Updated Immich server, web, cli and plugins" - - cd "$SRC_DIR"/machine-learning - mkdir -p "$ML_DIR" && chown -R immich:immich "$ML_DIR" - chown immich:immich ./uv.lock - export VIRTUAL_ENV="${ML_DIR}"/ml-venv - if [[ -f ~/.openvino ]]; then - msg_info "Updating HW-accelerated machine-learning" - # Remove old venv if Python version changed (3.12 -> 3.13) - if [[ -d "${VIRTUAL_ENV}" ]] && ! "${VIRTUAL_ENV}/bin/python3" --version 2>/dev/null | grep -q "3.13"; then - rm -rf "${VIRTUAL_ENV}" - fi - $STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p python3.13 --managed-python - patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.13/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-313-x86_64-linux-gnu.so" - # Add workaround for onnxruntime-openvino 1.23.x crash if not present - if ! grep -q "MACHINE_LEARNING_OPENVINO_NUM_THREADS" "$INSTALL_DIR/.env" 2>/dev/null; then - sed -i '/MACHINE_LEARNING_CACHE_FOLDER/a ## - For OpenVINO only - workaround for onnxruntime-openvino 1.23.x crash\n## - See: https://github.com/immich-app/immich/pull/11240\nMACHINE_LEARNING_OPENVINO_NUM_THREADS=$(nproc)' "$INSTALL_DIR/.env" - fi - msg_ok "Updated HW-accelerated machine-learning" - else - msg_info "Updating machine-learning" - $STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra cpu --no-dev --active --link-mode copy -n -p python3.11 --managed-python - msg_ok "Updated machine-learning" - fi - cd "$SRC_DIR" - cp -a machine-learning/{ann,immich_ml} "$ML_DIR" - mv "$INSTALL_DIR"/ml_start.sh "$ML_DIR" - if [[ -f ~/.openvino ]]; then - sed -i "/intra_op/s/int = 0/int = os.cpu_count() or 0/" "$ML_DIR"/immich_ml/config.py - fi - ln -sf "$APP_DIR"/resources "$INSTALL_DIR" - cd "$APP_DIR" - grep -rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g" - grep -rlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g" - sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py - ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$APP_DIR"/upload - ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload - ln -s "$GEO_DIR" "$APP_DIR" - - chown -R immich:immich "$INSTALL_DIR" - systemctl restart immich-ml immich-web - msg_ok "Updated successfully!" - fi - exit -} - -function compile_libjxl() { - SOURCE=${SOURCE_DIR}/libjxl - JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62" - JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0" - : "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}" - if [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then - msg_info "Recompiling libjxl" - if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi - $STD git clone https://github.com/libjxl/libjxl.git "$SOURCE" - cd "$SOURCE" - $STD git reset --hard "$LIBJXL_REVISION" - $STD git submodule update --init --recursive --depth 1 --recommend-shallow - $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch - $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch - mkdir build - cd build - $STD cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_TESTING=OFF \ - -DJPEGXL_ENABLE_DOXYGEN=OFF \ - -DJPEGXL_ENABLE_MANPAGES=OFF \ - -DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \ - -DJPEGXL_ENABLE_BENCHMARK=OFF \ - -DJPEGXL_ENABLE_EXAMPLES=OFF \ - -DJPEGXL_FORCE_SYSTEM_BROTLI=ON \ - -DJPEGXL_FORCE_SYSTEM_HWY=ON \ - -DJPEGXL_ENABLE_JPEGLI=ON \ - -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \ - -DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \ - -DJPEGXL_ENABLE_PLUGINS=ON \ - -DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \ - -DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \ - -DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \ - .. - $STD cmake --build . -- -j"$(nproc)" - $STD cmake --install . - ldconfig /usr/local/lib - $STD make clean - cd "$STAGING_DIR" - rm -rf "$SOURCE"/{build,third_party} - sed -i "s/libjxl: .*$/libjxl: $LIBJXL_REVISION/" ~/.immich_library_revisions - msg_ok "Recompiled libjxl" - fi -} - -function compile_libheif() { - SOURCE=${SOURCE_DIR}/libheif - if ! dpkg -l | grep -q libaom; then - $STD apt install -y libaom-dev - local update="required" - fi - : "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}" - if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then - msg_info "Recompiling libheif" - if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi - $STD git clone https://github.com/strukturag/libheif.git "$SOURCE" - cd "$SOURCE" - $STD git reset --hard "$LIBHEIF_REVISION" - mkdir build - cd build - $STD cmake --preset=release-noplugins \ - -DWITH_DAV1D=ON \ - -DENABLE_PARALLEL_TILE_DECODING=ON \ - -DWITH_LIBSHARPYUV=ON \ - -DWITH_LIBDE265=ON \ - -DWITH_AOM_DECODER=OFF \ - -DWITH_AOM_ENCODER=ON \ - -DWITH_X265=OFF \ - -DWITH_EXAMPLES=OFF \ - .. - $STD make install -j "$(nproc)" - ldconfig /usr/local/lib - $STD make clean - cd "$STAGING_DIR" - rm -rf "$SOURCE"/build - sed -i "s/libheif: .*$/libheif: $LIBHEIF_REVISION/" ~/.immich_library_revisions - msg_ok "Recompiled libheif" - fi -} - -function compile_libraw() { - SOURCE=${SOURCE_DIR}/libraw - : "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}" - if [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then - msg_info "Recompiling libraw" - if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi - $STD git clone https://github.com/libraw/libraw.git "$SOURCE" - cd "$SOURCE" - $STD git reset --hard "$LIBRAW_REVISION" - $STD autoreconf --install - $STD ./configure --disable-examples - $STD make -j"$(nproc)" - $STD make install - ldconfig /usr/local/lib - $STD make clean - cd "$STAGING_DIR" - sed -i "s/libraw: .*$/libraw: $LIBRAW_REVISION/" ~/.immich_library_revisions - msg_ok "Recompiled libraw" - fi -} - -function compile_imagemagick() { - SOURCE=$SOURCE_DIR/imagemagick - : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/imagemagick.json)}" - if [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]] || - ! grep -q 'DMAGICK_LIBRAW' /usr/local/lib/ImageMagick-7*/config-Q16HDRI/configure.xml; then - msg_info "Recompiling ImageMagick" - if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi - $STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE" - cd "$SOURCE" - $STD git reset --hard "$IMAGEMAGICK_REVISION" - $STD ./configure --with-modules CPPFLAGS="-DMAGICK_LIBRAW_VERSION_TAIL=202502" - $STD make -j"$(nproc)" - $STD make install - ldconfig /usr/local/lib - $STD make clean - cd "$STAGING_DIR" - sed -i "s/imagemagick: .*$/imagemagick: $IMAGEMAGICK_REVISION/" ~/.immich_library_revisions - msg_ok "Recompiled ImageMagick" - fi -} - -function compile_libvips() { - SOURCE=$SOURCE_DIR/libvips - : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}" - if [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then - msg_info "Recompiling libvips" - if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi - $STD git clone https://github.com/libvips/libvips.git "$SOURCE" - cd "$SOURCE" - $STD git reset --hard "$LIBVIPS_REVISION" - $STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled - cd build - $STD ninja install - ldconfig /usr/local/lib - cd "$STAGING_DIR" - rm -rf "$SOURCE"/build - sed -i "s/libvips: .*$/libvips: $LIBVIPS_REVISION/" ~/.immich_library_revisions - msg_ok "Recompiled libvips" - fi -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2283${CL}" diff --git a/ct/immichframe.sh b/ct/immichframe.sh deleted file mode 100644 index d21330cd8..000000000 --- a/ct/immichframe.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env bash -COMMUNITY_SCRIPTS_URL="${COMMUNITY_SCRIPTS_URL:-https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main}" -source <(curl -fsSL "$COMMUNITY_SCRIPTS_URL/misc/build.func") -# Copyright (c) 2021-2026 community-scripts ORG -# Author: Thiago Canozzo Lahr (tclahr) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/immichFrame/ImmichFrame - -APP="ImmichFrame" -var_tags="${var_tags:-photos;slideshow}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-8}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - - if [[ ! -d /opt/immichframe ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - if check_for_gh_release "immichframe" "immichFrame/ImmichFrame"; then - msg_info "Stopping Service" - systemctl stop immichframe - msg_ok "Stopped Service" - - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "immichframe" "immichFrame/ImmichFrame" "tarball" "latest" "/tmp/immichframe" - - msg_info "Building Application" - cd /tmp/immichframe - $STD dotnet publish ImmichFrame.WebApi/ImmichFrame.WebApi.csproj \ - --configuration Release \ - --runtime linux-x64 \ - --self-contained false \ - --output /opt/immichframe - - cd /tmp/immichframe/immichFrame.Web - $STD npm ci --silent - $STD npm run build - rm -rf /opt/immichframe/wwwroot/* - cp -r build/* /opt/immichframe/wwwroot - rm -rf /tmp/immichframe - chown -R immichframe:immichframe /opt/immichframe - msg_ok "Application Built" - - msg_info "Starting Service" - systemctl start immichframe - msg_ok "Started Service" - msg_ok "Updated successfully!" - fi - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}" -echo -e "${INFO}${YW} Configuration file location:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}/opt/immichframe/Config/Settings.yml${CL}" -echo -e "${INFO}${YW} Edit the config file and set ImmichServerUrl and ApiKey before use!${CL}" diff --git a/ct/seaweedfs.sh b/ct/seaweedfs.sh deleted file mode 100644 index a6a5b151b..000000000 --- a/ct/seaweedfs.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Source: https://github.com/seaweedfs/seaweedfs - -APP="SeaweedFS" -var_tags="${var_tags:-storage;s3;filesystem}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-16}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - - if [[ ! -f /opt/seaweedfs/weed ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - if check_for_gh_release "seaweedfs" "seaweedfs/seaweedfs"; then - msg_info "Stopping Service" - systemctl stop seaweedfs - msg_ok "Stopped Service" - - fetch_and_deploy_gh_release "seaweedfs" "seaweedfs/seaweedfs" "prebuild" "latest" "/opt/seaweedfs" "linux_amd64.tar.gz" - - msg_info "Starting Service" - systemctl start seaweedfs - msg_ok "Started Service" - msg_ok "Updated successfully!" - fi - exit -} - -start -build_container -description - -msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9333${CL}" diff --git a/frontend/public/json/cronmaster.json b/frontend/public/json/cronmaster.json deleted file mode 100644 index 690b7227f..000000000 --- a/frontend/public/json/cronmaster.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "CronMaster", - "slug": "cronmaster", - "categories": [ - 1 - ], - "date_created": "2026-02-17", - "type": "pve", - "updateable": true, - "privileged": false, - "interface_port": 3000, - "documentation": "https://github.com/fccview/cronmaster", - "website": "https://github.com/fccview/cronmaster", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/cr-nmaster.webp", - "config_path": "/opt/cronmaster/.env", - "description": "Self-hosted cron job scheduler with web UI, live logs, auth and prebuilt binaries provided upstream.", - "install_methods": [ - { - "type": "default", - "script": "tools/addon/cronmaster.sh", - "resources": { - "cpu": null, - "ram": null, - "hdd": null, - "os": null, - "version": null - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] -} \ No newline at end of file diff --git a/frontend/public/json/frigate.json b/frontend/public/json/frigate.json deleted file mode 100644 index 5da21323a..000000000 --- a/frontend/public/json/frigate.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "Frigate", - "slug": "frigate", - "categories": [ - 15 - ], - "date_created": "2025-07-02", - "type": "ct", - "updateable": true, - "privileged": false, - "config_path": "/config/config.yml", - "interface_port": 5000, - "documentation": "https://docs.frigate.video/", - "website": "https://frigate.video/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/frigate-light.webp", - "description": "Frigate is an open-source NVR built around real-time AI object detection for IP cameras.", - "install_methods": [ - { - "type": "default", - "script": "ct/frigate.sh", - "resources": { - "cpu": 4, - "ram": 4096, - "hdd": 20, - "os": "Debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] -} \ No newline at end of file diff --git a/frontend/public/json/immichframe.json b/frontend/public/json/immichframe.json deleted file mode 100644 index d39425d1b..000000000 --- a/frontend/public/json/immichframe.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "ImmichFrame", - "slug": "immichframe", - "categories": [ - 13 - ], - "date_created": "2026-02-26", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8080, - "documentation": null, - "config_path": "/opt/immichframe/Config/Settings.yml", - "website": null, - "logo": "https://github.com/selfhst/icons/blob/main/webp/immich-frame.webp", - "description": "ImmichFrame is a digital photo frame web application that connects to your Immich server and displays your photos as a fullscreen slideshow.", - "install_methods": [ - { - "type": "default", - "script": "ct/immichframe.sh", - "resources": { - "cpu": 1, - "ram": 1024, - "hdd": 8, - "os": "Debian", - "version": "13" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "After installation, edit `/opt/immichframe/Config/Settings.yml` and set ImmichServerUrl and ApiKey. Then restart the service with `systemctl restart immichframe`.", - "type": "info" - } - ] -} \ No newline at end of file diff --git a/frontend/public/json/seaweedfs.json b/frontend/public/json/seaweedfs.json deleted file mode 100644 index ad9f4d555..000000000 --- a/frontend/public/json/seaweedfs.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "SeaweedFS", - "slug": "seaweedfs", - "categories": [ - 11 - ], - "date_created": "2026-02-22", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 9333, - "documentation": "https://github.com/seaweedfs/seaweedfs/wiki", - "website": "https://seaweedfs.com/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/seaweedfs.webp", - "config_path": "", - "description": "SeaweedFS is a fast distributed storage system for blobs, objects, files, and data lakes, with O(1) disk seek, S3 API, FUSE mount, WebDAV, and cloud tiering support.", - "install_methods": [ - { - "type": "default", - "script": "ct/seaweedfs.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 16, - "os": "Debian", - "version": "13" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "Master UI available at port 9333, Filer UI at port 8888, S3 API at port 8333.", - "type": "info" - }, - { - "text": "Data is stored in /opt/seaweedfs-data.", - "type": "info" - }, - { - "text": "FUSE mounting requires fuse3 (pre-installed).", - "type": "info" - } - ] -} \ No newline at end of file diff --git a/install/booklore-install.sh b/install/booklore-install.sh deleted file mode 100644 index 6d4ff19ca..000000000 --- a/install/booklore-install.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/booklore-app/BookLore - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -JAVA_VERSION="25" setup_java -NODE_VERSION="22" setup_nodejs -setup_mariadb -setup_yq -MARIADB_DB_NAME="booklore_db" MARIADB_DB_USER="booklore_user" MARIADB_DB_EXTRA_GRANTS="GRANT SELECT ON \`mysql\`.\`time_zone_name\`" setup_mariadb_db -fetch_and_deploy_gh_release "booklore" "booklore-app/BookLore" "tarball" - -msg_info "Building Frontend" -cd /opt/booklore/booklore-ui -$STD npm ci -$STD npm run build --configuration=production -msg_ok "Built Frontend" - -msg_info "Embedding Frontend into Backend" -mkdir -p /opt/booklore/booklore-api/src/main/resources/static -cp -r /opt/booklore/booklore-ui/dist/booklore/browser/* /opt/booklore/booklore-api/src/main/resources/static/ -msg_ok "Embedded Frontend into Backend" - -msg_info "Creating Environment" -mkdir -p /opt/booklore_storage/{data,books,bookdrop} -cat </opt/booklore_storage/.env -# Database Configuration -DATABASE_URL=jdbc:mariadb://localhost:3306/${MARIADB_DB_NAME} -DATABASE_USERNAME=${MARIADB_DB_USER} -DATABASE_PASSWORD=${MARIADB_DB_PASS} - -# App Configuration (Spring Boot mapping from app.* properties) -APP_PATH_CONFIG=/opt/booklore_storage/data -APP_BOOKDROP_FOLDER=/opt/booklore_storage/bookdrop -SERVER_PORT=6060 -EOF -msg_ok "Created Environment" - -msg_info "Building Backend" -cd /opt/booklore/booklore-api -APP_VERSION=$(get_latest_github_release "booklore-app/BookLore") -yq eval ".app.version = \"${APP_VERSION}\"" -i src/main/resources/application.yaml -$STD ./gradlew clean build -x test --no-daemon -mkdir -p /opt/booklore/dist -JAR_PATH=$(find /opt/booklore/booklore-api/build/libs -maxdepth 1 -type f -name "booklore-api-*.jar" ! -name "*plain*" | head -n1) -if [[ -z "$JAR_PATH" ]]; then - msg_error "Backend JAR not found" - exit 1 -fi -cp "$JAR_PATH" /opt/booklore/dist/app.jar -msg_ok "Built Backend" - -msg_info "Creating Service" -cat </etc/systemd/system/booklore.service -[Unit] -Description=BookLore Java Service -After=network.target mariadb.service - -[Service] -Type=simple -User=root -WorkingDirectory=/opt/booklore/dist -ExecStart=/usr/bin/java -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompactObjectHeaders -jar /opt/booklore/dist/app.jar -EnvironmentFile=/opt/booklore_storage/.env -SuccessExitStatus=143 -TimeoutStopSec=10 -Restart=on-failure -RestartSec=5 - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now booklore -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc diff --git a/install/frigate-install.sh b/install/frigate-install.sh deleted file mode 100644 index f952bf156..000000000 --- a/install/frigate-install.sh +++ /dev/null @@ -1,401 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Authors: MickLesk (CanbiZ) -# Co-Authors: remz1337 -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://frigate.video/ | Github: https://github.com/blakeblackshear/frigate - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -source /etc/os-release -if [[ "$VERSION_ID" != "12" ]]; then - msg_error "Frigate requires Debian 12 (Bookworm) due to Python 3.11 dependencies" - exit 1 -fi - -msg_info "Converting APT sources to DEB822 format" -if [ -f /etc/apt/sources.list ]; then - cat >/etc/apt/sources.list.d/debian.sources <<'EOF' -Types: deb -URIs: http://deb.debian.org/debian -Suites: bookworm -Components: main contrib -Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg - -Types: deb -URIs: http://deb.debian.org/debian -Suites: bookworm-updates -Components: main contrib -Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg - -Types: deb -URIs: http://security.debian.org -Suites: bookworm-security -Components: main contrib -Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg -EOF - mv /etc/apt/sources.list /etc/apt/sources.list.bak - $STD apt update -fi -msg_ok "Converted APT sources" - -msg_info "Installing Dependencies" -$STD apt install -y \ - xz-utils \ - python3 \ - python3-dev \ - python3-pip \ - gcc \ - pkg-config \ - libhdf5-dev \ - build-essential \ - automake \ - libtool \ - ccache \ - libusb-1.0-0-dev \ - apt-transport-https \ - cmake \ - git \ - libgtk-3-dev \ - libavcodec-dev \ - libavformat-dev \ - libswscale-dev \ - libv4l-dev \ - libxvidcore-dev \ - libx264-dev \ - libjpeg-dev \ - libpng-dev \ - libtiff-dev \ - gfortran \ - openexr \ - libssl-dev \ - libtbbmalloc2 \ - libtbb-dev \ - libdc1394-dev \ - libopenexr-dev \ - libgstreamer-plugins-base1.0-dev \ - libgstreamer1.0-dev \ - tclsh \ - libopenblas-dev \ - liblapack-dev \ - libgomp1 \ - make \ - moreutils -msg_ok "Installed Dependencies" - -setup_hwaccel - -export TARGETARCH="amd64" -export CCACHE_DIR=/root/.ccache -export CCACHE_MAXSIZE=2G -export APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn -export PIP_BREAK_SYSTEM_PACKAGES=1 -export NVIDIA_VISIBLE_DEVICES=all -export NVIDIA_DRIVER_CAPABILITIES="compute,video,utility" -export TOKENIZERS_PARALLELISM=true -export TRANSFORMERS_NO_ADVISORY_WARNINGS=1 -export OPENCV_FFMPEG_LOGLEVEL=8 -export PYTHONWARNINGS="ignore:::numpy.core.getlimits" -export HAILORT_LOGGER_PATH=NONE -export TF_CPP_MIN_LOG_LEVEL=3 -export TF_CPP_MIN_VLOG_LEVEL=3 -export TF_ENABLE_ONEDNN_OPTS=0 -export AUTOGRAPH_VERBOSITY=0 -export GLOG_minloglevel=3 -export GLOG_logtostderr=0 - -fetch_and_deploy_gh_release "frigate" "blakeblackshear/frigate" "tarball" "v0.17.0" "/opt/frigate" - -msg_info "Building Nginx" -$STD bash /opt/frigate/docker/main/build_nginx.sh -sed -e '/s6-notifyoncheck/ s/^#*/#/' -i /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx/run -ln -sf /usr/local/nginx/sbin/nginx /usr/local/bin/nginx -msg_ok "Built Nginx" - -msg_info "Building SQLite Extensions" -$STD bash /opt/frigate/docker/main/build_sqlite_vec.sh -msg_ok "Built SQLite Extensions" - -fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/usr/local/go2rtc/bin" "go2rtc_linux_amd64" - -msg_info "Installing Tempio" -sed -i 's|/rootfs/usr/local|/usr/local|g' /opt/frigate/docker/main/install_tempio.sh -$STD bash /opt/frigate/docker/main/install_tempio.sh -ln -sf /usr/local/tempio/bin/tempio /usr/local/bin/tempio -msg_ok "Installed Tempio" - -msg_info "Building libUSB" -fetch_and_deploy_gh_release "libusb" "libusb/libusb" "tarball" "v1.0.26" "/opt/libusb" -cd /opt/libusb -$STD ./bootstrap.sh -$STD ./configure CC='ccache gcc' CCX='ccache g++' --disable-udev --enable-shared -$STD make -j "$(nproc)" -cd /opt/libusb/libusb -mkdir -p /usr/local/lib /usr/local/include/libusb-1.0 /usr/local/lib/pkgconfig -$STD bash ../libtool --mode=install /usr/bin/install -c libusb-1.0.la /usr/local/lib -install -c -m 644 libusb.h /usr/local/include/libusb-1.0 -cd /opt/libusb/ -install -c -m 644 libusb-1.0.pc /usr/local/lib/pkgconfig -ldconfig -msg_ok "Built libUSB" - -msg_info "Bootstrapping pip" -wget -q https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py -sed -i 's/args.append("setuptools")/args.append("setuptools==77.0.3")/' /tmp/get-pip.py -$STD python3 /tmp/get-pip.py "pip" -rm -f /tmp/get-pip.py -msg_ok "Bootstrapped pip" - -msg_info "Installing Python Dependencies" -$STD pip3 install -r /opt/frigate/docker/main/requirements.txt -msg_ok "Installed Python Dependencies" - -msg_info "Building Python Wheels (Patience)" -mkdir -p /wheels -$STD bash /opt/frigate/docker/main/build_pysqlite3.sh -for i in {1..3}; do - $STD pip3 wheel --wheel-dir=/wheels -r /opt/frigate/docker/main/requirements-wheels.txt --default-timeout=300 --retries=3 && break - [[ $i -lt 3 ]] && sleep 10 -done -msg_ok "Built Python Wheels" - -NODE_VERSION="20" setup_nodejs - -msg_info "Downloading Inference Models" -mkdir -p /models /openvino-model -wget -q -O /edgetpu_model.tflite https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess_edgetpu.tflite -wget -q -O /models/cpu_model.tflite https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess.tflite -cp /opt/frigate/labelmap.txt /labelmap.txt -msg_ok "Downloaded Inference Models" - -msg_info "Downloading Audio Model" -wget -q -O /tmp/yamnet.tar.gz https://www.kaggle.com/api/v1/models/google/yamnet/tfLite/classification-tflite/1/download -$STD tar xzf /tmp/yamnet.tar.gz -C / -mv /1.tflite /cpu_audio_model.tflite -cp /opt/frigate/audio-labelmap.txt /audio-labelmap.txt -rm -f /tmp/yamnet.tar.gz -msg_ok "Downloaded Audio Model" - -msg_info "Installing HailoRT Runtime" -$STD bash /opt/frigate/docker/main/install_hailort.sh -cp -a /opt/frigate/docker/main/rootfs/. / -sed -i '/^.*unset DEBIAN_FRONTEND.*$/d' /opt/frigate/docker/main/install_deps.sh -echo "libedgetpu1-max libedgetpu/accepted-eula boolean true" | debconf-set-selections -echo "libedgetpu1-max libedgetpu/install-confirm-max boolean true" | debconf-set-selections -# Allow Frigate's Intel media packages to overwrite files from system GPU driver packages -echo 'force-overwrite' >/etc/dpkg/dpkg.cfg.d/force-overwrite -$STD bash /opt/frigate/docker/main/install_deps.sh -rm -f /etc/dpkg/dpkg.cfg.d/force-overwrite -$STD pip3 install -U /wheels/*.whl -ldconfig -msg_ok "Installed HailoRT Runtime" - -msg_info "Installing MemryX Runtime" -$STD bash /opt/frigate/docker/main/install_memryx.sh -msg_ok "Installed MemryX Runtime" - -msg_info "Installing OpenVino" -$STD pip3 install -r /opt/frigate/docker/main/requirements-ov.txt -msg_ok "Installed OpenVino" - -msg_info "Building OpenVino Model" -cd /models -wget -q http://download.tensorflow.org/models/object_detection/ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz -$STD tar -zxf ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz --no-same-owner -if $STD python3 /opt/frigate/docker/main/build_ov_model.py; then - cp /models/ssdlite_mobilenet_v2.xml /openvino-model/ - cp /models/ssdlite_mobilenet_v2.bin /openvino-model/ - wget -q https://github.com/openvinotoolkit/open_model_zoo/raw/master/data/dataset_classes/coco_91cl_bkgr.txt -O /openvino-model/coco_91cl_bkgr.txt - sed -i 's/truck/car/g' /openvino-model/coco_91cl_bkgr.txt - msg_ok "Built OpenVino Model" -else - msg_warn "OpenVino build failed (CPU may not support required instructions). Frigate will use CPU model." -fi - -msg_info "Building Frigate Application (Patience)" -cd /opt/frigate -$STD pip3 install -r /opt/frigate/docker/main/requirements-dev.txt -$STD bash /opt/frigate/.devcontainer/initialize.sh -$STD make version -cd /opt/frigate/web -$STD npm install -$STD npm run build -mv /opt/frigate/web/dist/BASE_PATH/monacoeditorwork/* /opt/frigate/web/dist/assets/ -rm -rf /opt/frigate/web/dist/BASE_PATH -cp -r /opt/frigate/web/dist/* /opt/frigate/web/ -sed -i '/^s6-svc -O \.$/s/^/#/' /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate/run -msg_ok "Built Frigate Application" - -msg_info "Configuring Frigate" -mkdir -p /config /media/frigate -cp -r /opt/frigate/config/. /config - -curl -fsSL "https://github.com/intel-iot-devkit/sample-videos/raw/master/person-bicycle-car-detection.mp4" -o "/media/frigate/person-bicycle-car-detection.mp4" - -echo "tmpfs /tmp/cache tmpfs defaults 0 0" >>/etc/fstab - -cat </etc/frigate.env -DEFAULT_FFMPEG_VERSION="7.0" -INCLUDED_FFMPEG_VERSIONS="7.0:5.0" -NVIDIA_VISIBLE_DEVICES=all -NVIDIA_DRIVER_CAPABILITIES="compute,video,utility" -TOKENIZERS_PARALLELISM=true -TRANSFORMERS_NO_ADVISORY_WARNINGS=1 -OPENCV_FFMPEG_LOGLEVEL=8 -PYTHONWARNINGS="ignore:::numpy.core.getlimits" -HAILORT_LOGGER_PATH=NONE -TF_CPP_MIN_LOG_LEVEL=3 -TF_CPP_MIN_VLOG_LEVEL=3 -TF_ENABLE_ONEDNN_OPTS=0 -AUTOGRAPH_VERBOSITY=0 -GLOG_minloglevel=3 -GLOG_logtostderr=0 -EOF - -cat </config/config.yml -mqtt: - enabled: false -cameras: - test: - ffmpeg: - inputs: - - path: /media/frigate/person-bicycle-car-detection.mp4 - input_args: -re -stream_loop -1 -fflags +genpts - roles: - - detect - detect: - height: 1080 - width: 1920 - fps: 5 -auth: - enabled: false -detect: - enabled: false -EOF - -if grep -q -o -m1 -E 'avx[^ ]*|sse4_2' /proc/cpuinfo; then - cat <>/config/config.yml -ffmpeg: - hwaccel_args: auto -detectors: - detector01: - type: openvino - device: AUTO -model: - width: 300 - height: 300 - input_tensor: nhwc - input_pixel_format: bgr - path: /openvino-model/ssdlite_mobilenet_v2.xml - labelmap_path: /openvino-model/coco_91cl_bkgr.txt -EOF -else - cat <>/config/config.yml -ffmpeg: - hwaccel_args: auto -model: - path: /cpu_model.tflite -EOF -fi -msg_ok "Configured Frigate" - -msg_info "Creating Services" -cat </etc/systemd/system/create_directories.service -[Unit] -Description=Create necessary directories for Frigate logs -Before=frigate.service go2rtc.service nginx.service - -[Service] -Type=oneshot -ExecStart=/bin/bash -c '/bin/mkdir -p /dev/shm/logs/{frigate,go2rtc,nginx} && /bin/touch /dev/shm/logs/{frigate/current,go2rtc/current,nginx/current} && /bin/chmod -R 777 /dev/shm/logs' - -[Install] -WantedBy=multi-user.target -EOF - -cat </etc/systemd/system/go2rtc.service -[Unit] -Description=go2rtc streaming service -After=network.target create_directories.service -StartLimitIntervalSec=0 - -[Service] -Type=simple -Restart=always -RestartSec=1 -User=root -EnvironmentFile=/etc/frigate.env -ExecStartPre=+rm -f /dev/shm/logs/go2rtc/current -ExecStart=/bin/bash -c "bash /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run 2> >(/usr/bin/ts '%%Y-%%m-%%d %%H:%%M:%%.S ' >&2) | /usr/bin/ts '%%Y-%%m-%%d %%H:%%M:%%.S '" -StandardOutput=file:/dev/shm/logs/go2rtc/current -StandardError=file:/dev/shm/logs/go2rtc/current - -[Install] -WantedBy=multi-user.target -EOF - -cat </etc/systemd/system/frigate.service -[Unit] -Description=Frigate NVR service -After=go2rtc.service create_directories.service -StartLimitIntervalSec=0 - -[Service] -Type=simple -Restart=always -RestartSec=1 -User=root -EnvironmentFile=/etc/frigate.env -ExecStartPre=+rm -f /dev/shm/logs/frigate/current -ExecStart=/bin/bash -c "bash /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate/run 2> >(/usr/bin/ts '%%Y-%%m-%%d %%H:%%M:%%.S ' >&2) | /usr/bin/ts '%%Y-%%m-%%d %%H:%%M:%%.S '" -StandardOutput=file:/dev/shm/logs/frigate/current -StandardError=file:/dev/shm/logs/frigate/current - -[Install] -WantedBy=multi-user.target -EOF - -cat </etc/systemd/system/nginx.service -[Unit] -Description=Nginx reverse proxy for Frigate -After=frigate.service create_directories.service -StartLimitIntervalSec=0 - -[Service] -Type=simple -Restart=always -RestartSec=1 -User=root -ExecStartPre=+rm -f /dev/shm/logs/nginx/current -ExecStart=/bin/bash -c "bash /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx/run 2> >(/usr/bin/ts '%%Y-%%m-%%d %%H:%%M:%%.S ' >&2) | /usr/bin/ts '%%Y-%%m-%%d %%H:%%M:%%.S '" -StandardOutput=file:/dev/shm/logs/nginx/current -StandardError=file:/dev/shm/logs/nginx/current - -[Install] -WantedBy=multi-user.target -EOF - -systemctl daemon-reload -systemctl enable -q --now create_directories -sleep 2 -systemctl enable -q --now go2rtc -sleep 2 -systemctl enable -q --now frigate -sleep 2 -systemctl enable -q --now nginx -msg_ok "Created Services" - -msg_info "Cleaning Up" -rm -rf /opt/libusb /wheels /models/*.tar.gz -msg_ok "Cleaned Up" - -motd_ssh -customize -cleanup_lxc diff --git a/install/immich-install.sh b/install/immich-install.sh deleted file mode 100644 index d0625e4cf..000000000 --- a/install/immich-install.sh +++ /dev/null @@ -1,488 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: vhsdream -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://immich.app - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -echo "" -echo "" -echo -e "🤖 ${BL}Immich Machine Learning Options${CL}" -echo "─────────────────────────────────────────" -echo "Please choose your machine-learning type:" -echo "" -echo " 1) CPU only (default)" -echo " 2) Intel OpenVINO (requires GPU passthrough)" -echo "" - -read -r -p "${TAB3}Select machine-learning type [1]: " ML_TYPE -ML_TYPE="${ML_TYPE:-1}" -if [[ "$ML_TYPE" == "2" ]]; then - msg_info "Installing OpenVINO dependencies" - touch ~/.openvino - $STD apt install -y --no-install-recommends patchelf - tmp_dir=$(mktemp -d) - $STD pushd "$tmp_dir" - curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/Dockerfile - readarray -t INTEL_URLS < <( - sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $2}' - sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}' - ) - for url in "${INTEL_URLS[@]}"; do - curl -fsSLO "$url" - done - $STD apt install -y ./libigdgmm12*.deb - rm ./libigdgmm12*.deb - $STD apt install -y ./*.deb - $STD apt-mark hold libigdgmm12 - $STD popd - rm -rf "$tmp_dir" - dpkg-query -W -f='${Version}\n' intel-opencl-icd >~/.intel_version - msg_ok "Installed OpenVINO dependencies" -fi - -setup_uv - -msg_info "Installing dependencies" -$STD apt install --no-install-recommends -y \ - git \ - redis \ - autoconf \ - build-essential \ - python3-dev \ - automake \ - cmake \ - jq \ - libtool \ - libltdl-dev \ - libgdk-pixbuf-2.0-dev \ - libbrotli-dev \ - libexif-dev \ - libexpat1-dev \ - libglib2.0-dev \ - libgsf-1-dev \ - libjpeg62-turbo-dev \ - libspng-dev \ - liblcms2-dev \ - libopenexr-dev \ - libgif-dev \ - librsvg2-dev \ - libexpat1 \ - libgcc-s1 \ - libgomp1 \ - liblqr-1-0 \ - libltdl7 \ - libopenjp2-7 \ - meson \ - ninja-build \ - pkg-config \ - mesa-utils \ - mesa-va-drivers \ - mesa-vulkan-drivers \ - ocl-icd-libopencl1 \ - tini \ - zlib1g \ - libio-compress-brotli-perl \ - libwebp7 \ - libwebpdemux2 \ - libwebpmux3 \ - libhwy1t64 \ - libdav1d-dev \ - libhwy-dev \ - libwebp-dev \ - libaom-dev \ - ccache - -setup_deb822_repo \ - "jellyfin" \ - "https://repo.jellyfin.org/jellyfin_team.gpg.key" \ - "https://repo.jellyfin.org/debian" \ - "$(get_os_info codename)" -$STD apt install -y jellyfin-ffmpeg7 -ln -sf /usr/lib/jellyfin-ffmpeg/ffmpeg /usr/bin/ffmpeg -ln -sf /usr/lib/jellyfin-ffmpeg/ffprobe /usr/bin/ffprobe - -# Set permissions for /dev/dri (only in privileged containers and if /dev/dri exists) -if [[ "$CTTYPE" == "0" && -d /dev/dri ]]; then - chgrp video /dev/dri 2>/dev/null || true - chmod 755 /dev/dri 2>/dev/null || true - chmod 660 /dev/dri/* 2>/dev/null || true - $STD adduser "$(id -u -n)" video 2>/dev/null || true - $STD adduser "$(id -u -n)" render 2>/dev/null || true -fi -msg_ok "Dependencies Installed" - -msg_info "Installing Mise" -curl -fSs https://mise.jdx.dev/gpg-key.pub | tee /etc/apt/keyrings/mise-archive-keyring.pub 1>/dev/null -echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=amd64] https://mise.jdx.dev/deb stable main" >/etc/apt/sources.list.d/mise.list -$STD apt update -$STD apt install -y mise -msg_ok "Installed Mise" - -msg_info "Configuring Debian Testing Repo" -sed -i 's/ trixie-updates/ trixie-updates testing/g' /etc/apt/sources.list.d/debian.sources -cat </etc/apt/preferences.d/preferences -Package: * -Pin: release a=unstable -Pin-Priority: 450 - -Package: * -Pin:release a=testing -Pin-Priority: 450 -EOF -$STD apt update -msg_ok "Configured Debian Testing repo" -msg_info "Installing packages from Debian Testing repo" -$STD apt install -t testing --no-install-recommends -yqq libmimalloc3 libde265-dev -msg_ok "Installed packages from Debian Testing repo" - -PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')" -NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs -PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql - -VCHORD_RELEASE="0.5.3" -msg_info "Installing Vectorchord v${VCHORD_RELEASE}" -curl -fsSL "https://github.com/tensorchord/VectorChord/releases/download/${VCHORD_RELEASE}/postgresql-16-vchord_${VCHORD_RELEASE}-1_amd64.deb" -o vchord.deb -$STD apt install -y ./vchord.deb -rm vchord.deb -echo "$VCHORD_RELEASE" >~/.vchord_version -msg_ok "Installed Vectorchord v${VCHORD_RELEASE}" - -sed -i -e "/^#shared_preload/s/^#//;/^shared_preload/s/''/'vchord.so'/" /etc/postgresql/16/main/postgresql.conf -systemctl restart postgresql.service -PG_DB_NAME="immich" PG_DB_USER="immich" PG_DB_GRANT_SUPERUSER="true" PG_DB_SKIP_ALTER_ROLE="true" setup_postgresql_db - -msg_info "Compiling Custom Photo-processing Library (extreme patience)" -LD_LIBRARY_PATH=/usr/local/lib -export LD_RUN_PATH=/usr/local/lib -STAGING_DIR=/opt/staging -BASE_REPO="https://github.com/immich-app/base-images" -BASE_DIR=${STAGING_DIR}/base-images -SOURCE_DIR=${STAGING_DIR}/image-source -$STD git clone -b main "$BASE_REPO" "$BASE_DIR" -mkdir -p "$SOURCE_DIR" - -msg_info "(1/5) Compiling libjxl" -cd "$STAGING_DIR" -SOURCE=${SOURCE_DIR}/libjxl -JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62" -JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0" -: "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}" -$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE" -cd "$SOURCE" -$STD git reset --hard "$LIBJXL_REVISION" -$STD git submodule update --init --recursive --depth 1 --recommend-shallow -$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch -$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch -mkdir build -cd build -$STD cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_TESTING=OFF \ - -DJPEGXL_ENABLE_DOXYGEN=OFF \ - -DJPEGXL_ENABLE_MANPAGES=OFF \ - -DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \ - -DJPEGXL_ENABLE_BENCHMARK=OFF \ - -DJPEGXL_ENABLE_EXAMPLES=OFF \ - -DJPEGXL_FORCE_SYSTEM_BROTLI=ON \ - -DJPEGXL_FORCE_SYSTEM_HWY=ON \ - -DJPEGXL_ENABLE_JPEGLI=ON \ - -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \ - -DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \ - -DJPEGXL_ENABLE_PLUGINS=ON \ - -DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \ - -DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \ - -DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \ - .. -$STD cmake --build . -- -j"$(nproc)" -$STD cmake --install . -ldconfig /usr/local/lib -$STD make clean -cd "$STAGING_DIR" -rm -rf "$SOURCE"/{build,third_party} -msg_ok "(1/5) Compiled libjxl" - -msg_info "(2/5) Compiling libheif" -SOURCE=${SOURCE_DIR}/libheif -: "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}" -$STD git clone https://github.com/strukturag/libheif.git "$SOURCE" -cd "$SOURCE" -$STD git reset --hard "$LIBHEIF_REVISION" -mkdir build -cd build -$STD cmake --preset=release-noplugins \ - -DWITH_DAV1D=ON \ - -DENABLE_PARALLEL_TILE_DECODING=ON \ - -DWITH_LIBSHARPYUV=ON \ - -DWITH_LIBDE265=ON \ - -DWITH_AOM_DECODER=OFF \ - -DWITH_AOM_ENCODER=ON \ - -DWITH_X265=OFF \ - -DWITH_EXAMPLES=OFF \ - .. -$STD make install -j "$(nproc)" -ldconfig /usr/local/lib -$STD make clean -cd "$STAGING_DIR" -rm -rf "$SOURCE"/build -msg_ok "(2/5) Compiled libheif" - -msg_info "(3/5) Compiling libraw" -SOURCE=${SOURCE_DIR}/libraw -: "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}" -$STD git clone https://github.com/libraw/libraw.git "$SOURCE" -cd "$SOURCE" -$STD git reset --hard "$LIBRAW_REVISION" -$STD autoreconf --install -$STD ./configure --disable-examples -$STD make -j"$(nproc)" -$STD make install -ldconfig /usr/local/lib -$STD make clean -cd "$STAGING_DIR" -msg_ok "(3/5) Compiled libraw" - -msg_info "(4/5) Compiling imagemagick" -SOURCE=$SOURCE_DIR/imagemagick -: "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}" -$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE" -cd "$SOURCE" -$STD git reset --hard "$IMAGEMAGICK_REVISION" -$STD ./configure --with-modules CPPFLAGS="-DMAGICK_LIBRAW_VERSION_TAIL=202502" -$STD make -j"$(nproc)" -$STD make install -ldconfig /usr/local/lib -$STD make clean -cd "$STAGING_DIR" -msg_ok "(4/5) Compiled imagemagick" - -msg_info "(5/5) Compiling libvips" -SOURCE=$SOURCE_DIR/libvips -: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}" -$STD git clone https://github.com/libvips/libvips.git "$SOURCE" -cd "$SOURCE" -$STD git reset --hard "$LIBVIPS_REVISION" -$STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled -cd build -$STD ninja install -ldconfig /usr/local/lib -cd "$STAGING_DIR" -rm -rf "$SOURCE"/build -msg_ok "(5/5) Compiled libvips" -{ - echo "imagemagick: $IMAGEMAGICK_REVISION" - echo "libheif: $LIBHEIF_REVISION" - echo "libjxl: $LIBJXL_REVISION" - echo "libraw: $LIBRAW_REVISION" - echo "libvips: $LIBVIPS_REVISION" -} >~/.immich_library_revisions -msg_ok "Custom Photo-processing Libraries Compiled Successfully" - -INSTALL_DIR="/opt/${APPLICATION}" -UPLOAD_DIR="${INSTALL_DIR}/upload" -SRC_DIR="${INSTALL_DIR}/source" -APP_DIR="${INSTALL_DIR}/app" -PLUGIN_DIR="${APP_DIR}/corePlugin" -ML_DIR="${APP_DIR}/machine-learning" -GEO_DIR="${INSTALL_DIR}/geodata" -mkdir -p "$INSTALL_DIR" -mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache} - -fetch_and_deploy_gh_release "immich" "immich-app/immich" "tag" "v2.5.2" "$SRC_DIR" - -msg_info "Installing Immich (patience)" - -cd "$SRC_DIR"/server -export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 -export CI=1 -corepack enable - -# server build -export SHARP_IGNORE_GLOBAL_LIBVIPS=true -$STD pnpm --filter immich --frozen-lockfile build -unset SHARP_IGNORE_GLOBAL_LIBVIPS -export SHARP_FORCE_GLOBAL_LIBVIPS=true -$STD pnpm --filter immich --frozen-lockfile --prod --no-optional deploy "$APP_DIR" -cp "$APP_DIR"/package.json "$APP_DIR"/bin -sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin - -# openapi & web build -cd "$SRC_DIR" -echo "packageImportMethod: hardlink" >>./pnpm-workspace.yaml -$STD pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install -unset SHARP_FORCE_GLOBAL_LIBVIPS -export SHARP_IGNORE_GLOBAL_LIBVIPS=true -$STD pnpm --filter @immich/sdk --filter immich-web build -cp -a web/build "$APP_DIR"/www -cp LICENSE "$APP_DIR" - -# cli build -$STD pnpm --filter @immich/sdk --filter @immich/cli --frozen-lockfile install -$STD pnpm --filter @immich/sdk --filter @immich/cli build -$STD pnpm --filter @immich/cli --prod --no-optional deploy "$APP_DIR"/cli - -# plugins -cd "$SRC_DIR" -$STD mise trust --ignore ./mise.toml -$STD mise trust ./plugins/mise.toml -cd plugins -$STD mise install -$STD mise run build -mkdir -p "$PLUGIN_DIR" -cp -r ./dist "$PLUGIN_DIR"/dist -cp ./manifest.json "$PLUGIN_DIR" -msg_ok "Installed Immich Server, Web and Plugin Components" - -cd "$SRC_DIR"/machine-learning -$STD useradd -U -s /usr/sbin/nologin -r -M -d "$INSTALL_DIR" immich -mkdir -p "$ML_DIR" && chown -R immich:immich "$INSTALL_DIR" -export VIRTUAL_ENV="${ML_DIR}/ml-venv" -if [[ -f ~/.openvino ]]; then - msg_info "Installing HW-accelerated machine-learning" - $STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p python3.13 --managed-python - patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.13/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-313-x86_64-linux-gnu.so" - msg_ok "Installed HW-accelerated machine-learning" -else - msg_info "Installing machine-learning" - $STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra cpu --no-dev --active --link-mode copy -n -p python3.11 --managed-python - msg_ok "Installed machine-learning" -fi -cd "$SRC_DIR" -cp -a machine-learning/{ann,immich_ml} "$ML_DIR" -if [[ -f ~/.openvino ]]; then - sed -i "/intra_op/s/int = 0/int = os.cpu_count() or 0/" "$ML_DIR"/immich_ml/config.py -fi -ln -sf "$APP_DIR"/resources "$INSTALL_DIR" - -cd "$APP_DIR" -grep -rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g" -grep -rlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g" -sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py -ln -s "$UPLOAD_DIR" "$APP_DIR"/upload -ln -s "$UPLOAD_DIR" "$ML_DIR"/upload - -msg_info "Installing GeoNames data" -cd "$GEO_DIR" -curl -fsSLZ -O "https://download.geonames.org/export/dump/admin1CodesASCII.txt" \ - -O "https://download.geonames.org/export/dump/admin2Codes.txt" \ - -O "https://download.geonames.org/export/dump/cities500.zip" \ - -O "https://raw.githubusercontent.com/nvkelso/natural-earth-vector/v5.1.2/geojson/ne_10m_admin_0_countries.geojson" -unzip -q cities500.zip -date --iso-8601=seconds | tr -d "\n" >geodata-date.txt -rm cities500.zip -cd "$INSTALL_DIR" -ln -s "$GEO_DIR" "$APP_DIR" -msg_ok "Installed GeoNames data" - -mkdir -p /var/log/immich -touch /var/log/immich/{web.log,ml.log} -msg_ok "Installed Immich" - -msg_info "Modifying user, creating env file, scripts & services" -usermod -aG video,render immich - -cat <"${INSTALL_DIR}"/.env -TZ=$(cat /etc/timezone) -IMMICH_VERSION=release -NODE_ENV=production -IMMICH_ALLOW_SETUP=true - -DB_HOSTNAME=127.0.0.1 -DB_USERNAME=${PG_DB_USER} -DB_PASSWORD=${PG_DB_PASS} -DB_DATABASE_NAME=${PG_DB_NAME} -DB_VECTOR_EXTENSION=vectorchord - -REDIS_HOSTNAME=127.0.0.1 -IMMICH_MACHINE_LEARNING_URL=http://127.0.0.1:3003 -MACHINE_LEARNING_CACHE_FOLDER=${INSTALL_DIR}/cache -## - For OpenVINO only - workaround for onnxruntime-openvino 1.23.x crash -## - See: https://github.com/immich-app/immich/pull/11240 -MACHINE_LEARNING_OPENVINO_NUM_THREADS=$(nproc) -## - Uncomment below to increase inference speed while reducing accuracy -# MACHINE_LEARNING_OPENVINO_PRECISION=FP16 - -IMMICH_MEDIA_LOCATION=${UPLOAD_DIR} -EOF -cat <"${ML_DIR}"/ml_start.sh -#!/usr/bin/env bash - -cd ${ML_DIR} -. ${VIRTUAL_ENV}/bin/activate - -set -a -. ${INSTALL_DIR}/.env -set +a - -python3 -m immich_ml -EOF -cat <"$APP_DIR"/bin/start.sh -#!/usr/bin/env bash - -set -a -. ${INSTALL_DIR}/.env -set +a - -/usr/bin/node ${APP_DIR}/dist/main.js "\$@" -EOF -chmod +x "$ML_DIR"/ml_start.sh "$APP_DIR"/bin/start.sh -cat </etc/systemd/system/"${APPLICATION}"-web.service -[Unit] -Description=${APPLICATION} Web Service -After=network.target -Requires=redis-server.service -Requires=postgresql.service -Requires=immich-ml.service - -[Service] -Type=simple -User=immich -Group=immich -UMask=0077 -WorkingDirectory=${APP_DIR} -EnvironmentFile=${INSTALL_DIR}/.env -ExecStart=/usr/bin/node ${APP_DIR}/dist/main -Restart=on-failure -SyslogIdentifier=immich-web -StandardOutput=append:/var/log/immich/web.log -StandardError=append:/var/log/immich/web.log - -[Install] -WantedBy=multi-user.target -EOF -cat </etc/systemd/system/"${APPLICATION}"-ml.service -[Unit] -Description=${APPLICATION} Machine-Learning -After=network.target - -[Service] -Type=simple -UMask=0077 -User=immich -Group=immich -WorkingDirectory=${APP_DIR} -EnvironmentFile=${INSTALL_DIR}/.env -ExecStart=${ML_DIR}/ml_start.sh -Restart=on-failure -SyslogIdentifier=immich-machine-learning -StandardOutput=append:/var/log/immich/ml.log -StandardError=append:/var/log/immich/ml.log - -[Install] -WantedBy=multi-user.target -EOF -chown -R immich:immich "$INSTALL_DIR" /var/log/immich -systemctl enable -q --now "$APPLICATION"-ml.service "$APPLICATION"-web.service -msg_ok "Modified user, created env file, scripts and services" - -motd_ssh -customize -cleanup_lxc diff --git a/install/immichframe-install.sh b/install/immichframe-install.sh deleted file mode 100644 index 46b46b076..000000000 --- a/install/immichframe-install.sh +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: Thiago Canozzo Lahr (tclahr) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/immichFrame/ImmichFrame - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -setup_deb822_repo \ - "microsoft" \ - "https://packages.microsoft.com/keys/microsoft-2025.asc" \ - "https://packages.microsoft.com/debian/13/prod/" \ - "trixie" \ - "main" -$STD apt-get install -y \ - libicu-dev \ - libssl-dev \ - gettext-base \ - dotnet-sdk-8.0 \ - aspnetcore-runtime-8.0 -msg_ok "Installed Dependencies" - -NODE_VERSION="22" setup_nodejs - -fetch_and_deploy_gh_release "immichframe" "immichFrame/ImmichFrame" "tarball" "latest" "/tmp/immichframe" - -msg_info "Building Application" -mkdir -p /opt/immichframe -cd /tmp/immichframe -$STD dotnet publish ImmichFrame.WebApi/ImmichFrame.WebApi.csproj \ - --configuration Release \ - --runtime linux-x64 \ - --self-contained false \ - --output /opt/immichframe -cd /tmp/immichframe/immichFrame.Web -$STD npm ci -$STD npm run build -cp -r build/* /opt/immichframe/wwwroot -msg_ok "Application Built" - -msg_info "Removing Build Dependencies" -$STD apt-get remove -y dotnet-sdk-8.0 -$STD apt-get autoremove -y -rm -rf /tmp/immichframe -msg_ok "Removed Build Dependencies" - -msg_info "Configuring ImmichFrame" -mkdir -p /opt/immichframe/Config -curl -fsSL "https://raw.githubusercontent.com/immichFrame/ImmichFrame/main/docker/Settings.example.yml" \ - -o /opt/immichframe/Config/Settings.yml -msg_ok "Configured ImmichFrame" - -msg_info "Creating immichframe User" -useradd -r -s /sbin/nologin -d /opt/immichframe -M immichframe 2>/dev/null -chown -R immichframe:immichframe /opt/immichframe -msg_ok "User immichframe Created" - -msg_info "Creating Service" -cat <<'EOF' >/etc/systemd/system/immichframe.service -[Unit] -Description=ImmichFrame Digital Photo Frame -After=network.target - -[Service] -Type=simple -User=immichframe -Group=immichframe - -WorkingDirectory=/opt/immichframe -ExecStart=/usr/bin/dotnet /opt/immichframe/ImmichFrame.WebApi.dll - -Environment=ASPNETCORE_URLS=http://0.0.0.0:8080 -Environment=ASPNETCORE_ENVIRONMENT=Production -Environment=DOTNET_CONTENTROOT=/opt/immichframe - -Restart=always -RestartSec=5 - -StandardOutput=journal -StandardError=journal -SyslogIdentifier=immichframe - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now immichframe -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc diff --git a/install/seaweedfs-install.sh b/install/seaweedfs-install.sh deleted file mode 100644 index bc6338273..000000000 --- a/install/seaweedfs-install.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Source: https://github.com/seaweedfs/seaweedfs - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apt install -y \ - fuse3 -msg_ok "Installed Dependencies" - -fetch_and_deploy_gh_release "seaweedfs" "seaweedfs/seaweedfs" "prebuild" "latest" "/opt/seaweedfs" "linux_amd64.tar.gz" - -msg_info "Setting up SeaweedFS" -mkdir -p /opt/seaweedfs-data -ln -sf /opt/seaweedfs/weed /usr/local/bin/weed -msg_ok "Set up SeaweedFS" - -msg_info "Creating Service" -cat </etc/systemd/system/seaweedfs.service -[Unit] -Description=SeaweedFS Server -After=network.target - -[Service] -Type=simple -User=root -WorkingDirectory=/opt/seaweedfs -ExecStart=/opt/seaweedfs/weed server -dir=/opt/seaweedfs-data -master.port=9333 -volume.port=8080 -filer -s3 -Restart=on-failure -RestartSec=5 -LimitNOFILE=65536 - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now seaweedfs -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc