Audience: anyone running the CLI on their computer.
Exit the menu with 0 or Ctrl+C. Both print a short goodbye line.
From the repo root, with the venv active:
python multi_downloader.py
| Input | Action |
|---|---|
1 |
Instagram downloader |
2 |
Twitter/X downloader |
3 |
YouTube downloader |
0 |
Exit |
Invalid input prints “Invalid option” and shows the menu again. If a platform main() returns non-zero, you see “An error has occurred. Please try again.” and stay in the menu.
You can also start a module without the menu:
python Instagram/instagram_downloader.py
python Twitter/twitter_downloader.py
python YouTube/youtube_downloader.py
Every platform:
--url was passed).requests (check_url_accessibility). HTTP 200 is required before metadata fetch.--output was passed). Enter = default Downloads.\ / * ? : " < > | become _.Yes/no questions accept y/yes/n/no.
After a successful interactive download, Instagram and Twitter ask whether to download another post. YouTube asks whether to download another item and whether to reuse the same URL.
--platform)python multi_downloader.py --platform <instagram|twitter|youtube> [options]
| Flag | Notes |
|---|---|
--url |
Full post/video URL. |
--output |
Directory that already exists. |
--yes |
Skip tweet/video confirmations and YouTube stream picking (first stream in the list). |
--mode |
YouTube: audio, video, or audio+video. |
Exit codes: 0 success, 1 bad output path, unreachable URL, failed download, or declined confirmation in one-shot mode.
Filename prompts still run. For scripts, pipe a newline or run under a TTY and press Enter.
YouTube audio, skip confirmations:
python multi_downloader.py --platform youtube \
--url "https://youtu.be/dQw4w9WgXcQ" \
--mode audio --output "/tmp" --yes
Instagram post:
python multi_downloader.py --platform instagram \
--url "https://www.instagram.com/p/SHORTCODE/" \
--output "/tmp" --yes
Twitter/X video:
python multi_downloader.py --platform twitter \
--url "https://x.com/user/status/1234567890" \
--output "/tmp" --yes
--platform without a valid choice is rejected by argparse. --mode on Instagram/Twitter is ignored.
URL formats and per-platform behaviour: Platforms.