From b3474e85dcce03e7de0b4a4e30ff7fad1f38ee26 Mon Sep 17 00:00:00 2001 From: ryukamish Date: Sat, 11 Apr 2026 18:25:38 +0530 Subject: add: small bash scripts for added functionality --- scripts/socialdl | 224 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100755 scripts/socialdl (limited to 'scripts/socialdl') diff --git a/scripts/socialdl b/scripts/socialdl new file mode 100755 index 0000000..f9f046e --- /dev/null +++ b/scripts/socialdl @@ -0,0 +1,224 @@ +#!/usr/bin/env bash + +# set -eou pipefail + +branding() { + echo + cat <<'EOF' + /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$$$$$$ /$$ + /$$__ $$ /$$__ $$ /$$__ $$|_ $$_/ /$$__ $$| $$ | $$__ $$| $$ +| $$ \__/| $$ \ $$| $$ \__/ | $$ | $$ \ $$| $$ | $$ \ $$| $$ +| $$$$$$ | $$ | $$| $$ | $$ | $$$$$$$$| $$ | $$ | $$| $$ + \____ $$| $$ | $$| $$ | $$ | $$__ $$| $$ | $$ | $$| $$ + /$$ \ $$| $$ | $$| $$ $$ | $$ | $$ | $$| $$ | $$ | $$| $$ +| $$$$$$/| $$$$$$/| $$$$$$/ /$$$$$$| $$ | $$| $$$$$$$$| $$$$$$$/| $$$$$$$$ + \______/ \______/ \______/ |______/|__/ |__/|________/|_______/ |________/ +EOF +echo +} + +# Check for dependencies +check_deps=$(which {gum,yt-dlp}) +if [ ! "$check_deps" ]; then + echo + gum log \ + --structured \ + --level error \ + "gum and yt-dlp not installed." + echo + gum spin \ + --spinner "globe" \ + --title "Done! Press any key to close..." \ + -- bash -c 'read -n 1 -s' + exit 1 +fi + +# Check for download directories +# if doesn't exist make them +insta_vid_dl_dir="$HOME/Videos/Instagram" +insta_img_dl_dir="$HOME/Pictures/Instagram" +x_vid_dl_dir="$HOME/Videos/X" +x_img_dl_dir="$HOME/Pictures/X" +reddit_img_dl_dir="$HOME/Pictures/Reddit" +reddit_vid_dl_dir="$HOME/Videos/Reddit" +# Making directories if doesn't exist +if [ ! -d "$insta_vid_dl_dir" ]; then + mkdir -p "$insta_vid_dl_dir" +elif [[ ! -d "$insta_img_dl_dir" ]]; then + mkdir -p "$insta_img_dl_dir" +elif [[ ! -d "$x_vid_dl_dir" ]]; then + mkdir -p "$x_vid_dl_dir" +elif [[ ! -d "$x_img_dl_dir" ]]; then + mkdir -p "$x_img_dl_dir" +elif [[ ! -d "$reddit_img_dl_dir" ]]; then + mkdir -p "$reddit_img_dl_dir" +elif [[ ! -d "$reddit_vid_dl_dir" ]]; then + mkdir -p "$reddit_vid_dl_dir" +fi + +# TODO: Add comments explaining the commands +# This here is a simple function which waits for the user +# to press a key and exits out +gum_done() { + gum spin \ + --spinner "globe" \ + --title "Done! Press any key to close..." \ + -- bash -c 'read -n 1 -s' +} + +gum_error() { + gum log --structured --level error "$1" +} +branding +# Platform to download from +platform_choice=$(gum choose \ + --header="Choose:" \ + --header.bold \ + --header.foreground="#FCB8EF" \ + "Instagram" "X" "Reddit") +# Apply methods to determine which platform is choosen +# Accordingly, choose how to download +case "$platform_choice" in + Instagram) + # Taking input whether downloading videos or images + insta_format_choice=$(gum choose \ + --header="Choose:" \ + --header.bold \ + --header.foreground="#FCB8EF" \ + "Video" "Image" || exit 1) + case "$insta_format_choice" in + Video) + # Taking instagram video url + insta_vid_url=$(gum input \ + --header.bold \ + --header.foreground="#FCB8EF" \ + --header="Paste Instagram video URL." \ + --placeholder="Enter URL here...") + if [[ -n "$insta_vid_url" ]]; then + yt-dlp "$insta_vid_url" -o "$insta_vid_dl_dir/%(title)s.%(ext)s" || exit 1 + echo + gum_done + echo + elif [[ -z "$insta_vid_url" ]]; then + echo + gum_error "Please input a URL." + echo + gum_done + fi + ;; + Image) + if command -v gallery-dl >/dev/null; then + # Taking instagram image url + insta_img_url=$(gum input \ + --header.bold \ + --header.foreground="#FCB8EF" \ + --header="Paste Instagram image URL." \ + --placeholder="Enter URL here...") + # Instagram requires login to download images; that is why + # cookies from browser is required + gallery-dl --cookies-from-browser chromium --destination "$insta_img_dl_dir" "$insta_img_url" + echo + gum_done + echo + else + gum_error "gallery-dl is not installed." + echo + gum_done + echo + fi + ;; + esac + ;; + X) + # Taking input whether to download video or image from X + x_format_choice=$(gum choose \ + --header="Choose:" \ + --header.bold \ + --header.foreground="#FCB8EF" \ + "Video" "Image" || exit 1) + case "$x_format_choice" in + Video) + # Taking input of X video url + x_vid_url=$(gum input \ + --header.bold \ + --header.foreground="#FCB8EF" \ + --header="Paste X video URL." \ + --placeholder="Paste URL here...") + if [ -z "$x_vid_url" ]; then + # Give out error if no url provided + echo + gum_error "Please enter a URL." + echo + gum_done + elif [[ -n "$x_vid_url" ]]; then + # Output directory with title and extension required as + # downloaded file is being downloaded to a particular + # directory not the dir where script is being executed + yt-dlp "$x_vid_url" -o "$x_vid_dl_dir/%(title)s.%(ext)s" || exit 1 + echo + gum_done + echo + fi + ;; + Image) + if command -v gallery-dl >/dev/null; then + # Take input of image url from instagram + x_img_url=$(gum input \ + --header.bold \ + --header.foreground="#FCB8EF" \ + --header="Paste X image URL." \ + --placeholder="Paste URL here...") + if [ -z "$x_img_url" ]; then + # If no url given then throw error and exit + echo + gum_error "Please enter a URL." + echo + elif [[ -n "$x_img_url" ]]; then + # FIX: Change the default browser to automatically continue + # if supported browser is default otherwise exit + gallery-dl --cookies-from-browser chromium --destination "$x_img_dl_dir" "$x_img_url" + echo + gum_done + echo + fi + else + echo + gum_error "gallery-dl is not installed." + echo + gum_done + fi + ;; + esac + ;; + Reddit) + reddit_format_choice=$(gum choose \ + --header="Choose:" \ + --header.bold \ + --header.foreground="#FCB8EF" \ + "Video" "Image" || exit 1) + case "$reddit_format_choice" in + Video) + reddit_vid_url=$(gum input \ + --header.bold \ + --header.foreground="#FCB8EF" \ + --header="Paste Reddit video URL." \ + --placeholder="Paste URL here...") + if [ -z "$reddit_vid_url" ]; then + echo + gum_error "Enter a URL..." + echo + elif [ -n "$reddit_vid_url" ]; then + yt-dlp "$reddit_vid_url" -o "$reddit_vid_dl_dir/%(title)s.%(ext)s" || exit 1 + echo + gum_done + echo + fi + ;; + Image) + echo + gum_error "Image download on Reddit not yet supported." + echo + ;; + esac + ;; +esac -- cgit v1.3