<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: James Mitchell</title>
    <description>The latest articles on DEV Community by James Mitchell (@jamesmitchell_dev).</description>
    <link>https://dev.to/jamesmitchell_dev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3876753%2F3feed822-a5ba-4017-af5b-249da5ad1ad6.png</url>
      <title>DEV Community: James Mitchell</title>
      <link>https://dev.to/jamesmitchell_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jamesmitchell_dev"/>
    <language>en</language>
    <item>
      <title>Twitter/X Video Downloads in 2026: Tools, APIs, and What Actually Works</title>
      <dc:creator>James Mitchell</dc:creator>
      <pubDate>Wed, 24 Jun 2026 16:40:11 +0000</pubDate>
      <link>https://dev.to/jamesmitchell_dev/twitterx-video-downloads-in-2026-tools-apis-and-what-actually-works-2h81</link>
      <guid>https://dev.to/jamesmitchell_dev/twitterx-video-downloads-in-2026-tools-apis-and-what-actually-works-2h81</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Here's what actually works in 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why You'd Want This
&lt;/h2&gt;

&lt;p&gt;As developers, we encounter this need in several contexts:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Web-Based Tools
&lt;/h2&gt;

&lt;p&gt;The simplest approach for non-automated use. Several tools handle the video resolution negotiation for you:&lt;/p&gt;

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

&lt;p&gt;Web tools are fine for one-off downloads but don't scale to bulk operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  yt-dlp (Command Line)
&lt;/h2&gt;

&lt;p&gt;For developers, &lt;code&gt;yt-dlp&lt;/code&gt; is the practical standard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yt-dlp https://x.com/username/status/1234567890
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Best quality video&lt;/span&gt;
yt-dlp &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s1"&gt;'bestvideo+bestaudio'&lt;/span&gt; &amp;lt;url&amp;gt;

&lt;span class="c"&gt;# Extract audio only as MP3&lt;/span&gt;
yt-dlp &lt;span class="nt"&gt;-x&lt;/span&gt; &lt;span class="nt"&gt;--audio-format&lt;/span&gt; mp3 &amp;lt;url&amp;gt;

&lt;span class="c"&gt;# Include metadata JSON&lt;/span&gt;
yt-dlp &lt;span class="nt"&gt;--write-info-json&lt;/span&gt; &amp;lt;url&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yt-dlp &lt;span class="nt"&gt;-U&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h2&gt;
  
  
  Twitter/X API v2
&lt;/h2&gt;

&lt;p&gt;The official route for production applications. The tradeoffs:&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  Browser Extensions
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;For anything production or automated, the command-line or API approach is more reliable.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Few Gotchas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Protected accounts&lt;/strong&gt;: No tools bypass this — the account owner controls visibility, and that's enforced at the infrastructure level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HLS streams&lt;/strong&gt;: 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality selection&lt;/strong&gt;: The "best" format varies — some clips top out at 720p even if they were originally higher resolution when uploaded.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Are You Building?
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Drop a comment with what you're working on.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why I Stopped Logging In to Read Tweets</title>
      <dc:creator>James Mitchell</dc:creator>
      <pubDate>Sat, 18 Apr 2026 00:48:56 +0000</pubDate>
      <link>https://dev.to/jamesmitchell_dev/why-i-stopped-logging-in-to-read-tweets-1b8</link>
      <guid>https://dev.to/jamesmitchell_dev/why-i-stopped-logging-in-to-read-tweets-1b8</guid>
      <description>&lt;p&gt;Someone shares a tweet in a Slack channel. I click. Twitter shows me half the post, then drops a login wall. I close the tab.&lt;/p&gt;

&lt;p&gt;This happens constantly now. Public content — content that was publicly broadcast, on a public URL — has been quietly converted into gated content. Not by changing what's published, but by changing who is allowed to &lt;em&gt;read&lt;/em&gt; without first identifying themselves.&lt;/p&gt;

