# Telegram Media Downloader: a userscript that restores the download button in restricted chats

> Telegram Media Downloader is a Greasy Fork userscript for Telegram Web that re-enables saving images, GIFs, audio and video in chats and private channels where saving is disabled. It is a browser-side tool, not an app, and it only works inside the Telegram web client.

**Neet-Nestor/Telegram-Media-Downloader** — A script allowing you to download images and videos from Telegram web even if the group restricts downloading.

- Repository: https://github.com/Neet-Nestor/Telegram-Media-Downloader
- Website: https://greasyfork.org/scripts/446342-telegram-media-downloader
- Stars: 5,772 · Forks: 571
- Language: JavaScript
- License: GPL-3.0
- Published: 2026-09-22 · Updated: 2026-09-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/neet-nestor-telegram-media-downloader

## The problem: Telegram Web hides the save button and the file stays viewable but unsaveable

Telegram lets a channel or group owner disable saving content. In the web client that setting removes the download control from images, GIFs, audio and video, even though the media still renders in the chat. You can look at it and you cannot keep it. The README frames the project exactly around this gap: for channels and chats that allow saving, the script has no effect and you should use the official button, but for those that "disable downloading and restrict saving content", it adds the download button back.

The audience is narrow and specific. It is people who already read Telegram in a browser rather than the desktop or mobile app, and who need a copy of a file for personal archiving, reference or offline viewing. It is not aimed at someone who wants to bulk-export a channel, and it is not aimed at mobile users, because the README describes installation only through browser userscript managers.

## How the userscript works: it runs inside the page and rebuilds the missing control

This is a userscript, not a service. Greasy Fork describes user scripts as code that runs on the pages you visit and changes them, and that is the whole architecture here: the script is injected into the Telegram web app by a manager such as Tampermonkey, Violentmonkey, Greasemonkey or Userscripts, and it operates on the page you already have open.

That design explains the behaviour the README documents. Because the script lives in the page, it can only act on media the page has loaded, which is why there is no download-by-link feature and why the script does nothing in chats that were never restricted. It also explains the version sensitivity. The README notes two web app versions, https://webk.telegram.org (also reachable as https://web.telegram.org/k/) and https://webz.telegram.org (https://web.telegram.org/a/), and states that some features are only available in the /k/ version, naming voice message downloads as the example. The script has to attach to whatever DOM and internal structures that particular client build exposes, so a change on Telegram's side can break a feature without the userscript changing at all.

Progress reporting is similarly tied to the page. For videos, the README says a progress bar appears in the bottom-right corner after the download starts; for images and audio there is no progress bar. Logs also go to the DevTools console, which is the practical place to look when a download silently does nothing.

## Installing Telegram Media Downloader from Greasy Fork and saving your first restricted video

There are two installation paths in the README. The normal one is Greasy Fork: install a userscript manager first, then open the script page and install it. The README gives this example for Chrome-based browsers, and notes that Tampermonkey on Chrome needs Developer Mode enabled by following Tampermonkey's own FAQ instructions.

```bash
# Chrome: install Tampermonkey or Violentmonkey, then enable Developer Mode
# Firefox: Greasemonkey, Tampermonkey or Violentmonkey
# Safari: Tampermonkey or Userscripts
# Edge / Opera: Tampermonkey or Violentmonkey
# Maxthon: Violentmonkey
```

After the manager is in place, the README points at the Greasy Fork page for the script itself:

```bash
https://greasyfork.org/scripts/446342-telegram-media-downloader
```

If you prefer to install from source, the README describes a manual route: open the Tampermonkey Dashboard, drag and drop src/tel_download.js into it, and click the install button. There is no npm package and no build step described in the README.

```bash
# Manual install, from the README:
# 1. open the Tampermonkey Dashboard
# 2. drag and drop src/tel_download.js into it
# 3. click "install"
```

For a first real use, open the /k/ web app at https://web.telegram.org/k/, sign in, and open a chat or private channel where saving is disabled. Media that previously had no save control should now show a download button. Click it on a video and the README says a progress bar appears in the bottom-right corner. If nothing happens, open the DevTools console, because the README states logs are written there.

## Where it stops working: version differences, no batch export, and a page-bound scope

The most concrete limitation is stated by the project itself: some features only work on specific web app versions, and voice message download is only available on the /k/ version. If you are on /a/ and a feature is missing, the README's own remedy is to switch to /k/. That is a real constraint, not a footnote, because it means the tool's capability set depends on which URL you happen to use.

