mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			44 Commits
		
	
	
		
			2025-09-01
			...
			2025-09-05
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					bbe71cbbb9 | ||
| 
						 | 
					9b6a736c8c | ||
| 
						 | 
					c395ccc270 | ||
| 
						 | 
					3dd72e08e9 | ||
| 
						 | 
					1d989bea73 | ||
| 
						 | 
					f881b88344 | ||
| 
						 | 
					06dbad83ef | ||
| 
						 | 
					7ff966b042 | ||
| 
						 | 
					62264f37a6 | ||
| 
						 | 
					bf05dabc4c | ||
| 
						 | 
					bc229d9738 | ||
| 
						 | 
					969b08caa8 | ||
| 
						 | 
					c1c43ed2cb | ||
| 
						 | 
					e74767d1a4 | ||
| 
						 | 
					e9e17f4f51 | ||
| 
						 | 
					2c1b15a40e | ||
| 
						 | 
					a4bfaf1646 | ||
| 
						 | 
					6fa12cc814 | ||
| 
						 | 
					d314168a37 | ||
| 
						 | 
					d6ad11c5c2 | ||
| 
						 | 
					534592b44a | ||
| 
						 | 
					d9b6b58b36 | ||
| 
						 | 
					298eb7e83d | ||
| 
						 | 
					c2dd1e413f | ||
| 
						 | 
					a4f1766408 | ||
| 
						 | 
					a24169e9b8 | ||
| 
						 | 
					45a2163e66 | ||
| 
						 | 
					2fc3e62d60 | ||
| 
						 | 
					210b846d61 | ||
| 
						 | 
					b04cfb65f7 | ||
| 
						 | 
					6a2fc4083b | ||
| 
						 | 
					f7f53943c2 | ||
| 
						 | 
					31f4d9b16c | ||
| 
						 | 
					cd4cd5eec1 | ||
| 
						 | 
					8a7eeee727 | ||
| 
						 | 
					be5d65f421 | ||
| 
						 | 
					591af3f109 | ||
| 
						 | 
					a3e0df9de1 | ||
| 
						 | 
					596699d07e | ||
| 
						 | 
					b2275b44c2 | ||
| 
						 | 
					737842fb1e | ||
| 
						 | 
					646cb2bc30 | ||
| 
						 | 
					4599bfe052 | ||
| 
						 | 
					bb85b1d4ac | 
							
								
								
									
										68
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,8 +10,76 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
## 2025-09-06
 | 
			
		||||
 | 
			
		||||
