The quickest way is the free Mastros Telegram extension for Chrome: open the chat in Telegram Web, run Media Download, tick the file types you want, and the files arrive in one ZIP in original quality. The native Telegram Desktop export and a Python script are covered below.
The native Telegram client is built around the assumption that you want to look at one piece of media at a time. Tap the photo, save to camera roll. Tap the video, save to Files. That's fine for the messages you actively engage with. It is the wrong tool for the moment when you realize there are 4,000 attachments in a group going back two years and you need them on disk.
This guide covers three reliable ways to bulk-download media from a Telegram group, channel, or chat: the native "save all" path that most people miss, a Python script for repeatable pulls, and a browser extension for everyone else. Each gets you the same files; the difference is how much time and code you want to invest.
What "all media" actually means
Telegram media isn't a single category. A typical chat contains:
- Photos: JPEGs sent inline, usually compressed by Telegram unless the sender chose "Send as file."
- Videos: MP4, often re-encoded by Telegram to a target size.
- Documents: anything sent as a file, including PDFs, ZIPs, and uncompressed images and videos.
- Audio: voice notes (OGG/Opus) and music files (MP3/M4A).
- Stickers and GIFs: usually WebP and MP4. Most bulk-download flows skip these by default.
- Round videos: those circular video messages, MP4 with their own quirks.
The right answer to "download all media" depends on which of these you actually want. The methods below let you pick.

