Twitter/X Media Downloader
Download images and videos from X/Twitter using gallery-dl.
Quick Start
Run the download script with a Twitter/X URL:
uv run scripts/download.py "https://x.com/username" --output ./downloadsSupported URL Types
- Single tweets:
https://x.com/user/status/1234567890 - User timelines:
https://x.com/username - User media:
https://x.com/username/media - User likes:
https://x.com/username/likes(requires auth) - Bookmarks:
https://x.com/i/bookmarks(requires auth) - Lists:
https://x.com/i/lists/1234567890
Authentication
For protected content (likes, bookmarks, private accounts), provide cookies:
uv run scripts/download.py "URL" --cookies /path/to/cookies.txtOr use browser cookies directly (recommended):
uv run scripts/download.py "URL" --browser firefoxNote: Using --browser firefox is recommended as it automatically extracts cookies from your browser session.Common Options
| Option | Description |
|---|---|
--output DIR | Output directory (default:./downloads) |
--cookies FILE | Path to cookies.txt file |
--browser NAME | Extract cookies from browser (firefox, chrome, etc.) |
--videos-only | Download only videos |
--images-only | Download only images |
--limit N | Limit number of items to download |
--retweets | Include retweets when downloading user timeline |
--replies | Include replies when downloading user timeline |
--json | Output structured JSON with downloaded file paths |
--debug | Enable verbose debug output for troubleshooting |
Examples
Download all media from a user:
uv run scripts/download.py "https://x.com/NASA" --output ./nasa_mediaDownload a single tweet's media:
uv run scripts/download.py "https://x.com/user/status/1234567890"Download only videos from a user (limit 50):
uv run scripts/download.py "https://x.com/username" --videos-only --limit 50Download bookmarks with Firefox cookies:
uv run scripts/download.py "https://x.com/i/bookmarks" --browser firefoxJSON Output Mode
For programmatic use (e.g., integration with other skills), use --json to get structured output:
uv run scripts/download.py "https://x.com/user/status/123" --json --videos-onlyOutput format:
{
"files": ["/path/to/downloads/twitter_user_123_1.mp4"],
"tweet_id": "123",
"output_dir": "/path/to/downloads",
"url": "https://x.com/user/status/123",
"success": true,
"error": null
}This is used by the twitter-to-reel skill to automatically download videos before creating reels.
Output Structure
Files are saved with the following naming pattern:
{output_dir}/twitter_{username}_{tweet_id}_{num}.{ext}Troubleshooting
- Rate limiting: Add delays between requests with
--sleep 2 - Login required: Use
--cookiesor--browserfor authentication - Missing videos: Ensure yt-dlp is installed for video downloads
- Debug mode: Use
--debugflag for verbose output to diagnose issues