diff --git a/hosts/nixos/hs/home.nix b/hosts/nixos/hs/home.nix index a40983e..08c517e 100644 --- a/hosts/nixos/hs/home.nix +++ b/hosts/nixos/hs/home.nix @@ -22,17 +22,17 @@ interval = "*-*-* 08:00:00"; randomDelay = "1h"; commands = [ - "dl-yt -n 3 https://www.youtube.com/@KitbogaShow" - "dl-yt -n 3 https://www.youtube.com/@JCS" - "dl-yt -n 3 https://www.youtube.com/@Shane_McGillicuddy" - "dl-yt -n 3 https://www.youtube.com/@Coffeezilla" - "dl-yt -n 3 https://www.youtube.com/@Danny-Gonzalez" - "dl-yt -n 3 https://www.youtube.com/@rejectconvenience" - "dl-yt -n 3 https://www.youtube.com/@StuffMadeHere" - "dl-yt -n 3 https://www.youtube.com/@AdamSomething" - "dl-yt -n 3 https://www.youtube.com/@_gerg" - "dl-yt -n 3 https://www.youtube.com/@Yeah_Jaron" - "dl-yt -n 3 https://www.youtube.com/@WolfgangsChannel" + "dl-yt -n 3 'https://www.youtube.com/@KitbogaShow/videos'" + "dl-yt -n 3 'https://www.youtube.com/@JCS/videos'" + "dl-yt -n 3 'https://www.youtube.com/@Shane_McGillicuddy/videos'" + "dl-yt -n 3 'https://www.youtube.com/@Coffeezilla/videos'" + "dl-yt -n 3 'https://www.youtube.com/@Danny-Gonzalez/videos'" + "dl-yt -n 3 'https://www.youtube.com/@rejectconvenience/videos'" + "dl-yt -n 3 'https://www.youtube.com/@StuffMadeHere/videos'" + "dl-yt -n 3 'https://www.youtube.com/@AdamSomething/videos'" + "dl-yt -n 3 'https://www.youtube.com/@_gerg/videos'" + "dl-yt -n 3 'https://www.youtube.com/@Yeah_Jaron/videos'" + "dl-yt -n 3 'https://www.youtube.com/@WolfgangsChannel/videos'" ]; }; diff --git a/modules/yt-dlp.nix b/modules/yt-dlp.nix index ffde965..178f20a 100644 --- a/modules/yt-dlp.nix +++ b/modules/yt-dlp.nix @@ -199,25 +199,46 @@ in # YouTube playlist download download-youtube-playlist() { - local url="$*" + local max_downloads="" + local url="" + + # Parse arguments + while [[ $# -gt 0 ]]; do + case "$1" in + -n|--max) + max_downloads="$2" + shift 2 + ;; + *) + url="$url $1" + shift + ;; + esac + done + + url="''${url## }" # Trim leading space + if [[ -z "$url" ]]; then - echo "Usage: dl-yt-p " + echo "Usage: dl-yt-p [-n|--max ] " + echo " -n, --max Limit number of videos to download" return 1 fi - + local cookies_file="$HOME/.config/yt-dlp/cookies-youtube.txt" local temp_cookies=$(_setup_temp_cookies "$cookies_file") local output_template="$DOWNLOAD_DIR/YouTube/%(uploader|)s-%(playlist|)s/%(playlist_index|)03d-%(title)s.%(ext)s" local archive_file="$DOWNLOAD_DIR/.archive.txt" - + mkdir -p "$DOWNLOAD_DIR" echo "Downloading YouTube playlist..." + [[ -n "$max_downloads" ]] && echo "Limiting to $max_downloads videos" echo "Output directory: $DOWNLOAD_DIR/YouTube" - + local cmd="yt-dlp --yes-playlist" + [[ -n "$max_downloads" ]] && cmd="$cmd --playlist-end '$max_downloads'" [[ -n "$temp_cookies" ]] && cmd="$cmd --cookies '$temp_cookies'" || cmd="$cmd --no-cookies" cmd="$cmd --download-archive '$archive_file' -o '$output_template' '$url'" - + if _retry_download "$cmd"; then echo "✓ Playlist download completed successfully" local result=0 @@ -225,34 +246,55 @@ in echo "✗ Playlist download failed after $MAX_RETRIES attempts" local result=1 fi - + # Clean up temp cookies [[ -n "$temp_cookies" ]] && rm -f "$temp_cookies" - + return $result } # Bilibili single video download download-bilibili() { - local url="$*" + local max_downloads="" + local url="" + + # Parse arguments + while [[ $# -gt 0 ]]; do + case "$1" in + -n|--max) + max_downloads="$2" + shift 2 + ;; + *) + url="$url $1" + shift + ;; + esac + done + + url="''${url## }" # Trim leading space + if [[ -z "$url" ]]; then - echo "Usage: dl-bili " + echo "Usage: dl-bili [-n|--max ] " + echo " -n, --max Limit number of videos to process (useful for channels/playlists)" return 1 fi - + local cookies_file="$HOME/.config/yt-dlp/cookies-bilibili.txt" local temp_cookies=$(_setup_temp_cookies "$cookies_file") local output_template="$DOWNLOAD_DIR/Bilibili/%(uploader|)s/%(upload_date>%Y%m%d|)s-%(title)s.%(ext)s" local archive_file="$DOWNLOAD_DIR/.archive.txt" - + mkdir -p "$DOWNLOAD_DIR" echo "Downloading Bilibili video..." + [[ -n "$max_downloads" ]] && echo "Processing max $max_downloads videos" echo "Output directory: $DOWNLOAD_DIR/Bilibili" - + local cmd="yt-dlp --referer https://www.bilibili.com/" + [[ -n "$max_downloads" ]] && cmd="$cmd --playlist-end '$max_downloads'" [[ -n "$temp_cookies" ]] && cmd="$cmd --cookies '$temp_cookies'" || cmd="$cmd --no-cookies" cmd="$cmd --download-archive '$archive_file' -o '$output_template' '$url'" - + if _retry_download "$cmd"; then echo "✓ Download completed successfully" local result=0 @@ -260,34 +302,55 @@ in echo "✗ Download failed after $MAX_RETRIES attempts" local result=1 fi - + # Clean up temp cookies [[ -n "$temp_cookies" ]] && rm -f "$temp_cookies" - + return $result } # Bilibili playlist/collection download download-bilibili-playlist() { - local url="$*" + local max_downloads="" + local url="" + + # Parse arguments + while [[ $# -gt 0 ]]; do + case "$1" in + -n|--max) + max_downloads="$2" + shift 2 + ;; + *) + url="$url $1" + shift + ;; + esac + done + + url="''${url## }" # Trim leading space + if [[ -z "$url" ]]; then - echo "Usage: dl-bili-p " + echo "Usage: dl-bili-p [-n|--max ] " + echo " -n, --max Limit number of videos to download" return 1 fi - + local cookies_file="$HOME/.config/yt-dlp/cookies-bilibili.txt" local temp_cookies=$(_setup_temp_cookies "$cookies_file") local output_template="$DOWNLOAD_DIR/Bilibili/%(uploader|)s-%(playlist|)s/%(playlist_index|)03d-%(title)s.%(ext)s" local archive_file="$DOWNLOAD_DIR/.archive.txt" - + mkdir -p "$DOWNLOAD_DIR" echo "Downloading Bilibili playlist..." + [[ -n "$max_downloads" ]] && echo "Limiting to $max_downloads videos" echo "Output directory: $DOWNLOAD_DIR/Bilibili" - + local cmd="yt-dlp --yes-playlist --referer https://www.bilibili.com/" + [[ -n "$max_downloads" ]] && cmd="$cmd --playlist-end '$max_downloads'" [[ -n "$temp_cookies" ]] && cmd="$cmd --cookies '$temp_cookies'" || cmd="$cmd --no-cookies" cmd="$cmd --download-archive '$archive_file' -o '$output_template' '$url'" - + if _retry_download "$cmd"; then echo "✓ Playlist download completed successfully" local result=0 @@ -295,10 +358,10 @@ in echo "✗ Playlist download failed after $MAX_RETRIES attempts" local result=1 fi - + # Clean up temp cookies [[ -n "$temp_cookies" ]] && rm -f "$temp_cookies" - + return $result } @@ -306,15 +369,18 @@ in download-help() { cat << 'EOF' Video Download Commands: - + YouTube: - dl-yt - Download single YouTube video - dl-yt-p - Download YouTube playlist - + dl-yt [-n ] - Download single YouTube video + dl-yt-p [-n ] - Download YouTube playlist + Bilibili: - dl-bili - Download single Bilibili video - dl-bili-p - Download Bilibili playlist/collection - + dl-bili [-n ] - Download single Bilibili video + dl-bili-p [-n ] - Download Bilibili playlist/collection + + Options: + -n, --max Limit number of videos to process/download + Other commands: dl-clear-archive - Clear download history (allows re-downloading) dl-help - Show this help message