emby-watchparty
A synchronized watch party application for Emby media servers. Watch videos together with friends in real-time, no matt…
A powerful, self-hosted Telegram Stremio Media Server built with FastAPI, MongoDB, and PyroFork — seamlessly integrated…
| title | Telegram Stremio |
|---|---|
| emoji | 🎬 |
| colorFrom | blue |
| colorTo | purple |
| sdk | docker |
| app_port | 8000 |
| pinned | false |
A powerful, self-hosted Telegram Stremio Media Server built with FastAPI, MongoDB, and PyroFork — turn your Telegram channels into a private streaming library you watch in Stremio / Nuvio.
This is a self-hosted media server that streams your Telegram files straight into Stremio (or Nuvio). You forward a movie/episode to your channel, and it instantly becomes a permanent, no-expiry streaming link — with posters, descriptions, seasons and episodes, just like a real streaming app.
Everything is managed from a friendly web panel — no coding, and almost no bot commands.
You can dump everything into one AUTH channel — but keeping content in separate channels makes your library far easier to manage, back up, and share with helpers. Each of these is added the same way (as an AUTH channel in Settings), and your bot must be an admin in every one.
A clean layout many people use:
| Channel | What goes in it | Note |
|---|---|---|
| 🎬 Movies | Single movies | — |
| 📺 TV Shows | Regular series episodes | — |
| 🌀 Anime | Anime episodes & movies | ✅ tick the Anime box on this channel |
| 🇰🇷 K-Drama | Korean dramas | — |
| 🎞️ Combined TV | Season-pack / multi-episode files (e.g. S01 E01-E13) |
— |
| 🎞️ Combined Anime | Anime batches (e.g. E01-E24) |
✅ tick Anime |
| 🧩 Split Movies | Big movies split into .001/.002 parts |
— |
| 🧩 Split TV | Big episodes split into parts | — |
| 📁 Manual | Personal / hand-added files | set as your Manual channel (not Auth) |
| 📢 Announcements | Auto "new content" posts | set as your Announcement channel |
| 🚑 Skip | Files that failed to index (for review/fixing) | set as your Skip channel |
💡 This is just an organizing habit — the app reads each file's name to sort it into the right catalog no matter which channel it came from. Separate channels simply keep your side tidy. Remember: a channel should have only one role (Auth / Manual / Announcement / Global Search / Skip); marking an Auth channel as Anime is just a checkbox.
The easiest way to add content: forward the file to your AUTH channel (the channel you set in Settings, where your bot is an admin). The server reads the file name or caption to figure out the title, year, season/episode, and quality — then fetches the poster and details automatically.
👉 The better your filename/caption, the better the match. Below is exactly what's supported, with real examples.
A movie name should contain the title, year, and quality.
✅ Good examples
Ghosted 2023 720p WEBRip Hindi x265 HEVC.mkv
Oppenheimer.2023.1080p.BluRay.x264.mkv
3 Idiots (2009) 2160p 4K HEVC.mkv
| Part | Example | Needed? |
|---|---|---|
| Title | Ghosted |
✅ |
| Year | 2023 |
✅ |
| Quality | 720p / 1080p / 2160p |
✅ |
| Extra (codec, audio, source) | WEBRip, x265, Hindi |
optional |
A TV file should contain the title, season + episode (S01E04 style), and quality.
✅ Good examples
Harikatha Sambhavami Yuge Yuge S01E04 1080p WEB-DL.mkv
Loki.S02E03.720p.HEVC.mkv
Panchayat S03E05 Hindi 1080p.mkv
| Part | Example | Needed? |
|---|---|---|
| Title | Loki |
✅ |
| Season | S02 |
✅ |
| Episode | E03 |
✅ |
| Quality | 720p |
✅ |
💡 Files that only have an episode number and no season (e.g. anime like
One Piece - 1142 (1080p).mkv) can't be auto-forwarded — use the Manual Upload Session with a fallback season.
.001, .002 …)Big files that were split into numbered volumes are supported and are joined back into a single stream automatically.
✅ Supported format: filename.ext.NN
Avatar.2009.2160p.BluRay.mkv.001
Avatar.2009.2160p.BluRay.mkv.002
Avatar.2009.2160p.BluRay.mkv.003
Forward all parts to the channel — they play as one file, in order.
❓ Why only the .001 / .002 style?
Those numbered volumes are true byte-splits of one single video (like what split, 7-Zip, or WinRAR create). They must be re-joined to play, so the server treats them as one stream.
Files named like ... Part 01.mkv, ... CD01.mkv, ... Disc02.mkv are skipped from joining on purpose — those are usually separate, standalone videos, not pieces of one file, so merging them would break playback.
One file that contains multiple episodes (or a whole season) is detected too, and filed neatly under a "Season N Combined" entry.
✅ Supported examples
One Piece S01 E01-E13 1080p.mkv → Season 1, Episodes 1–13
Naruto.S02.E14-26.Combined.720p.mkv → Season 2, combined batch
Friends S03 1080p.mkv → whole Season 3 (no episode number)
Recognized range separators: -, –, ~, +, &, ,, to (e.g. E01-E04, E01 to E04).
Use manual adding for personal videos (that TMDb doesn't know) or for special cases like anime with no season number. There are two tools:
🔎 Search anywhere: the search boxes in Add Content, Rescan Metadata and the Manual Upload Session all accept a title (with or without a year), an IMDb id/link, or a TMDB id/link. A name is matched on Cinemeta first and falls back to TMDb; an IMDb link forces Cinemeta and a TMDB link forces TMDb.
✨ Not in your library yet? The Manual Upload Session can now pick a title straight from IMDb / TMDB search results — no need to add it first. Start the session, forward the files, and the title is created automatically. Files added via a session (or a channel scan) also get their IMDb/TMDb link stamped into the caption, so forwarding the same file again later matches instantly.
⚙️ First make sure a Manual Channel is set in Settings and your bot is admin there. Personal files must be forwarded only to the Manual Channel.
Single clip → add as a Movie
Goa Trip 2024). Everything else is optional.Many clips (Day 1, Day 2…) → add as a TV Show, then bulk-add the rest with a session (see Case B).
Step 1 — Create the show once:
Biochemistry Lectures, Season = 1, Episode = 1.Step 2 — Bulk-add the rest:
Biochemistry Lectures → select it.💡 Want multiple qualities of the same lecture? Set Episode = 5 so every file attaches to Episode 5 instead of creating new episodes.
One Piece - 1142 (1080p).mkv)One Piece is a real TMDb show, but the file has an episode number and no season.
One Piece → select it.1142 is read from the filename; the fallback fills the missing season → stored as S01E1142.)One Piece - #### (1080p).mkv files (to your auth or manual channel) → End session. ✅| Content | How to add | Season/Episode | Channel |
|---|---|---|---|
| Goa trip (single) | Add Content → Movie | not needed | Manual only |
| Lectures / trip (many) | Session (personal TV) | Season required, Episode optional | Manual only |
| One Piece (no season) | Session (real TV) | Fallback season only | Auth or Manual |
Normal S01E05 files |
just forward | auto-detected | Auth |
You can attach subtitle files (.srt, .vtt, .ass, .ssa, .sub) to any movie or episode. They then show up as selectable subtitle tracks in Stremio / Nuvio. A title can have multiple subtitles (different languages, or several tracks) — they all appear in the player's subtitle picker.
There are two ways to add them: auto-match by filename (forward to a scanned channel) or add by hand from the web panel (most reliable).
For auto-matching, the subtitle filename needs two things: something that identifies the title/episode, and a language at the end.
✅ Movies — title + year (or an IMDb id), then the language:
Wanted 2008 english.srt
Wanted 2008 ar.srt
tt3326054 arabic.srt
tt3326054 eng.srt
✅ TV episodes — title (or IMDb id) + S01E01, then the language:
Sniffer S01E01 hindi.srt
The.Sniffer.S01E01.arabic.srt
tt3326054 S01E01 eng.srt
tt3326054 S01E01 ar.srt
| Part | Example | Needed? |
|---|---|---|
| Title or IMDb id | Sniffer / tt3326054 |
✅ |
| Season + Episode (TV only) | S01E01 |
✅ (TV) |
| Year (movies, helps matching) | 2008 |
optional |
| Language | english / eng / en |
✅ (for the track label) |
💡 The language is read from the end of the filename. If it's missing or unrecognized, the subtitle is still stored but labelled Unknown.
The language is detected from these forms (Arabic shown as an example):
| Form | Examples | Supported? |
|---|---|---|
| Full name | arabic, english, hindi |
✅ |
| 3-letter code (ISO 639-2) | ara, eng, hin |
✅ |
| 2-letter code (ISO 639-1) | ar, en, hi |
✅ (only as the last part of the name) |
| Anything else | xx, junk, or nothing |
❌ → stored as Unknown |
Extra tags like forced, sdh, cc, dubbed at the end are ignored, so Movie 2008 english forced.srt still detects English. The 2-letter form is only matched when it's the final part of the name, so release tags like WEB-DL or HD are never mistaken for a language.
The most reliable way — no filename guessing, and you can attach several at once. This is ideal for messy release names that don't auto-match.
One-time setup (recommended):
-100… ID. (A Manual channel isn't auto-indexed, so subtitles there won't be mismatched — and deleting a subtitle message later auto-removes it from the library.)Add the subtitle:
t.me/c/…).Unknown files).⚠️ The file must stay in a channel your bot can read — it's re-fetched from Telegram on demand (never stored on the server), just like your videos. Don't delete the message unless you also want the subtitle gone.
A catalog is a shelf of titles that appears in Stremio. There are two kinds: Auto (the app builds them) and Custom (you build them). Manage both on the Catalogs page (/catalogs).
The server can automatically sort your whole library into ready-made shelves — you just tick which ones you want. It decides where each title belongs using its TMDb details (original language + streaming platform).
Available auto catalogs:
| Group | Catalogs |
|---|---|
| Language | Bollywood, Hollywood, Anime, K-Drama, Bengali, South Indian, Tamil, Telugu, Malayalam, Kannada, Japanese, Korean |
| OTT Platform | Netflix, Prime Video, Hotstar, Apple TV, Hulu, HBO, JioCinema, ZEE5, SonyLIV, MX Player, Crunchyroll |
| Smart | Top Rated, Recently Added |
Your own hand-picked shelves — e.g. My Exclusives, Hindi Dubbed, Kids.
Create one:
Put titles in it (any of these):
When you create or edit a custom catalog you get three controls:
1) Who can see it (Visibility)
| Option | Meaning |
|---|---|
| Everyone (Public) | Shows in Stremio for all users. |
| Specific users | Only the users/tokens you pick can see it. |
| Owner only (Private / Hidden) | Hidden from the public catalog — only you manage it. This is how you make a catalog private. |
2) Exclusive 🔐 Turning Exclusive on locks its titles to this catalog only — they're removed from every other catalog (auto and custom) and won't reappear elsewhere. Perfect for premium/members-only content you don't want leaking into public shelves.
Exclusive is only available when visibility is Specific users or Owner only (it wouldn't make sense on a public shelf).
3) Searchable 🔎 For an exclusive catalog you can decide whether its titles show up in Stremio search:
How to make a catalog private + exclusive: create/edit it → set visibility to Owner only (or Specific users) → toggle Exclusive on → optionally turn Searchable on. Save.
All of these are configured on the Settings page. Your bot must be an admin in every channel you use. ⚠️ A channel should have only one role — don't use the same channel as Auth, Manual, Global Search, Announcement and Skip at once. (Marking an Auth channel as Anime is just a checkbox on that same channel, so that's perfectly fine.)
Anime often needs special handling (correct titles, posters and episode numbers). The server can treat one of your channels as an anime channel and use anime-aware matching for files posted there.
How to use:
ℹ️ The Anime tick simply flags an existing auth channel as anime — you don't add it to any separate field.
Normally Stremio only searches titles already in your library. Global Search lets it also search live inside extra Telegram channels that you haven't indexed — great for pulling in results on demand.
Requirements: a USER_SESSION_STRING in config.env (a userbot login) + one app restart to unlock the feature.
How to use:
USER_SESSION_STRING in config.env (see setup) and restart once.Automatically post a message whenever new content is added, so your members/subscribers always know what's fresh.
How to use:
@username) and add your bot as admin there.Sometimes a forwarded file can't be indexed — the caption has no title or no quality, or the title just isn't found on Cinemeta/TMDb. Instead of the file silently vanishing, the server can set it aside in a Skip Channel so you can fix it.
How to use:
@username) and make your bot an admin there. Files sent to this channel are never indexed.1080p, add a clearer title, or add an IMDb/TMDB link/id).🗑️ Optional: the Delete original on metadata fail toggle (it appears once a Skip Channel is set) removes the file from the main channel after it's copied into the Skip Channel.
If a title gets matched incorrectly (wrong poster/name) or has no details, fix it in seconds:
Method 1 — Paste the correct link in the caption
Method 2 — Fix it from the web panel
✅ The catalog and posters refresh instantly.
Everything here is on the Settings page (/admin/settings) — no terminal needed.
log.txt (handy when reporting an issue).https://github.com/weebzone/Telegram-Stremio (and branch, e.g. master) in Settings → click Restart. Done. 🎉All other options — TMDB key, Base URL, channels, subscriptions, proxy, extra databases, multi-token bots, replace mode, hide catalog, etc. — live on the Settings page and apply instantly, without a restart (the only value that needs a restart is USER_SESSION_STRING, because it lives in config.env).
This is how you control who can watch your library. Two simple ideas power everything:
.../stremio/{token}/manifest.json). One token = one person's Stremio install. Anyone holding a working key can watch.You can run your server in one of two modes — pick the one that fits you.
| 🆓 Subscription OFF (private / free) | 💰 Subscription ON (paid) | |
|---|---|---|
| Who makes keys? | You hand them out from the web panel | Your bot issues them automatically when a user pays |
| Do keys expire? | Only if you set an expiry (optional) | Yes — a key works while the plan is active |
| Best for | Family, friends, a private group | Selling access to members |
Everything lives on two web pages (in the top menu):
Admin → Tokens) — the one place to create keys, set data limits, set expiry, link users, and manage access.Admin → Plans) — your subscription plans and the list of paying members.💡 The owner (you) always has full access — your key never expires and you're never blocked.
Use this for a private/free server. Turn the Subscription toggle off in Settings. Now you create and give out keys yourself.
Create a key:
Living Room TV, or a friend's name).0 for unlimited.Manage a key (buttons on each row):
| Button | What it does |
|---|---|
| 📋 Copy Install Link | Copies that key's Stremio link to share |
| 📊 Limits | Set/change daily & monthly GB caps (0 = unlimited) |
| ⏳ Set Expiry | Give the key an expiry date. Type days (e.g. 30), or leave blank / 0 for never expires. You can also link a Telegram User ID here in the same step |
| ➕ Extend / ➖ Reduce | Add or remove days from the key's expiry |
| 🔗 Link User | Attach a Telegram user ID to the key (pulls their real name, and keeps it one key per user) |
| 🗑️ Delete | Remove the key — that person loses access immediately |
✅ Expiry is real here too: if you give a key a date, it stops working after that date. A key with no date simply works forever.
Use this to sell access. Turn the Subscription toggle on in Settings and fill in the Subscription Group ID, Payment Instructions (your UPI / bank / PayPal text), an optional Payment QR image, and the Approver IDs (who can approve payments).
Step 1 — Make your plans: go to Admin → Plans → Add Plan (set the days + price, e.g. 30 days – ₹99). Add as many as you like.
Step 2 — Let users buy (all inside your bot):
User presses /start → picks a plan → sends a payment screenshot
→ an Approver gets it in the bot → taps ✅ Approve (or ❌ Reject)
→ On Approve: their plan is saved, a key is created automatically,
and they instantly get their install link + a private group invite
Step 3 — Manage members from Tokens or Plans:
| Button | What it does |
|---|---|
| 📅 Assign | Give someone a plan / set their days by hand (pulls their real Telegram name) |
| ➕ Extend / ➖ Reduce | Add or remove days |
| 🚫 Revoke | Cancel their subscription — access stops right away |
| 🗑️ Remove | Delete their record from the list entirely (also revokes their key) |
| 🔄 Sync Names | (Plans page) fix any User 12345 rows by fetching their real Telegram names |
🛡️ You and your approvers are never kicked from the private group, and never lose access.
In plain English, a key is checked in this order:
If a key isn't allowed, the person sees a friendly notice in Stremio (e.g. "Plan Expired — renew from the bot" or "Join Required") instead of the videos.
Every key has its own link:
https://your-domain.com/stremio/{token}/manifest.json
/stremio/{token}/configure) users can open to re-install after you extend their plan.📌 One person = one key. Linking a Telegram ID that already belongs to another key is blocked, so a user can never end up with two keys. When that user presses
/start, the bot reuses their existing key instead of making a new one.
You only fill in a few values once in config.env. Everything else is configured later from the web Settings page.
cp sample_config.env config.env nano config.env
| Variable | Required | What it is |
|---|---|---|
API_ID |
✅ | Telegram API ID (from my.telegram.org) |
API_HASH |
✅ | Telegram API Hash (from my.telegram.org) |
BOT_TOKEN |
✅ | Your bot token (from @BotFather) |
OWNER_ID |
✅ | Your numeric Telegram user ID (from @userinfobot) |
DATABASE |
✅ | Two MongoDB URIs, separated by a comma |
PORT |
✅ | Web server port (keep 8000) |
USER_SESSION_STRING |
⬜ | Optional — only for Global Search |
Example:
API_ID="1234567" API_HASH="abc123def456ghi789jkl012mno345pq" BOT_TOKEN="1234567890:AAEabcdEFGhijkLMnOPqrsTUVwxyz12345" USER_SESSION_STRING="" OWNER_ID="987654321" DATABASE="mongodb+srv://user:pass@cluster0.xxxx.mongodb.net/tracking,mongodb+srv://user:pass@cluster0.xxxx.mongodb.net/storage1" PORT="8000"
/newbot. Then add this bot as admin in every media channel.0.0.0.0/0, copy the connection string, and append a name to each (/tracking and /storage1). You can reuse one cluster with two different DB names.8000 unless it's busy.Run this in Google Colab (safe — it's just a "stay logged in" token for your account; revoke anytime from Telegram → Settings → Devices):
!pip install pyrogram tgcrypto
import asyncio
from pyrogram import Client
api_id = int(input("API ID: "))
api_hash = input("API HASH: ")
async def main():
async with Client("temp_session", api_id, api_hash) as app:
print("\nYour USER_SESSION_STRING is:\n")
print(await app.export_session_string())
await main()
Copy the printed string into config.env. 🔒 Keep it private.
Open your server → log in with default admin / admin → go to Settings. Change the admin password first, then fill in the rest below. Everything on this page is saved to the database and applied instantly — no restart (the only value that needs a restart is USER_SESSION_STRING, which lives in config.env).
Open Settings (/admin/settings) after logging in. Here's what each card does and where to get the values.
| Option | What it does |
|---|---|
| Replace Mode | When a new file has the same quality (720p, 1080p…) as an existing one, it replaces the old entry so you never get duplicates. Recommended ON. |
| Hide Catalog | Hides the public Stremio catalog (direct stream links still work). |
| Field | What to enter |
|---|---|
| Admin Username / Password | Your web panel login. Leave the password blank to keep the current one. Change the defaults right away. |
| AUTH_CHANNELS | The channel(s) the bot indexes and streams from. Add each by @username or -100… ID, and make sure your bot is an admin in each. Tick the Anime box on a channel to treat it as an anime channel. |
| Field | What to enter / where to get it |
|---|---|
| TMDB API Key | A free TMDB v3 key from themoviedb.org → Settings → API. Powers automatic poster & metadata matching. |
| Base URL | Your public address, e.g. https://your-domain.com. Important: Stremio uses this to reach your streams, so it must be correct. |
| Upstream Repo / Branch | Used by the Restart/Update button to auto-update. Set repo to https://github.com/weebzone/Telegram-Stremio and branch to master. |
Turn this on to monetise access. Set the Subscription Group ID, Payment Instructions (your UPI / bank / PayPal text), an optional Payment QR image URL, and the Approver IDs (who can approve payments). Renewal and "join the channel" prompts in Stremio point users back to your bot automatically — no URL to configure. Full flow in Subscriptions & Access.
Requires USER_SESSION_STRING in config.env plus one app restart. Then enable the toggle and add the channel IDs to search live. Results not in your local catalog are tagged 🌐 GLOBAL in Stremio. See Global Search.
Turn on Announce New Content and set an Announcement Channel to auto-post whenever new media is indexed. See Announcement Channel.
Set the channel used for hand-added / personal files (these are not auto-indexed). Used by the Manual Upload Session.
Set one channel where files that fail to index are copied, each with a note describing what to fix. Files here are never indexed. Optionally enable Delete original on metadata fail (shown once a Skip Channel is set) to remove the failed file from the main channel after it's copied. See Skip Channel.
Set an HTTP Proxy URL for outbound metadata/API requests, and optionally show both proxied and direct stream links.
Your first two databases (from config.env) are locked as Tracking and Storage 1. Add more MongoDB URIs here to expand capacity — 🟢 means connected. Remove entries only from the end of the list, since existing media reference databases by position.
Add extra bot tokens for faster parallel streaming under heavy load. Create more bots with @BotFather, add them as admins in all your AUTH channels, then paste their tokens here. Applies immediately.
✅ Click Save Settings when done — you're live!
This guide helps you deploy on Heroku, a VPS with Docker, or Hugging Face (free).
Before you begin, make sure you have:
Follow the ready-made Google Colab tool to deploy on Heroku:
Deploy on a VPS using Docker Compose (recommended) or plain Docker.
git clone https://github.com/weebzone/Telegram-Stremio cd Telegram-Stremio cp sample_config.env config.env nano config.env
Fill in all required variables, then save with Ctrl + O, Enter, Ctrl + X.
Easier and more maintainable, with config mounting and restart policies.
docker compose up -d
Your server runs at ➡️ http://<your-vps-ip>:8000
Updating config.env later:
nano config.envCtrl + O, Enter, Ctrl + Xdocker compose restart⚡ The config file is mounted, so you don't need to rebuild — changes apply on restart.
docker build -t telegram-stremio . docker run -d -p 8000:8000 telegram-stremio
Your server runs at ➡️ http://<your-vps-ip>:8000
A. DNS record — at your domain registrar, add an A record to your VPS IP:
| Type | Name | Value |
|---|---|---|
| A | @ | 195.xxx.xxx.xxx |
B. Install Caddy (automatic HTTPS + reverse proxy):
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg chmod o+r /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy
C. Configure Caddy:
sudo nano /etc/caddy/Caddyfileyour-domain.com {
reverse_proxy localhost:8000
}
sudo systemctl reload caddy✅ Your server is now live at ➡️ https://your-domain.com
Deploy a free, always-online instance — no VPS, no domain, no Docker knowledge. Hugging Face builds the image on its own servers; you just tap a few buttons.
💡 How it works: this repo ships a GitHub Action that pushes your code to your Hugging Face Space on every change. The Space then builds the included
Dockerfileand runs your server.
Open the repo and tap ⭐ Star at the top right → github.com/weebzone/Telegram-Stremio
Tap Fork (top right) → Create fork. This gives you your own copy for private secrets and the deploy workflow.
<your-hf-username>/<your-space-name> — note it down.In your forked repo → Settings → Secrets and variables → Actions:
| Type | Name | Value |
|---|---|---|
| Secret | HF_TOKEN |
the Write token from Step 3 |
| Variable | HF_SPACE_ID |
<your-hf-username>/<your-space-name> |
Add the secret under the Secrets tab and the variable under the Variables tab.
On your Hugging Face Space → Settings → Variables and secrets, add the same values you'd put in config.env:
| Secret | Required | Where to get it |
|---|---|---|
API_ID |
✅ | my.telegram.org |
API_HASH |
✅ | my.telegram.org |
BOT_TOKEN |
✅ | @BotFather |
OWNER_ID |
✅ | your numeric Telegram ID |
DATABASE |
✅ | two comma-separated MongoDB URIs |
USER_SESSION_STRING |
⬜ | optional (Global Search) |
ℹ️ No
config.envneeded on Hugging Face — these secrets are read as environment variables. TheDockerfilealready listens on the right port (app_port: 8000is preset in this README).
In your forked repo → Actions → select Deploy to Hugging Face Space → Run workflow. After this first run, every push auto-deploys. Watch the build on your Space page — once it shows Running, you're live.
https://<your-hf-username>-<your-space-name>.hf.space/loginadmin / admin) and immediately change the password.https://<your-hf-username>-<your-space-name>.hf.space.https://<your-hf-username>-<your-space-name>.hf.space/admin/settings.Your server is a standard Stremio-style addon, so it works in any compatible player. For the smoothest experience across devices we recommend Nuvio — a free, open-source media hub for Android, Android TV, Fire TV, iOS, Windows and TV that supports addon manifest URLs. (Content was rephrased for compliance with licensing restrictions.)
Get your manifest URL — open your bot and send /start.
Install a player:
| Platform | Source |
|---|---|
| Android / Android TV / Fire TV | Google Play |
| All platforms / latest builds | GitHub — tapframe/NuvioStreaming |
Open the app → Addons → paste your manifest URL → install.
Done! 🎉 Your Telegram library appears in the catalog and streams directly.
💡 Prefer Stremio? It works too — just install the same manifest URL.
![]() |
|||
|---|---|---|---|
Karan |
Stremio |
ChatGPT |
VFlix Prime |
| Author | Stremio SDK | Refactor | Community Support |
more like this
A synchronized watch party application for Emby media servers. Watch videos together with friends in real-time, no matt…
YiMao · 云海求片助手 — 双核心 Telegram 影视求片机器人。订阅模式:TMDB 智能搜索一键订阅 / 趣味求片模式:AI 生成五层地狱闯关,通关解锁优先求片。深度集成 MoviePilot + Emby/Jellyfin。…
search projects, people, and tags