DEV Community

James Mitchell
James Mitchell

Posted on

Twitter/X Video Downloads in 2026: Tools, APIs, and What Actually Works

Twitter/X has become one of the most video-heavy platforms on the internet, but downloading those videos — whether for archiving, offline viewing, or content analysis — remains surprisingly tricky. Between API changes, rate limits, and the platform's rebranding from Twitter to X, many older approaches have broken or grown more complicated.

Here's what actually works in 2026.

Why You'd Want This

As developers, we encounter this need in several contexts:

  • Content archiving: Save viral clips before accounts disappear or get suspended
  • Research and analysis: Video transcription pipelines, ML training data, or sentiment analysis
  • Audio extraction: Podcast production often requires stripping audio from short video clips
  • Offline viewing: Low-bandwidth environments, travel, or client demos without reliable internet

Web-Based Tools

The simplest approach for non-automated use. Several tools handle the video resolution negotiation for you:

  • Twitter Video Downloader — Clean interface, supports multiple qualities. The twitter to mp3 feature is particularly useful if you only need the audio track (handy for podcast research or any workflow where video isn't necessary).
  • yt-dlp hosted interfaces — Some hosted versions exist, though they vary in stability as Twitter/X periodically changes its video delivery infrastructure.
  • SaveTweetVid — One of the older tools; still functional but can be slow on high-resolution content.

Web tools are fine for one-off downloads but don't scale to bulk operations.

yt-dlp (Command Line)

For developers, yt-dlp is the practical standard:

yt-dlp https://x.com/username/status/1234567890
Enter fullscreen mode Exit fullscreen mode

Key options:

# Best quality video
yt-dlp -f 'bestvideo+bestaudio' <url>

# Extract audio only as MP3
yt-dlp -x --audio-format mp3 <url>

# Include metadata JSON
yt-dlp --write-info-json <url>
Enter fullscreen mode Exit fullscreen mode

As of mid-2026, yt-dlp still works reliably. Keep it updated — Twitter/X pushes infrastructure changes that occasionally break the extractor:

yt-dlp -U
Enter fullscreen mode Exit fullscreen mode

For bulk operations, use --sleep-interval 2 --max-sleep-interval 5 to stay well within rate limits. Authenticated requests via --cookies-from-browser chrome help when you hit 429s, though this isn't a permanent fix.

Twitter/X API v2

The official route for production applications. The tradeoffs:

  • attachments.media_keys expansions in Tweets Lookup return media metadata (dimensions, duration, view counts) but not direct download URLs
  • Actual video download goes to Twitter's CDN via m3u8 manifests — not a formally documented API surface
  • Rate limits are aggressive even on paid tiers; bulk media downloads hit walls quickly

Best use case: extracting metadata programmatically and generating one-time download links for authenticated users. The byte transfer still happens outside the API.

Browser Extensions

For non-developer teammates or quick one-click saves, several browser extensions work. I'd be cautious about which ones you install: Twitter/X-specific extensions break without warning when the platform updates, and some have questionable data practices around browsing history.

For anything production or automated, the command-line or API approach is more reliable.

A Few Gotchas

  • Protected accounts: No tools bypass this — the account owner controls visibility, and that's enforced at the infrastructure level.
  • HLS streams: Twitter/X serves most video as adaptive HLS (m3u8). Tools that only handle MP4 direct links will miss many tweets. yt-dlp handles this correctly.
  • Quality selection: The "best" format varies — some clips top out at 720p even if they were originally higher resolution when uploaded.

What Are You Building?

Are you pulling Twitter/X clips as part of a data pipeline, or mostly archiving things manually? I'm particularly curious if anyone has built something on top of the v2 API that handles the CDN piece cleanly — it's an awkward gap in the official tooling.

Drop a comment with what you're working on.

Top comments (0)