Stream247 is a headless 24/7 streamer/relay with a built-in web dashboard.
It can:
- Loop a YouTube playlist or single YouTube video
- Relay a Twitch channel URL
- Relay a direct HLS
.m3u8URL - Push output to any RTMP/RTMPS ingest (YouTube Live, Twitch, Owncast, Restream, custom RTMP servers)
- Web dashboard to start/stop/skip streams and live-edit settings
- Source support: YouTube playlist/video, Twitch URL, direct HLS URL
- Output controls: resolution (480p to 2160p), 30/60 FPS, bitrate, stream buffer mode
- Encoder selection: auto or explicit (
libx264, NVENC, QSV, AMF, VAAPI) - Optional title overlay and playlist shuffle
- YouTube auth options (
yt-dlpbrowser cookie import + optional profile path) - In-app binary updates for
yt-dlpandffmpeg - In-app app update check/install (release or prerelease channel)
- Optional config persistence for source + stream key
- Web console logs (app/other output + ffmpeg output)
python3 Stream247.py- Linux:
dist/stream247-server
When running, open:
http://127.0.0.1:7788
If config.json exists, host/port are read from:
web_server_host(default0.0.0.0)web_server_port(default7788)
curl -L -o stream247-linux-x86_64.tar.gz \
https://github.com/TheDoctorTTV/247-stream/releases/latest/download/stream247-linux-x86_64.tar.gz
tar -xzf stream247-linux-x86_64.tar.gz
PKG_DIR="$(tar -tzf stream247-linux-x86_64.tar.gz | head -n1 | cut -d/ -f1)"
cd "$PKG_DIR"
chmod +x stream247-server install_systemd_user_service.sh uninstall_systemd_user_service.sh
./install_systemd_user_service.sh
sudo loginctl enable-linger "$USER"
systemctl --user status stream247.service
journalctl --user -u stream247.service -fRequires jq.
PRE_TAG="$(curl -fsSL https://api.github.com/repos/TheDoctorTTV/247-stream/releases \
| jq -r '.[] | select(.prerelease==true and .draft==false) | .tag_name' \
| head -n1)"
test -n "$PRE_TAG"
curl -L -o stream247-linux-x86_64.tar.gz \
"https://github.com/TheDoctorTTV/247-stream/releases/download/${PRE_TAG}/stream247-linux-x86_64.tar.gz"
tar -xzf stream247-linux-x86_64.tar.gz
PKG_DIR="$(tar -tzf stream247-linux-x86_64.tar.gz | head -n1 | cut -d/ -f1)"
cd "$PKG_DIR"
chmod +x stream247-server install_systemd_user_service.sh uninstall_systemd_user_service.sh
./install_systemd_user_service.sh
sudo loginctl enable-linger "$USER"
systemctl --user status stream247.service
journalctl --user -u stream247.service -fconfig.json is read from the app runtime directory.
Common fields:
playlist_urlrtmp_basestream_keyresolutionframeratevideo_bitratebuffer_modeencoder_preferenceoverlay_titlesshufflelog_to_filerememberyt_auth_enabledyt_auth_browseryt_auth_profilecheck_updates_startupauto_app_updatesapp_update_channelupdate_download_cap_mbps
A current example is available at dist/config.json after building/running.
./build_linux.shBuild output:
- Linux:
dist/stream247-server
The build bundles web dashboard assets from web/ (index.html, style.css, app.js) into the binary.
After building:
./scripts/install_systemd_user_service.shThis installs and starts ~/.config/systemd/user/stream247.service with:
ExecStartpointing todist/stream247-serverRestart=alwaysSTREAM247_SYSTEMD=1so in-app updates hand restart control tosystemd
For startup on boot without logging in, enable linger once:
sudo loginctl enable-linger "$USER"- Stream247 is web-dashboard first; streaming starts only after clicking Start Stream.
- Dashboard binds to
0.0.0.0by default; secure network access yourself (firewall/VPN/reverse proxy). - YouTube/Twitch source retrieval depends on
yt-dlp. - Keep platform bitrate/resolution limits in mind for your destination ingest.
TheDoctorTTV