The all-in-one production studio for live streaming.
Main Logo Image for ITG with DOC Media App. Which runs as a full PWA App, and works on all mobile devices.
Check out the live PWA Media App here! (https://donoconnor.com)MediaSite is a complete live broadcasting platform. Host a show, bring in remote guests via their browser (no installs), manage a guest queue, push your stream to YouTube / Facebook / TikTok simultaneously โ all from one central Dashboard. Viewers can watch live on the Broadcast Page. Built for podcasters, sports shows, radio hosts, and content creators.
Demo video coming soon โ we'll show a full broadcast from guest join to multi-platform simulcast.
| ๐๏ธ Host & Guest Broadcasting | ๐ก Multi-Platform Simulcast | ๐ Show Calendar & Blog |
|---|---|---|
| Host uses OBS Studio (or any tool with a browser source) to capture the composed stream | Push to YouTube, Facebook, and TikTok all at once | Schedule shows, assign guests, publish episodes |
| Guests join via browser on desktop or mobile โ no software install needed (full PWA) | Per-platform RTMP with auto-reconnect | Built-in blog with categories, comments, featured posts |
| Director-controlled guest queue + auto picture-in-picture | Stream health monitoring | Public archive of past shows |
| ๐ค Roles & Profiles | ๐ค AI Assistant | ๐ Security |
|---|---|---|
host ยท guest ยท athlete ยท staff ยท admin |
Avatar agent greets & preps guests before air | COPPA age gate & parental consent |
| Bio, photos, social links, sport stats | Site-wide FAQ chatbot with conversation memory | Turnstile CAPTCHA, email verification |
| Optional Sports Module โ drills, measurables, leaderboards | Powered by Ollama + local LLMs | JWT auth, rate limiting, admin IP whitelist |
โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ User โ โ Your Server โ
โ โ โ โ
โ Browser โโโโโผโโโโโถโ Nginx (443) โ
โ (Viewer) โ โ โ โ
โ โ โ โโโโถ Next.js (3000) โ Frontend UI โ
โ OBS Studioโโโผโโโ โ โโโโถ Django (8000) โ REST API โ
โ (Host) โ โ โ โโโโถ Daphne (8001) โ WebSockets โ
โ โ โ โ โ โ
โ Guest โโโโโโโผโโโค โ โโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Browser โ โ โ โ LiveKit Server ยท Egress ยท Ingress โ โ
โ (WHIP) โ โโโถโ โ (Docker, host networking) โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ โ PostgreSQL (5432) ยท Redis (6379) โ
โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ YouTube ยท Facebook ยท TikTok โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
MediaSite gives the host two ways to get video/audio into the stream:
Method 1 โ OBS Virtual Camera (simplest):
- Open the Studio Control page at
/studio/Broadcast_Studio_A1 - Select OBS Virtual Camera as your video source and VB-Audio Cable as your audio
- Click "Start Broadcast" โ your camera and mic are streamed directly to the room via WebRTC
- No browser source or WHIP configuration needed โ just your OBS virtual devices
Method 2 โ OBS Browser Source (for composed overlays): The host uses OBS Studio (or any streaming tool that supports a browser source โ Streamlabs, vMix, etc.). In OBS, add a Browser Source pointing at:
/studio/obs-source?room=Broadcast_Studio_A1
This URL displays the live composed view โ host video, guest video, lower-thirds, and overlays โ all auto-arranged by MediaSite. The host then streams this browser source out to YouTube, Facebook, TikTok, or wherever they want. Choose this method when you need OBS overlays, scenes, and multi-source composition.
๐ก Default room name: The room
Broadcast_Studio_A1is the default. You can create additional rooms for individual guests, but having a known room name makes it easy to reuse the same OBS browser source URL across shows.
Guests join through a simple link โ no downloads, no OBS, no software install. They click the guest link, allow camera & mic, and appear in the host's composed view automatically. MediaSite handles the WebRTC connection via LiveKit.
MediaSite is a full Progressive Web App (PWA) โ guests can join from their phone, tablet, or desktop. All they need is a good internet signal and headphones or earbuds to prevent audio feedback. The app can be installed to their home screen for quick access.
Method 3 โ WHIP Ingress (pro-quality, separate video feed): OBS can push a dedicated video feed directly to LiveKit via WHIP. Use the Streaming Admin panel to generate a WHIP URL, then add it as a custom RTMP/WHIP output in OBS. This gives you a clean, high-quality feed separate from Virtual Camera.
After logging in, the Dashboard is your home base โ manage shows, access the Director Control panel, generate guest links, and configure streaming. Viewers watch live on the Broadcast Page at /broadcast, which shows the composed stream in real time.
From the Director Control Panel, you manage the guest queue โ mute/unmute, kick, rearrange, and control when guests appear on air. Multi-platform simulcast (YouTube + Facebook + TikTok) is managed from the same dashboard.
The Django Admin panel is the true super-user backend โ add, edit, and manage every model, user, and setting in the database. Most day-to-day management happens through the frontend dashboard, but the admin panel is available for full control when needed.
โ ๏ธ Change the admin URL โ by default it's at/admin/. SetADMIN_URL=your-custom-pathin your.envto hide it from bots and unauthorized visitors. The IP whitelist (ADMIN_IP_WHITELIST) adds an extra layer of protection.
After deploying, run collectstatic to serve the admin CSS:
python manage.py collectstatic --noinput| Tool | Version | Why |
|---|---|---|
| Python | 3.11+ | Django backend |
| Node.js | 20+ | Next.js frontend |
| PostgreSQL | 14+ | Database |
| Redis | 7+ | WebSocket channels & caching |
| Docker Compose | 2.x+ | LiveKit + optional full-stack dev |
Everything runs in containers โ Postgres, Redis, Django, Next.js, Nginx:
git clone https://github.com/docisit/itg-media-engine.git
cd itg-media-engine
docker compose -f docker-compose.dev.yml up --buildOpen http://localhost:3000 โ you're live!
โ ๏ธ LiveKit is not included in the dev stack. For WebRTC features (guest video/audio), set up LiveKit separately withdocker compose -f docker-compose.yaml up.
For production deployments or if you prefer running services directly on your server:
git clone https://github.com/docisit/itg-media-engine.git
cd itg-media-engine
# Backend
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # Edit with your settings
python manage.py migrate
python manage.py createsuperuser
# Frontend
cd frontend
npm install
cp .env.example .env.local # Edit with your settings
npm run build
# Start with PM2 (see SETUP.md for full ecosystem.config.js example)
pm2 start ecosystem.config.js
pm2 saveSee SETUP.md for the complete bare-metal guide including Nginx, SSL, and LiveKit configuration.
itg-media-engine/
โโโ backend/ # Django REST API
โ โโโ backend/ # Settings, URLs, middleware, throttles
โ โโโ members/ # Models, views, serializers, AI consumers
โโโ frontend/ # Next.js 16 (App Router)
โ โโโ src/ # Pages, components, API routes, hooks
โโโ agents/ # LiveKit AI agents (avatar + voice pipeline)
โโโ docker/ # Nginx Dockerfile + configs (prod + dev)
โโโ docs/ # Feature flags & additional docs
โโโ docker-compose.yml # Production Docker stack
โโโ docker-compose.dev.yml # One-command development stack
โโโ docker-compose.yaml # LiveKit Server + Egress + Ingress
โโโ Dockerfile.django # Multi-stage Django build
โโโ Dockerfile.nextjs # Multi-stage Next.js build
โโโ SETUP.md # Manual bare-metal deployment guide
| Option | Best For | Guide |
|---|---|---|
Docker Dev (docker-compose.dev.yml) |
Local dev, trying it out | docker compose -f docker-compose.dev.yml up --build |
Docker Prod (docker-compose.yml) |
Containerized production | Requires .env.docker with prod secrets |
| PM2 Bare Metal | Production on VPS / dedicated server | See SETUP.md |
LiveKit (docker-compose.yaml) |
WebRTC infrastructure | Always needed for guest video/audio |
Copy .env.example to .env and fill in your values:
| Variable | Required | Description |
|---|---|---|
SECRET_KEY |
โ | Django secret key โ generate with python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())" |
DATABASE_URL |
โ | PostgreSQL connection string |
REDIS_URL |
โ | Redis connection (e.g., redis://127.0.0.1:6379/0) |
LIVEKIT_API_KEY |
โ | LiveKit API key |
LIVEKIT_API_SECRET |
โ | LiveKit API secret |
LIVEKIT_URL |
โ | WebSocket URL (e.g., wss://vdo.yourdomain.com) |
ALLOWED_HOSTS |
โ | Your domain + localhost |
FRONTEND_URL |
โ | Frontend URL for CORS & email links |
TURNSTILE_SITE_KEY |
โ | Cloudflare Turnstile CAPTCHA key |
TURNSTILE_SECRET_KEY |
โ | Cloudflare Turnstile secret |
SPORTS_MODULE_ENABLED |
โ | Set True to enable athlete profiles, drills, leaderboards |
MediaSite is MIT licensed โ you're free to use, modify, and run it for personal or commercial projects.
We ask two things:
-
Keep the Don O'Connor logo & copyright notice on the site. The branding in the footer, favicon, and any "Powered by" text should remain intact. This is how we get credit for the platform.
-
Give credit to the open-source projects that make this possible (see Acknowledgments below).
MediaSite wouldn't exist without these incredible open-source projects:
| Project | Used For |
|---|---|
| LiveKit | WebRTC signaling, ingress, egress โ the backbone of all real-time video/audio |
| Django & Django REST Framework | Backend API, ORM, authentication |
| Next.js | React framework, SSR, API routes |
| PostgreSQL | Reliable, production-grade database |
| Redis | WebSocket channel layers, caching, session store |
| OBS Studio | Broadcast software (WHIP/WebRTC output) |
| Ollama | Local LLM inference for AI agents |
| Nginx | Reverse proxy, SSL termination, RTMP module |
| Docker | Containerization |
| Cloudflare Turnstile | Privacy-friendly CAPTCHA |
| FFmpeg | Video composition & RTMP encoding |
We welcome contributions! Here's how:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please keep the copyright logo and attribution intact.
## ๐ Wiki Pages
| Page | Description |
|---|---|
| ๐ฆ Installation | Prerequisites, Docker dev stack, bare-metal setup |
| โ๏ธ Configuration | Environment variables, .env setup, feature flags |
| ๐ LiveKit Setup | WebRTC infrastructure โ Cloud vs. self-hosted |
| ๐ฌ Broadcasting Guide | Host setup, guest joining, studio page, broadcast page |
| ๐ฎ Director Control | Guest queue, mute/unmute, multi-platform simulcast |
| ๐ค User Roles & Profiles | Roles, registration, COPPA age gate |
| ๐ Sports Module | Athlete stats, drills, leaderboards |
| ๐ค AI Assistant | Avatar agent, FAQ chatbot, Ollama setup |
| ๐ง Admin Panel | Django admin, model management, IP whitelist |
| ๐ Deployment | Production Nginx + SSL, Docker stack, PM2 ecosystem |
| โ Troubleshooting & FAQ | Common issues, WebRTC debugging, FAQs |
Built with โค๏ธ for content creators everywhere. ยฉ Don O'Connor โ keep the logo, share the code.