&lt;p&gt;I don't think this is just a Twitter complaint. It's a design pattern that's spread across the web, and it deserves a name: &lt;strong&gt;read-gating&lt;/strong&gt;. The service still publishes, the search engines still index, but the act of reading now requires an account, a session cookie, and — implicitly — your behavioral data.&lt;/p&gt;

&lt;p&gt;So a small tribe of developers has been building &lt;strong&gt;privacy-first viewers&lt;/strong&gt;: tiny apps whose only job is to render public social content without asking the reader to log in. Not piracy, not scraping for resale — just rendering what was already public, the way the web used to.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "privacy-first" actually means here
&lt;/h2&gt;

&lt;p&gt;A genuine privacy-first viewer commits to a small set of constraints:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No reader login required&lt;/strong&gt; to access public content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No third-party trackers&lt;/strong&gt; loaded on the rendered page (no analytics pixels, no engagement instrumentation).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No client-side fingerprinting&lt;/strong&gt; — canvas, font enumeration, WebGL probes off by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No persistent reader profile&lt;/strong&gt; — the viewer doesn't need to know that &lt;em&gt;you, specifically&lt;/em&gt; read this post.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stateless or minimal-state design&lt;/strong&gt; — sessions exist only when strictly needed (e.g., bookmarks the user explicitly opted into).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These aren't radical demands. They're roughly what every news website looked like in 2008.&lt;/p&gt;

&lt;h2&gt;
  
  
  The viewer ecosystem in 2026
&lt;/h2&gt;

&lt;p&gt;A non-exhaustive map of what's still alive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;YouTube → &lt;a href="https://invidious.io/" rel="noopener noreferrer"&gt;Invidious&lt;/a&gt;&lt;/strong&gt; — mature, many public instances, the model others copied.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reddit → Libreddit / Redlib&lt;/strong&gt; — most instances rate-limited heavily after Reddit's API changes; usable but bumpy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Twitter / X → Nitter&lt;/strong&gt; — most public instances are dead or unstable since the API changes; a few self-hosted ones survive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Twitter / X → &lt;a href="https://twitterviewer.net" rel="noopener noreferrer"&gt;Twitter Viewer&lt;/a&gt;&lt;/strong&gt; — a more recent hosted attempt, no account, no install, paste a tweet or profile URL and read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instagram → Bibliogram&lt;/strong&gt; — largely defunct.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TikTok → ProxiTok&lt;/strong&gt; — alive, intermittently rate-limited.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern across all of them is the same: &lt;strong&gt;the platforms keep tightening, and the viewers keep getting rebuilt by smaller and smaller teams.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-host or use a public instance?
&lt;/h2&gt;

&lt;p&gt;Both have honest trade-offs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-hosting&lt;/strong&gt; gives you control and removes the trust assumption — but you become a single user behind one IP, which is easy for the source platform to rate-limit or block. You also inherit the operational burden every time the upstream API changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Public instances&lt;/strong&gt; distribute load and survive blocks better, but you're trusting the operator. The mitigation is to pick instances that publish their source, don't ask you to log in, and don't run analytics on the rendered pages. Verify with a quick DevTools check — privacy-first should be observable, not just claimed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is worth caring about
&lt;/h2&gt;

&lt;p&gt;It's tempting to frame this as a fight against the platforms. I don't think that's the right frame. Most of the people I know who use these viewers aren't ideologues; they just want to read a tweet someone linked them, without being asked to perform identity in exchange.&lt;/p&gt;

&lt;p&gt;The interesting thing is what the existence of these tools reveals: a lot of "engagement" we attribute to social platforms is actually &lt;strong&gt;friction we'd remove if we could&lt;/strong&gt;. People want to consume the content. They don't want the rest of the package.&lt;/p&gt;

&lt;p&gt;If you build for the web, this is worth sitting with. The next generation of social UX might not be the platform — it might be the thin layer that lets you &lt;em&gt;read&lt;/em&gt; the platform without joining it.&lt;/p&gt;




&lt;p&gt;What other read-gated experiences have you given up on lately? And which viewers are still working for you in 2026?&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
