What makes us different from other similar websites? › Forums › Tech › How to Stop Ad Blocker Detection on Websites Like YouTube
Tagged: Adblocker warning., Anti-Adblocker Killer, script, Tamper Monkey, YouTube, YouTube Linux Application, YouTube Red, yt-dlp
- This topic has 32 replies, 1 voice, and was last updated 3 weeks, 2 days ago by
thumbtak.
-
AuthorPosts
-
May 9, 2026 at 6:54 pm #8473
thumbtakModerator#!/bin/bash # --- COLORS & STYLING --- G='\033[0;32m' # Success B='\033[0;34m' # Secondary P='\033[38;5;211m' # Rose Pink (Primary) Y='\033[1;33m' # Warning R='\033[0;31m' # Danger W='\033[1;37m' # Highlight NC='\033[0m' # Reset # --- CONFIGURATION --- YTDLP_URL="https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp" YTDLP_BIN="./yt-dlp" OUTPUT_BASENAME="downloaded_video" PLAYLIST_FILE="video_playlist.txt" CONFIG_FILE=".ytdlp_config" LOC_CONFIG=".ytdlp_location" # --- LOCATION HELPER --- get_save_directory() { local SAVED_DIR="" [ -f "$LOC_CONFIG" ] && SAVED_DIR=$(cat "$LOC_CONFIG") if [ -d "$SAVED_DIR" ]; then echo -e "${Y}» Existing Path Found:${NC} $SAVED_DIR" >&2 read -p " Use this location? (y/n): " USE_SAVED >&2 if [[ "$USE_SAVED" =~ ^[Yy]$ ]]; then echo "$SAVED_DIR" return 0 fi fi echo -e "${P}» Setup New Directory${NC}" >&2 read -p " Enter Full Path: " NEW_DIR >&2 if [ -d "$NEW_DIR" ]; then echo "$NEW_DIR" > "$LOC_CONFIG" echo "$NEW_DIR" else echo -e "${R}✘ Directory does not exist!${NC}" >&2 echo "" fi } # --- AUTHENTICATION & UPDATE HELPER --- get_failure_fix() { echo -e "\n${R}┌───────────────────────────────────────────────────────────┐${NC}" echo -e "${R}│ CRITICAL ERROR: Download Interrupted │${NC}" echo -e "${R}└───────────────────────────────────────────────────────────┘${NC}" echo -e " [${P}U${NC}] Check for Updates [${P}B${NC}] Link Browser Cookies" echo -e " [${P}F${NC}] Manual cookies.txt [${P}N${NC}] Return to Dashboard" echo -e "${B}─────────────────────────────────────────────────────────────${NC}" read -p " Action Required: " FIX_CHOICE case $FIX_CHOICE in [uU]*) echo "Checking for updates..." if "$YTDLP_BIN" -U; then echo "Update successful." else curl -L "$YTDLP_URL" -o "$YTDLP_BIN" && chmod +x "$YTDLP_BIN" fi return 0 ;; [fF]*) read -p " Path to cookies.txt: " USER_FILE [ -f "$USER_FILE" ] && echo "--cookies $USER_FILE" > "$CONFIG_FILE" && return 0 ;; [bB]*) echo -e " (1)Chrome (2)Firefox (3)Brave (4)Edge (5)Opera (6)Vivaldi (7)Tor" read -p " Select [1-7]: " B_NUM case $B_NUM in 1) B="chrome";; 2) B="firefox";; 3) B="brave";; 4) B="edge";; 5) B="opera";; 6) B="vivaldi";; 7) B="tor";; *) return 1;; esac echo "--cookies-from-browser $B" > "$CONFIG_FILE" && return 0 ;; *) return 1 ;; esac } # --- CORE FUNCTIONS --- run_yt_dlp() { local URL=$1 SAVED_AUTH=$(cat "$CONFIG_FILE" 2>/dev/null) "$YTDLP_BIN" $SAVED_AUTH -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' \ --merge-output-format mp4 --output "${OUTPUT_BASENAME}.%(ext)s" "$URL" return $? } process_media() { local MODE=$1 local URL=$2 local RETRY=true if [ -z "$URL" ]; then CLIP=$(xclip -selection clipboard -o 2>/dev/null) echo -e "${P}» Input URL${NC}" read -p " Paste link (Enter for clipboard): " MANUAL_URL URL=${MANUAL_URL:-$CLIP} fi [ -z "$URL" ] && return [[ "$MODE" != "SILENT" ]] && read -p " Monitor Index (0-9) [Default 0]: " MON && MON=${MON:-0} while [ "$RETRY" = true ]; do if run_yt_dlp "$URL"; then RETRY=false FILE=$(ls ${OUTPUT_BASENAME}.* 2>/dev/null | head -n 1) if [ -f "$FILE" ]; then [[ "$MODE" != "SILENT" ]] && mpv --fs --screen="$MON" "$FILE" if [[ "$MODE" == "DOWNLOAD" || "$MODE" == "STREAM" ]]; then read -p " Download complete. Save file? (y/n): " KEEP if [[ "$KEEP" =~ ^[Yy]$ ]]; then DEST=$(get_save_directory) if [ -n "$DEST" ] && [ -d "$DEST" ]; then SA=$(cat "$CONFIG_FILE" 2>/dev/null) TITLE=$("$YTDLP_BIN" $SA --get-title "$URL" | tr -dc '[:alnum:]\n\r ' | tr ' ' '_') mv "$FILE" "$DEST/${TITLE}.mp4" echo -e "${G}✔ Saved to $DEST/${TITLE}.mp4${NC}" read -p "Press Enter to continue..." else echo -e "${R}✘ Save cancelled or directory invalid.${NC}" rm "$FILE" read -p "Press Enter to continue..." fi else [ -f "$FILE" ] && rm "$FILE" fi fi fi else if get_failure_fix; then read -p " Fix applied. Retry now? (y/n): " REA [[ ! "$REA" =~ ^[Yy]$ ]] && RETRY=false else RETRY=false read -p " Press Enter to continue..." fi fi done } # --- DASHBOARD --- [ ! -f "$YTDLP_BIN" ] && curl -L "$YTDLP_URL" -o "$YTDLP_BIN" && chmod +x "$YTDLP_BIN" while true; do clear # Rose Pink Header echo -e "${P} ████████╗ █████╗ ██╗ ██╗███████╗ ███████╗██╗ ██╗ █████╗ ██████╗██╗ ██╗" echo -e " ╚══██╔══╝██╔══██╗██║ ██╔╝██╔════╝ ██╔════╝██║ ██║██╔══██╗██╔════╝██║ ██╔╝" echo -e " ██║ ███████║█████╔╝ ███████╗ ███████╗███████║███████║██║ █████╔╝ " echo -e " ██║ ██╔══██║██╔═██╗ ╚════██║ ╚════██║██╔══██║██╔══██║██║ ██╔═██╗ " echo -e " ██║ ██║ ██║██║ ██╗███████║ ███████║██║ ██║██║ ██║╚██████╗██║ ██╗" echo -e " ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝${NC}" echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}" # Redesigned YouTube Icon echo -e " ${R} ▄▄██████████████████▄▄" echo -e " ████████████████████████" echo -e " ██████████${W}█${R}█████████████" echo -e " ██████████${W}███${R}███████████" echo -e " ██████████${W}█████${R}█████████" echo -e " ██████████${W}███${R}███████████" echo -e " ██████████${W}█${R}█████████████" echo -e " ████████████████████████" echo -e " ▀▀██████████████████▀▀${NC}" echo "" # Rose Pink DOWNLOADER Header echo -e "${P} ██████╗ ██████╗ ██╗ ██╗███╗ ██╗██╗ ██████╗ █████╗ ██████╗ ███████╗██████╗ " echo -e " ██╔══██╗██╔═══██╗██║ ██║████╗ ██║██║ ██╔═══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗" echo -e " ██║ ██║██║ ██║██║ █╗ ██║██╔██╗ ██║██║ ██║ ██║███████║██║ ██║█████╗ ██████╔╝" echo -e " ██║ ██║██║ ██║██║███╗██║██║╚██╗██║██║ ██║ ██║██╔══██║██║ ██║██╔══╝ ██╔══██╗" echo -e " ██████╔╝╚██████╔╝╚███╔███╔╝██║ ╚████║███████╗╚██████╔╝██║ ██║██████╔╝███████╗██║ ██╗" echo -e " ╚═════╝ ╚═════╝ ╚══╝╚══╝ ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ ╚══════╝╚═╝ ╚═╝${NC}" echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}" echo -e " ${W}Media Engine${NC} | TAKsShack.com" echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}" # Status Indicators if [ -f "$CONFIG_FILE" ]; then echo -e " ${G}●${NC} AUTH: ${W}$(cat "$CONFIG_FILE")${NC}" else echo -e " ${R}○${NC} AUTH: ${B}Anonymous${NC}" fi if [ -f "$LOC_CONFIG" ]; then echo -e " ${G}●${NC} PATH: ${W}$(cat "$LOC_CONFIG")${NC}" else echo -e " ${R}○${NC} PATH: ${B}Not Configured${NC}" fi echo "" # Menu Options echo -e " [${P}1${NC}] Stream Video [${P}4${NC}] Run Playlist File" echo -e " [${P}2${NC}] Download & Play [${P}5${NC}] Silent Batch Download" echo -e " [${P}3${NC}] Multi-Link Process [${P}c${NC}] Reset / Update Core" echo -e " [${P}6${NC}] ${R}Exit Terminal${NC}" echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}" echo -n " SELECT ACTION: " read CHOICE case $CHOICE in 1) process_media "STREAM" ;; 2) process_media "DOWNLOAD" ;; 3) read -p " Paste links: " MUL; for L in $MUL; do process_media "DOWNLOAD" "$L"; done ;; 4) [ -f "$PLAYLIST_FILE" ] && while read -r L; do process_media "STREAM" "$L"; done < "$PLAYLIST_FILE" ;; 5) read -p " Paste links: " B_URLS B_DEST=$(get_save_directory) if [ -d "$B_DEST" ]; then for L in $B_URLS; do process_media "SILENT" "$L" F=$(ls ${OUTPUT_BASENAME}.* 2>/dev/null | head -n 1) [ -f "$F" ] && mv "$F" "$B_DEST/" done fi ;; c|C) echo -e " Clear [${P}A${NC}]uth or [${P}L${NC}]ocation?" read CLEAR_MODE [[ "$CLEAR_MODE" =~ ^[Aa]$ ]] && rm "$CONFIG_FILE" 2>/dev/null [[ "$CLEAR_MODE" =~ ^[Ll]$ ]] && rm "$LOC_CONFIG" 2>/dev/null ;; 6) rm "$YTDLP_BIN" 2>/dev/null; clear; break ;; esac done-
This reply was modified 1 month, 1 week ago by
thumbtak. Reason: The "save" function was fixed
May 13, 2026 at 3:15 pm #8475
thumbtakModeratorFixed: Quoted path variables, used arrays for auth flags, fixed metadata fetch quoting, and updated browser-selection logic
#!/bin/bash # --- COLORS & STYLING --- G='\033[0;32m' # Success B='\033[0;34m' # Secondary P='\033[38;5;211m' # Rose Pink (Primary) Y='\033[1;33m' # Warning R='\033[0;31m' # Danger W='\033[1;37m' # Highlight NC='\033[0m' # Reset # --- CONFIGURATION --- YTDLP_URL="https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp" YTDLP_BIN="./yt-dlp" OUTPUT_BASENAME="downloaded_video" PLAYLIST_FILE="video_playlist.txt" CONFIG_FILE=".ytdlp_config" LOC_CONFIG=".ytdlp_location" # --- LOCATION HELPER --- get_save_directory() { local SAVED_DIR="" [ -f "$LOC_CONFIG" ] && SAVED_DIR=$(cat "$LOC_CONFIG") if [ -d "$SAVED_DIR" ]; then echo -e "${Y}» Existing Path Found:${NC} $SAVED_DIR" >&2 read -p " Use this location? (y/n): " USE_SAVED >&2 if [[ "$USE_SAVED" =~ ^[Yy]$ ]]; then echo "$SAVED_DIR" return 0 fi fi echo -e "${P}» Setup New Directory${NC}" >&2 read -p " Enter Full Path: " NEW_DIR >&2 if [ -d "$NEW_DIR" ]; then echo "$NEW_DIR" > "$LOC_CONFIG" echo "$NEW_DIR" else echo -e "${R}✘ Directory does not exist!${NC}" >&2 echo "" fi } # --- AUTHENTICATION & UPDATE HELPER --- get_failure_fix() { echo -e "\n${R}┌───────────────────────────────────────────────────────────┐${NC}" echo -e "${R}│ CRITICAL ERROR: Download Interrupted │${NC}" echo -e "${R}└───────────────────────────────────────────────────────────┘${NC}" echo -e " [${P}U${NC}] Check for Updates [${P}B${NC}] Link Browser Cookies" echo -e " [${P}F${NC}] Manual cookies.txt [${P}N${NC}] Return to Dashboard" echo -e "${B}─────────────────────────────────────────────────────────────${NC}" read -p " Action Required: " FIX_CHOICE case $FIX_CHOICE in [uU]*) echo "Checking for updates..." if "$YTDLP_BIN" -U; then echo "Update successful." else curl -L "$YTDLP_URL" -o "$YTDLP_BIN" && chmod +x "$YTDLP_BIN" fi return 0 ;; [fF]*) read -p " Path to cookies.txt: " USER_FILE # Store only the path to keep command building clean [ -f "$USER_FILE" ] && echo "$USER_FILE" > "$CONFIG_FILE" && return 0 ;; [bB]*) echo -e " (1)Chrome (2)Firefox (3)Brave (4)Edge (5)Opera (6)Vivaldi (7)Tor" read -p " Select [1-7]: " B_NUM case $B_NUM in 1) B="chrome";; 2) B="firefox";; 3) B="brave";; 4) B="edge";; 5) B="opera";; 6) B="vivaldi";; 7) B="tor";; *) return 1;; esac # Store the browser name only echo "BROWSER:$B" > "$CONFIG_FILE" && return 0 ;; *) return 1 ;; esac } # --- CORE FUNCTIONS --- run_yt_dlp() { local URL=$1 local AUTH_OPTS=() if [ -f "$CONFIG_FILE" ]; then VAL=$(cat "$CONFIG_FILE") if [[ "$VAL" == BROWSER:* ]]; then AUTH_OPTS=("--cookies-from-browser" "${VAL#BROWSER:}") else AUTH_OPTS=("--cookies" "$VAL") fi fi "$YTDLP_BIN" "${AUTH_OPTS[@]}" -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' \ --merge-output-format mp4 --output "${OUTPUT_BASENAME}.%(ext)s" "$URL" return $? } process_media() { local MODE=$1 local URL=$2 local RETRY=true if [ -z "$URL" ]; then CLIP=$(xclip -selection clipboard -o 2>/dev/null) echo -e "${P}» Input URL${NC}" read -p " Paste link (Enter for clipboard): " MANUAL_URL URL=${MANUAL_URL:-$CLIP} fi [ -z "$URL" ] && return [[ "$MODE" != "SILENT" ]] && read -p " Monitor Index (0-9) [Default 0]: " MON && MON=${MON:-0} while [ "$RETRY" = true ]; do if run_yt_dlp "$URL"; then RETRY=false FILE=$(ls ${OUTPUT_BASENAME}.* 2>/dev/null | head -n 1) if [ -f "$FILE" ]; then [[ "$MODE" != "SILENT" ]] && mpv --fs --screen="$MON" "$FILE" if [[ "$MODE" == "DOWNLOAD" || "$MODE" == "STREAM" ]]; then read -p " Download complete. Save file? (y/n): " KEEP if [[ "$KEEP" =~ ^[Yy]$ ]]; then DEST=$(get_save_directory) if [ -n "$DEST" ] && [ -d "$DEST" ]; then # Build title using the same fixed auth logic local SA_OPTS=() if [ -f "$CONFIG_FILE" ]; then local V=$(cat "$CONFIG_FILE") [[ "$V" == BROWSER:* ]] && SA_OPTS=("--cookies-from-browser" "${V#BROWSER:}") || SA_OPTS=("--cookies" "$V") fi TITLE=$("$YTDLP_BIN" "${SA_OPTS[@]}" --get-title "$URL" | tr -dc '[:alnum:]\n\r ' | tr ' ' '_') mv "$FILE" "$DEST/${TITLE}.mp4" echo -e "${G}✔ Saved to $DEST/${TITLE}.mp4${NC}" read -p "Press Enter to continue..." else echo -e "${R}✘ Save cancelled or directory invalid.${NC}" rm "$FILE" read -p "Press Enter to continue..." fi else [ -f "$FILE" ] && rm "$FILE" fi fi fi else if get_failure_fix; then read -p " Fix applied. Retry now? (y/n): " REA [[ ! "$REA" =~ ^[Yy]$ ]] && RETRY=false else RETRY=false read -p " Press Enter to continue..." fi fi done } # --- DASHBOARD --- [ ! -f "$YTDLP_BIN" ] && curl -L "$YTDLP_URL" -o "$YTDLP_BIN" && chmod +x "$YTDLP_BIN" while true; do clear # Rose Pink Header echo -e "${P} ████████╗ █████╗ ██╗ ██╗███████╗ ███████╗██╗ ██╗ █████╗ ██████╗██╗ ██╗" echo -e " ╚══██╔══╝██╔══██╗██║ ██╔╝██╔════╝ ██╔════╝██║ ██║██╔══██╗██╔════╝██║ ██╔╝" echo -e " ██║ ███████║█████╔╝ ███████╗ ███████╗███████║███████║██║ █████╔╝ " echo -e " ██║ ██╔══██║██╔═██╗ ╚════██║ ╚════██║██╔══██║██╔══██║██║ ██╔═██╗ " echo -e " ██║ ██║ ██║██║ ██╗███████║ ███████║██║ ██║██║ ██║╚██████╗██║ ██╗" echo -e " ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝${NC}" echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}" # Redesigned YouTube Icon echo -e " ${R} ▄▄██████████████████▄▄" echo -e " ████████████████████████" echo -e " ██████████${W}█${R}█████████████" echo -e " ██████████${W}███${R}███████████" echo -e " ██████████${W}█████${R}█████████" echo -e " ██████████${W}███${R}███████████" echo -e " ██████████${W}█${R}█████████████" echo -e " ████████████████████████" echo -e " ▀▀██████████████████▀▀${NC}" echo "" # Rose Pink DOWNLOADER Header echo -e "${P} ██████╗ ██████╗ ██╗ ██╗███╗ ██╗██╗ ██████╗ █████╗ ██████╗ ███████╗██████╗ " echo -e " ██╔══██╗██╔═══██╗██║ ██║████╗ ██║██║ ██╔═══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗" echo -e " ██║ ██║██║ ██║██║ █╗ ██║██╔██╗ ██║██║ ██║ ██║███████║██║ ██║█████╗ ██████╔╝" echo -e " ██║ ██║██║ ██║██║███╗██║██║╚██╗██║██║ ██║ ██║██╔══██║██║ ██║██╔══╝ ██╔══██╗" echo -e " ██████╔╝╚██████╔╝╚███╔███╔╝██║ ╚████║███████╗╚██████╔╝██║ ██║██████╔╝███████╗██║ ██╗" echo -e " ╚═════╝ ╚═════╝ ╚══╝╚══╝ ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ ╚══════╝╚═╝ ╚═╝${NC}" echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}" echo -e " ${W}Media Engine${NC} | TAKsShack.com" echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}" # Status Indicators if [ -f "$CONFIG_FILE" ]; then echo -e " ${G}●${NC} AUTH: ${W}$(cat "$CONFIG_FILE")${NC}" else echo -e " ${R}○${NC} AUTH: ${B}Anonymous${NC}" fi if [ -f "$LOC_CONFIG" ]; then echo -e " ${G}●${NC} PATH: ${W}$(cat "$LOC_CONFIG")${NC}" else echo -e " ${R}○${NC} PATH: ${B}Not Configured${NC}" fi echo "" # Menu Options echo -e " [${P}1${NC}] Stream Video [${P}4${NC}] Run Playlist File" echo -e " [${P}2${NC}] Download & Play [${P}5${NC}] Silent Batch Download" echo -e " [${P}3${NC}] Multi-Link Process [${P}c${NC}] Reset / Update Core" echo -e " [${P}6${NC}] ${R}Exit Terminal${NC}" echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}" echo -n " SELECT ACTION: " read CHOICE case $CHOICE in 1) process_media "STREAM" ;; 2) process_media "DOWNLOAD" ;; 3) read -p " Paste links: " MUL; for L in $MUL; do process_media "DOWNLOAD" "$L"; done ;; 4) [ -f "$PLAYLIST_FILE" ] && while read -r L; do process_media "STREAM" "$L"; done < "$PLAYLIST_FILE" ;; 5) read -p " Paste links: " B_URLS B_DEST=$(get_save_directory) if [ -d "$B_DEST" ]; then for L in $B_URLS; do process_media "SILENT" "$L" F=$(ls ${OUTPUT_BASENAME}.* 2>/dev/null | head -n 1) [ -f "$F" ] && mv "$F" "$B_DEST/" done fi ;; c|C) echo -e " Clear [${P}A${NC}]uth or [${P}L${NC}]ocation?" read CLEAR_MODE [[ "$CLEAR_MODE" =~ ^[Aa]$ ]] && rm "$CONFIG_FILE" 2>/dev/null [[ "$CLEAR_MODE" =~ ^[Ll]$ ]] && rm "$LOC_CONFIG" 2>/dev/null ;; 6) rm "$YTDLP_BIN" 2>/dev/null; clear; break ;; esac doneMay 25, 2026 at 11:45 am #8485
thumbtakModeratorThe logo was updated.
#!/bin/bash # --- COLORS & STYLING --- G='\033[0;32m' # Success B='\033[0;34m' # Secondary P='\033[38;5;211m' # Rose Pink (Primary) Y='\033[1;33m' # Warning R='\033[0;31m' # Danger W='\033[1;37m' # Highlight NC='\033[0m' # Reset # --- CONFIGURATION --- YTDLP_URL="https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp" YTDLP_BIN="./yt-dlp" OUTPUT_BASENAME="downloaded_video" PLAYLIST_FILE="video_playlist.txt" CONFIG_FILE=".ytdlp_config" LOC_CONFIG=".ytdlp_location" PLAYLIST_PATH_CONFIG=".ytdlp_playlist_path" # --- LOCATION HELPER --- get_save_directory() { local SAVED_DIR="" [ -f "$LOC_CONFIG" ] && SAVED_DIR=$(cat "$LOC_CONFIG") if [ -d "$SAVED_DIR" ]; then echo -e "${Y}» Existing Path Found:${NC} $SAVED_DIR" >&2 read -p " Use this location? (y/n): " USE_SAVED >&2 if [[ "$USE_SAVED" =~ ^[Yy]$ ]]; then echo "$SAVED_DIR" return 0 fi fi echo -e "${P}» Setup New Directory${NC}" >&2 read -p " Enter Full Path: " NEW_DIR >&2 if [ -d "$NEW_DIR" ]; then echo "$NEW_DIR" > "$LOC_CONFIG" echo "$NEW_DIR" else echo -e "${R}✘ Directory does not exist!${NC}" >&2 echo "" fi } # --- PLAYLIST PERSISTENCE HELPER --- get_playlist_file() { if [ -f "$PLAYLIST_PATH_CONFIG" ]; then cat "$PLAYLIST_PATH_CONFIG" else echo "$PLAYLIST_FILE" fi } # --- AUTHENTICATION & UPDATE HELPER --- get_failure_fix() { echo -e "\n${R}┌───────────────────────────────────────────────────────────┐${NC}" echo -e "${R}│ CRITICAL ERROR: Download Interrupted │${NC}" echo -e "${R}└───────────────────────────────────────────────────────────┘${NC}" echo -e " [${P}U${NC}] Check for Updates [${P}B${NC}] Link Browser Cookies" echo -e " [${P}F${NC}] Manual cookies.txt [${P}N${NC}] Return to Dashboard" echo -e "${B}─────────────────────────────────────────────────────────────${NC}" read -p " Action Required: " FIX_CHOICE case $FIX_CHOICE in [uU]*) echo "Checking for updates..." if "$YTDLP_BIN" -U; then echo "Update successful." else curl -L "$YTDLP_URL" -o "$YTDLP_BIN" && chmod +x "$YTDLP_BIN" fi return 0 ;; [fF]*) read -p " Path to cookies.txt: " USER_FILE [ -f "$USER_FILE" ] && echo "$USER_FILE" > "$CONFIG_FILE" && return 0 ;; [bB]*) echo -e " (1)Chrome (2)Firefox (3)Brave (4)Edge (5)Opera (6)Vivaldi (7)Tor" read -p " Select [1-7]: " B_NUM case $B_NUM in 1) B="chrome";; 2) B="firefox";; 3) B="brave";; 4) B="edge";; 5) B="opera";; 6) B="vivaldi";; 7) B="tor";; *) return 1;; esac echo "BROWSER:$B" > "$CONFIG_FILE" && return 0 ;; *) return 1 ;; esac } # --- CORE FUNCTIONS --- run_yt_dlp() { local URL=$1 local AUTH_OPTS=() if [ -f "$CONFIG_FILE" ]; then VAL=$(cat "$CONFIG_FILE") if [[ "$VAL" == BROWSER:* ]]; then AUTH_OPTS=("--cookies-from-browser" "${VAL#BROWSER:}") else AUTH_OPTS=("--cookies" "$VAL") fi fi "$YTDLP_BIN" "${AUTH_OPTS[@]}" -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' \ --merge-output-format mp4 --output "${OUTPUT_BASENAME}.%(ext)s" "$URL" return $? } process_media() { local MODE=$1 local URL=$2 local RETRY=true if [ -z "$URL" ]; then CLIP=$(xclip -selection clipboard -o 2>/dev/null) echo -e "${P}» Input URL${NC}" read -p " Paste link (Enter for clipboard): " MANUAL_URL URL=${MANUAL_URL:-$CLIP} fi [ -z "$URL" ] && return [[ "$MODE" != "SILENT" ]] && read -p " Monitor Index (0-9) [Default 0]: " MON && MON=${MON:-0} while [ "$RETRY" = true ]; do if run_yt_dlp "$URL"; then RETRY=false FILE=$(ls ${OUTPUT_BASENAME}.* 2>/dev/null | head -n 1) if [ -f "$FILE" ]; then [[ "$MODE" != "SILENT" ]] && mpv --fs --screen="$MON" "$FILE" if [[ "$MODE" == "DOWNLOAD" || "$MODE" == "STREAM" || "$MODE" == "PLAYLIST_SAVE" || "$MODE" == "PLAYLIST_PROCESS" ]]; then if [[ "$MODE" == "PLAYLIST_SAVE" ]]; then read -p " Add this URL to the bottom of the playlist? (y/n): " ADD_PL if [[ "$ADD_PL" =~ ^[Yy]$ ]]; then CURRENT_PL=$(get_playlist_file) echo "$URL" >> "$CURRENT_PL" echo -e "${G}✔ URL appended to $CURRENT_PL${NC}" fi fi read -p " Download complete. Save file? (y/n): " KEEP if [[ "$KEEP" =~ ^[Yy]$ ]]; then DEST=$(get_save_directory) if [ -n "$DEST" ] && [ -d "$DEST" ]; then local SA_OPTS=() if [ -f "$CONFIG_FILE" ]; then local V=$(cat "$CONFIG_FILE") [[ "$V" == BROWSER:* ]] && SA_OPTS=("--cookies-from-browser" "${V#BROWSER:}") || SA_OPTS=("--cookies" "$V") fi TITLE=$("$YTDLP_BIN" "${SA_OPTS[@]}" --get-title "$URL" | tr -dc '[:alnum:]\n\r ' | tr ' ' '_') mv "$FILE" "$DEST/${TITLE}.mp4" echo -e "${G}✔ Saved to $DEST/${TITLE}.mp4${NC}" read -p "Press Enter to continue..." else echo -e "${R}✘ Save cancelled or directory invalid.${NC}" rm "$FILE" read -p "Press Enter to continue..." fi else [ -f "$FILE" ] && rm "$FILE" fi fi fi else if get_failure_fix; then read -p " Fix applied. Retry now? (y/n): " REA [[ ! "$REA" =~ ^[Yy]$ ]] && RETRY=false else RETRY=false read -p " Press Enter to continue..." fi fi done } # --- DASHBOARD --- [ ! -f "$YTDLP_BIN" ] && curl -L "$YTDLP_URL" -o "$YTDLP_BIN" && chmod +x "$YTDLP_BIN" while true; do clear echo -e "${P} ████████╗ █████╗ ██╗ ██╗███████╗ ███████╗██╗ ██╗ █████╗ ██████╗██╗ ██╗" echo -e " ╚══██╔══╝██╔══██╗██║ ██╔╝██╔════╝ ██╔════╝██║ ██║██╔══██╗██╔════╝██║ ██╔╝" echo -e " ██║ ███████║█████╔╝ ███████╗ ███████╗███████║███████║██║ █████╔╝ " echo -e " ██║ ██╔══██║██╔═██╗ ╚════██║ ╚════██║██╔══██║██╔══██║██║ ██╔═██╗ " echo -e " ██║ ██║ ██║██║ ██╗███████║ ███████║██║ ██║██║ ██║╚██████╗██║ ██╗" echo -e " ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝${NC}" echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}" # FIXED LOGO echo -e "${R}" echo -e " ###################################### " echo -e " ############################################ " echo -e " ##############################################" echo -e " ##############################################" echo -e " ##############################################" echo -e " ##################-.=*########################" echo -e " ##################-. ..:*#####################" echo -e " ##################- . .:+*#################" echo -e " ##################- . .. ...*###############" echo -e " ##################-. .:+*#################" echo -e " ##################- :*#####################" echo -e " ##################-.=*########################" echo -e " ##############################################" echo -e " ##############################################" echo -e " ##############################################" echo -e " ############################################ " echo -e " ###################################### " echo "" echo -e "${NC}" echo -e "${P} ██████╗ ██████╗ ██╗ ██╗███╗ ██╗██╗ ██████╗ █████╗ ██████╗ ███████╗██████╗ " echo -e " ██╔══██╗██╔═══██╗██║ ██║████╗ ██║██║ ██╔═══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗" echo -e " ██║ ██║██║ ██║██║ █╗ ██║██╔██╗ ██║██║ ██║ ██║███████║██║ ██║█████╗ ██████╔╝" echo -e " ██║ ██║██║ ██║██║███╗██║██║╚██╗██║██║ ██║ ██║██╔══██║██║ ██║██╔══╝ ██╔══██╗" echo -e " ██████╔╝╚██████╔╝╚███╔███╔╝██║ ╚████║███████╗╚██████╔╝██║ ██║██████╔╝███████╗██║ ██╗" echo -e " ╚═════╝ ╚═════╝ ╚══╝╚══╝ ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ ╚══════╝╚═╝ ╚═╝${NC}" echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}" echo -e " ${W}Media Engine${NC} | TAKsShack.com" echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}" if [ -f "$CONFIG_FILE" ]; then echo -e " ${G}●${NC} AUTH: ${W}$(cat "$CONFIG_FILE")${NC}" else echo -e " ${R}○${NC} AUTH: ${B}Anonymous${NC}" fi if [ -f "$LOC_CONFIG" ]; then echo -e " ${G}●${NC} PATH: ${W}$(cat "$LOC_CONFIG")${NC}" else echo -e " ${R}○${NC} PATH: ${B}Not Configured${NC}" fi echo "" echo -e " [${P}1${NC}] Stream Video [${P}4${NC}] Run Playlist File (DL & Play)" echo -e " [${P}2${NC}] Download & Play [${P}5${NC}] Silent Batch Download" echo -e " [${P}3${NC}] Multi-Link Process [${P}7${NC}] Download & Save To Playlist" echo -e " [${P}8${NC}] Bulk Paste To Playlist [${P}c${NC}] Reset / Update Core" echo -e " [${P}6${NC}] ${R}Exit Terminal${NC}" echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}" echo -n " SELECT ACTION: " read CHOICE case $CHOICE in 1) process_media "STREAM" ;; 2) process_media "DOWNLOAD" ;; 3) read -p " Paste links: " MUL; for L in $MUL; do process_media "DOWNLOAD" "$L"; done ;; 4) CURRENT_PL=$(get_playlist_file) if [ ! -f "$CURRENT_PL" ]; then echo -e "${R}✘ Playlist file not found at $CURRENT_PL${NC}" read -p " Enter full path to your playlist file: " NEW_PL_PATH echo "$NEW_PL_PATH" > "$PLAYLIST_PATH_CONFIG" CURRENT_PL=$NEW_PL_PATH fi if [ -f "$CURRENT_PL" ]; then while :; do L=$(head -n 1 "$CURRENT_PL") [ -z "$L" ] && break process_media "PLAYLIST_PROCESS" "$L" read -p " Finished processing link. Remove it from playlist? (y/n): " REMOVE if [[ "$REMOVE" =~ ^[Yy]$ ]]; then sed -i '1d' "$CURRENT_PL" echo -e "${G}✔ Link removed from top of playlist.${NC}" else read -p " Skip to next link without removing? (y/n): " SKIP [[ "$SKIP" =~ ^[Yy]$ ]] && sed -i '1d' "$CURRENT_PL" || break fi done fi ;; 5) read -p " Paste links: " B_URLS B_DEST=$(get_save_directory) if [ -d "$B_DEST" ]; then for L in $B_URLS; do process_media "SILENT" "$L" F=$(ls ${OUTPUT_BASENAME}.* 2>/dev/null | head -n 1) [ -f "$F" ] && mv "$F" "$B_DEST/" done fi ;; 7) process_media "PLAYLIST_SAVE" ;; 8) CURRENT_PL=$(get_playlist_file) read -p " Paste links space-separated: " BULK_PL_LINKS for L in $BULK_PL_LINKS; do echo "$L" >> "$CURRENT_PL" echo -e "${G}✔ Added to playlist:${NC} $L" done read -p "Bulk save complete. Press Enter to return..." ;; c|C) echo -e " Clear [${P}A${NC}]uth, [${P}L${NC}]ocation, or [${P}P${NC}]laylist Path?" read CLEAR_MODE [[ "$CLEAR_MODE" =~ ^[Aa]$ ]] && rm "$CONFIG_FILE" 2>/dev/null [[ "$CLEAR_MODE" =~ ^[Ll]$ ]] && rm "$LOC_CONFIG" 2>/dev/null [[ "$CLEAR_MODE" =~ ^[Pp]$ ]] && rm "$PLAYLIST_PATH_CONFIG" 2>/dev/null ;; 6) rm "$YTDLP_BIN" 2>/dev/null; clear; break ;; esac done -
This reply was modified 1 month, 1 week ago by
-
AuthorPosts
- You must be logged in to reply to this topic.
