Closes the two gaps left by the supervision work: the panel could not see what the daemon knew, and it kept trying to start a watchdog for streams that already had one. The daemon has no database access -- XC_VM's credentials are not available to it -- so `cron:streams` is the only path by which its view reaches the panel. It now asks once per pass which streams the daemon supervises, then for each reads GET /monitor/<id> and writes back `stream_status`, `pid`, `current_source`, and the codecs, resolution and measured bitrate the daemon derived from the bytes it is fanning out. Only fields the daemon could actually determine are written: it reports an unknown as unknown, and overwriting a correct value with a blank would be worse than leaving it alone. `monitor_pid` names a PHP process, and isMonitorAlive checks the pid's /proc/<pid>/exe is the PHP binary -- so for a supervised stream it always answers false. Two callers drew the wrong conclusion from that: * cron:streams started a PHP monitor on every single pass, which then immediately stood down again. * admin/live.php, on the on-demand connect path, started one and then waited its full three seconds for a `_.monitor` file that would never appear. That is latency paid on the viewer's connect, for nothing. Both now ask who is watching before concluding nobody is. An unreachable daemon falls back to exactly the old behaviour in every case. That distinction is load-bearing: supervisedIDs() returns null rather than an empty list precisely so a blinking socket is not read as "supervising nothing", which would start a PHP monitor for every stream on the node at once. The supervised set is fetched once per cron pass rather than per stream, since the loop runs over every live stream on the node and each call is a socket round-trip. Verified: php -l clean on every changed file. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
XC_VM IPTV Panel
Open-source, community-driven Xtream Codes panel
Built for modern IPTV workflows – powerful, scalable, and free.
📑 Table of Contents
📘 Contents
🚀 Overview
XC_VM is an open-source IPTV platform based on Xtream Codes. It enables:
- 📺 Live & VOD streaming
- 🔀 Load balancing
- 📊 Full user/reseller control
- 🎚️ Transcoding & EPG
- 🔐 Hardened security fixes
✅ 100% free. No license checks. No server locks.
⚠️ Status
BETA SOFTWARE — actively developed
📚 Documentation
-
🇬🇧 English Guide https://vateron-media.github.io/XC_VM/
-
🇷🇺 Руководство на русском https://vateron-media.github.io/XC_VM/ru/
🔄 Migration Guide
Migrating from Xtream Codes / XUI.one? Follow the step-by-step migration guide:
- 📖 Migration Guide https://vateron-media.github.io/XC_VM/info/migration_guide/
🧱 Technology Stack
| Component | Version | Description |
|---|---|---|
| PHP | 8.1.33 | Backend runtime |
| Nginx | 1.24 | Web server & reverse proxy |
| FFmpeg | 8.0, 7.1, 4.0 | Media transcoding & processing |
| MariaDB | 11.4 | SQL database engine |
| KeyDB | 6.3.4 | Cache & session storage (Redis) |
🐧 Supported Operating Systems
XC_VM supports multiple Linux distributions. Distribution-specific binaries (PHP, Nginx) are downloaded automatically from XC_VM_Binaries during installation.
Ubuntu
| Version | Codename | Status |
|---|---|---|
| 20.04 | Focal Fossa | ⚠️ Outdated — installation possible, but some packages may need to be installed manually |
| 22.04 | Jammy Jellyfish | ✅ Recommended |
| 24.04 | Noble Numbat | ✅ Recommended |
Debian
| Version | Codename | Status |
|---|---|---|
| 11 | Bullseye | ✅ Supported |
| 12 | Bookworm | ✅ Recommended |
| 13 | Trixie | ✅ Supported |
RHEL-compatible (Rocky Linux, AlmaLinux, CentOS, RHEL)
| Version | Status |
|---|---|
| 8 | 🚧 Not yet supported |
| 9 | 🚧 Not yet supported |
⚠️ RHEL-family support is planned but not yet available. The installer recognizes these distributions, but pre-built binaries are not provided yet.
💡 Recommendations
For new installations:
- 🟢 Ubuntu 22.04 / 24.04 LTS
- 🟢 Debian 12
⚠️ Ubuntu 18.04 is in legacy mode — it works but receives no priority fixes.
📥 Quick Install
✅ Ubuntu 22.04+, Debian 11+
# 1. Update system
sudo apt update && sudo apt full-upgrade -y
# 2. Install dependencies
sudo apt install -y curl wget python3 unzip
# 3. Download latest release
latest_version=$(curl -s https://api.github.com/repos/Vateron-Media/XC_VM/releases/latest | grep '"tag_name":' | cut -d '"' -f 4)
wget "https://github.com/Vateron-Media/XC_VM/releases/download/${latest_version}/XC_VM.zip"
# 4. Unpack and install
unzip XC_VM.zip
sudo python3 install
🧪 Beta Install
To install the latest beta (pre-release) version:
# 1. Update system
sudo apt update && sudo apt full-upgrade -y
# 2. Install dependencies
sudo apt install -y curl wget python3-pip unzip
# 3. Download latest beta release
beta_version=$(curl -s https://api.github.com/repos/Vateron-Media/XC_VM/releases | grep -m1 '"tag_name":' | cut -d '"' -f 4)
wget "https://github.com/Vateron-Media/XC_VM/releases/download/${beta_version}/XC_VM.zip"
# 4. Unpack and install
unzip XC_VM.zip
sudo python3 install
⚠️ Beta versions may contain unstable features. Use on test servers only.
🧰 Service Management
sudo systemctl start xc_vm # Start
sudo systemctl stop xc_vm # Stop
sudo systemctl restart xc_vm # Restart
sudo systemctl status xc_vm # Status
sudo /home/xc_vm/bin/nginx/sbin/nginx -s reload # Reload Nginx config
journalctl -u xc_vm -f # Live logs
🔍 Troubleshooting — Panel Won't Start
If the panel fails to start, check the following logs and commands:
Nginx error log:
cat /home/xc_vm/bin/nginx/logs/error.log
PHP-FPM log:
cat /home/xc_vm/bin/php/var/log/php-fpm.log
Verify PHP binary works:
/home/xc_vm/bin/php/bin/php -v
If PHP fails to run, the panel cannot start at all — fix PHP issues first before investigating Nginx.
📂 Project Structure
├─ docs/ # 📚 Project documentation
├─ lb_configs/ # ⚙️ Configurations for building Load Balancer (LB)
└─ src/ # 💻 Main project code
🧮 Server Requirements & Sizing
🔧 Minimum Specs
| Component | Recommendation |
|---|---|
| CPU | 6+ cores (Xeon/Ryzen) |
| RAM | 16–32 GB |
| Disk | SSD/NVMe, 480+ GB |
| Network | Dedicated 1 Gbps port |
| OS | Ubuntu 22.04+, Debian 12+ (clean install) |
📊 Planning Formulae
- Bandwidth (Mbps) = Channels × Bitrate
- Max Users = Bandwidth ÷ Stream Bitrate
Example:
HD bitrate = 4 Mbps
1 Gbps = ~940 usable Mbps
→ Max Channels: 940 ÷ 4 = ~235
→ Max Users: 940 ÷ 4 = ~235
⚠️ 10 users watching the same channel = 10× bandwidth (unless caching or multicast used)
💻 RAM & CPU Usage
| Resource | Load per Stream |
|---|---|
| RAM | 50–100 MB |
| CPU (transcoded) | ~1 core |
✅ Features
- ✅ No server restrictions
- ✅ EPG importer
- ✅ VOD management
- ✅ User/reseller panel
- ✅ Security patches
- ✅ Clean UI
🔧 Known Limitations
- ❌ Requires Linux knowledge
- ❌ Community-based support
- ❌ Some bugs in transcoding module (in progress)
🤝 Contributing
We welcome community help!
⚠️ Legal & Project Independence Notice
XC_VM is an independent software project and is not affiliated with or endorsed by XUI.one.
All backend systems, core logic, and infrastructure of XC_VM have been independently developed without using source code from XUI.one or related projects.
The administrative interface (UI/UX) is inspired by general industry practices and partially by XUI.one in terms of usability concepts only. No proprietary source code or protected assets have been intentionally reused.
📜 License Enforcement (AGPL-3.0)
XC_VM is distributed under the GNU Affero General Public License v3.0 (AGPL-3.0).
Under this license:
- Redistribution or modification is permitted only under the same license (AGPL-3.0)
- Any modified version must remain open-source
- Providing XC_VM as a service requires making the source code available
- Copyright and attribution must be preserved
Any attempt to redistribute this software under a different license, remove attribution, or obscure the origin of the project constitutes a violation of the license terms.
⚖️ You are solely responsible for how it is used. We take no responsibility for misuse or illegal deployments.