尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Open-source Chrome/Edge (MV3) extension to download videos, GIFs and images from X / Twitter with quality selection, a custom folder, unique filenames and a full download history.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A rewritten, open‑source Chrome/Edge extension (Manifest V3) for downloading
videos, GIFs and images from X / Twitter.
In the X mobile app many videos have no Download or Save option at all — you
can watch them, but you can't keep them. Open the same post on your computer
and this extension puts a download icon right next to Like and Bookmark. If the
video plays in your browser, one click saves it as a normal MP4, in the highest
quality X serves. Right‑click the icon to pick another resolution.
It was also built to fix three things that the older “x‑downloader” style extensions
get wrong:檢視完整 README ↗A rewritten, open‑source Chrome/Edge extension (Manifest V3) for downloading videos, GIFs and images from X / Twitter.
In the X mobile app many videos have no Download or Save option at all — you can watch them, but you can't keep them. Open the same post on your computer and this extension puts a download icon right next to Like and Bookmark. If the video plays in your browser, one click saves it as a normal MP4, in the highest quality X serves. Right‑click the icon to pick another resolution.
It was also built to fix three things that the older “x‑downloader” style extensions get wrong:
| Problem in the old extension | What this one does |
|---|---|
| No download history | Every download is recorded on the options page — thumbnail, account, quality, size, date, state — with search, re‑download, “show file”, export/import JSON. |
| No control over where files go | A configurable subfolder inside your Downloads folder, plus an optional “Ask where to save every time” mode that opens Chrome’s Save‑As dialog so you can pick any location. |
| Always downloads the wrong quality | A default quality setting (Highest / 1080p / 720p / 480p / 360p / Lowest, “closest below” your target) and a per‑download quality picker in the popup and the timeline button. |
| Saves the same file twice | Already‑downloaded media is recognised (by the media itself, not the post, so reposts count too). One click shows “Already downloaded” instead of a (1) copy; a second icon downloads it anyway. |
| Everything in one heap | Files go into one folder per account by default: Downloads/X Media Downloader/<user>/. |
No servers, no tracking, no account. Everything runs locally in your browser.
Website, guides & support: xdown.goodexts.com — e.g. how to download X videos, getting the 1080p version.
Languages: English, 简体中文, 繁體中文, 日本語, 한국어, Español (España), Español (Latinoamérica), Português (Brasil), العربية. The whole interface (popup, history page, the icon's tooltip, menus and notices on X) follows your browser's language automatically, and falls back to English otherwise. Arabic gets a right‑to‑left popup and history page.
⬇ X (Twitter) Video Downloader — Chrome Web Store
One click, automatic updates. Works in Chrome, Edge and any other Chromium browser that can install from the Web Store.
For development, or if you would rather run the code you can read. There is no build step — you load the folder directly. Takes about a minute.
Get the code. Clone it, or download the ZIP from the green Code button above and unzip it somewhere permanent (don't delete the folder afterwards — Chrome loads the extension from it every launch).
git clone https://github.com/wangsen2020/x-media-downloader.git
Open the extensions page. Type chrome://extensions in the address bar
and press Enter. On Edge it's edge://extensions.
Turn on Developer mode. The toggle is in the top‑right corner of that page (在中文界面里是右上角的 “开发者模式”). Three buttons appear.
Load unpacked. Click Load unpacked (“加载未打包的扩展程序”) and
pick the repository folder — the one that directly contains manifest.json.
Done. The product website welcome page opens automatically on first install. Open the puzzle‑piece menu in the toolbar and pin X Media Downloader so its icon is always visible.
Chrome 116+ / Edge 116+ (needs
chrome.storage.sessionand MV3 service‑worker modules).
git pull
Then go back to chrome://extensions and click the ↻ reload icon on the
X Media Downloader card.
x.com/<user>/media),
click the toolbar icon and choose Download all media from @user. A small
panel at the top of the page shows progress, with pause and stop icons. See
Batch download below.| Setting | Notes |
|---|---|
| Default video quality | Highest, a target height (1080/720/480/360, resolved as the best rendition that does not exceed it), or Lowest. |
| Filename template | Default {user}_{text}_{datetime}_{id} — author + first words of the tweet + the tweet's post time + its id, so names are descriptive and collision-proof. Tokens: {user} {text} {datetime} {date} {time} {id} {quality} {height} {bitrate} {index}. .mp4 is appended automatically; / nests folders. |
| Subfolder | A relative folder inside your browser’s Downloads directory. Default X Media Downloader/{user} (one folder per account); takes the same tokens as the filename. Blank = straight into Downloads. |
| Ask where to save every time | Opens the native Save‑As dialog for every download. Overrides the subfolder. |
| Show a Download button in the timeline | Toggle the injected button. |
| Timeline button downloads immediately | Off = the button opens a quality menu instead. |
| Keep at most | History is trimmed to this many entries (oldest dropped). |
Batch download is built to look like a person scrolling, not a scraper:
Browser extensions are sandboxed: the chrome.downloads API can only write
inside the browser’s Downloads folder (a relative subfolder is allowed) or
prompt you with the Save‑As dialog. There is no API to set an arbitrary
D:\Videos\... target silently. This extension gives you both supported
options; pick “Ask where to save every time” if you need per‑file control, or
change Chrome’s Downloads location in chrome://settings/downloads.
injected.js (page context) – hooks fetch() / XHR, reads X's own GraphQL
responses, extracts video_info.variants
│ window.postMessage
▼
content.js (content script) – caches media per tweet, injects the timeline
button, relays to the worker
│ chrome.runtime.sendMessage
▼
background.js (service worker) – resolves media (live capture → session cache →
cdn.syndication.twimg.com fallback), picks the
variant for the requested quality, builds the
filename, calls chrome.downloads.download,
tracks progress into history
│
▼
options / popup (chrome.storage.local) – settings + history UI
The syndication fallback (cdn.syndication.twimg.com/tweet-result) is the same
public endpoint embedded tweets use, so single‑tweet pages work even if the API
response was never seen. Only progressive MP4 renditions are offered
(HLS/m3u8 playlists can’t be saved as a single file by the downloads API).
Images are read straight from the tweet’s <img> elements — both attached
photos (pbs.twimg.com/media/…) and link‑preview card thumbnails
(…/card_img/…). The name= size parameter is rewritten to orig so you get
full resolution, and the real extension (jpg / png) is kept. Multi‑image
posts download every picture, numbered _1…_4.
chrome.storage.local on your machine and never
leave it. Export is a manual button.downloads (save files), storage (settings/history),
host access to x.com / twitter.com and cdn.syndication.twimg.com.Plain JS, no build step. Edit files, then hit Reload on the extensions page.
src/
injected.js page hook
content.js content script + timeline UI (classic script, no imports)
content-batch.js Media-tab batch controller (loaded with dynamic import)
content.css
background.js service worker
lib/media.js variant parsing, quality pick, filename builder, syndication
lib/store.js settings, history and downloaded-index persistence
lib/batch.js batch pacing / rate-limit / queue policy (pure)
lib/i18n.js chrome.i18n helpers for popup and options
popup/ toolbar popup
options/ history + settings page
_locales/ 9 languages; every locale has the same keys as en
icons/ generated PNGs (see tools/genicons.mjs)
tools/poster/ localized store/README poster renderer (see its README)
tools/store-listing/ store descriptions + default screenshots per language
test/ node --test unit tests
npm run lint
npm test
npm run zip
Produces x-media-downloader-<version>.zip suitable for uploading to the
Chrome Web Store / Edge Add‑ons dashboard. The published listing lives
here.
For personal use. Respect the rights of content owners and X’s Terms of Service. Don’t redistribute downloaded media without permission. This project is not affiliated with X Corp.
X Media Downloader is part of GoodExts, a set of small, focused browser extensions:
MIT — see LICENSE.