A powerful, self-hosted IPTV player with a modern web interface.
Stream your M3U playlists with EPG data, manage users, cast to your TV, and watch multiple channels at once.
Join my discord to talk with the community.
ViniPlay transforms your M3U and EPG files into a polished, high-performance streaming experience. It's a full-featured IPTV solution that runs in a Docker container, providing a robust Node.js backend to handle streams and a sleek, responsive frontend for an exceptional user experience.
The server-side backend resolves common CORS and browser compatibility issues by proxying or transcoding streams with FFMPEG, while the feature-rich frontend provides a user experience comparable to premium IPTV services.
| TV Guide Page | Multi-View Page | Direct Player |
|---|---|---|
View Animation |
| DVR & Recording | Admin Activity Monitoring | Push Notifications |
|---|---|---|
View Animation |
View Animation |
| Powerful Settings | Responsive Mobile View | Favorite Manager |
|---|---|---|
View Animation |
- π€ Multi-User Management: Secure the application with a dedicated admin account. Create, edit, and manage standard user accounts.
- πΊ Modern TV Guide: A high-performance, virtualized EPG grid that handles thousands of channels and programs smoothly. Features include advanced search, channel favoriting, and a "Recents" category.
- πΌοΈ Multi-View: Drag, drop, and resize players on a grid to watch multiple streams simultaneously. Save and load custom layouts. "Immersive view" will hide all UI elements and only leave the players on the page to maximize the watching experience.
- π Chromecast Support: Cast your streams directly to any Google Cast-enabled device on your network. (This will only work if your source signal is strong and correctly passed without package missing, due to Cast framework)
- π Push Notifications: Set reminders for upcoming programs and receive push notifications in your browser, even when the app is closed.
- βοΈ Powerful Transcoding - even with GPUs: The backend uses FFMPEG to process streams, ensuring compatibility across all modern browsers and devices. Create custom stream profiles to tailor transcoding settings. GPU transcoding supported. (Nvidia, InterlQSV and Vaapi)
- π Flexible Source Management: Add M3U and EPG sources from either local files, XC code and remote URLs. Set automatic refresh intervals for URL-based sources to keep your guide data fresh.
- π High Performance UI: The frontend is built with performance in mind, using UI virtualization for the guide and efficient state management to ensure a fast and responsive experience.
- π³ Dockerized Deployment: The entire application is packaged in a single Docker container for simple, one-command deployment using Docker or Docker Compose.
βΆοΈ Picture-in-Picture: Pop out the player to keep watching while you work on other things.- π₯ DVR: Record programs using FFMPEG. Schedule recording via the TV Guide, or set specific channels and time with ease.
- π½οΈ Single player: Play .m3u8 and .ts links directly from the browser, with detailed console logs and recorded history
- π₯ Admin monitoring page: Monitor users watch stream in real time, store historical plays, and broadcast messages to all users.
- πΊ VODs support: Play your VODs from your provider, divided cleanly in the UI with a scalable grid, with filters and tabs for Movies and Series (IMPORTANT: this only workd with XC API log in)
ViniPlay is designed for easy deployment using Docker.
- Docker
- Docker Compose (Recommended)
-
Create Project Files: Create a directory for your ViniPlay setup and add a
docker-compose.ymland a.envfile.-
docker-compose.yml:version: "3.8" services: viniplay: image: ardovini/viniplay:latest container_name: viniplay ports: - "8998:8998" restart: unless-stopped volumes: - ./viniplay-data:/data env_file: - ./.env -
.env:# Replace this with a long, random, and secret string SESSION_SECRET=your_super_secret_session_key_hereSecurity Note: Your
SESSION_SECRETshould be a long, random string to properly secure user sessions.
-
-
Build and Run the Container:
docker-compose up --build -d
-
Build the Image:
docker build -t viniplay . -
Run the Container: Create a volume directory (
mkdir viniplay-data) and a.envfile first. Then run the container:docker run -d \ -p 8998:8998 \ --name viniplay \ --env-file ./.env \ -v "$(pwd)/viniplay-data":/data \ viniplay
Once the container is running, open your browser and navigate to http://localhost:8998. You will be prompted to create your initial admin account. After creating the admin account, you can log in and start configuring your sources in the Settings tab.
All configuration is done via the web interface in the Settings tab.
- Data Sources: Add your M3U and EPG sources from remote URLs, XC Codes, uploaded files.
- Processing: After adding sources, click the Process Sources & View Guide button to download, parse, and merge all your data.
- Player Settings: Manage User-Agent strings and define
ffmpegstream profiles. - User Management (Admin): Admins can create, edit, and delete user accounts.
The project is organized into a Node.js backend and a modular vanilla JavaScript frontend.
/
βββ public/ # Frontend static files
β βββ js/
β β βββ main.js # Main application entry point
β β βββ modules/ # Modular JS components for each feature
β β βββ api.js # Backend API communication
β β βββ auth.js # Authentication flow
β β βββ cast.js # Google Cast logic
β β βββ dvr.js # DVR logic
β β βββ guide.js # TV Guide logic & rendering
β β βββ multiview.js # Multi-View grid and players
β β βββ notification.js # Push notification management
β β βββ player.js # Video player (mpegts.js)
β β βββ settings.js # Settings page logic
β β βββ state.js # Shared application state
β β βββ ui.js # Global UI functions (modals, etc.)
β β βββ utils.js # Utility functions (parsers)
β βββ sw.js # Service Worker for push notifications
β βββ index.html # Main HTML file
β
βββ server.js # Node.js backend (Express.js)
βββ Dockerfile # Docker build instructions
βββ docker-compose.yml # Docker Compose configuration
βββ package.json # Node.js dependencies
βββ .env # Environment variables (e.g., SESSION_SECRET)
Upcoming features and fixes include:
- Add VODs support for M3U links and File uploads
- Making DVR .ts files seekable during recording.
- Storing logos to improve load time.
- Implementing full horizontal scroll in the TV Guide.
ViniPlay is licensed under CC BY-NC-SA 4.0:
- BY: Give credit where creditβs due.
- NC: No commercial use.
- SA: Share alike if you remix.
For full license details, see LICENSE.