Compare commits

..

29 Commits

Author SHA1 Message Date
GitHub Actions
bb55e694b2 Update .app files 2026-03-07 22:46:55 +00:00
push-app-to-main[bot]
2bb60e2cec ImmichFrame (#12653)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
Co-authored-by: MickLesk <mickey.leskowitz@gmail.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-03-07 23:46:36 +01:00
community-scripts-pr-app[bot]
f0d070b857 Update CHANGELOG.md (#12658)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-07 21:15:02 +00:00
community-scripts-pr-app[bot]
732de1a5bc Update CHANGELOG.md (#12657)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-07 21:14:52 +00:00
community-scripts-pr-app[bot]
5d7701275b Update CHANGELOG.md (#12656)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-07 21:14:39 +00:00
CanbiZ (MickLesk)
8f557e460d fix(grocy): update PHP version from 8.3 to 8.5 (#12651)
Grocy now requires PHP 8.5. Update both the install script and the
update function to use PHP 8.5 instead of 8.3.

Closes #12647
2026-03-07 22:14:29 +01:00
CanbiZ (MickLesk)
148f0121df fix: add interactive GitHub PAT prompt on rate limit / auth failure (#12652)
When a GitHub API call fails with HTTP 401 (invalid token) or HTTP 403
(rate limit exceeded), the user is now prompted interactively to enter a
GitHub Personal Access Token (PAT). The token is validated (no empty
input, no whitespace) before being set and the API call is retried.

This applies to both github_api_call() and fetch_and_deploy_gh_release().

Closes #12615
2026-03-07 22:14:18 +01:00
community-scripts-pr-app[bot]
8eb2e58891 Update CHANGELOG.md (#12655)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-07 21:13:59 +00:00
community-scripts-pr-app[bot]
3ac7216e63 Update CHANGELOG.md (#12654)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-07 21:13:39 +00:00
CanbiZ (MickLesk)
80f58e1e07 fix(papra): update repository URL to papra-hq/papra (#12650)
The Papra repository moved from CorentinTh/papra to papra-hq/papra.
Update documentation and website URLs in the JSON config to avoid 404s.

Closes #12609
2026-03-07 22:13:34 +01:00
Markus Zellner
5446706286 Check for influxdb3 installation in update_script (#12648)
Fix current check only working for influxdb 1.x and 2.x
2026-03-07 22:13:18 +01:00
community-scripts-pr-app[bot]
79ed7e4b73 Update CHANGELOG.md (#12646)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-07 18:21:27 +00:00
Sam Heinz
94d95ac5d2 Update Rdtclient to dotnet 10.0 (#12638)
* rdtclient: Upgrade aspnetcore-runtime from 9.0 to 10.0

* rdtclient: change update function to grab dotnet 10.0
2026-03-07 19:21:04 +01:00
community-scripts-pr-app[bot]
a39b457888 chore: update github-versions.json (#12645)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-07 18:06:50 +00:00
community-scripts-pr-app[bot]
94ff34d0df Update CHANGELOG.md (#12644)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-07 14:44:57 +00:00
Copilot
ff4648b7f3 fix(immich): fix update script failing to add Debian testing repo when preferences file already exists (#12631)
* Initial plan

* fix(immich): fix testing repo not being added during update when preferences file already exists

Co-authored-by: michelroegl-brunner <73236783+michelroegl-brunner@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: michelroegl-brunner <73236783+michelroegl-brunner@users.noreply.github.com>
2026-03-07 15:44:33 +01:00
community-scripts-pr-app[bot]
acedb5fb55 chore: update github-versions.json (#12643)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-07 12:08:09 +00:00
community-scripts-pr-app[bot]
4bd39e7bae chore: update github-versions.json (#12640)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-07 06:10:26 +00:00
community-scripts-pr-app[bot]
5c2cf61455 Update CHANGELOG.md (#12636)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-07 00:20:28 +00:00
community-scripts-pr-app[bot]
10b47eae33 chore: update github-versions.json (#12635)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-07 00:20:03 +00:00
community-scripts-pr-app[bot]
c61b0e766a Update CHANGELOG.md (#12629)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-06 20:54:29 +00:00
Slaviša Arežina
9ff1d088c5 Semaphore: Move from BoltDB to SQLite (#12624)
* Fix

* start

* Apply suggestion from @tremor021
2026-03-06 21:53:47 +01:00
community-scripts-pr-app[bot]
be803ced6f Update CHANGELOG.md (#12626)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-06 20:07:11 +00:00
Slaviša Arežina
5949e9e32e Fix (#12625) 2026-03-06 21:06:45 +01:00
community-scripts-pr-app[bot]
bb3276bbbd Update CHANGELOG.md (#12623)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-06 19:44:23 +00:00
Aurélien
b7a09989cb fix(node-red): restart service after update (#12621) 2026-03-06 20:43:58 +01:00
community-scripts-pr-app[bot]
039d046649 chore: update github-versions.json (#12622)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-06 18:13:22 +00:00
community-scripts-pr-app[bot]
58301651e4 Update CHANGELOG.md (#12618)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-06 15:17:25 +00:00
Tobias
b848c2d1bf wealthfolio: update cors (#12617)
* Update wealthfolio-install.sh

* Update wealthfolio.sh
2026-03-06 16:17:00 +01:00
19 changed files with 419 additions and 80 deletions

View File

@@ -410,18 +410,48 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-03-07
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Grocy: bump PHP version from 8.3 to 8.5 [@MickLesk](https://github.com/MickLesk) ([#12651](https://github.com/community-scripts/ProxmoxVE/pull/12651))
- Check for influxdb3 installation in update_script [@odin568](https://github.com/odin568) ([#12648](https://github.com/community-scripts/ProxmoxVE/pull/12648))
- Update Rdtclient to dotnet 10.0 [@asylumexp](https://github.com/asylumexp) ([#12638](https://github.com/community-scripts/ProxmoxVE/pull/12638))
- fix(immich): fix update script failing to add Debian testing repo when preferences file already exists [@Copilot](https://github.com/Copilot) ([#12631](https://github.com/community-scripts/ProxmoxVE/pull/12631))
### 💾 Core
- #### ✨ New Features
- tools: add interactive GitHub PAT prompt on rate limit / auth failure [@MickLesk](https://github.com/MickLesk) ([#12652](https://github.com/community-scripts/ProxmoxVE/pull/12652))
### 🌐 Website
- #### 📝 Script Information
- Papra: update repository URL to papra-hq/papra [@MickLesk](https://github.com/MickLesk) ([#12650](https://github.com/community-scripts/ProxmoxVE/pull/12650))
## 2026-03-06
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- RustDesk Server: Fix update script [@tremor021](https://github.com/tremor021) ([#12625](https://github.com/community-scripts/ProxmoxVE/pull/12625))
- [Node-RED] Restart service after update [@Aurelien30000](https://github.com/Aurelien30000) ([#12621](https://github.com/community-scripts/ProxmoxVE/pull/12621))
- wealthfolio: update cors [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12617](https://github.com/community-scripts/ProxmoxVE/pull/12617))
- CryptPad: Better update handling [@tremor021](https://github.com/tremor021) ([#12611](https://github.com/community-scripts/ProxmoxVE/pull/12611))
- #### ✨ New Features
- RustDesk Server: Switch to updated repository [@tremor021](https://github.com/tremor021) ([#12083](https://github.com/community-scripts/ProxmoxVE/pull/12083))
- #### 💥 Breaking Changes
- Semaphore: Move from BoltDB to SQLite [@tremor021](https://github.com/tremor021) ([#12624](https://github.com/community-scripts/ProxmoxVE/pull/12624))
## 2026-03-05
### 🆕 New Scripts

View File

@@ -31,6 +31,10 @@ function update_script() {
msg_info "Updating Node-RED"
$STD npm install -g --unsafe-perm node-red
msg_ok "Updated Node-RED"
msg_info "Restarting Node-RED"
$STD rc-service nodered restart
msg_ok "Restarted Node-RED"
msg_ok "Updated successfully!"
exit 0
}

View File

@@ -28,8 +28,8 @@ function update_script() {
exit
fi
php_ver=$(php -v | head -n 1 | awk '{print $2}')
if [[ ! $php_ver == "8.3"* ]]; then
PHP_VERSION="8.3" PHP_APACHE="YES" setup_php
if [[ ! $php_ver == "8.5"* ]]; then
PHP_VERSION="8.5" PHP_APACHE="YES" setup_php
fi
if check_for_gh_release "grocy" "grocy/grocy"; then
msg_info "Updating grocy"

6
ct/headers/immichframe Normal file
View File

@@ -0,0 +1,6 @@
____ _ __ ______
/ _/___ ___ ____ ___ (_)____/ /_ / ____/________ _____ ___ ___
/ // __ `__ \/ __ `__ \/ / ___/ __ \/ /_ / ___/ __ `/ __ `__ \/ _ \
_/ // / / / / / / / / / / / /__/ / / / __/ / / / /_/ / / / / / / __/
/___/_/ /_/ /_/_/ /_/ /_/_/\___/_/ /_/_/ /_/ \__,_/_/ /_/ /_/\___/

View File

@@ -36,9 +36,13 @@ function update_script() {
exit
fi
if [[ ! -f /etc/apt/preferences.d/preferences ]]; then
if ! grep -qE '(^|[[:space:]])testing([[:space:]]|$)' /etc/apt/sources.list.d/debian.sources 2>/dev/null; then
msg_info "Adding Debian Testing repo"
sed -i 's/ trixie-updates/ trixie-updates testing/g' /etc/apt/sources.list.d/debian.sources
if grep -q "trixie-updates" /etc/apt/sources.list.d/debian.sources 2>/dev/null; then
sed -i 's/ trixie-updates/ trixie-updates testing/g' /etc/apt/sources.list.d/debian.sources
else
sed -i '/^[[:space:]]*Suites:.*trixie/ s/$/ testing/' /etc/apt/sources.list.d/debian.sources
fi
cat <<EOF >/etc/apt/preferences.d/preferences
Package: *
Pin: release a=unstable

81
ct/immichframe.sh Normal file
View File

@@ -0,0 +1,81 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/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"
msg_info "Backing up Configuration"
cp -r /opt/immichframe/Config /tmp/immichframe_config.bak
msg_ok "Backed up Configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "immichframe" "immichFrame/ImmichFrame" "tarball" "latest" "/tmp/immichframe"
msg_info "Setting up 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 --silent
$STD npm run build
rm -rf /opt/immichframe/wwwroot/*
cp -r build/* /opt/immichframe/wwwroot
rm -rf /tmp/immichframe
msg_ok "Setup ImmichFrame"
msg_info "Restoring Configuration"
cp -r /tmp/immichframe_config.bak/* /opt/immichframe/Config/
rm -rf /tmp/immichframe_config.bak
chown -R immichframe:immichframe /opt/immichframe
msg_ok "Restored Configuration"
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}"

View File

@@ -23,7 +23,7 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/bin/influxd ]]; then
if [[ ! -f /usr/bin/influxd && ! -f /usr/bin/influxdb3 ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi

View File

@@ -39,9 +39,9 @@ function update_script() {
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
$STD apt remove --purge -y dotnet-sdk-8.0
ensure_dependencies aspnetcore-runtime-9.0
if dpkg-query -W aspnetcore-runtime-9.0 >/dev/null 2>&1; then
$STD apt remove --purge -y aspnetcore-runtime-9.0
ensure_dependencies aspnetcore-runtime-10.0
fi
rm -rf /opt/rdtc-backup

View File

@@ -38,9 +38,9 @@ function update_script() {
fi
msg_info "Stopped Service"
fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
msg_info "Starting services"

View File

@@ -28,6 +28,34 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if [[ -f /opt/semaphore/semaphore_db.bolt ]]; then
msg_warn "WARNING: Due to bugs with BoltDB database, update script will move your application"
msg_warn "to use SQLite database instead. Unfortunately, this will reset your application and make it a fresh"
msg_warn "installation. All your data will be lost!"
echo ""
read -r -p "${TAB3}Do you want to continue? (y/N): " CONFIRM
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
exit 0
else
msg_info "Moving from BoltDB to SQLite"
systemctl stop semaphore
rm -rf /opt/semaphore/semaphore_db.bolt
sed -i \
-e 's|"bolt": {|"sqlite": {|' \
-e 's|/semaphore_db.bolt"|/database.sqlite"|' \
-e '/semaphore_db.bolt/d' \
-e '/"dialect"/d' \
-e '/^ },$/a\ "dialect": "sqlite",' \
/opt/semaphore/config.json
SEM_PW=$(cat ~/semaphore.creds)
systemctl start semaphore
$STD semaphore user add --admin --login admin --email admin@helper-scripts.com --name Administrator --password "${SEM_PW}" --config /opt/semaphore/config.json
msg_ok "Moved from BoltDB to SQLite"
fi
fi
if check_for_gh_release "semaphore" "semaphoreui/semaphore"; then
msg_info "Stopping Service"
systemctl stop semaphore

View File

@@ -1,5 +1,5 @@
{
"generated": "2026-03-06T12:10:39Z",
"generated": "2026-03-07T18:06:42Z",
"versions": [
{
"slug": "2fauth",
@@ -116,9 +116,9 @@
{
"slug": "bentopdf",
"repo": "alam00000/bentopdf",
"version": "v2.4.0",
"version": "v2.4.1",
"pinned": false,
"date": "2026-03-01T14:25:43Z"
"date": "2026-03-07T09:14:39Z"
},
{
"slug": "beszel",
@@ -151,9 +151,9 @@
{
"slug": "booklore",
"repo": "booklore-app/BookLore",
"version": "v2.0.5",
"version": "v2.0.6",
"pinned": false,
"date": "2026-03-01T16:13:13Z"
"date": "2026-03-06T19:16:29Z"
},
{
"slug": "bookstack",
@@ -193,9 +193,9 @@
{
"slug": "checkmate",
"repo": "bluewave-labs/Checkmate",
"version": "v3.5.0",
"version": "v3.5.1",
"pinned": false,
"date": "2026-03-04T19:51:22Z"
"date": "2026-03-06T21:18:36Z"
},
{
"slug": "cleanuparr",
@@ -284,9 +284,9 @@
{
"slug": "discopanel",
"repo": "nickheyer/discopanel",
"version": "v2.0.0",
"version": "v2.0.1",
"pinned": false,
"date": "2026-03-06T08:19:39Z"
"date": "2026-03-07T02:43:33Z"
},
{
"slug": "dispatcharr",
@@ -438,9 +438,9 @@
{
"slug": "ghostfolio",
"repo": "ghostfolio/ghostfolio",
"version": "2.247.0",
"version": "2.248.0",
"pinned": false,
"date": "2026-03-04T07:48:00Z"
"date": "2026-03-07T17:24:24Z"
},
{
"slug": "gitea",
@@ -452,9 +452,9 @@
{
"slug": "gitea-mirror",
"repo": "RayLabsHQ/gitea-mirror",
"version": "v3.12.4",
"version": "v3.12.5",
"pinned": false,
"date": "2026-03-06T05:02:40Z"
"date": "2026-03-07T01:30:40Z"
},
{
"slug": "glance",
@@ -501,9 +501,9 @@
{
"slug": "grocy",
"repo": "grocy/grocy",
"version": "v4.5.0",
"version": "v4.6.0",
"pinned": false,
"date": "2025-03-28T19:02:22Z"
"date": "2026-03-06T17:35:19Z"
},
{
"slug": "guardian",
@@ -550,16 +550,16 @@
{
"slug": "homarr",
"repo": "homarr-labs/homarr",
"version": "v1.54.0",
"version": "v1.55.0",
"pinned": false,
"date": "2026-02-27T19:38:50Z"
"date": "2026-03-06T19:40:16Z"
},
{
"slug": "homebox",
"repo": "sysadminsmedia/homebox",
"version": "v0.24.0",
"version": "v0.24.1",
"pinned": false,
"date": "2026-03-03T16:09:55Z"
"date": "2026-03-07T15:41:21Z"
},
{
"slug": "homepage",
@@ -613,9 +613,9 @@
{
"slug": "jackett",
"repo": "Jackett/Jackett",
"version": "v0.24.1292",
"version": "v0.24.1307",
"pinned": false,
"date": "2026-03-06T05:57:21Z"
"date": "2026-03-07T05:55:30Z"
},
{
"slug": "jellystat",
@@ -641,9 +641,9 @@
{
"slug": "kapowarr",
"repo": "Casvt/Kapowarr",
"version": "V1.2.0",
"version": "V1.3.0",
"pinned": false,
"date": "2025-04-16T14:55:28Z"
"date": "2026-03-06T16:38:21Z"
},
{
"slug": "karakeep",
@@ -872,9 +872,9 @@
{
"slug": "metube",
"repo": "alexta69/metube",
"version": "2026.03.03",
"version": "2026.03.07",
"pinned": false,
"date": "2026-03-03T19:15:55Z"
"date": "2026-03-07T14:14:57Z"
},
{
"slug": "miniflux",
@@ -1145,9 +1145,9 @@
{
"slug": "pocketid",
"repo": "pocket-id/pocket-id",
"version": "v2.3.0",
"version": "v2.4.0",
"pinned": false,
"date": "2026-02-23T19:50:48Z"
"date": "2026-03-07T17:51:41Z"
},
{
"slug": "powerdns",
@@ -1229,9 +1229,9 @@
{
"slug": "pulse",
"repo": "rcourtman/Pulse",
"version": "v5.1.20",
"version": "v5.1.21",
"pinned": false,
"date": "2026-03-06T00:30:32Z"
"date": "2026-03-06T12:13:08Z"
},
{
"slug": "pve-scripts-local",
@@ -1285,9 +1285,9 @@
{
"slug": "rclone",
"repo": "rclone/rclone",
"version": "v1.73.1",
"version": "v1.73.2",
"pinned": false,
"date": "2026-02-17T18:27:21Z"
"date": "2026-03-06T20:42:26Z"
},
{
"slug": "rdtclient",
@@ -1355,9 +1355,9 @@
{
"slug": "scanopy",
"repo": "scanopy/scanopy",
"version": "v0.14.14",
"version": "v0.14.15",
"pinned": false,
"date": "2026-03-06T06:50:38Z"
"date": "2026-03-06T23:06:01Z"
},
{
"slug": "scraparr",
@@ -1411,9 +1411,9 @@
{
"slug": "silverbullet",
"repo": "silverbulletmd/silverbullet",
"version": "2.5.1",
"version": "2.5.2",
"pinned": false,
"date": "2026-03-05T15:13:22Z"
"date": "2026-03-06T12:20:58Z"
},
{
"slug": "slskd",
@@ -1467,16 +1467,16 @@
{
"slug": "sportarr",
"repo": "Sportarr/Sportarr",
"version": "v4.0.986.1061",
"version": "v4.0.988.1063",
"pinned": false,
"date": "2026-03-06T01:04:24Z"
"date": "2026-03-07T12:15:33Z"
},
{
"slug": "stirling-pdf",
"repo": "Stirling-Tools/Stirling-PDF",
"version": "v2.6.0",
"version": "v2.7.0",
"pinned": false,
"date": "2026-03-03T20:46:42Z"
"date": "2026-03-06T11:21:47Z"
},
{
"slug": "streamlink-webui",
@@ -1593,9 +1593,9 @@
{
"slug": "traefik",
"repo": "traefik/traefik",
"version": "v3.6.9",
"version": "v3.6.10",
"pinned": false,
"date": "2026-02-23T17:21:17Z"
"date": "2026-03-06T15:08:35Z"
},
{
"slug": "trilium",
@@ -1740,9 +1740,9 @@
{
"slug": "wealthfolio",
"repo": "afadil/wealthfolio",
"version": "v3.0.4",
"pinned": false,
"date": "2026-03-05T19:58:24Z"
"version": "v3.0.3",
"pinned": true,
"date": "2026-03-03T21:47:55Z"
},
{
"slug": "web-check",
@@ -1796,9 +1796,9 @@
{
"slug": "yubal",
"repo": "guillevc/yubal",
"version": "v0.6.2",
"version": "v0.6.3",
"pinned": false,
"date": "2026-02-24T15:15:46Z"
"date": "2026-03-07T03:24:05Z"
},
{
"slug": "zerobyte",

View File

@@ -0,0 +1,40 @@
{
"name": "ImmichFrame",
"slug": "immichframe",
"categories": [
13
],
"date_created": "2026-02-26",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://immichframe.dev/docs/overview",
"config_path": "/opt/immichframe/Config/Settings.yml",
"website": "https://immichframe.dev/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@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": "warning"
}
]
}

View File

@@ -9,8 +9,8 @@
"updateable": true,
"privileged": false,
"interface_port": 1221,
"documentation": "https://github.com/CorentinTh/papra",
"website": "https://github.com/CorentinTh/papra",
"documentation": "https://github.com/papra-hq/papra",
"website": "https://github.com/papra-hq/papra",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/papra.webp",
"config_path": "/opt/papra/.env",
"description": "Papra is a modern, self-hosted document management system with full-text search, OCR support, and automatic document processing. Built with Node.js and featuring a clean web interface for organizing and managing your documents.",

View File

@@ -33,7 +33,7 @@
},
"notes": [
{
"text": "This instance uses BoltDB",
"text": "This instance uses SQLite",
"type": "info"
},
{

View File

@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
$STD apt install -y apt-transport-https
msg_ok "Installed Dependencies"
PHP_VERSION="8.3" PHP_APACHE="YES" setup_php
PHP_VERSION="8.5" PHP_APACHE="YES" setup_php
fetch_and_deploy_gh_release "grocy" "grocy/grocy" "prebuild" "latest" "/var/www/html" "grocy*.zip"
msg_info "Configuring grocy"

View File

@@ -0,0 +1,84 @@
#!/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 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 "Setting up ImmichFrame"
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
$STD apt remove -y dotnet-sdk-8.0
$STD apt autoremove -y
rm -rf /tmp/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
useradd -r -s /sbin/nologin -d /opt/immichframe -M immichframe
chown -R immichframe:immichframe /opt/immichframe
msg_ok "Setup ImmichFrame"
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

View File

@@ -19,7 +19,7 @@ setup_deb822_repo \
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
"https://packages.microsoft.com/debian/13/prod/" \
"trixie"
$STD apt install -y aspnetcore-runtime-9.0
$STD apt install -y aspnetcore-runtime-10.0
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"

View File

@@ -30,11 +30,12 @@ SEM_KEY=$(openssl rand -base64 32)
SEM_PW=$(openssl rand -base64 12)
cat <<EOF >/opt/semaphore/config.json
{
"bolt": {
"host": "/opt/semaphore/semaphore_db.bolt"
"sqlite": {
"host": "/opt/semaphore/database.sqlite"
},
"dialect": "sqlite",
"tmp_path": "/opt/semaphore/tmp",
"cookie_hash": "${SEM_HASH}",
"cookie_hash": "${SEM_HASH}",
"cookie_encryption": "${SEM_ENCRYPTION}",
"access_key_encryption": "${SEM_KEY}"
}

View File

@@ -1079,6 +1079,44 @@ is_package_installed() {
dpkg-query -W -f='${Status}' "$package" 2>/dev/null | grep -q "^install ok installed$"
}
# ------------------------------------------------------------------------------
# Prompt user to enter a GitHub Personal Access Token (PAT) interactively
# Returns 0 if a valid token was provided, 1 otherwise
# ------------------------------------------------------------------------------
prompt_for_github_token() {
if [[ ! -t 0 ]]; then
return 1
fi
local reply
read -rp "${TAB}Would you like to enter a GitHub Personal Access Token (PAT)? [y/N]: " reply
reply="${reply:-n}"
if [[ ! "${reply,,}" =~ ^(y|yes)$ ]]; then
return 1
fi
local token
while true; do
read -rp "${TAB}Enter your GitHub PAT: " token
# Trim leading/trailing whitespace
token="$(echo "$token" | xargs)"
if [[ -z "$token" ]]; then
msg_warn "Token cannot be empty. Please try again."
continue
fi
if [[ "$token" =~ [[:space:]] ]]; then
msg_warn "Token must not contain spaces. Please try again."
continue
fi
break
done
export GITHUB_TOKEN="$token"
msg_ok "GitHub token has been set."
return 0
}
# ------------------------------------------------------------------------------
# GitHub API call with authentication and rate limit handling
# ------------------------------------------------------------------------------
@@ -1091,7 +1129,8 @@ github_api_call() {
local header_args=()
[[ -n "${GITHUB_TOKEN:-}" ]] && header_args=(-H "Authorization: Bearer $GITHUB_TOKEN")
for attempt in $(seq 1 $max_retries); do
local attempt=1
while ((attempt <= max_retries)); do
local http_code
http_code=$(curl -sSL -w "%{http_code}" -o "$output_file" \
-H "Accept: application/vnd.github+json" \
@@ -1108,7 +1147,11 @@ github_api_call() {
if [[ -n "${GITHUB_TOKEN:-}" ]]; then
msg_error "Your GITHUB_TOKEN appears to be invalid or expired."
else
msg_error "The repository may require authentication. Try: export GITHUB_TOKEN=\"ghp_your_token\""
msg_error "The repository may require authentication."
fi
if prompt_for_github_token; then
header_args=(-H "Authorization: Bearer $GITHUB_TOKEN")
continue
fi
return 1
;;
@@ -1118,9 +1161,16 @@ github_api_call() {
msg_warn "GitHub API rate limit, waiting ${retry_delay}s... (attempt $attempt/$max_retries)"
sleep "$retry_delay"
retry_delay=$((retry_delay * 2))
((attempt++))
continue
fi
msg_error "GitHub API rate limit exceeded (HTTP 403)."
if prompt_for_github_token; then
header_args=(-H "Authorization: Bearer $GITHUB_TOKEN")
retry_delay=2
attempt=1
continue
fi
msg_error "To increase the limit, export a GitHub token before running the script:"
msg_error " export GITHUB_TOKEN=\"ghp_your_token_here\""
return 1
@@ -1132,6 +1182,7 @@ github_api_call() {
000 | "")
if [[ $attempt -lt $max_retries ]]; then
sleep "$retry_delay"
((attempt++))
continue
fi
msg_error "GitHub API connection failed (no response)."
@@ -1141,12 +1192,14 @@ github_api_call() {
*)
if [[ $attempt -lt $max_retries ]]; then
sleep "$retry_delay"
((attempt++))
continue
fi
msg_error "GitHub API call failed (HTTP $http_code)."
return 1
;;
esac
((attempt++))
done
msg_error "GitHub API call failed after ${max_retries} attempts: ${url}"
@@ -3123,11 +3176,30 @@ function fetch_and_deploy_gh_release() {
if [[ "$http_code" == "200" ]]; then
success=true
break
elif [[ "$http_code" == "401" ]]; then
msg_error "GitHub API authentication failed (HTTP 401)."
if [[ -n "${GITHUB_TOKEN:-}" ]]; then
msg_error "Your GITHUB_TOKEN appears to be invalid or expired."
else
msg_error "The repository may require authentication."
fi
if prompt_for_github_token; then
header=(-H "Authorization: token $GITHUB_TOKEN")
continue
fi
break
elif [[ "$http_code" == "403" ]]; then
if ((attempt < max_retries)); then
msg_warn "GitHub API rate limit hit, retrying in ${retry_delay}s... (attempt $attempt/$max_retries)"
sleep "$retry_delay"
retry_delay=$((retry_delay * 2))
else
msg_error "GitHub API rate limit exceeded (HTTP 403)."
if prompt_for_github_token; then
header=(-H "Authorization: token $GITHUB_TOKEN")
retry_delay=2
attempt=0
fi
fi
else
sleep "$retry_delay"
@@ -3136,21 +3208,10 @@ function fetch_and_deploy_gh_release() {
done
if ! $success; then
if [[ "$http_code" == "401" ]]; then
msg_error "GitHub API authentication failed (HTTP 401)."
if [[ -n "${GITHUB_TOKEN:-}" ]]; then
msg_error "Your GITHUB_TOKEN appears to be invalid or expired."
else
msg_error "The repository may require authentication. Try: export GITHUB_TOKEN=\"ghp_your_token\""
fi
elif [[ "$http_code" == "403" ]]; then
msg_error "GitHub API rate limit exceeded (HTTP 403)."
msg_error "To increase the limit, export a GitHub token before running the script:"
msg_error " export GITHUB_TOKEN=\"ghp_your_token_here\""
elif [[ "$http_code" == "000" || -z "$http_code" ]]; then
if [[ "$http_code" == "000" || -z "$http_code" ]]; then
msg_error "GitHub API connection failed (no response)."
msg_error "Check your network/DNS: curl -sSL https://api.github.com/rate_limit"
else
elif [[ "$http_code" != "401" ]]; then
msg_error "Failed to fetch release metadata (HTTP $http_code)"
fi
return 1