Extract and Download Original Quality Images from X (Twitter)

Previous topic - Next topic
QuoteOpen the image in a new tab. In the address bar, locate the parameter name=small (or large/medium) at the end of the URL. Delete it and replace it with name=orig. Press Enter to load the raw uncompressed file, then save it.


X (formerly Twitter) aggressively compresses images to save bandwidth and load timelines faster. When you click "Save Image" from the timeline, you are often downloading a "Large" or "Medium" proxy, not the master file the photographer uploaded. The actual source file resides on the CDN but is hidden behind a URL parameter manipulation that most users never see.

Checklist

  • A modern web browser (Chrome, Firefox, Edge).
  • Access to the direct URL of the image (Right-click > "Open Image in New Tab").
  • The Hidden Requirement: You must respect the file format. If the URL says format=webp, changing it to format=jpg might break the link or force a server-side conversion. Keep the format, change the name.

Step-by-Step Guide

  • Step 1: Isolate the Asset
    Click the photo on X so it opens in the "lightbox" view. Right-click the image and select Open Image in New Tab.
  • Step 2: Modify the CDN Parameter
    Look at the URL bar. It will look like this:
    [https://pbs.twimg.com/media/F_xD...?format=jpg&name=large]
    Change the very last part from name=large to name=orig.
  • Step 3: Execute and Save
    Hit Enter. The image may take longer to load because you are now pulling the raw 4K/8K data. Right-click and Save Image As.

How It Works & Hidden Details

X stores images on the `pbs.twimg.com` domain. The URL structure is a query string that tells the server how to process the image before sending it to you.

The structure is: `?format=[TYPE]&name=[SIZE]`

  • name=thumb: 150x150 cropping (used for grid views).
  • name=small: Low res, high compression (mobile data saver).
  • name=large: The standard "high quality" view, capped at 2048px or 4096px depending on the year.
  • name=orig: The "Original" master. This bypasses the resolution cap and compression algorithms. If a user uploaded a 20MB PNG, this parameter delivers the 20MB PNG.

Things to Watch Out For

  • Risk 1: WEBP Conversion
    Chrome often defaults to saving images as .WEBP. If you need a JPG/PNG, you may need to edit the format= parameter to format=jpg, though this only works if that specific format exists on the server.
  • Risk 2: Mobile Difficulty
    On mobile (Android/iOS), you cannot easily edit URLs in the app. You must use a browser (Chrome/Safari) and request "Desktop Site" to perform this URL hack.

Frequently Asked Questions

  • Q: Can I download all images from a thread at once?
    A: Not natively. You need a CLI tool like gallery-dl or a browser extension. Manual URL editing is for single, high-value targets.
  • Q: Does this work for Profile Pictures (PFPs)?
    A: Yes, but the URL structure is slightly different. Remove `_400x400` from the filename before the `.jpg` extension.

Update: Additional Details & Recent Changes

  • Profile Picture Variations:
    While `_400x400` is the most common suffix, you may also encounter `_normal`, `_bigger`, or `_mini` in the filename depending on where you found the avatar (e.g., timeline vs. notification shade). The rule remains the same: delete the underscore and the suffix entirely (e.g., change `image_normal.jpg` to `image.jpg`) to reveal the master file.
  • Legacy URL Syntax:
    For tweets older than ~2016, X uses a colon syntax instead of the modern query string. If you see a URL ending in `.jpg:large` or `.png:large`, delete the `:large` and replace it with `:orig`. The query parameter method (`?name=orig`) will not work on these legacy assets.
  • Forcing Format Conversion:
    If a user uploads a high-efficiency image (HEIC) from an iPhone, the server may default to serving you a WEBP. You can force the server to transcode it for you by changing the URL to `?format=jpg&name=orig`. This retrieves the maximum resolution while ensuring compatibility with standard editors.

QuoteIf you need a JPG/PNG, you may need to edit the format= parameter to format=jpg, though this only works if that specific format exists on the server.
Update: X's CDN can dynamically transcode on the fly. Even if the original was HEIC or PNG, requesting `format=jpg` with `name=orig` will usually force the server to generate a maximum-quality JPEG for you, rather than just failing.

Similar topics (5)