The second limitation is scope. The script only works on the Telegram web app, and it only affects media that is already rendered in the page. There is no documented command line, no API, no bot, and no way to hand it a message link and get a file. If your actual need is "download everything from this channel in one pass", this is the wrong tool, and the README does not claim otherwise.

Third, the failure mode is quiet. If Telegram changes the client's markup or the userscript manager is not running, the button simply does not appear. The README's troubleshooting guidance is to check the DevTools console, which is a reasonable but manual diagnostic. There is no error surface in the UI beyond the absence of the control you expected.

## How it differs from Telegram's own client and from a dedicated downloader app

The obvious alternative is doing nothing and using Telegram's official download button. That is the correct choice whenever the chat permits saving, and the README says so directly: for channels and chats that allow saving content, the script has no effect, so use the official button. The difference is not capability but coverage. The official button is the supported path and works everywhere the owner allows it; this script covers the subset of chats where the owner disabled saving.

A second alternative is a standalone downloader application or bot that talks to Telegram's API with your account credentials. That approach is not page-bound: it can work on media you never opened in a browser, and it does not depend on the web client's markup. The trade-off runs the other way too. Such a tool needs your Telegram account session and runs outside the browser sandbox, whereas this userscript is a file installed into a userscript manager and it acts only on the page you are already viewing. If your requirement is a single file from a chat you are reading right now, the userscript is the smaller commitment. If your requirement is volume, the API-based route is the one built for it.

## Maintenance, licence and what upgrading actually costs you

The repository is not archived, and the last push was on 2026-03-09. That is roughly six months before today's date, so treat the project as maintained but not fast-moving; do not assume fixes land quickly when Telegram changes its web client. The project is written in JavaScript and ships as a single script at src/tel_download.js, with no release artifacts listed in the repository metadata.

Upgrade cost is low in the normal case. Greasy Fork serves the script, and userscript managers can check for updates, so an upgrade is usually a version bump inside the manager rather than a manual file replacement. The manual path is different: if you installed by dragging src/tel_download.js into Tampermonkey, you have to repeat that drag and drop to move forward. Either way, the thing you are upgrading is a page script, so the risk of an upgrade is not migration effort, it is that a new version may or may not match the current Telegram web build.

The licence is GPL-3.0, per the repository's LICENSE file and the badge in the README. Practically, that means if you redistribute a modified version of this script, the GPL's copyleft terms attach to your version. This is not legal advice; if you plan to ship a modified copy inside a product, read the licence text and get proper advice.

## Conclusion

Adopt it if you already read Telegram in a desktop browser, you have a userscript manager installed, and you only need to save media you can already view. Do not adopt it if you need batch downloads by link, an Android or iPhone app, or anything that works outside the Telegram web client, because the README describes none of those. Before relying on it, verify two things yourself: that the chat you care about is actually restricted (unrestricted chats keep their own download button and the script does nothing there), and that you are on the /k/ web app, since the README states some features such as voice message downloads exist only in that version.

## FAQ

### How do I use Telegram Media Downloader?

Install a userscript manager such as Tampermonkey, Violentmonkey, Greasemonkey or Userscripts, then install the script from its Greasy Fork page or drag src/tel_download.js into the Tampermonkey Dashboard. Open the Telegram web app, go to a chat or channel where saving is disabled, and use the download button the script adds for images, GIFs and videos. The README recommends the /k/ version of the web app.

### Does Telegram Media Downloader work on iPhone or Android?

The README describes installation only through browser userscript managers, and lists Safari options (Tampermonkey or Userscripts) among them, so the supported path is a browser, not the Telegram mobile app. Nothing in the README describes an iOS or Android build, an APK, or a mobile app.

### Does Telegram Media Downloader work on chats that already allow saving?

No. The README states that for channels and chats that allow saving content the script has no effect, and that you should use the official download button provided by the Telegram web app instead. It only adds a download button where downloading is disabled or restricted.

### Can Telegram Media Downloader download media by link?

The README does not describe any download-by-link feature. The script works on the Telegram web app and acts on media loaded in the page, so there is no documented way to paste a message link and receive a file.

## Sources

- [Issues](https://github.com/Neet-Nestor/Telegram-Media-Downloader/issues)
- [License: GPL-3.0](https://github.com/Neet-Nestor/Telegram-Media-Downloader/blob/main/LICENSE)
- [Neet-Nestor/Telegram-Media-Downloader on GitHub](https://github.com/Neet-Nestor/Telegram-Media-Downloader)
- [Project website](https://greasyfork.org/scripts/446342-telegram-media-downloader)
- [README](https://github.com/Neet-Nestor/Telegram-Media-Downloader/blob/main/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/neet-nestor-telegram-media-downloader
