From 39f8b3a64e39dd4f440e47dabb0aa0d8619075ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Sun, 20 Sep 2026 23:34:13 +0200 Subject: [PATCH 01/14] add: tinyMediaManager CT script --- ct/headers/tinymediamanager | 6 + ct/tinymediamanager.sh | 92 ++++++++++++++ install/tinymediamanager-install.sh | 182 ++++++++++++++++++++++++++++ json/tinymediamanager.json | 48 ++++++++ 4 files changed, 328 insertions(+) create mode 100644 ct/headers/tinymediamanager create mode 100644 ct/tinymediamanager.sh create mode 100644 install/tinymediamanager-install.sh create mode 100644 json/tinymediamanager.json diff --git a/ct/headers/tinymediamanager b/ct/headers/tinymediamanager new file mode 100644 index 0000000000..15e98caad6 --- /dev/null +++ b/ct/headers/tinymediamanager @@ -0,0 +1,6 @@ + __ _ __ ___ ___ __ ___ + / /_(_)___ __ __/ |/ /__ ____/ (_)___ _/ |/ /___ _____ ____ _____ ____ _____ + / __/ / __ \/ / / / /|_/ / _ \/ __ / / __ `/ /|_/ / __ `/ __ \/ __ `/ __ `/ _ \/ ___/ +/ /_/ / / / / /_/ / / / / __/ /_/ / / /_/ / / / / /_/ / / / / /_/ / /_/ / __/ / +\__/_/_/ /_/\__, /_/ /_/\___/\__,_/_/\__,_/_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/ + /____/ /____/ diff --git a/ct/tinymediamanager.sh b/ct/tinymediamanager.sh new file mode 100644 index 0000000000..3af6e885ac --- /dev/null +++ b/ct/tinymediamanager.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") +# Copyright (c) 2021-2026 community-scripts ORG +# Author: Borja Garduño (Borja-Garduno) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://www.tinymediamanager.org/ + +APP="tinyMediaManager" +var_tags="${var_tags:-media;library}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-12}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" # not verified on Proxmox aarch64 (upstream publishes linux-arm64.tar.xz) +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -f /opt/tinymediamanager/tinyMediaManager ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + ASSET_PATH=$(curl -fsSL https://release.tinymediamanager.org/ | + grep -oE 'v5/dist/tinyMediaManager-[0-9.]+-linux-amd64\.tar\.xz' | + head -1) + if [[ -z "${ASSET_PATH}" ]]; then + msg_error "Could not resolve the official Linux amd64 download URL." + exit 1 + fi + ASSET_URL="https://release.tinymediamanager.org/${ASSET_PATH}" + VERSION=$(basename "${ASSET_PATH}" | grep -oE '[0-9]+(\.[0-9]+)+') + CURRENT=$(cat ~/.tinymediamanager 2>/dev/null || true) + + if [[ -z "${VERSION}" ]]; then + msg_error "Could not parse tinyMediaManager version from download URL." + exit 1 + fi + + if [[ "${CURRENT}" == "${VERSION}" ]]; then + msg_ok "tinyMediaManager is already up to date (${VERSION})" + exit + fi + + msg_info "Stopping tinyMediaManager" + systemctl stop tinymediamanager x11vnc novnc + msg_ok "Stopped tinyMediaManager" + + CLEAN_INSTALL=1 fetch_and_deploy_from_url "${ASSET_URL}" /opt/tinymediamanager + if [[ ! -f /opt/tinymediamanager/tinyMediaManager ]]; then + msg_error "tinyMediaManager binary not found after deploy." + exit 1 + fi + chmod +x /opt/tinymediamanager/tinyMediaManager + cat </opt/tinymediamanager/launcher-extra.yml +javaHome: "" +jvmOpts: + - "-Dtmm.contentfolder=/opt/tinymediamanager_data" + - "-Dtmm.noupdate=true" +env: + - "_JAVA_AWT_WM_NONREPARENTING=1" +EOF + echo "${VERSION}" >~/.tinymediamanager + + msg_info "Starting tinyMediaManager" + systemctl start tinymediamanager + sleep 2 + systemctl start x11vnc novnc + msg_ok "Started tinyMediaManager" + msg_ok "Updated tinyMediaManager ${CURRENT:-unknown} -> ${VERSION}" + 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 "${GATEWAY}${BGN}http://${IP}:6080/vnc.html?resize=scale&autoconnect=true${CL}" diff --git a/install/tinymediamanager-install.sh b/install/tinymediamanager-install.sh new file mode 100644 index 0000000000..f75010db67 --- /dev/null +++ b/install/tinymediamanager-install.sh @@ -0,0 +1,182 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: Borja Garduño (Borja-Garduno) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://www.tinymediamanager.org/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y \ + xvfb \ + x11vnc \ + novnc \ + websockify \ + openbox \ + x11-xserver-utils \ + x11-utils \ + libxrender1 \ + libxtst6 \ + libxi6 \ + fonts-dejavu-core \ + xz-utils +msg_ok "Installed Dependencies" + +ASSET_PATH=$(curl -fsSL https://release.tinymediamanager.org/ | + grep -oE 'v5/dist/tinyMediaManager-[0-9.]+-linux-amd64\.tar\.xz' | + head -1) +if [[ -z "${ASSET_PATH}" ]]; then + msg_error "Could not resolve the official Linux amd64 download URL." + exit 1 +fi +ASSET_URL="https://release.tinymediamanager.org/${ASSET_PATH}" +VERSION=$(basename "${ASSET_PATH}" | grep -oE '[0-9]+(\.[0-9]+)+') + +fetch_and_deploy_from_url "${ASSET_URL}" /opt/tinymediamanager +if [[ ! -f /opt/tinymediamanager/tinyMediaManager ]]; then + msg_error "tinyMediaManager binary not found after deploy." + exit 1 +fi +chmod +x /opt/tinymediamanager/tinyMediaManager + +msg_info "Configuring tinyMediaManager" +mkdir -p /opt/tinymediamanager_data +cat </opt/tinymediamanager/launcher-extra.yml +javaHome: "" +jvmOpts: + - "-Dtmm.contentfolder=/opt/tinymediamanager_data" + - "-Dtmm.noupdate=true" +env: + - "_JAVA_AWT_WM_NONREPARENTING=1" +EOF +echo "${VERSION}" >~/.tinymediamanager +if ! mountpoint -q /media/movies; then + mkdir -p /media/movies +fi +if ! mountpoint -q /media/tvshows; then + mkdir -p /media/tvshows +fi +msg_ok "Configured tinyMediaManager" + +msg_info "Configuring Openbox" +mkdir -p /root/.config/openbox +cat <<'EOF' >/root/.config/openbox/rc.xml + + + + + true + + + +EOF +msg_ok "Configured Openbox" + +msg_info "Creating Services" +cat </etc/systemd/system/xvfb.service +[Unit] +Description=Virtual Framebuffer X Server +After=network.target + +[Service] +Type=simple +ExecStartPre=/bin/sh -c 'rm -f /tmp/.X1-lock' +ExecStart=/usr/bin/Xvfb :1 -screen 0 1280x800x24 +ExecStartPost=/bin/sh -c 'sleep 1 && DISPLAY=:1 /usr/bin/xset s off && DISPLAY=:1 /usr/bin/xset s noblank && DISPLAY=:1 /usr/bin/xset -dpms' +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/openbox.service +[Unit] +Description=Openbox Window Manager +After=xvfb.service +Requires=xvfb.service + +[Service] +Type=simple +Environment=DISPLAY=:1 +ExecStart=/usr/bin/openbox +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/tinymediamanager.service +[Unit] +Description=tinyMediaManager +After=openbox.service +Requires=openbox.service + +[Service] +Type=simple +User=root +Environment=DISPLAY=:1 +WorkingDirectory=/opt/tinymediamanager +ExecStartPre=/bin/sleep 2 +ExecStart=/opt/tinymediamanager/tinyMediaManager +Restart=on-failure +RestartSec=10 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/x11vnc.service +[Unit] +Description=x11vnc Server +After=tinymediamanager.service +Requires=xvfb.service + +[Service] +Type=simple +ExecStart=/usr/bin/x11vnc -display :1 -forever -shared -rfbport 5900 -nopw -noipv6 -xkb -noxdamage -nowf -nowcr -wait 50 -defer 50 +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/novnc.service +[Unit] +Description=noVNC WebSocket Proxy +After=x11vnc.service +Requires=x11vnc.service + +[Service] +Type=simple +ExecStart=/usr/bin/websockify --web=/usr/share/novnc 6080 localhost:5900 +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +systemctl enable -q --now xvfb +sleep 2 +systemctl enable -q --now openbox +sleep 1 +systemctl enable -q --now tinymediamanager +sleep 3 +systemctl enable -q --now x11vnc +sleep 1 +systemctl enable -q --now novnc +msg_ok "Created Services" + +motd_ssh +customize +cleanup_lxc diff --git a/json/tinymediamanager.json b/json/tinymediamanager.json new file mode 100644 index 0000000000..17e507fb42 --- /dev/null +++ b/json/tinymediamanager.json @@ -0,0 +1,48 @@ +{ + "name": "tinyMediaManager", + "slug": "tinymediamanager", + "categories": [13], + "date_created": "2026-09-20", + "type": "ct", + "updateable": true, + "privileged": false, + "architectures": ["amd64"], + "interface_port": 6080, + "documentation": "https://www.tinymediamanager.org/docs/", + "website": "https://www.tinymediamanager.org/", + "repository": "https://gitlab.com/tinyMediaManager/tinyMediaManager", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/tinymediamanager.webp", + "description": "tinyMediaManager is a media library manager for organizing and scraping metadata, artwork, and NFO files for movies and TV shows, ready for Kodi, Plex, Jellyfin and Emby. Browser access is the desktop UI via noVNC.", + "install_methods": [ + { + "type": "default", + "script": "ct/tinymediamanager.sh", + "config_path": "/opt/tinymediamanager_data", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 12, + "os": "Debian", + "version": "13" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Access is via noVNC (desktop UI streamed to the browser), not a native web app. Open http://:6080/vnc.html?resize=scale&autoconnect=true. Direct VNC is available on port 5900 (no password by default).", + "type": "info" + }, + { + "text": "Media defaults to /media/movies and /media/tvshows inside the LXC. After install, bind host storage with: pct set -mp0 /path/on/host,mp=/media/movies and pct set -mp1 /path/on/host,mp=/media/tvshows (or tools/pve/storage-share-helper.sh). On unprivileged LXCs, match host ownership/ACLs to the container UID mapping — do not chmod 777.", + "type": "info" + }, + { + "text": "Application data (settings, cache, logs, backups) is persisted in /opt/tinymediamanager_data via launcher-extra.yml (-Dtmm.contentfolder). Program files live in /opt/tinymediamanager. Built-in auto-update is disabled so updates go through the helper script.", + "type": "info" + } + ] +} From e624d12e96f3ca0c4776267cc79438ce47d8c3ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Mon, 28 Sep 2026 15:51:51 +0200 Subject: [PATCH 02/14] fix(tinymediamanager): install libmediainfo and enable legacy filechooser --- ct/tinymediamanager.sh | 1 + install/tinymediamanager-install.sh | 2 ++ 2 files changed, 3 insertions(+) diff --git a/ct/tinymediamanager.sh b/ct/tinymediamanager.sh index 3af6e885ac..5d5f240d21 100644 --- a/ct/tinymediamanager.sh +++ b/ct/tinymediamanager.sh @@ -68,6 +68,7 @@ javaHome: "" jvmOpts: - "-Dtmm.contentfolder=/opt/tinymediamanager_data" - "-Dtmm.noupdate=true" + - "-Dtmm.legacy.filechooser=true" env: - "_JAVA_AWT_WM_NONREPARENTING=1" EOF diff --git a/install/tinymediamanager-install.sh b/install/tinymediamanager-install.sh index f75010db67..e3d9869aa8 100644 --- a/install/tinymediamanager-install.sh +++ b/install/tinymediamanager-install.sh @@ -25,6 +25,7 @@ $STD apt install -y \ libxrender1 \ libxtst6 \ libxi6 \ + libmediainfo0v5 \ fonts-dejavu-core \ xz-utils msg_ok "Installed Dependencies" @@ -53,6 +54,7 @@ javaHome: "" jvmOpts: - "-Dtmm.contentfolder=/opt/tinymediamanager_data" - "-Dtmm.noupdate=true" + - "-Dtmm.legacy.filechooser=true" env: - "_JAVA_AWT_WM_NONREPARENTING=1" EOF From d6e0dc2d45c180bd2dac7db4e73de1cb2bac1118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Tue, 29 Sep 2026 12:12:02 +0200 Subject: [PATCH 03/14] fix(tinymediamanager): raise default Xvfb resolution to 1920x1080 --- install/tinymediamanager-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/tinymediamanager-install.sh b/install/tinymediamanager-install.sh index e3d9869aa8..61160202f6 100644 --- a/install/tinymediamanager-install.sh +++ b/install/tinymediamanager-install.sh @@ -90,7 +90,7 @@ After=network.target [Service] Type=simple ExecStartPre=/bin/sh -c 'rm -f /tmp/.X1-lock' -ExecStart=/usr/bin/Xvfb :1 -screen 0 1280x800x24 +ExecStart=/usr/bin/Xvfb :1 -screen 0 1920x1080x24 ExecStartPost=/bin/sh -c 'sleep 1 && DISPLAY=:1 /usr/bin/xset s off && DISPLAY=:1 /usr/bin/xset s noblank && DISPLAY=:1 /usr/bin/xset -dpms' Restart=on-failure RestartSec=5 From 4aaf1e8ea0eb0ee001cb4caf9c85c7eb5939016c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Tue, 29 Sep 2026 12:49:16 +0200 Subject: [PATCH 04/14] fix(tinymediamanager): raise default resources to 4 CPU / 4 GiB --- ct/tinymediamanager.sh | 4 ++-- json/tinymediamanager.json | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ct/tinymediamanager.sh b/ct/tinymediamanager.sh index 5d5f240d21..bb494d293b 100644 --- a/ct/tinymediamanager.sh +++ b/ct/tinymediamanager.sh @@ -9,8 +9,8 @@ source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_ APP="tinyMediaManager" var_tags="${var_tags:-media;library}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" +var_cpu="${var_cpu:-4}" +var_ram="${var_ram:-4096}" var_disk="${var_disk:-12}" var_os="${var_os:-debian}" var_version="${var_version:-13}" diff --git a/json/tinymediamanager.json b/json/tinymediamanager.json index 17e507fb42..a155c290cc 100644 --- a/json/tinymediamanager.json +++ b/json/tinymediamanager.json @@ -19,8 +19,8 @@ "script": "ct/tinymediamanager.sh", "config_path": "/opt/tinymediamanager_data", "resources": { - "cpu": 2, - "ram": 2048, + "cpu": 4, + "ram": 4096, "hdd": 12, "os": "Debian", "version": "13" @@ -40,6 +40,10 @@ "text": "Media defaults to /media/movies and /media/tvshows inside the LXC. After install, bind host storage with: pct set -mp0 /path/on/host,mp=/media/movies and pct set -mp1 /path/on/host,mp=/media/tvshows (or tools/pve/storage-share-helper.sh). On unprivileged LXCs, match host ownership/ACLs to the container UID mapping — do not chmod 777.", "type": "info" }, + { + "text": "Defaults are 4 CPU / 4096 MiB RAM. Large TV libraries (many episodes) are CPU-heavy during source updates; increase resources further if scans stay saturated.", + "type": "info" + }, { "text": "Application data (settings, cache, logs, backups) is persisted in /opt/tinymediamanager_data via launcher-extra.yml (-Dtmm.contentfolder). Program files live in /opt/tinymediamanager. Built-in auto-update is disabled so updates go through the helper script.", "type": "info" From 2bf62409c1e48e06ca1d98a995d2d99a46a35790 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Wed, 14 Oct 2026 14:34:24 +0200 Subject: [PATCH 05/14] fix(tinymediamanager): leave arm64 unset and resolve release arch Upstream ships linux-arm64; ask on aarch64 until verified on Proxmox. --- ct/tinymediamanager.sh | 6 +++--- install/tinymediamanager-install.sh | 4 ++-- json/tinymediamanager.json | 1 - 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/ct/tinymediamanager.sh b/ct/tinymediamanager.sh index bb494d293b..522729269f 100644 --- a/ct/tinymediamanager.sh +++ b/ct/tinymediamanager.sh @@ -14,7 +14,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-12}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" # not verified on Proxmox aarch64 (upstream publishes linux-arm64.tar.xz) +#var_arm64="${var_arm64:-no}" # unset = ask the user; set yes/no only when verified (upstream publishes linux-arm64.tar.xz) var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -33,10 +33,10 @@ function update_script() { fi ASSET_PATH=$(curl -fsSL https://release.tinymediamanager.org/ | - grep -oE 'v5/dist/tinyMediaManager-[0-9.]+-linux-amd64\.tar\.xz' | + grep -oE "v5/dist/tinyMediaManager-[0-9.]+-linux-$(arch_resolve amd64 arm64)\\.tar\\.xz" | head -1) if [[ -z "${ASSET_PATH}" ]]; then - msg_error "Could not resolve the official Linux amd64 download URL." + msg_error "Could not resolve the official Linux download URL." exit 1 fi ASSET_URL="https://release.tinymediamanager.org/${ASSET_PATH}" diff --git a/install/tinymediamanager-install.sh b/install/tinymediamanager-install.sh index 61160202f6..9ae60a9c8f 100644 --- a/install/tinymediamanager-install.sh +++ b/install/tinymediamanager-install.sh @@ -31,10 +31,10 @@ $STD apt install -y \ msg_ok "Installed Dependencies" ASSET_PATH=$(curl -fsSL https://release.tinymediamanager.org/ | - grep -oE 'v5/dist/tinyMediaManager-[0-9.]+-linux-amd64\.tar\.xz' | + grep -oE "v5/dist/tinyMediaManager-[0-9.]+-linux-$(arch_resolve amd64 arm64)\\.tar\\.xz" | head -1) if [[ -z "${ASSET_PATH}" ]]; then - msg_error "Could not resolve the official Linux amd64 download URL." + msg_error "Could not resolve the official Linux download URL." exit 1 fi ASSET_URL="https://release.tinymediamanager.org/${ASSET_PATH}" diff --git a/json/tinymediamanager.json b/json/tinymediamanager.json index a155c290cc..01b6a01716 100644 --- a/json/tinymediamanager.json +++ b/json/tinymediamanager.json @@ -6,7 +6,6 @@ "type": "ct", "updateable": true, "privileged": false, - "architectures": ["amd64"], "interface_port": 6080, "documentation": "https://www.tinymediamanager.org/docs/", "website": "https://www.tinymediamanager.org/", From 4e66d98a325e8514f3b07cb653989fb00da41085 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Wed, 14 Oct 2026 14:41:14 +0200 Subject: [PATCH 06/14] fix(tinymediamanager): drop redundant checks and simplify service start Rely on unit dependencies instead of staggered sleeps; let deploy failures surface via catch_errors. --- ct/tinymediamanager.sh | 13 ------------- install/tinymediamanager-install.sh | 20 +++----------------- 2 files changed, 3 insertions(+), 30 deletions(-) diff --git a/ct/tinymediamanager.sh b/ct/tinymediamanager.sh index 522729269f..0f00fea5a2 100644 --- a/ct/tinymediamanager.sh +++ b/ct/tinymediamanager.sh @@ -35,19 +35,10 @@ function update_script() { ASSET_PATH=$(curl -fsSL https://release.tinymediamanager.org/ | grep -oE "v5/dist/tinyMediaManager-[0-9.]+-linux-$(arch_resolve amd64 arm64)\\.tar\\.xz" | head -1) - if [[ -z "${ASSET_PATH}" ]]; then - msg_error "Could not resolve the official Linux download URL." - exit 1 - fi ASSET_URL="https://release.tinymediamanager.org/${ASSET_PATH}" VERSION=$(basename "${ASSET_PATH}" | grep -oE '[0-9]+(\.[0-9]+)+') CURRENT=$(cat ~/.tinymediamanager 2>/dev/null || true) - if [[ -z "${VERSION}" ]]; then - msg_error "Could not parse tinyMediaManager version from download URL." - exit 1 - fi - if [[ "${CURRENT}" == "${VERSION}" ]]; then msg_ok "tinyMediaManager is already up to date (${VERSION})" exit @@ -58,10 +49,6 @@ function update_script() { msg_ok "Stopped tinyMediaManager" CLEAN_INSTALL=1 fetch_and_deploy_from_url "${ASSET_URL}" /opt/tinymediamanager - if [[ ! -f /opt/tinymediamanager/tinyMediaManager ]]; then - msg_error "tinyMediaManager binary not found after deploy." - exit 1 - fi chmod +x /opt/tinymediamanager/tinyMediaManager cat </opt/tinymediamanager/launcher-extra.yml javaHome: "" diff --git a/install/tinymediamanager-install.sh b/install/tinymediamanager-install.sh index 9ae60a9c8f..85a262e4a0 100644 --- a/install/tinymediamanager-install.sh +++ b/install/tinymediamanager-install.sh @@ -33,18 +33,10 @@ msg_ok "Installed Dependencies" ASSET_PATH=$(curl -fsSL https://release.tinymediamanager.org/ | grep -oE "v5/dist/tinyMediaManager-[0-9.]+-linux-$(arch_resolve amd64 arm64)\\.tar\\.xz" | head -1) -if [[ -z "${ASSET_PATH}" ]]; then - msg_error "Could not resolve the official Linux download URL." - exit 1 -fi ASSET_URL="https://release.tinymediamanager.org/${ASSET_PATH}" VERSION=$(basename "${ASSET_PATH}" | grep -oE '[0-9]+(\.[0-9]+)+') fetch_and_deploy_from_url "${ASSET_URL}" /opt/tinymediamanager -if [[ ! -f /opt/tinymediamanager/tinyMediaManager ]]; then - msg_error "tinyMediaManager binary not found after deploy." - exit 1 -fi chmod +x /opt/tinymediamanager/tinyMediaManager msg_info "Configuring tinyMediaManager" @@ -168,15 +160,9 @@ RestartSec=5 WantedBy=multi-user.target EOF -systemctl enable -q --now xvfb -sleep 2 -systemctl enable -q --now openbox -sleep 1 -systemctl enable -q --now tinymediamanager -sleep 3 -systemctl enable -q --now x11vnc -sleep 1 -systemctl enable -q --now novnc +for svc in xvfb openbox tinymediamanager x11vnc novnc; do + systemctl enable -q --now "$svc" +done msg_ok "Created Services" motd_ssh From e1b1f278a5a87a4f236fdc51c6f17784dcb53835 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Wed, 14 Oct 2026 14:43:27 +0200 Subject: [PATCH 07/14] fix(tinymediamanager): trim notes and simplify media placeholders Keep /media/{movies,tvshows} as optional bind-mount targets; document contentfolder for CLEAN_INSTALL-safe updates. --- install/tinymediamanager-install.sh | 7 +------ json/tinymediamanager.json | 10 +++------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/install/tinymediamanager-install.sh b/install/tinymediamanager-install.sh index 85a262e4a0..5aff0960d7 100644 --- a/install/tinymediamanager-install.sh +++ b/install/tinymediamanager-install.sh @@ -51,12 +51,7 @@ env: - "_JAVA_AWT_WM_NONREPARENTING=1" EOF echo "${VERSION}" >~/.tinymediamanager -if ! mountpoint -q /media/movies; then - mkdir -p /media/movies -fi -if ! mountpoint -q /media/tvshows; then - mkdir -p /media/tvshows -fi +mkdir -p /media/movies /media/tvshows msg_ok "Configured tinyMediaManager" msg_info "Configuring Openbox" diff --git a/json/tinymediamanager.json b/json/tinymediamanager.json index 01b6a01716..62f6fa0e8f 100644 --- a/json/tinymediamanager.json +++ b/json/tinymediamanager.json @@ -32,19 +32,15 @@ }, "notes": [ { - "text": "Access is via noVNC (desktop UI streamed to the browser), not a native web app. Open http://:6080/vnc.html?resize=scale&autoconnect=true. Direct VNC is available on port 5900 (no password by default).", + "text": "Access is via VNC on http://:6080/vnc.html?resize=scale&autoconnect=true or on port 5900 with a VNC client.", "type": "info" }, { - "text": "Media defaults to /media/movies and /media/tvshows inside the LXC. After install, bind host storage with: pct set -mp0 /path/on/host,mp=/media/movies and pct set -mp1 /path/on/host,mp=/media/tvshows (or tools/pve/storage-share-helper.sh). On unprivileged LXCs, match host ownership/ACLs to the container UID mapping — do not chmod 777.", + "text": "Empty /media/movies and /media/tvshows folders are created as optional bind-mount targets (e.g. pct set -mp0 /path/on/host,mp=/media/movies). On unprivileged LXCs, match host ownership to the container UID mapping.", "type": "info" }, { - "text": "Defaults are 4 CPU / 4096 MiB RAM. Large TV libraries (many episodes) are CPU-heavy during source updates; increase resources further if scans stay saturated.", - "type": "info" - }, - { - "text": "Application data (settings, cache, logs, backups) is persisted in /opt/tinymediamanager_data via launcher-extra.yml (-Dtmm.contentfolder). Program files live in /opt/tinymediamanager. Built-in auto-update is disabled so updates go through the helper script.", + "text": "App data lives in /opt/tinymediamanager_data (-Dtmm.contentfolder) so CLEAN_INSTALL updates can replace /opt/tinymediamanager without wiping settings or the library. Built-in auto-update is disabled; use the helper script.", "type": "info" } ] From 0739ee946ef036afdfcaad99c347edb2ac4af1c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Tue, 20 Oct 2026 15:35:27 +0200 Subject: [PATCH 08/14] fix(tinymediamanager): use default arch_resolve and stock arm64 comment --- ct/tinymediamanager.sh | 4 ++-- install/tinymediamanager-install.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ct/tinymediamanager.sh b/ct/tinymediamanager.sh index 0f00fea5a2..99ea3aecee 100644 --- a/ct/tinymediamanager.sh +++ b/ct/tinymediamanager.sh @@ -14,7 +14,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-12}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -#var_arm64="${var_arm64:-no}" # unset = ask the user; set yes/no only when verified (upstream publishes linux-arm64.tar.xz) +#var_arm64="${var_arm64:-no}" # unset = ask the user; set yes/no only when verified var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -33,7 +33,7 @@ function update_script() { fi ASSET_PATH=$(curl -fsSL https://release.tinymediamanager.org/ | - grep -oE "v5/dist/tinyMediaManager-[0-9.]+-linux-$(arch_resolve amd64 arm64)\\.tar\\.xz" | + grep -oE "v5/dist/tinyMediaManager-[0-9.]+-linux-$(arch_resolve)\\.tar\\.xz" | head -1) ASSET_URL="https://release.tinymediamanager.org/${ASSET_PATH}" VERSION=$(basename "${ASSET_PATH}" | grep -oE '[0-9]+(\.[0-9]+)+') diff --git a/install/tinymediamanager-install.sh b/install/tinymediamanager-install.sh index 5aff0960d7..6d6d5660b4 100644 --- a/install/tinymediamanager-install.sh +++ b/install/tinymediamanager-install.sh @@ -31,7 +31,7 @@ $STD apt install -y \ msg_ok "Installed Dependencies" ASSET_PATH=$(curl -fsSL https://release.tinymediamanager.org/ | - grep -oE "v5/dist/tinyMediaManager-[0-9.]+-linux-$(arch_resolve amd64 arm64)\\.tar\\.xz" | + grep -oE "v5/dist/tinyMediaManager-[0-9.]+-linux-$(arch_resolve)\\.tar\\.xz" | head -1) ASSET_URL="https://release.tinymediamanager.org/${ASSET_PATH}" VERSION=$(basename "${ASSET_PATH}" | grep -oE '[0-9]+(\.[0-9]+)+') From 33e458b7f721bb8cc08718be1bf03ea1a73f1d8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Tue, 20 Oct 2026 15:36:12 +0200 Subject: [PATCH 09/14] fix(tinymediamanager): shorten access URL to vnc.html --- ct/tinymediamanager.sh | 2 +- json/tinymediamanager.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/tinymediamanager.sh b/ct/tinymediamanager.sh index 99ea3aecee..162812de96 100644 --- a/ct/tinymediamanager.sh +++ b/ct/tinymediamanager.sh @@ -77,4 +77,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 "${GATEWAY}${BGN}http://${IP}:6080/vnc.html?resize=scale&autoconnect=true${CL}" +echo -e "${GATEWAY}${BGN}http://${IP}:6080/vnc.html${CL}" diff --git a/json/tinymediamanager.json b/json/tinymediamanager.json index 62f6fa0e8f..99627a0bbe 100644 --- a/json/tinymediamanager.json +++ b/json/tinymediamanager.json @@ -32,7 +32,7 @@ }, "notes": [ { - "text": "Access is via VNC on http://:6080/vnc.html?resize=scale&autoconnect=true or on port 5900 with a VNC client.", + "text": "Access is via VNC on http://:6080/vnc.html or on port 5900 with a VNC client.", "type": "info" }, { From 36b4a20807570b48a57f8053261668cf32c597ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Tue, 20 Oct 2026 15:46:18 +0200 Subject: [PATCH 10/14] fix(tinymediamanager): use portable data with create_backup on update Drop contentfolder; keep data under /opt/tinymediamanager and restore it across clean deploys. --- ct/tinymediamanager.sh | 6 +++++- install/tinymediamanager-install.sh | 3 +-- json/tinymediamanager.json | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/ct/tinymediamanager.sh b/ct/tinymediamanager.sh index 162812de96..62279091ad 100644 --- a/ct/tinymediamanager.sh +++ b/ct/tinymediamanager.sh @@ -48,12 +48,16 @@ function update_script() { systemctl stop tinymediamanager x11vnc novnc msg_ok "Stopped tinyMediaManager" + create_backup /opt/tinymediamanager/data /opt/tinymediamanager/backup /opt/tinymediamanager/addons + CLEAN_INSTALL=1 fetch_and_deploy_from_url "${ASSET_URL}" /opt/tinymediamanager + restore_backup + + rm -f /opt/tinymediamanager/.userdir chmod +x /opt/tinymediamanager/tinyMediaManager cat </opt/tinymediamanager/launcher-extra.yml javaHome: "" jvmOpts: - - "-Dtmm.contentfolder=/opt/tinymediamanager_data" - "-Dtmm.noupdate=true" - "-Dtmm.legacy.filechooser=true" env: diff --git a/install/tinymediamanager-install.sh b/install/tinymediamanager-install.sh index 6d6d5660b4..f394685c25 100644 --- a/install/tinymediamanager-install.sh +++ b/install/tinymediamanager-install.sh @@ -38,13 +38,12 @@ VERSION=$(basename "${ASSET_PATH}" | grep -oE '[0-9]+(\.[0-9]+)+') fetch_and_deploy_from_url "${ASSET_URL}" /opt/tinymediamanager chmod +x /opt/tinymediamanager/tinyMediaManager +rm -f /opt/tinymediamanager/.userdir msg_info "Configuring tinyMediaManager" -mkdir -p /opt/tinymediamanager_data cat </opt/tinymediamanager/launcher-extra.yml javaHome: "" jvmOpts: - - "-Dtmm.contentfolder=/opt/tinymediamanager_data" - "-Dtmm.noupdate=true" - "-Dtmm.legacy.filechooser=true" env: diff --git a/json/tinymediamanager.json b/json/tinymediamanager.json index 99627a0bbe..75986ed36b 100644 --- a/json/tinymediamanager.json +++ b/json/tinymediamanager.json @@ -16,7 +16,7 @@ { "type": "default", "script": "ct/tinymediamanager.sh", - "config_path": "/opt/tinymediamanager_data", + "config_path": "/opt/tinymediamanager/data", "resources": { "cpu": 4, "ram": 4096, @@ -40,7 +40,7 @@ "type": "info" }, { - "text": "App data lives in /opt/tinymediamanager_data (-Dtmm.contentfolder) so CLEAN_INSTALL updates can replace /opt/tinymediamanager without wiping settings or the library. Built-in auto-update is disabled; use the helper script.", + "text": "Portable layout: settings/library live under /opt/tinymediamanager (data/, backup/, …). Updates use create_backup/restore_backup around a clean deploy. Built-in auto-update is disabled; use the helper script.", "type": "info" } ] From 177e803c7b72675ca06bdc67de24623368c961ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Tue, 20 Oct 2026 15:52:03 +0200 Subject: [PATCH 11/14] fix(tinymediamanager): preserve launcher-extra.yml across updates Back it up with app data and stop rewriting it on every clean deploy. --- ct/tinymediamanager.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ct/tinymediamanager.sh b/ct/tinymediamanager.sh index 62279091ad..1bf15c4cd8 100644 --- a/ct/tinymediamanager.sh +++ b/ct/tinymediamanager.sh @@ -48,14 +48,19 @@ function update_script() { systemctl stop tinymediamanager x11vnc novnc msg_ok "Stopped tinyMediaManager" - create_backup /opt/tinymediamanager/data /opt/tinymediamanager/backup /opt/tinymediamanager/addons + create_backup \ + /opt/tinymediamanager/data \ + /opt/tinymediamanager/backup \ + /opt/tinymediamanager/addons \ + /opt/tinymediamanager/launcher-extra.yml CLEAN_INSTALL=1 fetch_and_deploy_from_url "${ASSET_URL}" /opt/tinymediamanager restore_backup rm -f /opt/tinymediamanager/.userdir chmod +x /opt/tinymediamanager/tinyMediaManager - cat </opt/tinymediamanager/launcher-extra.yml + if [[ ! -f /opt/tinymediamanager/launcher-extra.yml ]]; then + cat </opt/tinymediamanager/launcher-extra.yml javaHome: "" jvmOpts: - "-Dtmm.noupdate=true" @@ -63,6 +68,7 @@ jvmOpts: env: - "_JAVA_AWT_WM_NONREPARENTING=1" EOF + fi echo "${VERSION}" >~/.tinymediamanager msg_info "Starting tinyMediaManager" From 8ec534cf3d184e69fa001c34da58d2da1df38494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Tue, 20 Oct 2026 15:53:41 +0200 Subject: [PATCH 12/14] fix(tinymediamanager): install packages via ensure_dependencies --- install/tinymediamanager-install.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/install/tinymediamanager-install.sh b/install/tinymediamanager-install.sh index f394685c25..31c560123f 100644 --- a/install/tinymediamanager-install.sh +++ b/install/tinymediamanager-install.sh @@ -13,8 +13,7 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ +ensure_dependencies \ xvfb \ x11vnc \ novnc \ @@ -28,7 +27,6 @@ $STD apt install -y \ libmediainfo0v5 \ fonts-dejavu-core \ xz-utils -msg_ok "Installed Dependencies" ASSET_PATH=$(curl -fsSL https://release.tinymediamanager.org/ | grep -oE "v5/dist/tinyMediaManager-[0-9.]+-linux-$(arch_resolve)\\.tar\\.xz" | From f862dabfa979efcba6e6c0724947ffb868f468f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Tue, 20 Oct 2026 16:25:37 +0200 Subject: [PATCH 13/14] fix(tinymediamanager): default Java heap to 2 GiB for large libraries Portable TMM ships -Xmx512m; that stalls episode load on big TV DBs. --- ct/tinymediamanager.sh | 1 + install/tinymediamanager-install.sh | 1 + json/tinymediamanager.json | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/ct/tinymediamanager.sh b/ct/tinymediamanager.sh index 1bf15c4cd8..482cc58a91 100644 --- a/ct/tinymediamanager.sh +++ b/ct/tinymediamanager.sh @@ -63,6 +63,7 @@ function update_script() { cat </opt/tinymediamanager/launcher-extra.yml javaHome: "" jvmOpts: + - "-Xmx2048m" - "-Dtmm.noupdate=true" - "-Dtmm.legacy.filechooser=true" env: diff --git a/install/tinymediamanager-install.sh b/install/tinymediamanager-install.sh index 31c560123f..1b84f9d6f7 100644 --- a/install/tinymediamanager-install.sh +++ b/install/tinymediamanager-install.sh @@ -42,6 +42,7 @@ msg_info "Configuring tinyMediaManager" cat </opt/tinymediamanager/launcher-extra.yml javaHome: "" jvmOpts: + - "-Xmx2048m" - "-Dtmm.noupdate=true" - "-Dtmm.legacy.filechooser=true" env: diff --git a/json/tinymediamanager.json b/json/tinymediamanager.json index 75986ed36b..e46c5e612b 100644 --- a/json/tinymediamanager.json +++ b/json/tinymediamanager.json @@ -40,7 +40,7 @@ "type": "info" }, { - "text": "Portable layout: settings/library live under /opt/tinymediamanager (data/, backup/, …). Updates use create_backup/restore_backup around a clean deploy. Built-in auto-update is disabled; use the helper script.", + "text": "Portable layout: settings/library live under /opt/tinymediamanager (data/, backup/, …). Updates use create_backup/restore_backup around a clean deploy. Java heap defaults to -Xmx2048m in launcher-extra.yml (raise it there for very large libraries). Built-in auto-update is disabled; use the helper script.", "type": "info" } ] From f78f9bc358d1565fef8b9760a3b0f33dcdf4f0b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Gardu=C3=B1o?= Date: Tue, 20 Oct 2026 16:51:29 +0200 Subject: [PATCH 14/14] fix(tinymediamanager): maximize only normal windows in Openbox Leave Swing dialogs resizable so TMM can remember their size. --- install/tinymediamanager-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/tinymediamanager-install.sh b/install/tinymediamanager-install.sh index 1b84f9d6f7..9a8d7e1a11 100644 --- a/install/tinymediamanager-install.sh +++ b/install/tinymediamanager-install.sh @@ -58,7 +58,7 @@ cat <<'EOF' >/root/.config/openbox/rc.xml - + true