Skip to content
Merged

MeTube #9671

Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions ct/metube.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/alexta69/metube

APP="MeTube"
var_tags="${var_tags:-media;youtube}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}"
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/metube ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi

if [[ $(echo ":$PATH:" != *":/usr/local/bin:"*) ]]; then
echo -e "\nexport PATH=\"/usr/local/bin:\$PATH\"" >>~/.bashrc
source ~/.bashrc
if ! command -v deno &>/dev/null; then
export DENO_INSTALL="/usr/local"
curl -fsSL https://deno.land/install.sh | $STD sh -s -- -y
else
$STD deno upgrade
fi
fi

if check_for_gh_release "metube" "alexta69/metube"; then
msg_info "Stopping Service"
systemctl stop metube
msg_ok "Stopped Service"

msg_info "Backing up Old Installation"
if [[ -d /opt/metube_bak ]]; then
rm -rf /opt/metube_bak
fi
mv /opt/metube /opt/metube_bak
msg_ok "Backup created"

fetch_and_deploy_gh_release "metube" "alexta69/metube" "tarball" "latest"

msg_info "Building Frontend"
cd /opt/metube/ui
$STD npm install
$STD node_modules/.bin/ng build
msg_ok "Built Frontend"

PYTHON_VERSION="3.13" setup_uv

msg_info "Installing Backend Requirements"
cd /opt/metube
$STD uv sync
msg_ok "Installed Backend"

msg_info "Restoring Environment File"
if [[ -f /opt/metube_bak/.env ]]; then
cp /opt/metube_bak/.env /opt/metube/.env
fi
rm -rf /opt/metube_bak
msg_ok "Restored .env"

if grep -q 'pipenv' /etc/systemd/system/metube.service; then
msg_info "Patching systemd Service"
cat <<EOF >/etc/systemd/system/metube.service
[Unit]
Description=Metube - YouTube Downloader
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/metube
EnvironmentFile=/opt/metube/.env
ExecStart=/opt/metube/.venv/bin/python3 app/main.py
Restart=always
User=root
[Install]
WantedBy=multi-user.target
EOF
msg_ok "Patched systemd Service"
fi
$STD systemctl daemon-reload
msg_ok "Service Updated"

msg_info "Starting Service"
systemctl start metube
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}:8081${CL}"
35 changes: 35 additions & 0 deletions frontend/public/json/metube.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"name": "MeTube",
"slug": "metube",
"categories": [
11
],
"date_created": "2025-12-05",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8081,
"documentation": "https://github.com/alexta69/metube/blob/master/README.md",
"website": "https://github.com/alexta69/metube",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/metube.webp",
"config_path": "/opt/metube/.env",
"description": "MeTube allows you to download videos from YouTube and dozens of other sites.",
"install_methods": [
{
"type": "default",
"script": "ct/metube.sh",
"resources": {
"cpu": 1,
"ram": 2048,
"hdd": 10,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}
96 changes: 96 additions & 0 deletions install/metube-install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#!/usr/bin/env bash

# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/alexta69/metube

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 \
build-essential \
aria2 \
coreutils \
musl-dev \
ffmpeg
msg_ok "Installed Dependencies"

PYTHON_VERSION="3.13" setup_uv
NODE_VERSION="24" setup_nodejs

msg_info "Installing Deno"
export DENO_INSTALL="/usr/local"
curl -fsSL https://deno.land/install.sh | $STD sh -s -- -y
[[ ":$PATH:" != *":/usr/local/bin:"* ]] &&
echo -e "\nexport PATH=\"/usr/local/bin:\$PATH\"" >>~/.bashrc &&
source ~/.bashrc
msg_ok "Installed Deno"

fetch_and_deploy_gh_release "metube" "alexta69/metube" "tarball" "latest"

msg_info "Installing MeTube"
cd /opt/metube/ui
$STD npm ci
$STD node_modules/.bin/ng build --configuration production
cd /opt/metube
$STD uv sync
mkdir -p /opt/metube_downloads /opt/metube_downloads/.metube /opt/metube_downloads/music /opt/metube_downloads/videos
cat <<EOF >/opt/metube/.env
# Storage & Directories
DOWNLOAD_DIR=/opt/metube_downloads
AUDIO_DOWNLOAD_DIR=/opt/metube_downloads/music
STATE_DIR=/opt/metube_downloads/.metube
TEMP_DIR=/opt/metube_downloads

# Download Behavior
DOWNLOAD_MODE=limited
MAX_CONCURRENT_DOWNLOADS=3
DELETE_FILE_ON_TRASHCAN=false
DEFAULT_OPTION_PLAYLIST_STRICT_MODE=false
DEFAULT_OPTION_PLAYLIST_ITEM_LIMIT=0

# File Naming & yt-dlp
OUTPUT_TEMPLATE=%(title)s.%(ext)s
OUTPUT_TEMPLATE_CHAPTER=%(title)s - %(section_number)s %(section_title)s.%(ext)s
OUTPUT_TEMPLATE_PLAYLIST=%(playlist_title)s/%(title)s.%(ext)s
YTDL_OPTIONS={"trim_file_name":200,"extractor_args":{"youtube":{"player_client":["default","-tv_simply"]}}}

# Custom Directories
CUSTOM_DIRS=true
CREATE_CUSTOM_DIRS=true

# Basic Setup
DEFAULT_THEME=auto
LOGLEVEL=INFO
ENABLE_ACCESSLOG=false
EOF
msg_ok "Installed MeTube"

msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/metube.service
[Unit]
Description=Metube - YouTube Downloader
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/metube
EnvironmentFile=/opt/metube/.env
ExecStart=/opt/metube/.venv/bin/python3 app/main.py
Restart=always
User=root
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now metube
msg_ok "Created Service"

motd_ssh
customize
cleanup_lxc