From ad48c14cf3330b98f060b451ca44f929800257ce Mon Sep 17 00:00:00 2001 From: Matthew Stern Date: Sun, 25 Jan 2026 18:01:44 -0500 Subject: [PATCH] feat: add isponsorblocktv --- ct/isponsorblocktv.sh | 41 +++++++++ frontend/public/json/isponsorblocktv.json | 44 ++++++++++ install/isponsorblocktv-install.sh | 102 ++++++++++++++++++++++ 3 files changed, 187 insertions(+) create mode 100644 ct/isponsorblocktv.sh create mode 100644 frontend/public/json/isponsorblocktv.json create mode 100644 install/isponsorblocktv-install.sh diff --git a/ct/isponsorblocktv.sh b/ct/isponsorblocktv.sh new file mode 100644 index 000000000..c4b717339 --- /dev/null +++ b/ct/isponsorblocktv.sh @@ -0,0 +1,41 @@ +#!/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: Matthew Stern +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/dmunozv04/iSponsorBlockTV + +APP="iSponsorBlockTV" +var_tags="${var_tags:-media;automation}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-1024}" +var_disk="${var_disk:-4}" +var_os="${var_os:-debian}" +var_version="${var_version:-12}" +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/isponsorblocktv ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_error "Currently we don't provide an update function for ${APP}." + 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} Run the setup wizard inside the container with:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}iSponsorBlockTV setup${CL}" diff --git a/frontend/public/json/isponsorblocktv.json b/frontend/public/json/isponsorblocktv.json new file mode 100644 index 000000000..71f82fb99 --- /dev/null +++ b/frontend/public/json/isponsorblocktv.json @@ -0,0 +1,44 @@ +{ + "name": "iSponsorBlockTV", + "slug": "isponsorblocktv", + "categories": [ + 13 + ], + "date_created": "2026-01-25", + "type": "ct", + "updateable": false, + "privileged": false, + "interface_port": null, + "documentation": "https://github.com/dmunozv04/iSponsorBlockTV/wiki", + "website": "https://github.com/dmunozv04/iSponsorBlockTV", + "logo": null, + "config_path": "/var/lib/isponsorblocktv/config.json", + "description": "iSponsorBlockTV connects to YouTube TV clients and automatically skips SponsorBlock segments, mutes ads, and presses the Skip Ad button when available.", + "install_methods": [ + { + "type": "default", + "script": "ct/isponsorblocktv.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "No web UI; run `iSponsorBlockTV setup` inside the container to configure.", + "type": "info" + }, + { + "text": "SSDP auto-discovery requires multicast on your bridge; manual pairing works without it.", + "type": "info" + } + ] +} diff --git a/install/isponsorblocktv-install.sh b/install/isponsorblocktv-install.sh new file mode 100644 index 000000000..17ebe5652 --- /dev/null +++ b/install/isponsorblocktv-install.sh @@ -0,0 +1,102 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: Matthew Stern +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/dmunozv04/iSponsorBlockTV + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +INSTALL_DIR="/opt/isponsorblocktv" +DATA_DIR="/var/lib/isponsorblocktv" +SERVICE_USER="isponsorblocktv" + +msg_info "Installing Dependencies" +$STD apt-get install -y \ + python3 \ + python3-venv \ + python3-pip +msg_ok "Installed Dependencies" + +msg_info "Downloading iSponsorBlockTV" +fetch_and_deploy_gh_release "isponsorblocktv" "dmunozv04/iSponsorBlockTV" "tarball" "latest" "$INSTALL_DIR" +msg_ok "Downloaded iSponsorBlockTV" + +msg_info "Setting up iSponsorBlockTV" +python3 -m venv "$INSTALL_DIR/venv" +$STD "$INSTALL_DIR/venv/bin/pip" install --upgrade pip +$STD "$INSTALL_DIR/venv/bin/pip" install "$INSTALL_DIR" +msg_ok "Set up iSponsorBlockTV" + +msg_info "Creating service user and data directory" +if ! id "$SERVICE_USER" &>/dev/null; then + useradd --system --home "$DATA_DIR" --create-home "$SERVICE_USER" +fi +install -d -o "$SERVICE_USER" -g "$SERVICE_USER" "$DATA_DIR" +chown -R "$SERVICE_USER":"$SERVICE_USER" "$INSTALL_DIR" +msg_ok "Created service user and data directory" + +msg_info "Creating Service" +cat </etc/systemd/system/isponsorblocktv.service +[Unit] +Description=iSponsorBlockTV +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +User=$SERVICE_USER +Group=$SERVICE_USER +WorkingDirectory=$INSTALL_DIR +Environment=iSPBTV_data_dir=$DATA_DIR +ExecStart=$INSTALL_DIR/venv/bin/iSponsorBlockTV +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOT +systemctl enable -q --now isponsorblocktv +msg_ok "Created Service" + +msg_info "Creating CLI wrapper" +install -d /usr/local/bin +cat <<'EOT' >/usr/local/bin/iSponsorBlockTV +#!/usr/bin/env bash +export iSPBTV_data_dir="/var/lib/isponsorblocktv" + +set +e +/opt/isponsorblocktv/venv/bin/iSponsorBlockTV "$@" +status=$? +set -e + +case "${1:-}" in + setup|setup-cli) + systemctl restart isponsorblocktv >/dev/null 2>&1 || true + ;; +esac + +exit $status +EOT +chmod +x /usr/local/bin/iSponsorBlockTV +ln -sf /usr/local/bin/iSponsorBlockTV /usr/bin/iSponsorBlockTV +msg_ok "Created CLI wrapper" + +msg_info "Setting default data dir for shells" +cat <<'EOT' >/etc/profile.d/isponsorblocktv.sh +export iSPBTV_data_dir="/var/lib/isponsorblocktv" +EOT +if ! grep -q '^iSPBTV_data_dir=' /etc/environment 2>/dev/null; then + echo 'iSPBTV_data_dir=/var/lib/isponsorblocktv' >>/etc/environment +fi +msg_ok "Set default data dir for shells" + +motd_ssh +customize +cleanup_lxc