Profile
Back to NewsBack
GitHub Trending 10 min
Reader Mode
aiskendi/pencarimovie-server: It creates a Telegram bot server that can download or stream files directly from the Telegram cloud via MTProto to your browser. It also has NuVio Stremio Addon support for a better experience.

aiskendi/pencarimovie-server: It creates a Telegram bot server that can download or stream files directly from the Telegram cloud via MTProto to your browser. It also has NuVio Stremio Addon support for a better experience.

4 hours ago

🎬 PencariMovie Server

Self-hosted Telegram MTProto media stream bridge & local file downloader for Stremio, Nuvio, Eclipse Music, and web clients.
Local Execution • Direct MTProto Transport • Zero Cloud Relay

Quick Install • Cloud Deploy • Docker & .env • App Setup • Security & Auth • CLI Usage • Features • Legal & DMCA


💡 What is PencariMovie Server?

PencariMovie Server is a lightweight, self-hosted streaming utility and protocol bridge connecting client applications to Telegram's MTProto API. It converts user-authorized Telegram file references into local HTTP streams with range-request (HTTP 206) seek support for media players including Stremio, Nuvio, and web browsers.

  • Client-Side MTProto Bridge: Directly streams authorized media to the user's local player using MadelineProto.
  • No Remote File Hosting: The server does not host, store, or re-transmit copyrighted files; streams originate from Telegram's network directly to the local client.
  • Local & Private: Runs on the user's own hardware (localhost / private LAN) without passing credentials or media bytes to external proxy servers.
  • Cross-Platform: Available as a native Windows tray application, Linux daemon, Android APK, Termux script, and Docker container.

🚀 Quick Install

Launch the server with a single command on your platform of choice:

📱 Android (APK for TV / Phone / Tablet)

📥 Download Android APK (telegra.my/apk) - universal
_(Install on your Android TV, phone, or tablet, tap Start Server, and stream)_
_(The link serves the universal build so it runs on any device. Smaller per-ABI APKs
(arm64-v8a, armeabi-v7a) are on the
APK releases page.
The app updates itself from that release feed.)_

🪟 Windows (10 / 11)

Run in PowerShell:

irm telegra.my/win | iex

_(Runs in the background with a System Tray icon. Manage anytime with pms start / pms stop)._

🐧 Linux

Run in terminal:

curl -fsSL telegra.my/linux | bash

🍏 macOS (Apple Silicon & Intel)

Run in terminal:

curl -fsSL telegra.my/mac | bash

🤖 Android (Termux)

Run in Termux:

curl -fsSL telegra.my/termux | bash

🐳 Docker (Any OS / NAS / VPS)

docker run -d \
  --name pencarimovie-server \
  --restart unless-stopped \
  -p 8088:8088 \
  -v pencarimovie-data:/app/storage \
  ghcr.io/aiskendi/pencarimovie-server:latest

Once started, open the web dashboard: 👉 http://127.0.0.1:8088 _(or your local LAN IP printed in terminal)_


☁️ 1-Click Cloud Deployment

Deploy your personal PencariMovie Server to the cloud with a single click:

| Platform | One-Click Deploy | Description | | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | | Orkestr | Deploy on Orkestr</a> | Quick container setup on European cloud infrastructure. | | Railway | Deploy on Railway</a> | Pre-configured template with automatic networking and Docker build. | | Render | Deploy to Render</a> | Deploys using native Docker configuration in render.yaml. | | Heroku | Deploy to Heroku</a> | Deploys via app.json container stack with a pre-configured access token. |

💡 Permanent Addon URL on Cloud / PaaS:
Always set a static SERVER_TOKEN (e.g. 66ff097863dedb7ccd8401d5ffe616f2) in your cloud provider's environment variables. This keeps your Stremio / Nuvio manifest URL (https://.up.railway.app//manifest.json) permanent so you never need to re-install addons when your container restarts or redeploys.

🐳 Docker & Environment Variables

PencariMovie Server can be fully configured using a .env file or container environment variables, allowing you to set static passwords, tokens, ports, and thread limits.

Docker Compose (docker-compose.yml)

services:
  pencarimovie:
    image: ghcr.io/aiskendi/pencarimovie-server:latest
    container_name: pencarimovie-server
    restart: unless-stopped
    ports:
      - "${PORT:-8088}:8088"
    env_file:
      - .env
    volumes:
      - ./storage:/app/storage

Environment Variables (.env)

Create a .env file in your project directory:

# Server Port (auto-assigned by PaaS or default 8088)
PORT=8088

Remote Access & Security (Permanent token and dashboard password)

SERVER_PASSWORD=your_secure_password SERVER_TOKEN=66ff097863dedb7ccd8401d5ffe616f2

Optional: Cloudflare Zero Trust Named Tunnel Token (auto-connects on startup)

TUNNEL_TOKEN=eyJh...

Optional: Custom Telegram Bot API Token (overrides guest auto-provisioning)

BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz

