loader image

How to Stop Ad Blocker Detection on Websites Like YouTube

What makes us different from other similar websites? Forums Tech How to Stop Ad Blocker Detection on Websites Like YouTube

Viewing 3 posts - 31 through 33 (of 33 total)
  • Author
    Posts
  • #8473
    thumbtak
    Moderator
    #!/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
    #8475
    thumbtak
    Moderator

    Fixed: 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
    done
    #8485
    thumbtak
    Moderator

    The 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
Viewing 3 posts - 31 through 33 (of 33 total)
  • You must be logged in to reply to this topic.
TAKs Shack