Method comparison
| Method | Setup time | Per-chat selection | Filter by type | Resume on fail | Where it runs |
|---|---|---|---|---|---|
| Telegram Desktop export | 0 min | No (all-or-nothing) | Yes (rough) | No | Desktop app |
| Telethon script (Python) | 30–60 min | Yes | Yes | Yes (you code) | Anywhere |
| Mastros browser extension | 2 min | Yes | Yes | No (failed files are counted) | Browser |
Pick by what you actually need. If you want everything from your whole account once, the native export is fine. If you need one chat repeatedly and you can write code, Telethon. If you want one chat now and don't want to write code, the extension.
Method 1: Telegram Desktop's built-in export
Settings → Advanced → Export Telegram Data. Pick a format (HTML or JSON), check "Photos / Videos / Voice messages / Video messages / Stickers / GIFs / Files," set a size cap, hit Export.
This is the most powerful native option and most users have never opened the menu. A few things to know:
It's all chats or none. You can't pick a single group from this dialog. Telegram exports your full account: every chat, every channel you're in. Exclusions are coarse-grained: you can skip "channels" or "groups" as categories, but not "this group, not that one."
There's a size cap on individual files. The default is 8 MB; raise it to whatever your downstream storage can handle. The cap is meant to keep the export sane on accounts with thousands of large videos.
It rate-limits hard on re-runs. If you run the export, then delete the output and re-run within a few hours, Telegram will throttle aggressively. This is a feature (meant to make abuse harder), but it surprises people who treat it as an interactive command.
Time scales with account, not with what you want. If you're after one chat's media but your account has a hundred chats, you'll wait for everything before you get the slice you cared about.
The output is a folder tree with media organized by chat and message ID, plus an messages.html index. It's the right tool when "I want a personal backup" is the actual job.
Method 2: Telethon (Python) for one chat at a time
If you want a specific chat and you're comfortable with Python, this is the cleanest path. Telethon's iter_messages plus download_media does most of the work:
from telethon.sync import TelegramClient
from telethon.tl.types import (
MessageMediaPhoto, MessageMediaDocument
)
import os
api_id = 1234567
api_hash = 'YOUR_HASH'
target = 'your_group_or_channel' # username, link, or chat ID
out_dir = './media'
os.makedirs(out_dir, exist_ok=True)
with TelegramClient('session', api_id, api_hash) as client:
for m in client.iter_messages(target, limit=None):
if not m.media:
continue
if isinstance(m.media, (MessageMediaPhoto, MessageMediaDocument)):
path = client.download_media(m, file=out_dir)
print(f'#{m.id} -> {path}')
A few practical notes:
- Resume. Add a
min_id=last_seen_idtoiter_messagesso a re-run picks up where the previous one stopped. Persistlast_seen_idto a file after every successful download. - Filter by type.
m.photo,m.video,m.document.mime_typelet you skip stickers, voice notes, or anything you don't want. Branch onMessageMediaDocument.mime_typeto tell PDFs from videos. FloodWaitErrorwill happen. Wrap the loop in atry/except telethon.errors.FloodWaitError as e: time.sleep(e.seconds + 5). On a 50K-message channel, you'll hit it. Plan for it.- Original quality.
download_mediapulls the original file, not the compressed preview. If you want the preview, you have to ask forthumb=explicitly.
For the broader Telethon walkthrough (credentials, sessions, and the API surface), see our member export guide and the API vs extension comparison.
Method 3: Browser extension (Mastros) for one-click bulk
Install the Telegram Video Downloader, open Telegram Web, navigate to the group or channel, click the Mastros icon in the toolbar to open its panel, and choose Media Download. Say how many recent messages to scan and tick the types you want: photos, videos, audio, voice notes, GIFs, stickers and files. The scan lists every file with its date, sender and size, and you untick anything you do not need before the download starts.
The extension batches downloads through the Telegram Web session you're already signed into. It reads Telegram's own structured data layer rather than bundling a separate MTProto client of its own. Telegram's servers see calls from your IP, the same way they would if you'd opened Telegram Web, and there's nothing to register or connect first. No data passes through a Mastros server because there isn't one in the data path.
Practical things that matter:
- Duplicates are dropped. A file forwarded ten times downloads once, and the copies do not count against your monthly allowance.
- Failures are counted, not hidden. A file that does not arrive is left out and reported in the summary at the end, so you know to scan and run again.
- Filter by type, then by hand. The type checkboxes do the broad cut; the preview list is where you drop a sender, a date or an oversized file one row at a time.
- Where files land. Your browser's download folder, as a ZIP named after the chat. A long run is split into several ZIPs that share one name, so each stays a size any unzipper opens.
On the free plan each downloaded file counts as one of your 300 monthly messages; Pro ($9 a month) covers 10,000. The WhatsApp media downloader is the same tool for a WhatsApp chat or group, on WhatsApp Web.
Telegram media downloader extension vs bots vs online sites
| Chrome extension (Mastros) | Downloader bots | Online sites | |
|---|---|---|---|
| Works on private channels you joined | Yes | Rarely; the bot must be in the chat | No |
| Bulk, whole chat | Yes, filtered by media type | One file per message forwarded | One link at a time |
| Quality | Original file | Often re-encoded | Often re-encoded, size limits |
| Where the file goes | Your computer, directly | Through the bot's server | Through the site's server |
| Cost | Free tier, plans for volume | Free with limits, ads | Free with ads |
Can you download Telegram media on Android?
Telegram's own app saves one file at a time to the gallery. There is no bulk media download on Android or iPhone. Use Telegram Web in Chrome on a computer with the extension for a whole chat; the files land in a folder on the computer, and a cloud folder gets them to the phone.
Is downloading media from a channel safe?
From your own account, in your own browser, yes: the extension reads files Telegram already delivers to you and saves them locally, and it sends nothing. The unsafe versions are bots and sites that route your files through a third-party server, and modified Telegram apps. Keep to channels you have a right to save from.
Choosing where the files live
Before you start a 200 GB pull, decide where it's going. A few patterns that hold up:
Local SSD for active work. Fastest, easiest to inspect. Limited by your disk and not great for sharing.
Network-attached storage (Synology, Unraid, NAS). Right answer when the export is the start of an archive you'll keep. Mount the share as a folder, point the script or extension at it.
Object storage (S3, R2, GCS). The right answer when the archive is also the system of record, covered in detail in our compliance archiving guide. With Object Lock or its equivalent, you get tamper-evidence as a free side effect.
A USB drive in a drawer. Looks dumb, works fine for one-off "I want a copy in case the group disappears" backups. Pair it with a checksum file and you're done.
The mistake to avoid: bulk-downloading 50K files into your main Documents folder. Spotlight, Backup, and Time Machine will all become much slower until you move them.
File naming and de-duplication
A bulk download produces thousands of files with names that may or may not be useful. Telegram's defaults are unhelpful: a typical filename is photo_2026-05-08_14-22-11.jpg, and you'll get a dozen of those colliding within seconds during a busy chat day.
Three rules that save trouble:
- Prefix every file with its message ID.
00012345_photo_2026-05-08_14-22-11.jpg. Stable, sortable, and joins back to the message in your CSV/JSON export. - Hash duplicates instead of renaming them. If the same photo was forwarded ten times in the chat, you don't need ten copies. Compute a SHA-256 and write the file once; keep a separate mapping of which message IDs reference it.
- Strip path-unsafe characters. Telegram allows colons, slashes, and emoji in filenames. Your filesystem may not. The Telethon
download_mediadoes some of this for you; the extension does all of it.
If you're piping the output into a search index or vector store, the message-ID prefix is what lets the index point back to "the original message this file came from."
Edge cases
A few situations that bite people on first runs:
Channels with content protection ("saving disabled"). When the channel admin has enabled this, the native client greys out the download button. The Telegram API enforces this server-side, so legitimate libraries (Telethon, GramJS) and extensions that wrap them honor the flag. Tools that claim to bypass it are doing something the API doesn't permit, with the risks that implies. We cover this in detail in our private and restricted channel guide.
Self-destructing media. Voice notes and view-once photos are designed to be unsavable. They aren't part of any legitimate bulk download.
Live photos. iOS sends photo + a short video as a "live photo." The video portion shows up as a separate document message. Decide whether you want the still, the motion, or both.
Forwarded media. A forwarded photo shows up in your chat with the original sender's metadata. The file you download is the same bytes, but the message metadata reflects the forward, not the original chat.
Verifying your pull is complete
Whatever method you used, before you call the job done:
- Count. Open the chat, look at the "Shared media" tab, note the count by type. Compare to your file count.
- Spot-check. Pick a date six months ago and a date last week. Confirm files from both are in the output.
- Check sizes. A "successful" download of zero bytes is more common than it should be. Sort by size, look for outliers.
- Sample play/preview. Open three random files. If they're corrupted, fix the script and rerun before the next 4,000 downloads.
The post-pull validation step is what separates a backup from "I think I have a backup."
One-click bulk download → Install Mastros for Telegram from the Chrome Web Store, open the group or channel in Telegram Web, run Media Download.
FAQ
Can I bulk-download media from just one Telegram group?
Not with Telegram Desktop's built-in export, which is all-chats-or-none: you can exclude whole categories like "channels", but not a specific group. Because it processes the entire account, you wait for everything before you get the slice you wanted. A Python script or a browser extension targets a single chat directly.
Why did my Telegram export skip large videos?
There is a per-file size cap in the export dialog, and it defaults to 8 MB. Raise it to whatever your downstream storage can handle before starting the run, or every file above the cap is silently left out.
Why is Telegram throttling my export?
Re-running the built-in export shortly after a previous run triggers aggressive rate limiting. It is deliberate (it makes abuse harder), but it catches people who treat the export as an interactive command they can retry freely. Plan one run and let it finish.
How do I avoid thousands of duplicate and colliding filenames?
Telegram's default names collide within seconds on a busy chat day. Prefix each file with its message ID (00012345_photo_….jpg) so names are stable, sortable, and join back to your CSV or JSON export. Deduplicate by hashing content rather than renaming, keeping a mapping of which message IDs point at each file, and strip characters your filesystem rejects.
Can I download self-destructing or view-once media in bulk?
No. View-once photos and self-destructing voice notes are designed to be unsavable, and they are not part of any legitimate bulk download. The same applies to media in channels where the admin has enabled content protection, which Telegram enforces server-side.
How do I know the download actually captured everything?
Check the chat's "Shared media" tab for counts by type and compare against your file count. Then spot-check two distant dates, sort by file size to catch zero-byte "successes", and open a few files at random to confirm they are not corrupt. That validation step is the difference between a backup and assuming you have one.
Related reading
- How to Download Media from a Private Telegram Channel or Group: the next article in this series, covering the access-controlled cases.
- Telegram Auto-Download Media: Settings and Common Problems: when the issue isn't bulk extraction but the per-message auto-save behavior.
- How to Export Telegram Messages: 5 Methods Compared: the message-text companion to this media guide.
- Telegram API vs Browser Extension: the architectural choice underneath whichever tool you pick.
- Telegram Video Downloader: the extension method from this guide, with the setup steps and the options compared side by side.
- WhatsApp Media Downloader: the same bulk download for a WhatsApp chat or group, from WhatsApp Web.
- Instagram Email Finder, for creators rather than files: the email each profile published in its bio, as a column on a followers export.
- Telegram Statistics 2026: Users, Channels, Privacy: how many people, channels and groups the numbers above sit inside.