Upload videos or paste direct web links to broadcast them as a "Live" stream. The system will play items in order.
Current Queue
Offline
Loading queue...
ℹ️ App Details
Version1.3
Min Android5.0 (API 21)
Size~6.6 MB
RTMP Streaming✓
Local Recording✓
Auto-Updates✓
⚠️ Danger Zone
This will wipe all customisations (colours, fonts, images, sizes, and text) and restore the original factory settings to both the dashboard and the live viewer.
Your Username and Password will NOT be changed.
🔍
📋 System Setup Progress
0%
0 of 0 steps complete
🏗️ System Architecture Overview▼
📱 Android App Candy-Bot Streamer
──RTMP 1935──▶
🖥️ VPS 187.77.152.189
──HLS──▶
🌐 Viewer livecastly.fun/
Component
Location on Server
URL
📺 Viewer Page
/docker/live/index.html
livecastly.fun/
⚙️ Admin Dashboard
/opt/www/stream/index.html
livecastly.fun/stream/
🐍 Python API
/docker/api/server.py
livecastly.fun/api/…
📡 RTMP / HLS Server
/docker/live/
rtmp://187.77.152.189/live/
🗂️ Static Files
/opt/downloads/
livecastly.fun/downloads/
🎨 Saved Themes
/opt/downloads/themes/
/api/theme/{key}
🔁 Reverse Proxy
/docker/traefik/
Handles SSL + routing
💡 All containers are managed with docker compose. Traefik auto-renews SSL certificates via Let's Encrypt.
🚀 Initial System Setup Checklist▼
Tick each step as you complete it. Progress is saved automatically.
🖥️ VPS & Server
🔁 Traefik (Reverse Proxy + SSL)
📡 RTMP / HLS Streaming
🐍 Python API
🗂️ Static Files
✅ First-Time Verification
🔄 Webpage / System Update Checklist▼
Run through this list every time you push an update to the system.
Before You Start
Upload Files
Restart Containers
Verify
🐳 Server Dependencies▼
Dependency
Version
Purpose
Install
Docker Engine
24+
Container runtime for all services
Docker Compose
v2
Multi-container orchestration
nginx-rtmp
latest
Receives RTMP, serves HLS segments
Via docker image
Python 3
3.10+
API server (server.py)
Via docker image
Traefik
v2
Reverse proxy + auto SSL
Via docker image
All services run as Docker containers — no direct host installation needed beyond Docker itself.
Useful Docker commands
docker psList running containers
docker compose logs -fFollow container logs
docker compose up -dStart / update containers
docker compose restartRestart all in compose
docker compose downStop and remove containers
docker system prune -fClean unused images/cache
🌐 Web Pages Guide▼
Property
Value
File location
/docker/live/index.html
Public URL
https://livecastly.fun/
Served by
nginx-rtmp container (port 8080 internally)
After update
Restart live container
The viewer auto-loads the live default theme set by Apply to Viewer. Override per-service with ?s=SHORTKEY or ?t=BASE64 in the URL.
Upload viewer via SFTP
Restart after upload
Property
Value
File location
/opt/www/stream/index.html
Public URL
https://livecastly.fun/stream/
Served by
Static nginx container
After update
No restart needed — file is served directly
The dashboard is a single HTML file. Credentials, themes, and labels are stored in browser localStorage. Clearing site data will reset them.
Theme Method
How It Works
✅ Apply to Viewer
Saves to /opt/downloads/themes/live.json — all visitors see it
🔗 Generate & Shorten URL
Saves to /opt/downloads/themes/{6-char-key}.json — share link
👁 Preview
Embeds theme as base64 in URL — local only, not saved
To completely clear the live theme, delete /opt/downloads/themes/live.json on the server — viewer will revert to default CB logo display.
🔌 API Reference▼
All authenticated endpoints require header: X-API-Token: Candy-Bot (matches your dashboard password).
Method
Endpoint
Auth
Description
GET
/api/status
✅
List all running Docker containers
GET
/api/streamkey
✅
Get current stream key
POST
/api/streamkey/generate
✅
Generate new random stream key
POST
/api/streamkey/set
✅
Set a custom stream key {key}
POST
/api/action
✅
Server action {action, service}
GET
/api/playback
✅
Get current playback config
POST
/api/playback/set
✅
Set playback URL + mode
POST
/api/playback/clear
✅
Clear playback, go offline
POST
/api/theme/save
✅
Save theme, get short key
POST
/api/theme/set-default
✅
Set live default theme
GET
/api/theme/live
🔓
Get live default theme (public)
GET
/api/theme/{key}
🔓
Get saved theme by short key (public)
📱 Android App Setup▼
Download Candy-Bot Streamer APK from livecastly.fun/downloads/candy-bot-streamer.apk or scan the QR code in the Admin tab.
On your Android phone go to Settings → Apps → Install unknown apps and allow your browser.
Open the downloaded APK and install it.
In the app, set the RTMP URL to: rtmp://187.77.152.189/live/
Set the Stream Key to match the key shown in the Admin tab → Stream Key.
Tap Start Stream — the viewer page will automatically switch from offline to live within a few seconds.
⚠️ If you regenerate the stream key, update the app with the new key before streaming again.
🔧 Troubleshooting▼
▶ Viewer page shows offline but I'm streaming
Check the stream key in the app matches what's shown in Admin → Stream Key.
Verify the live container is running:
Check nginx-rtmp logs:
Confirm port 1935 is open in your VPS firewall.
▶ Dashboard API calls fail (red errors in server controls)
Check the API container is running:
Verify your password matches the API token — change password resets both.
Test directly:
Restart the API:
▶ Apply to Viewer doesn't seem to work
The viewer fetches /api/theme/live on load. Check:
You are logged in — Apply requires a valid API token (your password).
The theme file exists:
Hard refresh the viewer page (Ctrl+Shift+R).
▶ Forgot password and lost .cbkey file
If you have SSH access to the server you can reset manually:
SSH into the VPS.
Edit /docker/api/server.py and set TOKEN = 'Candy-Bot'.
Restart the API:
Open dashboard in incognito — the default credentials admin / Candy-Bot will work.
▶ SSL certificate expired or not working
Traefik auto-renews Let's Encrypt certs every 60 days. Check Traefik is running.
Restart Traefik:
Check logs:
▶ Viewer fonts look wrong or missing
The viewer loads Google Fonts dynamically. If offline or fonts blocked:
The viewer will fall back to the browser's default serif/sans-serif font.
Choose a System Font from the Fonts dropdowns in Customize Viewer — these don't require Google Fonts.