## 2025-09-05
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Tududi: Pin version to 0.80 [@vhsdream](https://github.com/vhsdream) ([#7420](https://github.com/community-scripts/ProxmoxVE/pull/7420))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - AdventureLog: Update dependencies [@tremor021](https://github.com/tremor021) ([#7404](https://github.com/community-scripts/ProxmoxVE/pull/7404))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - refactor: Enhance ScriptAccordion and Sidebar components to support selectedCategory state [@BramSuurdje](https://github.com/BramSuurdje) ([#7405](https://github.com/community-scripts/ProxmoxVE/pull/7405))
 | 
			
		||||
 | 
			
		||||
## 2025-09-04
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - fix: Syntax error in Immich scripts [@henworth](https://github.com/henworth) ([#7398](https://github.com/community-scripts/ProxmoxVE/pull/7398))
 | 
			
		||||
    - Netdata: Fix pve_check for 8 [@MickLesk](https://github.com/MickLesk) ([#7392](https://github.com/community-scripts/ProxmoxVE/pull/7392))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Immich: pin compiled photo library revisions [@vhsdream](https://github.com/vhsdream) ([#7395](https://github.com/community-scripts/ProxmoxVE/pull/7395))
 | 
			
		||||
 | 
			
		||||
## 2025-09-03
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Element-Synapse: Increase HDD size [@tremor021](https://github.com/tremor021) ([#7384](https://github.com/community-scripts/ProxmoxVE/pull/7384))
 | 
			
		||||
    - Wizarr: fix uv lock issue; use correct output suppression [@vhsdream](https://github.com/vhsdream) ([#7378](https://github.com/community-scripts/ProxmoxVE/pull/7378))
 | 
			
		||||
    - Netbox: Fix missing directory [@tremor021](https://github.com/tremor021) ([#7374](https://github.com/community-scripts/ProxmoxVE/pull/7374))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Enhanced IP-Tag installation script with interactive configuration, improved VM IP detection, and better visual indicators [@DesertGamer](https://github.com/DesertGamer) ([#7366](https://github.com/community-scripts/ProxmoxVE/pull/7366))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Fix navigation [@BramSuurdje](https://github.com/BramSuurdje) ([#7376](https://github.com/community-scripts/ProxmoxVE/pull/7376))
 | 
			
		||||
 | 
			
		||||
## 2025-09-02
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Increase default disk size for Apt-Cacher-NG [@MickLesk](https://github.com/MickLesk) ([#7352](https://github.com/community-scripts/ProxmoxVE/pull/7352))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Snipe-IT: Fix Nginx configuration [@tremor021](https://github.com/tremor021) ([#7358](https://github.com/community-scripts/ProxmoxVE/pull/7358))
 | 
			
		||||
    - booklore: remove folder before update [@MickLesk](https://github.com/MickLesk) ([#7351](https://github.com/community-scripts/ProxmoxVE/pull/7351))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Immich: bump version to 1.140.1 [@vhsdream](https://github.com/vhsdream) ([#7349](https://github.com/community-scripts/ProxmoxVE/pull/7349))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - pbs: increase note on website for ipv6 [@MickLesk](https://github.com/MickLesk) ([#7339](https://github.com/community-scripts/ProxmoxVE/pull/7339))
 | 
			
		||||
 | 
			
		||||
## 2025-09-01
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,10 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! command -v memcached >/dev/null 2>&1; then
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get install -y memcached libmemcached-tools
 | 
			
		||||
  fi
 | 
			
		||||
  if check_for_gh_release "adventurelog" "seanmorley15/adventurelog"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop adventurelog-backend
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ APP="Apt-Cacher-NG"
 | 
			
		||||
var_tags="${var_tags:-caching}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_disk="${var_disk:-10}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
@@ -20,18 +20,18 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /var ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating $APP LXC"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated $APP LXC"
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /var ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating $APP LXC"
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get -y upgrade
 | 
			
		||||
  msg_ok "Updated $APP LXC"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -41,4 +41,4 @@ 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}:3142/acng-report.html${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3142/acng-report.html${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,10 @@ function update_script() {
 | 
			
		||||
    systemctl stop booklore
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "backup old install"
 | 
			
		||||
    mv /opt/booklore /opt/booklore_bak
 | 
			
		||||
    msg_ok "backup done"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "booklore" "booklore-app/BookLore"
 | 
			
		||||
 | 
			
		||||
    msg_info "Building Frontend"
 | 
			
		||||
@@ -58,6 +62,7 @@ function update_script() {
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start booklore
 | 
			
		||||
    systemctl reload nginx
 | 
			
		||||
    rm -rf /opt/booklore_bak
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ APP="Element Synapse"
 | 
			
		||||
var_tags="${var_tags:-server}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_disk="${var_disk:-8}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								ct/immich.sh
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								ct/immich.sh
									
									
									
									
									
								
							@@ -61,7 +61,7 @@ function update_script() {
 | 
			
		||||
    done
 | 
			
		||||
    msg_ok "Image-processing libraries up to date"
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE="1.140.0"
 | 
			
		||||
  RELEASE="1.140.1"
 | 
			
		||||
  if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop immich-web
 | 
			
		||||
@@ -206,7 +206,8 @@ 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)}"
 | 
			
		||||
  # : "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}"
 | 
			
		||||
  : "${LIBJXL_REVISION:=794a5dcf0d54f9f0b20d288a12e87afb91d20dfc}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling libjxl"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
@@ -253,7 +254,8 @@ function compile_libheif() {
 | 
			
		||||
    $STD apt-get install -y libaom-dev
 | 
			
		||||
    local update="required"
 | 
			
		||||
  fi
 | 
			
		||||
  : "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
 | 
			
		||||
  # : "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
 | 
			
		||||
  : "${LIBHEIF_REVISION:=35dad50a9145332a7bfdf1ff6aef6801fb613d68}"
 | 
			
		||||
  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
 | 
			
		||||
@@ -285,7 +287,8 @@ function compile_libheif() {
 | 
			
		||||
function compile_libraw() {
 | 
			
		||||
  SOURCE=${SOURCE_DIR}/libraw
 | 
			
		||||
  local update
 | 
			
		||||
  : "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}"
 | 
			
		||||
  # : "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}"
 | 
			
		||||
  : "${LIBRAW_REVISION:=09bea31181b43e97959ee5452d91e5bc66365f1f}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling libraw"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
@@ -306,7 +309,8 @@ function compile_libraw() {
 | 
			
		||||
 | 
			
		||||
function compile_imagemagick() {
 | 
			
		||||
  SOURCE=$SOURCE_DIR/imagemagick
 | 
			
		||||
  : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/imagemagick.json)}"
 | 
			
		||||
  # : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/imagemagick.json)}"
 | 
			
		||||
  : "${IMAGEMAGICK_REVISION:=8289a3388a085ad5ae81aa6812f21554bdfd54f2}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling ImageMagick"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
@@ -326,7 +330,8 @@ function compile_imagemagick() {
 | 
			
		||||
 | 
			
		||||
function compile_libvips() {
 | 
			
		||||
  SOURCE=$SOURCE_DIR/libvips
 | 
			
		||||
  : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
 | 
			
		||||
  # : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
 | 
			
		||||
  : "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling libvips"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,9 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! grep -q "client_max_body_size[[:space:]]\+100M;" /etc/nginx/conf.d/snipeit.conf; then
 | 
			
		||||
    sed -i '/index index.php;/i \        client_max_body_size 100M;' /etc/nginx/conf.d/snipeit.conf
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "snipe-it" "snipe/snipe-it"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ function update_script() {
 | 
			
		||||
    rm -rf /opt/tududi/backend/dist
 | 
			
		||||
    msg_ok "Backup and removed Files"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "tududi" "chrisvel/tududi"
 | 
			
		||||
    fetch_and_deploy_gh_release "tududi" "chrisvel/tududi" "tarball" "v0.80" "/opt/tududi"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    cd /opt/tududi
 | 
			
		||||
 
 | 
			
		||||
@@ -45,13 +45,14 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP"
 | 
			
		||||
    cd /opt/wizarr
 | 
			
		||||
    /usr/local/bin/uv -q sync --locked
 | 
			
		||||
    $STD /usr/local/bin/uv -q run pybabel compile -d app/translations
 | 
			
		||||
    $STD /usr/local/bin/uv lock
 | 
			
		||||
    $STD /usr/local/bin/uv sync --locked
 | 
			
		||||
    $STD /usr/local/bin/uv run pybabel compile -d app/translations
 | 
			
		||||
    $STD npm --prefix app/static install
 | 
			
		||||
    $STD npm --prefix app/static run build:css
 | 
			
		||||
    mkdir -p ./.cache
 | 
			
		||||
    $STD tar -xf "$BACKUP_FILE" --directory=/
 | 
			
		||||
    $STD /usr/local/bin/uv -q run flask db upgrade
 | 
			
		||||
    $STD /usr/local/bin/uv run flask db upgrade
 | 
			
		||||
    msg_ok "Updated $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
@@ -61,7 +62,7 @@ function update_script() {
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf "$BACKUP_FILE"
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
    msg_ok "Update Successfully"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,10 @@ const nextConfig = {
 | 
			
		||||
    BASE_PATH: "ProxmoxVE",
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  eslint: {
 | 
			
		||||
    ignoreDuringBuilds: true,
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  output: "export",
 | 
			
		||||
  basePath: `/ProxmoxVE`,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 2,
 | 
			
		||||
        "hdd": 10,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "hdd": 8,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,10 @@
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Please be aware that Immich releases are pinned to specific versions until compatibility has been confirmed by the Community Scripts maintainers; as a result, the version installed by the helper script may not be the most current version of Immich",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "During installation, you will be prompted with the option to install Intel OpenVINO for hardware-accelerated machine-learning. If you opt in, increase your LXC RAM after installation, as OpenVINO is memory-intensive",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Advanced Install is only possible without root password and root SSH access, you can configure this after installation.",
 | 
			
		||||
            "text": "Advanced Install is only possible with disabled IPV6! Otherwise the installation sometimes stuck.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,23 +1,358 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "name": "moghtech/komodo",
 | 
			
		||||
    "version": "v1.19.3",
 | 
			
		||||
    "date": "2025-09-05T21:32:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homarr-labs/homarr",
 | 
			
		||||
    "version": "v1.36.1",
 | 
			
		||||
    "date": "2025-09-05T21:14:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "booklore-app/booklore",
 | 
			
		||||
    "version": "v1.2.0",
 | 
			
		||||
    "date": "2025-09-05T20:43:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "immich-app/immich",
 | 
			
		||||
    "version": "v1.141.1",
 | 
			
		||||
    "date": "2025-09-05T19:44:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gtsteffaniak/filebrowser",
 | 
			
		||||
    "version": "v0.8.4-beta",
 | 
			
		||||
    "date": "2025-09-05T19:34:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Stirling-Tools/Stirling-PDF",
 | 
			
		||||
    "version": "v1.3.2",
 | 
			
		||||
    "date": "2025-09-05T18:44:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "diced/zipline",
 | 
			
		||||
    "version": "v4.3.0",
 | 
			
		||||
    "date": "2025-09-05T18:43:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rcourtman/Pulse",
 | 
			
		||||
    "version": "v4.14.0",
 | 
			
		||||
    "date": "2025-09-05T18:28:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "henrygd/beszel",
 | 
			
		||||
    "version": "v0.12.7",
 | 
			
		||||
    "date": "2025-09-05T18:11:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Brandawg93/PeaNUT",
 | 
			
		||||
    "version": "v5.14.2",
 | 
			
		||||
    "date": "2025-09-05T17:24:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "create-fumadocs-app@15.7.9",
 | 
			
		||||
    "date": "2025-09-05T14:33:41Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wizarrrr/wizarr",
 | 
			
		||||
    "version": "2025.9.0",
 | 
			
		||||
    "date": "2025-09-05T14:21:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cross-seed/cross-seed",
 | 
			
		||||
    "version": "v6.13.2",
 | 
			
		||||
    "date": "2025-08-19T18:18:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "chrisvel/tududi",
 | 
			
		||||
    "version": "v0.80",
 | 
			
		||||
    "date": "2025-07-24T14:12:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/core",
 | 
			
		||||
    "version": "2025.9.1",
 | 
			
		||||
    "date": "2025-09-05T11:15:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
    "version": "v2.0.7",
 | 
			
		||||
    "date": "2025-09-05T10:18:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v4.1.2",
 | 
			
		||||
    "date": "2025-09-05T08:23:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.2429",
 | 
			
		||||
    "date": "2025-09-05T06:05:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "CrazyWolf13/streamlink-webui",
 | 
			
		||||
    "version": "0.6",
 | 
			
		||||
    "date": "2025-09-05T06:05:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "louislam/uptime-kuma",
 | 
			
		||||
    "version": "2.0.0-beta.2-temp",
 | 
			
		||||
    "date": "2025-03-28T08:45:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jeedom/core",
 | 
			
		||||
    "version": "4.4.19",
 | 
			
		||||
    "date": "2025-09-05T00:27:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v3.6.2",
 | 
			
		||||
    "date": "2025-07-17T12:08:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wazuh/wazuh",
 | 
			
		||||
    "version": "coverity-w36-4.13.0",
 | 
			
		||||
    "date": "2025-09-01T11:40:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "docmost/docmost",
 | 
			
		||||
    "version": "v0.23.0",
 | 
			
		||||
    "date": "2025-09-04T22:40:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/panel",
 | 
			
		||||
    "version": "v1.0.0-beta25",
 | 
			
		||||
    "date": "2025-09-04T21:42:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/wings",
 | 
			
		||||
    "version": "v1.0.0-beta17",
 | 
			
		||||
    "date": "2025-09-04T21:30:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TandoorRecipes/recipes",
 | 
			
		||||
    "version": "2.1.0",
 | 
			
		||||
    "date": "2025-09-04T20:24:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r7.0.24",
 | 
			
		||||
    "date": "2025-09-04T19:50:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Cleanuparr/Cleanuparr",
 | 
			
		||||
    "version": "v2.2.3",
 | 
			
		||||
    "date": "2025-09-04T19:24:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "HabitRPG/habitica",
 | 
			
		||||
    "version": "v5.40.1",
 | 
			
		||||
    "date": "2025-09-04T19:10:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "nightly",
 | 
			
		||||
    "date": "2025-09-04T18:29:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AdguardTeam/AdGuardHome",
 | 
			
		||||
    "version": "v0.107.65",
 | 
			
		||||
    "date": "2025-08-20T14:02:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "webmin/webmin",
 | 
			
		||||
    "version": "2.500",
 | 
			
		||||
    "date": "2025-09-04T17:44:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.11.10",
 | 
			
		||||
    "date": "2025-09-04T17:27:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.2",
 | 
			
		||||
    "date": "2025-06-26T22:08:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "booklore-app/booklore",
 | 
			
		||||
    "version": "v1.1.1",
 | 
			
		||||
    "date": "2025-09-01T22:05:26Z"
 | 
			
		||||
    "name": "NodeBB/NodeBB",
 | 
			
		||||
    "version": "v4.5.1",
 | 
			
		||||
    "date": "2025-09-04T16:02:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
    "version": "v2.0.3",
 | 
			
		||||
    "date": "2025-08-22T08:12:47Z"
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.0.15",
 | 
			
		||||
    "date": "2025-08-27T12:12:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "nightly",
 | 
			
		||||
    "date": "2025-09-01T19:23:40Z"
 | 
			
		||||
    "name": "semaphoreui/semaphore",
 | 
			
		||||
    "version": "v2.16.19",
 | 
			
		||||
    "date": "2025-09-04T14:22:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "raydak-labs/configarr",
 | 
			
		||||
    "version": "v1.15.1",
 | 
			
		||||
    "date": "2025-09-04T14:00:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "plankanban/planka",
 | 
			
		||||
    "version": "planka-1.0.4",
 | 
			
		||||
    "date": "2025-09-04T13:49:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "blakeblackshear/frigate",
 | 
			
		||||
    "version": "v0.14.1",
 | 
			
		||||
    "date": "2024-08-29T22:32:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openobserve/openobserve",
 | 
			
		||||
    "version": "v0.15.1",
 | 
			
		||||
    "date": "2025-09-04T10:37:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "esphome/esphome",
 | 
			
		||||
    "version": "2025.8.3",
 | 
			
		||||
    "date": "2025-09-04T10:09:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "emqx/emqx",
 | 
			
		||||
    "version": "v5.8.8",
 | 
			
		||||
    "date": "2025-09-04T08:35:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.3-beta.10",
 | 
			
		||||
    "date": "2025-07-15T06:07:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "actualbudget/actual",
 | 
			
		||||
    "version": "v25.9.0",
 | 
			
		||||
    "date": "2025-09-04T01:12:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hyperion-project/hyperion.ng",
 | 
			
		||||
    "version": "2.1.1",
 | 
			
		||||
    "date": "2025-06-14T17:45:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "VictoriaMetrics/VictoriaMetrics",
 | 
			
		||||
    "version": "pmm-6401-v1.125.1",
 | 
			
		||||
    "date": "2025-09-03T20:17:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Graylog2/graylog2-server",
 | 
			
		||||
    "version": "6.1.15",
 | 
			
		||||
    "date": "2025-09-03T14:51:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "glpi-project/glpi",
 | 
			
		||||
    "version": "10.0.19",
 | 
			
		||||
    "date": "2025-07-16T09:45:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Radarr/Radarr",
 | 
			
		||||
    "version": "v5.27.5.10198",
 | 
			
		||||
    "date": "2025-09-03T12:08:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "neo4j/neo4j",
 | 
			
		||||
    "version": "5.26.12",
 | 
			
		||||
    "date": "2025-09-03T12:03:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.109.2",
 | 
			
		||||
    "date": "2025-09-03T07:50:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Checkmk/checkmk",
 | 
			
		||||
    "version": "v2.4.0p11",
 | 
			
		||||
    "date": "2025-09-03T09:58:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "server/public/v0.1.17",
 | 
			
		||||
    "date": "2025-09-02T21:38:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cockpit-project/cockpit",
 | 
			
		||||
    "version": "346",
 | 
			
		||||
    "date": "2025-09-03T09:13:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.526",
 | 
			
		||||
    "date": "2025-09-02T18:44:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/cassandra",
 | 
			
		||||
    "version": "cassandra-4.1.10",
 | 
			
		||||
    "date": "2025-09-03T08:46:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crafty-controller/crafty-4",
 | 
			
		||||
    "version": "v4.5.3",
 | 
			
		||||
    "date": "2025-09-02T23:52:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "3.2.5",
 | 
			
		||||
    "date": "2025-09-02T17:25:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "netbox-community/netbox",
 | 
			
		||||
    "version": "v4.4.0",
 | 
			
		||||
    "date": "2025-09-02T17:04:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.137.0",
 | 
			
		||||
    "date": "2025-08-26T09:51:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rabbitmq/rabbitmq-server",
 | 
			
		||||
    "version": "v4.1.4",
 | 
			
		||||
    "date": "2025-09-02T14:26:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/tomcat",
 | 
			
		||||
    "version": "10.1.45",
 | 
			
		||||
    "date": "2025-09-02T12:46:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Dolibarr/dolibarr",
 | 
			
		||||
    "version": "22.0.1",
 | 
			
		||||
    "date": "2025-09-02T10:29:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cloudreve/cloudreve",
 | 
			
		||||
    "version": "4.7.0",
 | 
			
		||||
    "date": "2025-09-02T06:02:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.3.2",
 | 
			
		||||
    "date": "2025-08-19T04:08:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "paperless-ngx/paperless-ngx",
 | 
			
		||||
    "version": "v2.18.3",
 | 
			
		||||
    "date": "2025-09-02T01:16:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ErsatzTV/ErsatzTV",
 | 
			
		||||
    "version": "v25.5.0",
 | 
			
		||||
    "date": "2025-09-02T01:00:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "authelia/authelia",
 | 
			
		||||
    "version": "v4.39.8",
 | 
			
		||||
    "date": "2025-09-02T00:44:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "postgres/postgres",
 | 
			
		||||
    "version": "REL_18_RC1",
 | 
			
		||||
    "date": "2025-09-01T20:03:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "project-zot/zot",
 | 
			
		||||
@@ -29,11 +364,6 @@
 | 
			
		||||
    "version": "2.6.1",
 | 
			
		||||
    "date": "2025-09-01T19:05:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.3.2",
 | 
			
		||||
    "date": "2025-08-19T04:08:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "outline/outline",
 | 
			
		||||
    "version": "v0.87.3",
 | 
			
		||||
@@ -49,21 +379,11 @@
 | 
			
		||||
    "version": "v0.11.0",
 | 
			
		||||
    "date": "2025-09-01T16:19:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.108.2",
 | 
			
		||||
    "date": "2025-08-27T13:05:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "grafana/grafana",
 | 
			
		||||
    "version": "rrc_steady_12.2.0-17245430286.patch1",
 | 
			
		||||
    "date": "2025-09-01T14:19:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/tomcat",
 | 
			
		||||
    "version": "9.0.109",
 | 
			
		||||
    "date": "2025-09-01T12:36:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fallenbagel/jellyseerr",
 | 
			
		||||
    "version": "preview-issue-description",
 | 
			
		||||
@@ -74,81 +394,26 @@
 | 
			
		||||
    "version": "v25.3",
 | 
			
		||||
    "date": "2025-09-01T09:47:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v4.1.0",
 | 
			
		||||
    "date": "2025-09-01T12:03:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "VictoriaMetrics/VictoriaMetrics",
 | 
			
		||||
    "version": "pmm-6401-v1.125.0",
 | 
			
		||||
    "date": "2025-09-01T11:01:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "grokability/snipe-it",
 | 
			
		||||
    "version": "v8.3.1",
 | 
			
		||||
    "date": "2025-09-01T11:00:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/core",
 | 
			
		||||
    "version": "2025.8.3",
 | 
			
		||||
    "date": "2025-08-21T18:23:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crowdsecurity/crowdsec",
 | 
			
		||||
    "version": "v1.6.11",
 | 
			
		||||
    "date": "2025-07-22T12:11:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Checkmk/checkmk",
 | 
			
		||||
    "version": "v2.4.0p11-rc1",
 | 
			
		||||
    "date": "2025-09-01T07:55:46Z"
 | 
			
		||||
    "version": "v1.7.0",
 | 
			
		||||
    "date": "2025-09-01T10:10:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "readeck/readeck",
 | 
			
		||||
    "version": "0.20.1",
 | 
			
		||||
    "date": "2025-09-01T07:35:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.2390",
 | 
			
		||||
    "date": "2025-09-01T05:57:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "moghtech/komodo",
 | 
			
		||||
    "version": "v1.19.2",
 | 
			
		||||
    "date": "2025-09-01T02:33:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v3.6.2",
 | 
			
		||||
    "date": "2025-07-17T12:08:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jeedom/core",
 | 
			
		||||
    "version": "4.4.19",
 | 
			
		||||
    "date": "2025-09-01T00:27:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crafty-controller/crafty-4",
 | 
			
		||||
    "version": "v4.5.2",
 | 
			
		||||
    "date": "2025-08-31T22:21:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "YunoHost/yunohost",
 | 
			
		||||
    "version": "debian/12.1.17.1",
 | 
			
		||||
    "date": "2025-08-31T21:38:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rcourtman/Pulse",
 | 
			
		||||
    "version": "v4.12.1",
 | 
			
		||||
    "date": "2025-08-31T21:33:41Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wizarrrr/wizarr",
 | 
			
		||||
    "version": "2025.8.5",
 | 
			
		||||
    "date": "2025-08-31T17:56:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "karakeep-app/karakeep",
 | 
			
		||||
    "version": "ios/v1.8.0-1",
 | 
			
		||||
@@ -169,71 +434,26 @@
 | 
			
		||||
    "version": "v12.0.2",
 | 
			
		||||
    "date": "2025-08-31T13:15:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "fumadocs-openapi@9.3.4",
 | 
			
		||||
    "date": "2025-08-31T11:48:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.0.15",
 | 
			
		||||
    "date": "2025-08-27T12:12:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Lidarr/Lidarr",
 | 
			
		||||
    "version": "v2.13.3.4711",
 | 
			
		||||
    "date": "2025-08-28T20:06:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "authelia/authelia",
 | 
			
		||||
    "version": "v4.39.7",
 | 
			
		||||
    "date": "2025-08-31T06:43:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jhuckaby/Cronicle",
 | 
			
		||||
    "version": "v0.9.91",
 | 
			
		||||
    "date": "2025-08-30T21:49:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "immich-app/immich",
 | 
			
		||||
    "version": "v1.140.1",
 | 
			
		||||
    "date": "2025-08-30T19:46:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Brandawg93/PeaNUT",
 | 
			
		||||
    "version": "v5.14.0",
 | 
			
		||||
    "date": "2025-08-30T18:41:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bunkerity/bunkerweb",
 | 
			
		||||
    "version": "v1.6.4",
 | 
			
		||||
    "date": "2025-08-18T20:22:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "henrygd/beszel",
 | 
			
		||||
    "version": "v0.12.6",
 | 
			
		||||
    "date": "2025-08-29T21:40:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "HabitRPG/habitica",
 | 
			
		||||
    "version": "v5.39.1",
 | 
			
		||||
    "date": "2025-08-29T21:02:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.24.26",
 | 
			
		||||
    "date": "2025-08-29T20:26:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homarr-labs/homarr",
 | 
			
		||||
    "version": "v1.35.0",
 | 
			
		||||
    "date": "2025-08-29T19:14:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "emqx/emqx",
 | 
			
		||||
    "version": "e6.0.0-alpha.1",
 | 
			
		||||
    "date": "2025-08-29T13:59:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "silverbulletmd/silverbullet",
 | 
			
		||||
    "version": "2.0.0",
 | 
			
		||||
@@ -242,43 +462,13 @@
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Forceu/Gokapi",
 | 
			
		||||
    "version": "v2.1.0",
 | 
			
		||||
    "date": "2025-08-29T12:45:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "3.2.4",
 | 
			
		||||
    "date": "2025-08-29T12:19:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Graylog2/graylog2-server",
 | 
			
		||||
    "version": "7.0.0-alpha.2",
 | 
			
		||||
    "date": "2025-08-29T10:57:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "semaphoreui/semaphore",
 | 
			
		||||
    "version": "v2.16.19",
 | 
			
		||||
    "date": "2025-08-29T05:53:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openobserve/openobserve",
 | 
			
		||||
    "version": "v0.15.0",
 | 
			
		||||
    "date": "2025-08-29T03:01:23Z"
 | 
			
		||||
    "date": "2025-08-29T12:56:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "saltstack/salt",
 | 
			
		||||
    "version": "v3007.7",
 | 
			
		||||
    "date": "2025-08-29T01:19:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "esphome/esphome",
 | 
			
		||||
    "version": "2025.8.2",
 | 
			
		||||
    "date": "2025-08-29T00:38:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Dolibarr/dolibarr",
 | 
			
		||||
    "version": "21.0.3",
 | 
			
		||||
    "date": "2025-08-28T21:05:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "9001/copyparty",
 | 
			
		||||
    "version": "v1.19.7",
 | 
			
		||||
@@ -294,16 +484,6 @@
 | 
			
		||||
    "version": "0.50.11",
 | 
			
		||||
    "date": "2025-08-28T20:12:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.11.8",
 | 
			
		||||
    "date": "2025-08-27T18:43:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r7.0.24-rc0",
 | 
			
		||||
    "date": "2025-08-28T19:08:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "benjaminjonard/koillection",
 | 
			
		||||
    "version": "1.7.0",
 | 
			
		||||
@@ -334,16 +514,6 @@
 | 
			
		||||
    "version": "v0.6.26",
 | 
			
		||||
    "date": "2025-08-28T10:40:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "neo4j/neo4j",
 | 
			
		||||
    "version": "4.4.45",
 | 
			
		||||
    "date": "2025-08-28T10:12:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/cassandra",
 | 
			
		||||
    "version": "4.1.10-tentative",
 | 
			
		||||
    "date": "2025-08-28T10:02:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "garethgeorge/backrest",
 | 
			
		||||
    "version": "v1.9.2",
 | 
			
		||||
@@ -354,11 +524,6 @@
 | 
			
		||||
    "version": "1.23.3",
 | 
			
		||||
    "date": "2025-08-28T02:50:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rabbitmq/rabbitmq-server",
 | 
			
		||||
    "version": "v4.1.3",
 | 
			
		||||
    "date": "2025-08-04T12:13:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocket-id/pocket-id",
 | 
			
		||||
    "version": "v1.10.0",
 | 
			
		||||
@@ -369,16 +534,6 @@
 | 
			
		||||
    "version": "v0.37.0",
 | 
			
		||||
    "date": "2025-08-27T20:03:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gtsteffaniak/filebrowser",
 | 
			
		||||
    "version": "v0.8.3-beta",
 | 
			
		||||
    "date": "2025-08-27T18:18:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "raydak-labs/configarr",
 | 
			
		||||
    "version": "v1.15.0",
 | 
			
		||||
    "date": "2025-08-27T17:12:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v11.2.1",
 | 
			
		||||
@@ -399,46 +554,21 @@
 | 
			
		||||
    "version": "v12.0.8",
 | 
			
		||||
    "date": "2025-08-27T06:22:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "netbox-community/netbox",
 | 
			
		||||
    "version": "v4.3.7",
 | 
			
		||||
    "date": "2025-08-26T17:54:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.525",
 | 
			
		||||
    "date": "2025-08-26T14:28:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "meilisearch/meilisearch",
 | 
			
		||||
    "version": "latest",
 | 
			
		||||
    "date": "2025-08-26T14:14:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.137.0",
 | 
			
		||||
    "date": "2025-08-26T09:51:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "evcc-io/evcc",
 | 
			
		||||
    "version": "0.207.5",
 | 
			
		||||
    "date": "2025-08-26T06:57:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.3-beta.10",
 | 
			
		||||
    "date": "2025-07-15T06:07:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "documenso/documenso",
 | 
			
		||||
    "version": "v1.12.2-rc.6",
 | 
			
		||||
    "date": "2025-08-26T01:17:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hyperion-project/hyperion.ng",
 | 
			
		||||
    "version": "2.1.1",
 | 
			
		||||
    "date": "2025-06-14T17:45:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "coder/code-server",
 | 
			
		||||
    "version": "v4.103.2",
 | 
			
		||||
@@ -454,11 +584,6 @@
 | 
			
		||||
    "version": "v3.1.2",
 | 
			
		||||
    "date": "2025-08-25T18:00:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wazuh/wazuh",
 | 
			
		||||
    "version": "coverity-w35-4.13.0",
 | 
			
		||||
    "date": "2025-08-25T15:17:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sabnzbd/sabnzbd",
 | 
			
		||||
    "version": "4.5.3",
 | 
			
		||||
@@ -489,11 +614,6 @@
 | 
			
		||||
    "version": "2.1",
 | 
			
		||||
    "date": "2025-08-24T15:42:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Radarr/Radarr",
 | 
			
		||||
    "version": "v5.26.2.10099",
 | 
			
		||||
    "date": "2025-06-11T20:10:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Prowlarr/Prowlarr",
 | 
			
		||||
    "version": "v2.0.5.5160",
 | 
			
		||||
@@ -514,11 +634,6 @@
 | 
			
		||||
    "version": "v0.306.0-rc.0",
 | 
			
		||||
    "date": "2025-08-21T13:31:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TandoorRecipes/recipes",
 | 
			
		||||
    "version": "2.0.3",
 | 
			
		||||
    "date": "2025-08-23T07:08:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocketbase/pocketbase",
 | 
			
		||||
    "version": "v0.29.3",
 | 
			
		||||
@@ -529,11 +644,6 @@
 | 
			
		||||
    "version": "v2.10.2",
 | 
			
		||||
    "date": "2025-08-23T03:10:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "paperless-ngx/paperless-ngx",
 | 
			
		||||
    "version": "v2.18.2",
 | 
			
		||||
    "date": "2025-08-22T23:56:41Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "tailscale/tailscale",
 | 
			
		||||
    "version": "v1.86.5",
 | 
			
		||||
@@ -549,11 +659,6 @@
 | 
			
		||||
    "version": "version/2025.8.1",
 | 
			
		||||
    "date": "2025-08-22T14:55:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "v10.11.2",
 | 
			
		||||
    "date": "2025-08-22T06:50:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "lazy-media/Reactive-Resume",
 | 
			
		||||
    "version": "v1.2.4",
 | 
			
		||||
@@ -569,11 +674,6 @@
 | 
			
		||||
    "version": "v6.9.1",
 | 
			
		||||
    "date": "2025-08-22T04:04:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cloudreve/cloudreve",
 | 
			
		||||
    "version": "4.6.0",
 | 
			
		||||
    "date": "2025-08-22T02:21:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hargata/lubelog",
 | 
			
		||||
    "version": "v1.5.0",
 | 
			
		||||
@@ -594,21 +694,6 @@
 | 
			
		||||
    "version": "v1.4.6",
 | 
			
		||||
    "date": "2025-08-21T14:05:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "glpi-project/glpi",
 | 
			
		||||
    "version": "10.0.19",
 | 
			
		||||
    "date": "2025-07-16T09:45:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AdguardTeam/AdGuardHome",
 | 
			
		||||
    "version": "v0.107.65",
 | 
			
		||||
    "date": "2025-08-20T14:02:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cockpit-project/cockpit",
 | 
			
		||||
    "version": "345",
 | 
			
		||||
    "date": "2025-08-20T11:52:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openhab/openhab-core",
 | 
			
		||||
    "version": "4.3.7",
 | 
			
		||||
@@ -624,21 +709,11 @@
 | 
			
		||||
    "version": "v5.23.2",
 | 
			
		||||
    "date": "2025-08-19T21:24:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cross-seed/cross-seed",
 | 
			
		||||
    "version": "v6.13.2",
 | 
			
		||||
    "date": "2025-08-19T18:18:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "karlomikus/bar-assistant",
 | 
			
		||||
    "version": "v5.8.0",
 | 
			
		||||
    "date": "2025-08-19T16:46:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "chrisvel/tududi",
 | 
			
		||||
    "version": "v0.80",
 | 
			
		||||
    "date": "2025-07-24T14:12:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "oauth2-proxy/oauth2-proxy",
 | 
			
		||||
    "version": "v7.12.0",
 | 
			
		||||
@@ -689,11 +764,6 @@
 | 
			
		||||
    "version": "v0.8.3",
 | 
			
		||||
    "date": "2025-08-17T06:24:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "blakeblackshear/frigate",
 | 
			
		||||
    "version": "v0.14.1",
 | 
			
		||||
    "date": "2024-08-29T22:32:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "intri-in/manage-my-damn-life-nextjs",
 | 
			
		||||
    "version": "v0.8.0-release",
 | 
			
		||||
@@ -729,31 +799,11 @@
 | 
			
		||||
    "version": "v1.14.0",
 | 
			
		||||
    "date": "2025-08-12T13:58:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/panel",
 | 
			
		||||
    "version": "v1.0.0-beta24",
 | 
			
		||||
    "date": "2025-08-11T21:22:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/wings",
 | 
			
		||||
    "version": "v1.0.0-beta16",
 | 
			
		||||
    "date": "2025-08-11T21:19:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "postgres/postgres",
 | 
			
		||||
    "version": "REL_13_22",
 | 
			
		||||
    "date": "2025-08-11T21:10:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "FlowiseAI/Flowise",
 | 
			
		||||
    "version": "flowise@3.0.5",
 | 
			
		||||
    "date": "2025-08-11T13:01:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Cleanuparr/Cleanuparr",
 | 
			
		||||
    "version": "v2.1.6",
 | 
			
		||||
    "date": "2025-08-11T08:04:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "slskd/slskd",
 | 
			
		||||
    "version": "0.23.2",
 | 
			
		||||
@@ -764,16 +814,6 @@
 | 
			
		||||
    "version": "1012-08-09",
 | 
			
		||||
    "date": "2025-08-10T13:50:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "diced/zipline",
 | 
			
		||||
    "version": "v4.2.3",
 | 
			
		||||
    "date": "2025-08-10T05:53:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Stirling-Tools/Stirling-PDF",
 | 
			
		||||
    "version": "v1.2.0",
 | 
			
		||||
    "date": "2025-08-09T14:30:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "kimai/kimai",
 | 
			
		||||
    "version": "2.38.0",
 | 
			
		||||
@@ -804,11 +844,6 @@
 | 
			
		||||
    "version": "v25.08.1",
 | 
			
		||||
    "date": "2025-08-06T21:04:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "NodeBB/NodeBB",
 | 
			
		||||
    "version": "v4.4.6",
 | 
			
		||||
    "date": "2025-08-06T17:48:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TryGhost/Ghost-CLI",
 | 
			
		||||
    "version": "v1.28.3",
 | 
			
		||||
@@ -824,11 +859,6 @@
 | 
			
		||||
    "version": "4.7.30",
 | 
			
		||||
    "date": "2025-08-05T17:23:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ErsatzTV/ErsatzTV",
 | 
			
		||||
    "version": "v25.4.0",
 | 
			
		||||
    "date": "2025-08-05T17:10:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "binwiederhier/ntfy",
 | 
			
		||||
    "version": "v2.14.0",
 | 
			
		||||
@@ -849,11 +879,6 @@
 | 
			
		||||
    "version": "v2.7.4",
 | 
			
		||||
    "date": "2025-08-02T16:51:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "actualbudget/actual",
 | 
			
		||||
    "version": "v25.8.0",
 | 
			
		||||
    "date": "2025-08-02T16:17:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "inspircd/inspircd",
 | 
			
		||||
    "version": "v4.8.0",
 | 
			
		||||
@@ -864,11 +889,6 @@
 | 
			
		||||
    "version": "v4.2.5",
 | 
			
		||||
    "date": "2025-08-02T08:58:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "docmost/docmost",
 | 
			
		||||
    "version": "v0.22.2",
 | 
			
		||||
    "date": "2025-08-01T23:27:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "alexta69/metube",
 | 
			
		||||
    "version": "2025.07.31",
 | 
			
		||||
@@ -1089,11 +1109,6 @@
 | 
			
		||||
    "version": "v5.6.0",
 | 
			
		||||
    "date": "2025-06-18T12:19:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "webmin/webmin",
 | 
			
		||||
    "version": "2.402",
 | 
			
		||||
    "date": "2025-06-17T05:20:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TriliumNext/Notes",
 | 
			
		||||
    "version": "v0.95.0",
 | 
			
		||||
@@ -1124,21 +1139,11 @@
 | 
			
		||||
    "version": "v0.26.1",
 | 
			
		||||
    "date": "2025-06-06T11:22:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "plankanban/planka",
 | 
			
		||||
    "version": "planka-1.0.3",
 | 
			
		||||
    "date": "2025-06-04T10:26:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "C4illin/ConvertX",
 | 
			
		||||
    "version": "v0.14.1",
 | 
			
		||||
    "date": "2025-06-04T08:57:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "louislam/uptime-kuma",
 | 
			
		||||
    "version": "2.0.0-beta.2-temp",
 | 
			
		||||
    "date": "2025-03-28T08:45:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Pf2eToolsOrg/Pf2eTools",
 | 
			
		||||
    "version": "v0.9.0",
 | 
			
		||||
@@ -1159,11 +1164,6 @@
 | 
			
		||||
    "version": "v0.26.2",
 | 
			
		||||
    "date": "2025-05-22T05:24:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "CrazyWolf13/streamlink-webui",
 | 
			
		||||
    "version": "0.5",
 | 
			
		||||
    "date": "2025-05-21T20:19:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hansmi/prometheus-paperless-exporter",
 | 
			
		||||
    "version": "v0.0.8",
 | 
			
		||||
 
 | 
			
		||||
@@ -73,7 +73,13 @@ function CategoryView() {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const handleScriptClick = (scriptSlug: string) => {
 | 
			
		||||
    router.push(`/scripts?id=${scriptSlug}`);
 | 
			
		||||
    // Include category context when navigating to scripts
 | 
			
		||||
    const categoryName = selectedCategoryIndex !== null ? categories[selectedCategoryIndex]?.name : null;
 | 
			
		||||
    const queryParams = new URLSearchParams({ id: scriptSlug });
 | 
			
		||||
    if (categoryName) {
 | 
			
		||||
      queryParams.append("category", categoryName);
 | 
			
		||||
    }
 | 
			
		||||
    router.push(`/scripts?${queryParams.toString()}`);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const navigateCategory = (direction: "prev" | "next") => {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,12 +4,7 @@ import Link from "next/link";
 | 
			
		||||
 | 
			
		||||
import type { Category } from "@/lib/types";
 | 
			
		||||
 | 
			
		||||
import {
 | 
			
		||||
  Accordion,
 | 
			
		||||
  AccordionContent,
 | 
			
		||||
  AccordionItem,
 | 
			
		||||
  AccordionTrigger,
 | 
			
		||||
} from "@/components/ui/accordion";
 | 
			
		||||
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion";
 | 
			
		||||
import { formattedBadge } from "@/components/command-menu";
 | 
			
		||||
import { basePath } from "@/config/site-config";
 | 
			
		||||
import { cn } from "@/lib/utils";
 | 
			
		||||
@@ -18,14 +13,16 @@ export default function ScriptAccordion({
 | 
			
		||||
  items,
 | 
			
		||||
  selectedScript,
 | 
			
		||||
  setSelectedScript,
 | 
			
		||||
  selectedCategory,
 | 
			
		||||
  setSelectedCategory,
 | 
			
		||||
}: {
 | 
			
		||||
  items: Category[];
 | 
			
		||||
  selectedScript: string | null;
 | 
			
		||||
  setSelectedScript: (script: string | null) => void;
 | 
			
		||||
  selectedCategory: string | null;
 | 
			
		||||
  setSelectedCategory: (category: string | null) => void;
 | 
			
		||||
}) {
 | 
			
		||||
  const [expandedItem, setExpandedItem] = useState<string | undefined>(
 | 
			
		||||
    undefined,
 | 
			
		||||
  );
 | 
			
		||||
  const [expandedItem, setExpandedItem] = useState<string | undefined>(undefined);
 | 
			
		||||
  const linkRefs = useRef<{ [key: string]: HTMLAnchorElement | null }>({});
 | 
			
		||||
 | 
			
		||||
  const handleAccordionChange = (value: string | undefined) => {
 | 
			
		||||
@@ -41,15 +38,27 @@ export default function ScriptAccordion({
 | 
			
		||||
 | 
			
		||||
  useEffect(() => {
 | 
			
		||||
    if (selectedScript) {
 | 
			
		||||
      const category = items.find(category =>
 | 
			
		||||
        category.scripts.some(script => script.slug === selectedScript),
 | 
			
		||||
      );
 | 
			
		||||
      let category;
 | 
			
		||||
 | 
			
		||||
      // If we have a selected category, try to find the script in that specific category
 | 
			
		||||
      if (selectedCategory) {
 | 
			
		||||
        category = items.find(
 | 
			
		||||
          cat => cat.name === selectedCategory && cat.scripts.some(script => script.slug === selectedScript),
 | 
			
		||||
        );
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // Fallback: if no category is selected or script not found in selected category,
 | 
			
		||||
      // use the first category containing the script (backward compatibility)
 | 
			
		||||
      if (!category) {
 | 
			
		||||
        category = items.find(category => category.scripts.some(script => script.slug === selectedScript));
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (category) {
 | 
			
		||||
        setExpandedItem(category.name);
 | 
			
		||||
        handleSelected(selectedScript);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }, [selectedScript, items, handleSelected]);
 | 
			
		||||
  }, [selectedScript, selectedCategory, items, handleSelected]);
 | 
			
		||||
  return (
 | 
			
		||||
    <Accordion
 | 
			
		||||
      type="single"
 | 
			
		||||
@@ -82,10 +91,7 @@ export default function ScriptAccordion({
 | 
			
		||||
            </div>
 | 
			
		||||
            {" "}
 | 
			
		||||
          </AccordionTrigger>
 | 
			
		||||
          <AccordionContent
 | 
			
		||||
            data-state={expandedItem === category.name ? "open" : "closed"}
 | 
			
		||||
            className="pt-0"
 | 
			
		||||
          >
 | 
			
		||||
          <AccordionContent data-state={expandedItem === category.name ? "open" : "closed"} className="pt-0">
 | 
			
		||||
            {category.scripts
 | 
			
		||||
              .slice()
 | 
			
		||||
              .sort((a, b) => a.name.localeCompare(b.name))
 | 
			
		||||
@@ -94,7 +100,7 @@ export default function ScriptAccordion({
 | 
			
		||||
                  <Link
 | 
			
		||||
                    href={{
 | 
			
		||||
                      pathname: "/scripts",
 | 
			
		||||
                      query: { id: script.slug },
 | 
			
		||||
                      query: { id: script.slug, category: category.name },
 | 
			
		||||
                    }}
 | 
			
		||||
                    prefetch={false}
 | 
			
		||||
                    className={`flex cursor-pointer items-center justify-between gap-1 px-1 py-1 text-muted-foreground hover:rounded-lg hover:bg-accent/60 hover:dark:bg-accent/20 ${
 | 
			
		||||
@@ -102,7 +108,10 @@ export default function ScriptAccordion({
 | 
			
		||||
                        ? "rounded-lg bg-accent font-semibold dark:bg-accent/30 dark:text-white"
 | 
			
		||||
                        : ""
 | 
			
		||||
                    }`}
 | 
			
		||||
                    onClick={() => handleSelected(script.slug)}
 | 
			
		||||
                    onClick={() => {
 | 
			
		||||
                      handleSelected(script.slug);
 | 
			
		||||
                      setSelectedCategory(category.name);
 | 
			
		||||
                    }}
 | 
			
		||||
                    ref={(el) => {
 | 
			
		||||
                      linkRefs.current[script.slug] = el;
 | 
			
		||||
                    }}
 | 
			
		||||
@@ -113,15 +122,11 @@ export default function ScriptAccordion({
 | 
			
		||||
                        height={16}
 | 
			
		||||
                        width={16}
 | 
			
		||||
                        unoptimized
 | 
			
		||||
                        onError={e =>
 | 
			
		||||
                          ((e.currentTarget as HTMLImageElement).src
 | 
			
		||||
                            = `/${basePath}/logo.png`)}
 | 
			
		||||
                        onError={e => ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)}
 | 
			
		||||
                        alt={script.name}
 | 
			
		||||
                        className="mr-1 w-4 h-4 rounded-full"
 | 
			
		||||
                      />
 | 
			
		||||
                      <span className="flex items-center gap-2">
 | 
			
		||||
                        {script.name}
 | 
			
		||||
                      </span>
 | 
			
		||||
                      <span className="flex items-center gap-2">{script.name}</span>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    {formattedBadge(script.type)}
 | 
			
		||||
                  </Link>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,10 +8,14 @@ function Sidebar({
 | 
			
		||||
  items,
 | 
			
		||||
  selectedScript,
 | 
			
		||||
  setSelectedScript,
 | 
			
		||||
  selectedCategory,
 | 
			
		||||
  setSelectedCategory,
 | 
			
		||||
}: {
 | 
			
		||||
  items: Category[];
 | 
			
		||||
  selectedScript: string | null;
 | 
			
		||||
  setSelectedScript: (script: string | null) => void;
 | 
			
		||||
  selectedCategory: string | null;
 | 
			
		||||
  setSelectedCategory: (category: string | null) => void;
 | 
			
		||||
}) {
 | 
			
		||||
  const uniqueScripts = items.reduce((acc, category) => {
 | 
			
		||||
    for (const script of category.scripts) {
 | 
			
		||||
@@ -37,6 +41,8 @@ function Sidebar({
 | 
			
		||||
          items={items}
 | 
			
		||||
          selectedScript={selectedScript}
 | 
			
		||||
          setSelectedScript={setSelectedScript}
 | 
			
		||||
          selectedCategory={selectedCategory}
 | 
			
		||||
          setSelectedCategory={setSelectedCategory}
 | 
			
		||||
        />
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,16 +8,14 @@ import type { Category, Script } from "@/lib/types";
 | 
			
		||||
import { ScriptItem } from "@/app/scripts/_components/script-item";
 | 
			
		||||
import { fetchCategories } from "@/lib/data";
 | 
			
		||||
 | 
			
		||||
import {
 | 
			
		||||
  LatestScripts,
 | 
			
		||||
  MostViewedScripts,
 | 
			
		||||
} from "./_components/script-info-blocks";
 | 
			
		||||
import { LatestScripts, MostViewedScripts } from "./_components/script-info-blocks";
 | 
			
		||||
import Sidebar from "./_components/sidebar";
 | 
			
		||||
 | 
			
		||||
export const dynamic = "force-static";
 | 
			
		||||
 | 
			
		||||
function ScriptContent() {
 | 
			
		||||
  const [selectedScript, setSelectedScript] = useQueryState("id");
 | 
			
		||||
  const [selectedCategory, setSelectedCategory] = useQueryState("category");
 | 
			
		||||
  const [links, setLinks] = useState<Category[]>([]);
 | 
			
		||||
  const [item, setItem] = useState<Script>();
 | 
			
		||||
 | 
			
		||||
@@ -47,6 +45,8 @@ function ScriptContent() {
 | 
			
		||||
            items={links}
 | 
			
		||||
            selectedScript={selectedScript}
 | 
			
		||||
            setSelectedScript={setSelectedScript}
 | 
			
		||||
            selectedCategory={selectedCategory}
 | 
			
		||||
            setSelectedCategory={setSelectedCategory}
 | 
			
		||||
          />
 | 
			
		||||
        </div>
 | 
			
		||||
        <div className="mx-4 w-full sm:mx-0 sm:ml-4">
 | 
			
		||||
 
 | 
			
		||||
@@ -36,19 +36,24 @@ export function formattedBadge(type: string) {
 | 
			
		||||
  return null;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// random Script
 | 
			
		||||
function getRandomScript(categories: Category[]): Script | null {
 | 
			
		||||
function getRandomScript(categories: Category[], previouslySelected: Set<string> = new Set()): Script | null {
 | 
			
		||||
  const allScripts = categories.flatMap(cat => cat.scripts || []);
 | 
			
		||||
  if (allScripts.length === 0)
 | 
			
		||||
    return null;
 | 
			
		||||
  const idx = Math.floor(Math.random() * allScripts.length);
 | 
			
		||||
  return allScripts[idx];
 | 
			
		||||
 | 
			
		||||
  const availableScripts = allScripts.filter(script => !previouslySelected.has(script.slug));
 | 
			
		||||
  if (availableScripts.length === 0) {
 | 
			
		||||
    return allScripts[Math.floor(Math.random() * allScripts.length)];
 | 
			
		||||
  }
 | 
			
		||||
  const idx = Math.floor(Math.random() * availableScripts.length);
 | 
			
		||||
  return availableScripts[idx];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default function CommandMenu() {
 | 
			
		||||
function CommandMenu() {
 | 
			
		||||
  const [open, setOpen] = React.useState(false);
 | 
			
		||||
  const [links, setLinks] = React.useState<Category[]>([]);
 | 
			
		||||
  const [isLoading, setIsLoading] = React.useState(false);
 | 
			
		||||
  const [selectedScripts, setSelectedScripts] = React.useState<Set<string>>(new Set());
 | 
			
		||||
  const router = useRouter();
 | 
			
		||||
 | 
			
		||||
  const fetchSortedCategories = () => {
 | 
			
		||||
@@ -65,25 +70,26 @@ export default function CommandMenu() {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  React.useEffect(() => {
 | 
			
		||||
    const down = (e: KeyboardEvent) => {
 | 
			
		||||
    const handleKeyDown = (e: KeyboardEvent) => {
 | 
			
		||||
      if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
 | 
			
		||||
        e.preventDefault();
 | 
			
		||||
        fetchSortedCategories();
 | 
			
		||||
        setOpen(open => !open);
 | 
			
		||||
      }
 | 
			
		||||
    };
 | 
			
		||||
    document.addEventListener("keydown", down);
 | 
			
		||||
    return () => document.removeEventListener("keydown", down);
 | 
			
		||||
    document.addEventListener("keydown", handleKeyDown);
 | 
			
		||||
    return () => document.removeEventListener("keydown", handleKeyDown);
 | 
			
		||||
  }, []);
 | 
			
		||||
 | 
			
		||||
  const openRandomScript = async () => {
 | 
			
		||||
  const handleOpenRandomScript = async () => {
 | 
			
		||||
    if (links.length === 0) {
 | 
			
		||||
      setIsLoading(true);
 | 
			
		||||
      try {
 | 
			
		||||
        const categories = await fetchCategories();
 | 
			
		||||
        setLinks(categories);
 | 
			
		||||
        const randomScript = getRandomScript(categories);
 | 
			
		||||
        const randomScript = getRandomScript(categories, selectedScripts);
 | 
			
		||||
        if (randomScript) {
 | 
			
		||||
          setSelectedScripts(prev => new Set([...prev, randomScript.slug]));
 | 
			
		||||
          router.push(`/scripts?id=${randomScript.slug}`);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
@@ -92,13 +98,54 @@ export default function CommandMenu() {
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      const randomScript = getRandomScript(links);
 | 
			
		||||
      const randomScript = getRandomScript(links, selectedScripts);
 | 
			
		||||
      if (randomScript) {
 | 
			
		||||
        setSelectedScripts(prev => new Set([...prev, randomScript.slug]));
 | 
			
		||||
        router.push(`/scripts?id=${randomScript.slug}`);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const getUniqueScriptsMap = React.useCallback(() => {
 | 
			
		||||
    const scriptMap = new Map<string, { script: Script; categoryName: string }>();
 | 
			
		||||
    for (const category of links) {
 | 
			
		||||
      for (const script of category.scripts) {
 | 
			
		||||
        if (!scriptMap.has(script.slug)) {
 | 
			
		||||
          scriptMap.set(script.slug, { script, categoryName: category.name });
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return scriptMap;
 | 
			
		||||
  }, [links]);
 | 
			
		||||
 | 
			
		||||
  const getUniqueScriptsByCategory = React.useCallback(() => {
 | 
			
		||||
    const scriptMap = getUniqueScriptsMap();
 | 
			
		||||
    const categoryOrder = links.map(cat => cat.name);
 | 
			
		||||
    const grouped: Record<string, Script[]> = {};
 | 
			
		||||
 | 
			
		||||
    for (const name of categoryOrder) {
 | 
			
		||||
      grouped[name] = [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (const { script, categoryName } of scriptMap.values()) {
 | 
			
		||||
      if (grouped[categoryName]) {
 | 
			
		||||
        grouped[categoryName].push(script);
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
        grouped[categoryName] = [script];
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Object.keys(grouped).forEach((cat) => {
 | 
			
		||||
      if (grouped[cat].length === 0)
 | 
			
		||||
        delete grouped[cat];
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    return grouped;
 | 
			
		||||
  }, [getUniqueScriptsMap, links]);
 | 
			
		||||
 | 
			
		||||
  const uniqueScriptsByCategory = getUniqueScriptsByCategory();
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <>
 | 
			
		||||
      <div className="flex gap-2">
 | 
			
		||||
@@ -122,7 +169,20 @@ export default function CommandMenu() {
 | 
			
		||||
        <TooltipProvider>
 | 
			
		||||
          <Tooltip delayDuration={100}>
 | 
			
		||||
            <TooltipTrigger asChild>
 | 
			
		||||
              <Button variant="outline" size="icon" onClick={openRandomScript} disabled={isLoading} className="hidden lg:flex">
 | 
			
		||||
              <Button
 | 
			
		||||
                variant="outline"
 | 
			
		||||
                size="icon"
 | 
			
		||||
                onClick={handleOpenRandomScript}
 | 
			
		||||
                disabled={isLoading}
 | 
			
		||||
                className="hidden lg:flex"
 | 
			
		||||
                aria-label="Open Random Script"
 | 
			
		||||
                tabIndex={0}
 | 
			
		||||
                onKeyDown={(e) => {
 | 
			
		||||
                  if (e.key === "Enter" || e.key === " ") {
 | 
			
		||||
                    handleOpenRandomScript();
 | 
			
		||||
                  }
 | 
			
		||||
                }}
 | 
			
		||||
              >
 | 
			
		||||
                <Sparkles className="size-4" />
 | 
			
		||||
                <span className="sr-only">Open Random Script</span>
 | 
			
		||||
              </Button>
 | 
			
		||||
@@ -139,16 +199,24 @@ export default function CommandMenu() {
 | 
			
		||||
        <CommandInput placeholder="Search for a script..." />
 | 
			
		||||
        <CommandList>
 | 
			
		||||
          <CommandEmpty>{isLoading ? "Loading..." : "No scripts found."}</CommandEmpty>
 | 
			
		||||
          {links.map(category => (
 | 
			
		||||
            <CommandGroup key={`category:${category.name}`} heading={category.name}>
 | 
			
		||||
              {category.scripts.map(script => (
 | 
			
		||||
          {Object.entries(uniqueScriptsByCategory).map(([categoryName, scripts]) => (
 | 
			
		||||
            <CommandGroup key={`category:${categoryName}`} heading={categoryName}>
 | 
			
		||||
              {scripts.map(script => (
 | 
			
		||||
                <CommandItem
 | 
			
		||||
                  key={`script:${script.slug}`}
 | 
			
		||||
                  value={`${script.slug}-${script.name}`}
 | 
			
		||||
                  value={`${script.name}-${script.type}`}
 | 
			
		||||
                  onSelect={() => {
 | 
			
		||||
                    setOpen(false);
 | 
			
		||||
                    router.push(`/scripts?id=${script.slug}`);
 | 
			
		||||
                  }}
 | 
			
		||||
                  tabIndex={0}
 | 
			
		||||
                  aria-label={`Open script ${script.name}`}
 | 
			
		||||
                  onKeyDown={(e) => {
 | 
			
		||||
                    if (e.key === "Enter" || e.key === " ") {
 | 
			
		||||
                      setOpen(false);
 | 
			
		||||
                      router.push(`/scripts?id=${script.slug}`);
 | 
			
		||||
                    }
 | 
			
		||||
                  }}
 | 
			
		||||
                >
 | 
			
		||||
                  <div className="flex gap-2" onClick={() => setOpen(false)}>
 | 
			
		||||
                    <Image
 | 
			
		||||
@@ -172,3 +240,5 @@ export default function CommandMenu() {
 | 
			
		||||
    </>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default CommandMenu;
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,9 @@ msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  gdal-bin \
 | 
			
		||||
  libgdal-dev \
 | 
			
		||||
  git
 | 
			
		||||
  git \
 | 
			
		||||
  memcached \
 | 
			
		||||
  libmemcached-tools
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
 
 | 
			
		||||
@@ -169,7 +169,8 @@ 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)}"
 | 
			
		||||
# : "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}"
 | 
			
		||||
: "${LIBJXL_REVISION:=794a5dcf0d54f9f0b20d288a12e87afb91d20dfc}"
 | 
			
		||||
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
 | 
			
		||||
cd "$SOURCE"
 | 
			
		||||
$STD git reset --hard "$LIBJXL_REVISION"
 | 
			
		||||
@@ -204,7 +205,8 @@ cd "$STAGING_DIR"
 | 
			
		||||
rm -rf "$SOURCE"/{build,third_party}
 | 
			
		||||
 | 
			
		||||
SOURCE=${SOURCE_DIR}/libheif
 | 
			
		||||
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
 | 
			
		||||
# : "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
 | 
			
		||||
: "${LIBHEIF_REVISION:=35dad50a9145332a7bfdf1ff6aef6801fb613d68}"
 | 
			
		||||
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
 | 
			
		||||
cd "$SOURCE"
 | 
			
		||||
$STD git reset --hard "$LIBHEIF_REVISION"
 | 
			
		||||
@@ -227,7 +229,8 @@ cd "$STAGING_DIR"
 | 
			
		||||
rm -rf "$SOURCE"/build
 | 
			
		||||
 | 
			
		||||
SOURCE=${SOURCE_DIR}/libraw
 | 
			
		||||
: "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
 | 
			
		||||
# : "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
 | 
			
		||||
: "${LIBRAW_REVISION:=09bea31181b43e97959ee5452d91e5bc66365f1f}"
 | 
			
		||||
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
 | 
			
		||||
cd "$SOURCE"
 | 
			
		||||
$STD git reset --hard "$LIBRAW_REVISION"
 | 
			
		||||
@@ -240,7 +243,8 @@ $STD make clean
 | 
			
		||||
cd "$STAGING_DIR"
 | 
			
		||||
 | 
			
		||||
SOURCE=$SOURCE_DIR/imagemagick
 | 
			
		||||
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}"
 | 
			
		||||
# : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}"
 | 
			
		||||
: "${IMAGEMAGICK_REVISION:=8289a3388a085ad5ae81aa6812f21554bdfd54f2}"
 | 
			
		||||
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
 | 
			
		||||
cd "$SOURCE"
 | 
			
		||||
$STD git reset --hard "$IMAGEMAGICK_REVISION"
 | 
			
		||||
@@ -252,7 +256,8 @@ $STD make clean
 | 
			
		||||
cd "$STAGING_DIR"
 | 
			
		||||
 | 
			
		||||
SOURCE=$SOURCE_DIR/libvips
 | 
			
		||||
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
 | 
			
		||||
# : "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
 | 
			
		||||
: "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
 | 
			
		||||
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
 | 
			
		||||
cd "$SOURCE"
 | 
			
		||||
$STD git reset --hard "$LIBVIPS_REVISION"
 | 
			
		||||
@@ -280,7 +285,7 @@ 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" "tarball" "v1.140.0" "$SRC_DIR"
 | 
			
		||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.140.1" "$SRC_DIR"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing ${APPLICATION} (more patience please)"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -56,6 +56,7 @@ RELEASE=$(curl -fsSL https://api.github.com/repos/netbox-community/netbox/releas
 | 
			
		||||
curl -fsSL "https://github.com/netbox-community/netbox/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
 | 
			
		||||
$STD unzip "v${RELEASE}.zip"
 | 
			
		||||
mv /opt/netbox-"${RELEASE}"/ /opt/netbox
 | 
			
		||||
mkdir -p /opt/netbox/netbox/media
 | 
			
		||||
 | 
			
		||||
$STD adduser --system --group netbox
 | 
			
		||||
chown --recursive netbox /opt/netbox/netbox/media/
 | 
			
		||||
 
 | 
			
		||||
@@ -62,6 +62,7 @@ server {
 | 
			
		||||
        listen 80;
 | 
			
		||||
        root /opt/snipe-it/public;
 | 
			
		||||
        server_name $IPADDRESS;
 | 
			
		||||
        client_max_body_size 100M;
 | 
			
		||||
        index index.php;
 | 
			
		||||
 | 
			
		||||
        location / {
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ $STD apt-get install -y \
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="20" setup_nodejs
 | 
			
		||||
fetch_and_deploy_gh_release "tududi" "chrisvel/tududi"
 | 
			
		||||
fetch_and_deploy_gh_release "tududi" "chrisvel/tududi" "tarball" "v0.80" "/opt/tududi"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Tududi"
 | 
			
		||||
cd /opt/tududi
 | 
			
		||||
 
 | 
			
		||||
@@ -23,12 +23,13 @@ fetch_and_deploy_gh_release "wizarr" "wizarrrr/wizarr"
 | 
			
		||||
 | 
			
		||||
msg_info "Configure ${APPLICATION}"
 | 
			
		||||
cd /opt/wizarr
 | 
			
		||||
/usr/local/bin/uv -q sync --locked
 | 
			
		||||
$STD /usr/local/bin/uv -q run pybabel compile -d app/translations
 | 
			
		||||
$STD /usr/local/bin/uv lock
 | 
			
		||||
$STD /usr/local/bin/uv sync --locked
 | 
			
		||||
$STD /usr/local/bin/uv run pybabel compile -d app/translations
 | 
			
		||||
$STD npm --prefix app/static install
 | 
			
		||||
$STD npm --prefix app/static run build:css
 | 
			
		||||
mkdir -p ./.cache
 | 
			
		||||
$STD /usr/local/bin/uv -q run flask db upgrade
 | 
			
		||||
$STD /usr/local/bin/uv run flask db upgrade
 | 
			
		||||
msg_ok "Configure ${APPLICATION}"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating env, start script and service"
 | 
			
		||||
 
 | 
			
		||||
@@ -41,39 +41,37 @@ function msg_ok() {
 | 
			
		||||
 | 
			
		||||
function msg_error() { echo -e "${RD}✗ $1${CL}"; }
 | 
			
		||||
 | 
			
		||||
# This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported.
 | 
			
		||||
# Supported: Proxmox VE 8.0.x – 8.9.x and 9.0 (NOT 9.1+)
 | 
			
		||||
pve_check() {
 | 
			
		||||
  if ! command -v pveversion >/dev/null 2>&1; then
 | 
			
		||||
    msg_error "This script can only be run on a Proxmox VE host."
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  local PVE_VER
 | 
			
		||||
  PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
 | 
			
		||||
 | 
			
		||||
  # Proxmox VE 8.x: allow 8.0 – 8.9
 | 
			
		||||
  if [[ "$PVE_VER" =~ ^9\.([0-9]+)(\.[0-9]+)?$ ]]; then
 | 
			
		||||
  # Check for Proxmox VE 8.x: allow 8.0–8.9
 | 
			
		||||
  if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
 | 
			
		||||
    local MINOR="${BASH_REMATCH[1]}"
 | 
			
		||||
    if ((MINOR != 0)); then
 | 
			
		||||
      msg_error "Unsupported Proxmox VE version: $PVE_VER"
 | 
			
		||||
      msg_error "Supported versions: 8.0 – 8.9 or 9.0.x"
 | 
			
		||||
    if ((MINOR < 0 || MINOR > 9)); then
 | 
			
		||||
      msg_error "This version of Proxmox VE is not supported."
 | 
			
		||||
      msg_error "Supported: Proxmox VE version 8.0 – 8.9"
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
    return 0
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Proxmox VE 9.x: allow only 9.0
 | 
			
		||||
  if [[ "$PVE_VER" =~ ^9\.([0-9]+)$ ]]; then
 | 
			
		||||
  # Check for Proxmox VE 9.x: allow ONLY 9.0
 | 
			
		||||
  if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
 | 
			
		||||
    local MINOR="${BASH_REMATCH[1]}"
 | 
			
		||||
    if ((MINOR != 0)); then
 | 
			
		||||
      msg_error "Unsupported Proxmox VE version: $PVE_VER"
 | 
			
		||||
      msg_error "Supported versions: 8.0 – 8.9 or 9.0"
 | 
			
		||||
      msg_error "This version of Proxmox VE is not yet supported."
 | 
			
		||||
      msg_error "Supported: Proxmox VE version 9.0"
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
    return 0
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_error "Unsupported Proxmox VE version: $PVE_VER"
 | 
			
		||||
  msg_error "Supported versions: 8.0 – 8.9 or 9.0"
 | 
			
		||||
  # All other unsupported versions
 | 
			
		||||
  msg_error "This version of Proxmox VE is not supported."
 | 
			
		||||
  msg_error "Supported versions: Proxmox VE 8.0 – 8.x or 9.0"
 | 
			
		||||
  exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user