Optional: Local Network IP Override (if running behind multi-adapter Docker bridge)

LAN_IP=192.168.1.100

Performance & Concurrency Tuning

FRANKENPHP_NUM_THREADS=8 FRANKENPHP_MAX_THREADS=16 FRANKENPHP_MAX_WAIT_TIME=20s FD_DOWNLOAD_PARALLEL_CHUNKS=4

Memory & Runtime Optimization

MALLOC_ARENA_MAX=2

GOMEMLIMIT=550MiB

PHP_MEMORY_LIMIT=256M

Optional: External Database for Session ORM (Redis / MySQL / Postgres)

REDIS_URI=redis://127.0.0.1:6379

MYSQL_URI=mysql://user:[email protected]:3306/pencarimovie

POSTGRES_URI=postgres://user:[email protected]:5432/pencarimovie

Optional: Custom DNS Resolution Pinning (e.g. host:port:ip)

FD_CURL_RESOLVE=pencarimovie.com:443:104.21.15.194

Debug Logging (0 = off, 1 = verbose storage/debug.log)

DEBUG=0

Configuration Variables Reference

| Variable | Default | Description | | :---------------------------- | :----------------- | :---------------------------------------------------------------------------------------------------------------------------------------------- | | PORT | 8088 | Port where the server listens (or provided by PaaS runtime). | | SERVER_PASSWORD | 123456 | Static password for web dashboard access on public IPs, tunnels, and cloud hosts. LAN is password-free. | | SERVER_TOKEN | _(auto-generated)_ | 32-character static access token for public addon URLs (//manifest.json). Set this to make your addon link permanent across redeploys. | | TUNNEL_TOKEN | _(empty)_ | Cloudflare Zero Trust Named Tunnel token. Automatically launches connector on container start. | | BOT_TOKEN | _(auto-provision)_ | Custom Telegram Bot API token. If omitted, the server automatically mints and rotates guest bots. | | LAN_IP | _(auto-detected)_ | Manually overrides the host's LAN IPv4 address for multi-device Wi-Fi manifests. | | FRANKENPHP_NUM_THREADS | 8 | Initial FrankenPHP worker threads for concurrent request handling (auto-tuned in Docker containers). | | FRANKENPHP_MAX_THREADS | 16 | Maximum FrankenPHP thread scaling ceiling under high stream load. | | FRANKENPHP_MAX_WAIT_TIME | 20s | Maximum wait time for thread availability before failing fast. | | FD_DOWNLOAD_PARALLEL_CHUNKS | 4 | Parallel chunk download concurrency per active stream (reduced to 2-3 on low-RAM containers). | | MALLOC_ARENA_MAX | 2 | Caps glibc memory arenas to prevent virtual memory inflation and fragmentation in long-running containers. | | GOMEMLIMIT | _(auto-detected)_ | Go runtime memory ceiling, automatically calibrated from container cgroups to avoid OOM crashes. | | PHP_MEMORY_LIMIT | 512M | PHP memory limit per request (scaled to 96M-256M in containers). | | REDIS_URI | _(empty)_ | Redis connection string (redis://...) to offload MadelineProto session ORM state. | | MYSQL_URI | _(empty)_ | MySQL connection string (mysql://...) for external database session storage. | | POSTGRES_URI | _(empty)_ | PostgreSQL connection string (postgres://...) for external database session storage. | | FD_CURL_RESOLVE | _(empty)_ | Custom DNS mapping (host:port:ip) to bypass restrictive ISP firewalls or DNS blocks. | | DEBUG | 0 | Set to 1 or true to enable verbose stream, IPC, and MadelineProto diagnostics in storage/debug.log. |


📺 Stremio, Nuvio & Eclipse Music Setup

1. Stremio Setup

  1. Open the dashboard at http://127.0.0.1:8088 and click Addon / Stremio in the top navigation.
  2. Local Sync (Recommended): Click Install via Stremio API Sync to push the addon across all your Stremio devices automatically with 1 click.
  3. Manual / Web: Copy your manifest URL (http://:8088/manifest.json or http://:8088//manifest.json on public servers) and paste it into Stremio's Addon search box.

2. Nuvio Setup

  1. Open Nuvio on your TV, phone, or tablet connected to the same Wi-Fi.
  2. Go to Profile ➔ Content & Discovery ➔ Addons.
  3. Enter your manifest URL:
- Local Wi-Fi / LAN: http://:8088/manifest.json - Remote / VPS / Tunnel: http://:8088//manifest.json (or your HTTPS tunnel URL).

3. Eclipse Music Setup

  1. Open the Eclipse Music app (https://eclipsemusic.app) on your device.
  2. Go to Settings ➔ Connections ➔ Add Connection ➔ Addon.
  3. Enter your Eclipse manifest URL: http://:8088/eclipse/manifest.json (or http://127.0.0.1:8088/eclipse).
  4. Search and stream tracks directly with direct seekable playback.

🔒 Server Security & Remote Token Auth

PencariMovie Server includes built-in security to keep private servers safe when hosted remotely:

  • Local Access is Password-Free: Requests from localhost (127.0.0.1) and private home Wi-Fi (RFC-1918 subnets like 192.168.x.x or 10.x.x.x) bypass authentication completely.
  • Public & VPS Protection: Requests from public IP addresses or Cloudflare Tunnels are protected by password auth (SERVER_PASSWORD, default 123456).
  • Remote Token Routing: Remote media players authenticate cleanly via path tokens in the manifest URL:
http://<vps-ip>:8088/<token>/manifest.json
  • CLI Password & Token Management:
pms password <new_password>   # Changes server password
  pms reset-password           # Resets password to default (123456)
  pms token                    # Prints current access token
  pms token rotate             # Generates a new access token (invalidates old one)

🛠️ CLI Commands (pms)

The installer registers a global pms command on your system:

pms start              # Starts server in background (checks for updates)
pms stop               # Stops server and background helper processes
pms restart            # Restarts the server
pms tunnel             # Enables Cloudflare Quick Tunnel (or Named Tunnel if token set)
pms autostart [on|off] # Configures auto-start on system boot
pms password <new>     # Sets the server password
pms reset-password     # Resets password to default (123456)
pms token              # Displays the active 32-character access token
pms token rotate       # Rotates the access token
pms uninstall          # Completely removes server, configuration, and CLI commands

_(Works across Windows, macOS, Linux, and Termux)._


✨ Features

  • 🔌 Plug & Play Local Setup: Runs directly on user machines with auto-configured local session handling.
  • ⚡ High-Throughput Streaming: HTTP 206 range-request support for instant video and audio seeking.
  • 📺 Stremio & Nuvio Protocol Compatible: Implements the Stremio Addon v3 protocol specification for media playback.
  • 🎛️ Custom Upstream Addon Bridging: Easily integrate and toggle custom third-party metadata catalogs.
  • 💻 Local Web Player Interface: Built-in responsive web dashboard for local file access and player playback.
  • 📡 Home Network LAN Access: Access streams on connected TV and mobile devices via local Wi-Fi (http://:8088).
  • ☁️ Optional Secure Tunneling: Connect remotely using Cloudflare Tunnel integration (pms tunnel).
  • 🤖 Bot Pool Rotation: Configure multiple Bot API credentials to balance high-concurrency personal transfers.
  • ⚡ System Service Integration: Windows system tray helper and Android background service support.

⚖️ Legal Disclaimer & DMCA Policy

Disclaimer

PencariMovie Server is an open-source, non-commercial software tool designed for personal media management, protocol translation, and client-side streaming of user-accessible Telegram files.

  1. No Content Hosting: This software and its developers do not host, store, cache, upload, or transmit any media files or copyrighted material. All media transfers occur directly between the client user, the local software instance, and Telegram's infrastructure.
  2. Third-Party Indexing & Catalogs: Any metadata, filenames, or search results displayed through client addons or third-party catalog feeds are provided by external sources. The project maintainers do not own, control, or operate third-party Telegram channels or upload services.
  3. User Responsibility: Users of this software are solely responsible for ensuring that their use complies with local copyright laws, intellectual property regulations, and Telegram's Terms of Service. The developers explicitly disclaim any liability for copyright infringement, unauthorized access, or misuse of this software by third parties.

Notice & Takedown (DMCA / Copyright Inquiries)

If you are a copyright owner, content producer, or legal representative wishing to report unauthorized references or request exclusion of specific titles from discovery endpoints:

  • Please submit a formal written notice detailing:
1. The copyrighted work claimed to have been infringed; 2. The specific identification or URL/query where the reference occurs; 3. Your contact information (name, organization, email, and phone number); 4. A statement affirming that you hold the copyright or are authorized to act on behalf of the copyright owner.
  • Send all DMCA and copyright inquiries to: [email protected] (or submit an issue to the repository maintainer).
  • Notices are reviewed expeditiously, and qualifying metadata references or index entries will be promptly delisted and excluded.

🔒 Open Source & Privacy

  • Open Source: Licensed under GPL-3.0.
  • Local Isolation: Media requests, streams, and sessions are processed locally without third-party tracking or cloud relays.
  • Secure Boundaries: Admin actions (settings, bot pool, tunnel triggers) are restricted to local requests only and blocked across public tunnels.

🙏 Credits & Acknowledgments

Built on the shoulders of these fantastic open-source projects:

  • PHP — Asynchronous server scripting and backend execution.
  • FrankenPHP — Modern Go-based PHP application server built on Caddy.
  • MadelineProto — High-performance async PHP MTProto client library for Telegram.
  • cloudflared — Cloudflare tunnel client enabling seamless TryCloudflare quick tunnels.
  • Termux — Terminal environment and process runner for Android devices.

Open-source project hosted at github.com/aiskendi/pencarimovie-server

Chat with me