I thank God for graciously, through His mercy, giving me all the necessary knowledge acquired throughout my life and throughout the development of this project. It is only through His grace and provision that this was possible, and I am truly grateful for His presence every step of the way.
For of Him, and through Him, and to Him, are all things: to whom be glory forever. Amen.
Apostle Paul in Romans 11:36
Our previous domains — youphptube.com and youphp.tube — are being retired following a dispute initiated by Google LLC (YouTube).
Although we firmly believe that YouPHPTube has always been an independent, open-source project, created to empower developers and organizations to host their own video platforms, we have decided to respect the process and move forward peacefully.
🆕 Please update your bookmarks and references to the new official domain:
Thank you for your continued support and for standing with open-source freedom.
AVideo is a self-hosted video platform for publishing, managing, and monetizing on-demand videos and live broadcasts on your own infrastructure.
Try the live demo · Use cases · White label and layouts · Monetization · Content tools · Quickstart · Installation · How it works · Wiki · Website · Releases
The video gallery on AVideo Tutorials, a running AVideo installation.
| Use case | How you can use AVideo |
|---|---|
| Community video portal | Let creators publish videos and organize discovery around Gallery sections and channels. |
| Education and staff training | Publish recorded lessons and tutorials, with user groups controlling access for students, teams, or members. |
| Premium video catalog | Present films, series, or lessons in a Flix layout, and sell memberships or individual video access. |
| Live events | Broadcast conferences, concerts, or sports, with optional paid event tickets. |
| Churches and nonprofit communities | Share recorded talks and live broadcasts, with optional donation links or wallet donations to support creators. |
AVideo can run as a video website under your own brand. Start with Site Design and Templates:
- Your identity: use your own domain, site title, logo, and favicon. Configure these through the site settings; see the Quick Start Guide.
- White-label branding: the paid Customize plugin lets you replace the Powered by AVideo footer, customize the About page and site colors, and replace default placeholder images.
- Custom design: add your own CSS or JavaScript, or build a separate frontend connected to the AVideo API.
Choose a presentation that fits your content:
| Layout | Presentation | Guide |
|---|---|---|
| Gallery | A video portal with sections for categories, trending videos, playlists, and channels. | Gallery plugin |
| Flix | A movie or series catalog with featured artwork and horizontal content rows. | Configure the Flix layout |
| Channels | Put creators and their channels at the center of browsing. | FirstPageChannelList plugin |
| Player first page | Open directly to a video player and related content. | Homepage Layout Options |
| React frontend | Develop your own viewer interface as a separate application using the API and embed player. | Build Your Own Frontend |
The built-in homepage layouts are free and selected in Admin Panel → Design → First Page Style. The React frontend is deployed separately. See layout options for the differences.
You can also choose light and dark themes, change the player appearance, and adjust menus, buttons, and extra HTML with the free CustomizeAdvanced plugin.
You can combine several revenue models on the same site. See the monetization overview for setup and payment flows.
| Model | How it works | Guide |
|---|---|---|
| Subscriptions | Sell membership plans that unlock a premium video library for the subscription period. | Subscription |
| Pay-per-view | Charge for time-limited access to individual videos or tickets to live events. | Video PPV · Live PPV |
| Advertising | Show banner, overlay, or video ads; run your own campaigns or connect a VAST/VMAP ad provider. | Advertising options |
| Fan memberships | Creators sell access to their own fans-only videos and broadcasts, with an optional share for the site owner. | FansSubscriptions |
| Creator donations | Let viewers support creators through external donation links or transfers from their site wallet. | Donation options |
Subscription, PayPerView, PayPerView Live, and FansSubscriptions are paid add-ons. Advertising includes free plugins and the paid GoogleAds IMA integration; see each guide for requirements.
Wallet-based purchases require YPTWallet and a configured payment gateway, such as PayPal or Stripe. Payment-provider fees and infrastructure costs apply; configure prices and creator shares for your business model.
For sites with multiple creators, see creator payment options for sales commissions, wallet withdrawals, and direct creator payments through the supported Stripe PPV configuration.
- AI publishing tools: request transcriptions, translations, dubbing, metadata suggestions, and suggested short clips. The included AI plugin uses a service paid with Marketplace credits; transcription and dubbing also require paid plugins. See AI tools and requirements.
- More content formats: publish video and audio, plus PDFs and images through the enabled upload options. Combine recorded lessons or talks with supporting materials. See content types and upload methods.
- Embeds and integrations: place the AVideo player on another website, connect applications through the API, or automate uploads from external applications.
- Grow your infrastructure: run a private Encoder on a separate server, choose remote storage, and add CDN delivery to reduce origin traffic as your audience grows. Storage plugins, provider accounts, and CDN services can add costs; see capacity planning.
Start with the website and the features you want to offer:
| What you want to do | What you need | What it does for you |
|---|---|---|
| Run your video website | Streamer — this repository — with its database and media storage. | Provides the home page, video pages, search, channels, user accounts, and administration. |
| Upload videos that need conversion | Encoder. | Prepares video files for browser playback. It can run on the same server as your site. |
| Convert videos on your own computer | Local Encoder (Windows, macOS, Linux). | Encodes on your computer and uploads the result to your site. It complements the Web Encoder, which remains required for server-side media services. |
| Broadcast live | Live server. | Receives your broadcast and delivers it to visitors watching on your site. |
| Use remote media storage | An optional storage plugin and provider, such as S3 or B2. | Keeps media on a storage provider; local disk is the default starting option. |
The Docker Compose option below installs the bundled components together. You can begin with recorded videos and configure live broadcasting or remote storage as you need them.
A public Encoder is an option for a publicly reachable site. Install a private Encoder when you need:
- Your own processing capacity: uploads use your queue instead of sharing a public service. Processing speed depends on your server and workload.
- Control over your files: keep video conversion on infrastructure you control instead of sending files to a public service.
- A site on a private network: a public Encoder cannot send finished videos back to a site reachable only inside your network, such as
localhostor a home or office network. Your own Encoder must be able to reach the site.
The Encoder can share the website's server for a small installation, or run on another server as uploads grow. Docker Compose already includes an Encoder.
Use Local Encoder to prepare videos on your computer and upload the finished files to your site. It also works with sites on a private network, as long as your computer can reach the site. Download the latest version · Source code
AVideo includes a download guide at plugin/CustomizeAdvanced/localEncoder.php on your site, linked from the upload menu and upload form. With the updated Web Encoder, the same guide is recommended when a video-link import fails. Administrators can hide this promotion in Plugins → CustomizeAdvanced → Show Local Encoder (enabled by default). Keep a working Web Encoder configured for AVideo's media services; Local Encoder does not replace it. Update both the Streamer and Web Encoder to enable all these entry points.
The included Compose stack runs the Streamer, Encoder, live server, databases, and cache. You need a Linux server with Docker and the Docker Compose plugin.
git clone https://github.com/WWBN/AVideo.git
cd AVideo
cp -n env.example .envEdit .env before the first start:
- Set
SERVER_NAMEto your domain, withouthttps://or a path. - Set
CONTACT_EMAILandWEBSITE_TITLE. - Set strong, unique values for
SYSTEM_ADMIN_PASSWORDandDB_MYSQL_PASSWORD. - Adjust
CPUS_LIMITandMEMORY_LIMITto your server's capacity.
Your domain must point to the server, with ports 80 and 443 open for HTTPS certificate setup. Then start the stack:
docker compose up -d --build
docker compose ps
docker compose logs -f avideoWait for the initial installation to finish, open https://your-domain.com/, and sign in as admin with your SYSTEM_ADMIN_PASSWORD. Press Ctrl+C to stop watching the logs; the containers keep running.
See the Docker guide for certificates, persistent data, backups, updates, and troubleshooting.
Each diagram answers a different question:
| Diagram | What it explains |
|---|---|
| 1. Visitor navigation | How visitors find and watch content on your site. |
| 2. Video publication | How an upload becomes a published video, with or without conversion. |
| 3. Video processing | What happens while the Encoder prepares an uploaded video. |
| 4. System components | How the website, Encoder, live server, database, and storage connect. Optional technical detail. |
Purpose: Shows the steps a visitor takes to find and watch a video or live broadcast. Your theme, settings, and enabled plugins determine the exact layout and available features.
flowchart LR
Home["Open your site"] --> Browse["Browse or search<br/>videos, categories, channels"]
Browse --> Choose["Choose a video<br/>or an available live broadcast"]
Choose --> Watch["Watch on a computer<br/>or phone"]
Watch -.->|optional| Account["Sign in and interact"]
When enabled and permitted by your settings, signed-in visitors can comment and use playlists.
Purpose: Shows the overall path from uploading a file to making the video available on your site. The Encoder prepares files that need conversion; already compatible files can use direct upload.
flowchart LR
Upload["Upload a video"] --> Convert{"Needs conversion?"}
Convert -->|Yes| Encoder["Encoder prepares<br/>the video"]
Convert -->|Already compatible| Ready["Video ready<br/>on your site"]
Encoder --> Ready
Ready --> Publish["Publication follows<br/>your site settings"]
Publish --> Watch["Visitors watch<br/>the published video"]
Choose the title, category, and publication options for your content, and allow processing to finish before checking playback. Embedded videos remain hosted by their external provider. See upload options for the available methods.
Purpose: Shows what happens behind the scenes when you choose an upload method that uses the Encoder. The Encoder is the service that prepares video files for playback on your website.
flowchart TB
Upload["Video uploaded<br/>for conversion"] --> Queue["Wait for its turn<br/>in the Encoder queue"]
Queue --> Prepare["Prepare playback versions<br/>and preview images"]
Prepare --> Transfer["Transfer prepared media<br/>back to your website"]
Transfer --> Storage["Save media in<br/>the configured storage"]
Storage --> Ready["Website updates the video<br/>and applies publication settings"]
Ready --> Watch["Visitors watch through<br/>the website player"]
Preparation can produce different video qualities and cover or preview images. The exact formats, qualities, and images depend on your Encoder settings and enabled features. Media can stay on the server or use a supported remote storage plugin.
After the file upload finishes, the video can still be waiting in the queue or undergoing conversion and transfer. Wait for the job to finish, then check playback on your site. Direct uploads of already compatible files and external embeds follow their own paths; they skip this conversion workflow. See upload methods for the differences.
For live broadcasts, you send a live feed to the live server, and visitors open the broadcast on your website. Follow the live setup guide when you are ready to add this feature.
Technical architecture and decisions (for server administrators)
Purpose: Shows how the installed services connect, including recorded video and live broadcasting. This is a component overview for server administrators.
The Streamer handles the website and application data; the Encoder processes uploads; the live server handles broadcast ingest and delivery. Socket carries real-time application messages.
flowchart TB
Browser["Browser / player"] <-->|HTTPS| Streamer["Streamer<br/>PHP + Apache"]
Streamer -->|conversion jobs| Encoder["Encoder<br/>FFmpeg / FFprobe"]
Encoder -->|processed media| Streamer
Streamer -->|site data| Database[("MariaDB / MySQL<br/>Site and Encoder databases")]
Encoder -->|encoding queue| Database
Streamer <-->|application events| Socket["Socket<br/>YPTSocket"]
Socket <-->|WebSocket messages| Browser
Publisher["OBS / broadcaster"] -->|RTMP| Live["Live server<br/>nginx-rtmp"]
Live -->|publish / play callbacks| Streamer
Live -->|HLS playback| Browser
Streamer -->|media files| Local[("Local storage")]
Streamer -.->|optional storage plugins| Cloud[("S3 / Backblaze B2")]
Cloud -.->|video playback| Browser
This diagram shows logical components. In the included Compose stack, Streamer, Encoder, and Socket run inside the avideo container; live, database, database_encoder, and memcached run as separate services. S3/B2 is optional and requires a provider account and the corresponding storage plugin.
| Component | Purpose | When you need it |
|---|---|---|
| Streamer — this repository | The website, player, video library, user accounts, and administration. | Every AVideo installation. |
| Encoder | Converts uploaded video and audio into formats suitable for browser playback. | When uploads need conversion. It can run on the same server or a separate server. |
| Live server | Receives live broadcasts and delivers them to viewers, typically using NGINX with RTMP and HLS. | When you want live streaming. |
| Socket | Delivers real-time application messages through YPTSocket. | Features that use real-time updates; it runs as a long-lived PHP process. |
| MariaDB / MySQL | Stores users, video metadata, settings, and the Encoder queue in their respective databases. | Every Streamer installation; the Encoder also has its own database. |
| Storage | Stores media on local disk or through providers such as S3 and Backblaze B2. | Local disk by default; remote storage depends on your deployment and plugins. |
| Choice | What it enables | Operational trade-off |
|---|---|---|
| PHP + Apache for the Streamer | Deployment on a LAMP stack, using the supplied .htaccess routing rules. |
The server must provide compatible PHP extensions and Apache configuration. |
| A separate Encoder component | Video conversion can run on a different server, keeping encoding CPU load away from the website. | The Encoder and Streamer must communicate and transfer the processed media. |
| nginx-rtmp + HLS for live video | Broadcasters publish with RTMP; viewers play HLS in the browser. | A live server, its callbacks, and sufficient bandwidth must be configured. |
| WebSocket messages through YPTSocket | Real-time application events can reach browsers independently of video delivery. | Requires a running Socket process and a browser-accessible WebSocket endpoint. |
| Relational data separate from media files | MySQL/MariaDB stores application data while local disk or storage plugins hold the media. | Backups must cover both the databases and media; cloud providers add configuration and usage costs. |
| Plugins for optional features | Add monetization, storage, and integrations to suit each installation. | Feature availability depends on installed plugins; some are distributed separately and require purchase. |
For Docker, use the quickstart and Docker installation guide. For an installation directly on a server, follow the Ubuntu steps below.
Use a fresh Ubuntu Server with sudo access and no hosting control panel such as cPanel, Plesk, or Webmin. The installation guide assumes direct control of Apache, PHP, the database, and system packages.
- Point your domain to the server and open ports 80 and 443.
- Follow the Ubuntu installation guide to install the dependencies, download AVideo, and configure HTTPS.
- Open
https://your-domain.com/install/. Resolve any failed required checks, enter the database and site settings, and choose your administrator password. See the installation setup page for each field. - Sign in as
adminwith the password you chose. - Add a private Encoder if you need video conversion. Configure a live server if you need live broadcasts.
For a video walkthrough, watch Installing AVideo for Ubuntu 24. Follow the written installation guide for the current commands.
Older installation references (for existing sites)
These pages describe older Ubuntu and AVideo setups and may be archived or superseded. For a new installation, use the guide above. For an existing site, start with the backup and update guides.
- Ubuntu 22.x
- Ubuntu 20.x
- Ubuntu 18.x
- Ubuntu 16.x
- Original Streamer and Encoder video tutorial — based on older AVideo versions.
After either installation:
- Open the Admin Panel, set the site name and logo, and configure email.
- Run Health Check and follow the Quick Start Guide to finish configuration and scheduled tasks.
- Upload a short test video. If using the Encoder, wait for conversion and transfer to finish.
- Confirm playback in a private browser window and on a phone before inviting users.
| Requirement | Details |
|---|---|
| PHP | 8.1 or later, as required by Composer and the installer. Use a maintained PHP release compatible with your installation. |
| PHP extensions | mysqli, curl, gd, mbstring, zip, zlib, and openssl are checked by the installer. Additional features may need other extensions. |
| Database | MySQL or MariaDB. Follow the installation guide for the database setup. |
| Web server | Apache 2.x with mod_rewrite and support for the supplied .htaccess rules. |
| Application dependencies | The supplied vendor/ and node_modules/ assets. The installer checks for missing dependencies. |
| Media tools | FFmpeg, FFprobe, and ExifTool for media processing; requirements vary by component and feature. |
| Capacity | Disk space for media and processing, CPU for encoding, and bandwidth for viewers. |
For sizing and deployment planning, see hardware and server requirements.
- Video library: uploads, channels, categories, playlists, search, comments, and user management.
- Live broadcasts: live streaming, recording, restreaming to other platforms, and chat.
- HLS: VideoHLS for adaptive playback, encryption, and download protection. Download protection makes saving HLS videos harder; it does not prevent screen recording.
- Monetization: subscriptions, pay-per-view, advertising, fan memberships, and creator donations.
- Storage and delivery: local storage, external storage providers, and CDN options. See storage options.
- Integrations: the AVideo API for external applications and custom development.
Availability depends on the plugins installed and enabled. Some plugins are distributed separately and require purchase; review their documentation and the marketplace before planning your deployment.
Open a demo and sign in with one of the public test accounts below:
| Demo | Access | Username | Password |
|---|---|---|---|
| Platform demo | Administrator — explore the admin panel | admin |
123 |
| Platform demo | Non-admin test account — commenting | test |
test |
| Flix demo | Test user — explore the Flix layout | test |
test |
These are shared, public demo accounts. Choose your own administrator password when installing your site.
Flix demo payments are real: paid subscriptions use real money. Review the price, billing period, and renewal terms on the Flix subscription plans before paying.
Tutorials / Gallery demo — videos about setup and features, with likes, channel subscriptions, and comments for signed-in users. Video uploads are disabled on this demo.
| Resource | Use it for |
|---|---|
| Wiki | Installation, configuration, and plugin documentation. |
| Admin Manual | Managing users, videos, settings, and plugins. |
| Updates and releases | Keeping an existing installation current. |
| Backups | Saving and restoring site data. |
| Troubleshooting | Finding logs and diagnosing errors. |
| GitHub Issues | Reporting bugs with reproduction steps, versions, and relevant logs. Remove passwords and other secrets before posting. |
| Professional support | Paid installation, plugins, and consulting from Daniel Neto. |
See LICENSE for the software license, including its requirement that the software be used for Good, not Evil.
The project's installation agreement prohibits using this software to create sexually explicit material, pornography, or adult-themed content.
