jellyfin-telegram

Use a private Telegram channel as the storage for your Jellyfin library.

Role
Author and maintainer
Year
2026
Runs on
Windows, Linux (amd64, arm64)
Stack
Go · MTProto (gotd) · SQLite · React panel
How it works in 19 seconds, animated in Remotion.

The idea

Your channel is the disk. Jellyfin never knows.

Install takes about two minutes. Run one command and a setup page opens. You type your phone number and the code Telegram sends you. It then creates a private channel, creates the bots (3 by default) and makes them admins, installs a private Jellyfin and signs in.

Jellyfin sees a normal library of .strm files, and each file points at one message in your channel. When you press play, the service reads the video from Telegram through the bot pool and hands it to Jellyfin as an ordinary HTTP stream, with seeking. Your disk only keeps a small block cache.

It is stock Jellyfin, so there is no fork, no plugin and no custom client, and any official Jellyfin app works. It is one Go binary with no CGO, no FUSE and no database server. Jellyfin, the streams, the setup page and the web panel at /panel all share one port, 8097.

How it works

  1. 1

    Upload to your channel

    Post videos to your private Telegram channel. Setup creates the channel and makes the bots admins.

  2. 2

    It becomes a library

    Each message becomes a .strm file named Movies/Name (Year) or Shows/Name/Season 01, matched on TMDB.

  3. 3

    Press play

    Jellyfin asks for a byte range as if it were any HTTP stream. The service maps it to 1 MiB blocks.

  4. 4

    The bots fetch it

    Each block is its own read, so one stream can use every bot at once. Blocks are served from the cache when they can be.

Get started

One command. Then your phone number.

Linux Run in a terminal

curl -fsSL https://github.com/Aryan-mor/jellyfin-telegram/releases/latest/download/install.sh | sh

The installer starts the service at every login and puts a panel shortcut on your Desktop. Setup asks for one folder to keep everything in. Releases come on a stable channel and a nightly one, and the panel shows an update bar. You can also set it up by hand with a .env file. The README has the details.

What you get

  • A web panel

    Manage bots, channels, mirrors, subtitles, accounts and upload pace in one place. English, Persian (right to left), German and Turkish.

  • Automatic naming

    Movies and Shows are named and matched on TMDB. Put a TMDB id in the caption for an exact match. Home videos with no match get a movie.nfo and the Telegram thumbnail.

  • Subtitles in any language

    The language is detected from the first bytes of each file. Missing subtitles are fetched online, which you can turn off. Embedded ones are extracted once, archived in the channel and reused.

  • Your own Jellyfin

    Setup can install a private Jellyfin 12.4 for you, or you can point it at one you already run. Tested on 10.11.8 and 12.4.

Optional extras, all off by default.

  • Seerr

    A request page at /seerr/. It runs as a normal process, with no Docker.

  • Channels

    A signed-in Telegram user account forwards films and series from other channels into your library channel on the server side, so nothing is downloaded to your disk.

  • Index bots

    Hashtag and channel index bots help you find sources.

  • Local upload

    List the videos on your disk and upload the ones you pick.

A video is one Telegram message, so Telegram's upload size cap applies. Jellyfin reports the size of the .strm file, not of the video.

Measured One run, one sample

Results from one run
bench with 1 bot3.2 MB/s
bench with 4 bots11.7 MB/s
Sustained read through Jellyfin, 4 bots16.6 and 19.1 MB/s
First byte at an uncached position0.29 and 0.57 s median
Probing all 4 videos14 MiB read out of 4.4 GiB

A private channel with 4 bots and 4 videos, 4.4 GiB in total, on Jellyfin 12.4. Speed depends on your network and on Telegram. The full results and the design decisions are in the architecture notes.

Contribute

It is open source. Feel free to contribute.

Bug reports, ideas and pull requests are all welcome. The contributing guide covers setup and tests, and GitHub Issues is the place to start a conversation.

Use it only for media you own or have the right to use. Telegram can limit or ban accounts that automate uploads, forwards or logins, so use a spare account. The project does not host, index or distribute any media.

Licensed under GPL-3.0. Not affiliated with Jellyfin or Telegram.