Forward a movie.
It saves itself.

A self-hosted Telegram downloader bot. Send it any file โ€” a movie, a series, a document โ€” and it saves it straight to your own storage. No 20 MB cloud cap, no monthly fees, no third-party servers.

Install in one command How it works
๐Ÿณ Docker๐Ÿ›ฐ MTProto โ€” no size limit๐Ÿ”’ Self-hosted๐Ÿ  Runs on a Pi

Why self-host it

Your files, your disk, your rules.

๐Ÿ›ฐ

No size limit

MTProto (Telethon) session instead of the bot cloud API โ€” 2 GB movies download fine, not capped at 20 MB.

๐Ÿ”’

Private by default

Files go straight to your drive over Telegram's encrypted transport. No middleman server ever sees them.

๐Ÿ’ฐ

Free to run

One small container on the hardware you already own โ€” a Raspberry Pi or any always-on box.

๐Ÿ 

Runs on a Pi

Multi-arch image (amd64 + arm64) built by CI โ€” your Pi, your friend's Intel laptop, both work.

๐Ÿ“Š

Live progress

The status message updates in place with a progress bar, size and percentage as the download runs.

๐Ÿ‘ฅ

Access control

Lock the bot to specific Telegram user ids. Random people get a single "Not authorised" โ€” no loops.

Install

Prerequisite: Docker with the compose plugin. Pick your path:

curl -fsSL -o run.sh https://raw.githubusercontent.com/arjun0084/TelegramDownloader/main/run.sh && bash run.sh

First run downloads docker-compose.yml + .env.example, creates .env and tells you exactly what to fill in. Run it once more and the container is up. Updates = same command.

docker run -d --name tgdl --restart unless-stopped \
  -v /path/to/your/media:/downloads -v tgdl_data:/data \
  -e TG_API_ID=... -e TG_API_HASH=... -e TG_BOT_TOKEN=... \
  -e TG_OUTPUT_DIR=/downloads \
  arjun0084/telegram-downloader:latest

The no-compose path. Swap the env values for yours and the media path for your folder.

mkdir tgdl && cd tgdl
curl -fsSL -O https://raw.githubusercontent.com/arjun0084/TelegramDownloader/main/docker-compose.yml
curl -fsSL -O https://raw.githubusercontent.com/arjun0084/TelegramDownloader/main/.env.example
cp .env.example .env
nano .env
./run.sh

How it works

Three steps between you and a private downloader.

Get free API credentialsGrab api_id + api_hash from my.telegram.org and a bot token from @BotFather โ€” takes two minutes, costs nothing.
Run one commandDocker pulls the image from Docker Hub. You configure your secrets in a single .env file and point it at your downloads folder.
Forward and forgetOpen a chat with your bot, forward any movie or file, and watch it land on your drive with a live progress bar.

Configuration

Everything lives in one .env file (copy from .env.example).

VariableWhat it isWhere to get it
TG_API_IDTelegram app idmy.telegram.org โ†’ API development tools
TG_API_HASHTelegram app hashmy.telegram.org โ†’ API development tools
TG_BOT_TOKENBot token@BotFather โ†’ /newbot
MEDIA_HOST_DIRWhere downloads land on your machineYour own path, e.g. /media/usb or ~/Videos
TG_ALLOWED_USER_IDAllow-list of Telegram ids (comma-separated). 0 = anyone in private chat@userinfobot

Usage

Nothing to learn.