Skip to content

A self-hosted media streaming solution that lets you store, organize, and stream your video files from Telegram Servers. Access your media library from anywhere via a web interface or Android TV app / Mobile App.

License

Notifications You must be signed in to change notification settings

subinps/TelePlay

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“Ί TelePlay

Your personal, self-hosted media server β€” powered by Telegram.

TelePlay Banner

Stream and manage your Telegram files on any device β€” TV, Mobile, or Browser β€” without downloading the entire file. TelePlay uses Telegram as unlimited cloud storage and streams content on-demand at high speed using its multi-client parallel download technology. Upload via a Telegram Bot, organize through a Web App, and watch anywhere.

License Python FastAPI React Kotlin


✨ Features

πŸ€– Telegram Bot β€” Full Command List

  • Upload any file type (video, audio, documents, photos)
  • Organize files into folders with inline buttons
  • Rename, move, and delete files via chat commands
  • Search your library with /myfiles
  • Get an auto-login web link with /web

🌐 Web App β€” Login Methods

  • Full file browser with folder navigation
  • Multi-select, batch delete, rename, and move operations
  • Context menu (right-click) on files
  • Inline video/audio player with seeking
  • Three login methods (direct link, login code, remote authorization)
  • Responsive β€” works on desktop and mobile

πŸ“Ί Android TV & Mobile App β€” Installation Guide

  • Designed for TV with D-Pad / remote control navigation
  • Continue Watching and Recently Added rows on the home screen
  • Full-screen ExoPlayer playback with transport controls
  • Download files for offline playback (Mobile)
  • Picture-in-Picture mode (Mobile)
  • Watch progress automatically synced with the server

⚑ Platform β€” Architecture Overview


πŸ—οΈ How It Works

  You                Telegram Cloud              Your Server              Your Devices
  ───                ──────────────              ───────────              ────────────
   β”‚                                                  β”‚
   β”‚  1. Send file to Bot ──────────────────────────► β”‚
   β”‚                         2. Bot forwards to  ───► β”‚ (Private Channel)
   β”‚                            Storage Channel       β”‚
   β”‚                                                  β”‚ 3. Saves metadata
   β”‚                                                  β”‚    to Database
   β”‚                                                  β”‚
   β”‚  4. Open Web / TV App ◄──────────────────────────│
   β”‚                                                  β”‚
   β”‚  5. Press Play ──────────────────────────────► β”‚
   β”‚                         6. Fetches chunks   ◄──  β”‚ (from Telegram)
   β”‚  7. Streams to you ◄────────────────────────── β”‚
   β”‚                                                  β”‚

Your files are never stored on your server β€” TelePlay streams them directly from Telegram's cloud on demand.


πŸ“Έ Screenshots

🌐 Web Interface

πŸ“Ί Android TV

πŸ“± Mobile App


οΏ½ Quick Start

Prerequisites β€” Detailed Steps

Requirement How to get it
Telegram Bot Token Create via @BotFather
API ID & Hash Register at my.telegram.org
Storage Channel Create a private channel, add your bot as admin
Docker Install Docker

1. Clone & Configure

git clone https://github.com/yourusername/teleplay.git
cd teleplay
cp .env.example .env

Edit .env with your credentials:

TELEGRAM_API_ID=12345678
TELEGRAM_API_HASH=abcdef1234567890abcdef1234567890
TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
TELEGRAM_STORAGE_CHANNEL_ID=-100xxxxxxxxxx
JWT_SECRET=your-super-secret-key-at-least-32-characters

# Use PostgreSQL (recommended) or SQLite (no setup needed):
DATABASE_URL=sqlite:///./data/teleplay.db
# DATABASE_URL=postgresql://postgres:password@db:5432/teleplay

2. Deploy

docker compose up -d

That's it! Your services are now running:

Service URL
Web App http://localhost
Backend API http://localhost:8000

3. Start Using

  1. Open Telegram and send a video file to your bot.
  2. Send /web to get a link to your Web App.
  3. Stream your files! 🎬

For detailed setup, usage, and login instructions, see the Setup & Usage Guide.

For VPS, Railway, Render, and CapRover deployments, see the Deployment Guide.


πŸ“± Android TV & Mobile App

Download the APK from the Releases page:

APK Best For
arm64-v8a Modern TV boxes, phones, NVIDIA Shield
universal Any device (if unsure, use this one)

