A lightweight, high-performance browser extension that integrates seamlessly into X (formerly Twitter) to add a download button under images, videos, and GIFs, letting you download them in the highest available quality with a single click.
We have restructured the repository to separate development source code from the final packaged extensions:
tweet-downloader/
├── src/ # Source code (Single source of truth)
│ ├── icons/ # Extension icons (16px, 32px, 48px, 128px)
│ ├── background.js # Shared background script (handles file downloading)
│ ├── inject.js # Injector script (runs at document_start)
│ ├── content.js # Main UI injector and X API response observer
│ └── content.css # Download button and loader styling
├── manifests/ # Browser-specific configurations
│ ├── manifest-chrome.json
│ └── manifest-firefox.json
├── dist/ # Generated outputs (Created by build.py)
│ ├── chrome/ # Unpacked Chrome extension folder
│ ├── firefox/ # Unpacked Firefox extension folder
│ ├── tweet-downloader-chrome.zip # Packaged Chrome package
│ └── tweet-downloader-firefox.zip # Packaged Firefox package
└── build.py # Cross-platform build & packaging script
If you just want to grab the compiled extensions:
- 📥 Chrome/Edge/Brave Package: tweet-downloader-chrome.zip
- 📥 Firefox/Floorp Package: tweet-downloader-firefox.zip
You can install either the unpacked folder (recommended for developers) or the ZIP archive:
- Extract the downloaded ZIP file if you are using the ZIP, or locate the dist/chrome/ folder.
- Open your browser and navigate to the Extensions page:
- Chrome/Brave:
chrome://extensions/ - Edge:
edge://extensions/
- Chrome/Brave:
- Enable Developer mode (usually a toggle in the top-right corner).
- Click the Load unpacked button in the top-left.
- Select the dist/chrome/ directory.
Since standard versions of Firefox block the permanent installation of unsigned developer extensions, you must load it as a temporary extension:
- Open Firefox or Floorp and navigate to:
about:debugging - Click This Firefox (or This Floorp) on the left sidebar.
- Click the Load Temporary Add-on... button.
- Select either:
- The manifest.json file inside the dist/firefox/ directory.
- Or the packaged tweet-downloader-firefox.zip file.
(Note: Temporary extensions are automatically unloaded when you close Firefox.)
If you make modifications to the extension source code inside the src/ directory, you can build and package both extensions by running the build script:
python build.pyThis script will:
- Clean the
dist/directory. - Copy files from
src/to both Chrome and Firefox build folders. - Apply the correct manifest (
manifest-chrome.jsonandmanifest-firefox.json). - Generate updated, browser-compatible ZIP packages in the
dist/folder using the correct ZIP compression standards.