Setup:

  1. Install the APK on your device.
  2. Enter your Server URL (e.g., http://192.168.1.100).
  3. A 6-digit code will appear β€” send /login CODE to your bot.
  4. Done! Browse and stream your library.

For APK signing and release automation, see the Releasing Guide.


βš™οΈ Environment Variables

Variable Required Description
TELEGRAM_API_ID βœ… From my.telegram.org
TELEGRAM_API_HASH βœ… From my.telegram.org
TELEGRAM_BOT_TOKEN βœ… From @BotFather
TELEGRAM_STORAGE_CHANNEL_ID βœ… Private channel ID (starts with -100)
JWT_SECRET βœ… Secret key for JWT signing (min 32 chars)
DATABASE_URL βœ… Database connection URL (see below)
WEB_BASE_URL ❌ Public URL of the web app
TELEGRAM_HELPER_BOT_TOKENS ❌ Extra bot tokens for parallel downloads
AUTH_USERS ❌ Comma-separated Telegram IDs for restricted access

πŸ’‘ DATABASE_URL Options:

  • PostgreSQL (recommended): postgresql://postgres:password@localhost:5432/teleplay
  • SQLite (no setup needed): sqlite:///./data/teleplay.db

Use SQLite if you don't want to set up PostgreSQL β€” it works out of the box for small deployments.


πŸ› οΈ Tech Stack

Layer Technology
Backend Python 3.11+, FastAPI, Uvicorn
Telegram PyroTGFork (MTProto)
Database PostgreSQL (prod) / SQLite (dev), SQLAlchemy 2.0
Auth JWT (Access + Refresh Tokens)
Web React 18, TypeScript, Vite
Android Kotlin, Jetpack Compose for TV, ExoPlayer
Deploy Docker, Docker Compose, Nginx

πŸ“ Project Structure β€” Full Breakdown

teleplay/
β”œβ”€β”€ backend/                  # Python backend (FastAPI + Bot)
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ routers/          # API endpoints (auth, files, folders, streaming, tv)
β”‚   β”‚   β”œβ”€β”€ bot.py            # Telegram bot command handlers
β”‚   β”‚   β”œβ”€β”€ streaming.py      # Multi-client parallel streaming engine
β”‚   β”‚   β”œβ”€β”€ models.py         # SQLAlchemy ORM models
β”‚   β”‚   └── main.py           # FastAPI app entry point
β”‚   β”œβ”€β”€ Dockerfile
β”‚   └── requirements.txt
β”œβ”€β”€ web/                      # React web interface
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/       # UI components
β”‚   β”‚   β”œβ”€β”€ lib/api.ts        # API client & hooks
β”‚   β”‚   └── App.tsx           # Main app with routing
β”‚   └── Dockerfile
β”œβ”€β”€ android/                  # Android TV & Mobile app
β”‚   └── app/src/main/java/    # Kotlin (Compose + ExoPlayer)
β”œβ”€β”€ docs/                     # Documentation
β”‚   β”œβ”€β”€ ARCHITECTURE.md       # Technical deep-dive
β”‚   β”œβ”€β”€ DEPLOYMENT.md         # Deployment guide
β”‚   β”œβ”€β”€ SETUP.md              # Setup & usage guide
β”‚   └── RELEASING.md          # APK release process
β”œβ”€β”€ docker-compose.yml
└── .env.example

πŸ”§ Development

Backend

cd backend
python -m venv venv
venv\Scripts\activate        # Linux/Mac: source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env         # Edit with your credentials
uvicorn app.main:app --reload

Web App

cd web
npm install
npm run dev

Android

Open the android/ folder in Android Studio and build.


πŸ”’ Security β€” Details

  • JWT Authentication β€” Short-lived access tokens with refresh token rotation
  • User Authorization β€” Optional AUTH_USERS whitelist
  • Rate Limiting β€” SlowAPI middleware on all endpoints
  • CORS Protection β€” Restricted to configured origins
  • Input Validation β€” Pydantic schemas prevent injection attacks
  • Security Headers β€” Standard headers on all responses

πŸ“š Documentation

Guide Description
Setup & Usage How the app works, bot commands, login methods, and troubleshooting
Deployment Docker, VPS, Railway, Render, and CapRover deployment
Architecture Technical deep-dive: streaming engine, API endpoints, database models
Releasing APK build automation and signing via GitHub Actions

🀝 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License β€” see the LICENSE file for details.

πŸ™ Acknowledgments

About

A self-hosted media streaming solution that lets you store, organize, and stream your video files from Telegram Servers. Access your media library from anywhere via a web interface or Android TV app / Mobile App.

Resources

License

Contributing

Stars

Watchers

Forks

Contributors 2

  •  
  •