Lo-fi radio streams are one of the most successful 24/7 formats on YouTube and Twitch. Running one from a VPS costs less than your monthly coffee budget and runs indefinitely without your computer.
What You Need
- A VPS (2+ cores, 4GB RAM for video output)
- FFmpeg installed
- Audio files (royalty-free lo-fi music)
- Background animation or still image
- Stream key for your platform
Audio Setup
Royalty-Free Music Sources
Never use copyrighted music. Free sources:
- Lofi Girl's open-source tracks (check licenses)
- Free Music Archive
- Artists who specifically license for streaming
- Your own productions
Organizing Files
mkdir -p /stream/{audio,video,assets}
# Upload your audio files to /stream/audio/
Creating Audio Playlist
find /stream/audio -name "*.mp3" | shuf | sed "s/^/file '/" | sed "s/$/'/" > /stream/audio/playlist.txt
Video Background
Option 1: Static Image with Animated Overlay
ffmpeg -loop 1 -i /stream/assets/background.png \
-stream_loop -1 -f concat -safe 0 -i /stream/audio/playlist.txt \
-vf "drawtext=fontfile=/fonts/font.ttf:text='Lo-Fi Radio':fontcolor=white:fontsize=24:x=50:y=50" \
-c:v libx264 -preset medium -tune stillimage -b:v 1500k \
-c:a aac -b:a 192k -ar 44100 \
-shortest -f flv rtmp://live.twitch.tv/app/KEY
Option 2: Looping Video Background
ffmpeg -stream_loop -1 -i /stream/video/animation.mp4 \
-stream_loop -1 -f concat -safe 0 -i /stream/audio/playlist.txt \
-map 0:v -map 1:a \
-c:v libx264 -preset medium -b:v 3000k \
-c:a aac -b:a 192k \
-f flv rtmp://a.rtmp.youtube.com/live2/KEY
Option 3: Audio Visualizer
Generate a waveform visualization:
ffmpeg -stream_loop -1 -f concat -safe 0 -i /stream/audio/playlist.txt \
-filter_complex "[0:a]showwaves=s=1920x1080:mode=line:colors=purple[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -preset medium -b:v 3000k \
-c:a aac -b:a 192k \
-f flv rtmp://live.twitch.tv/app/KEY
systemd Auto-Restart
Create /etc/systemd/system/lofi-stream.service:
[Unit]
Description=Lo-Fi Radio Stream
After=network.target
[Service]
Type=simple
User=stream
WorkingDirectory=/stream
ExecStart=/usr/bin/ffmpeg -loop 1 -i /stream/assets/bg.png -stream_loop -1 -f concat -safe 0 -i /stream/audio/playlist.txt -c:v libx264 -preset medium -tune stillimage -b:v 1500k -c:a aac -b:a 192k -shortest -f flv rtmp://live.twitch.tv/app/KEY
Restart=always
RestartSec=15
[Install]
WantedBy=multi-user.target
Playlist Rotation
Shuffle the playlist daily to prevent repetition:
# crontab entry
0 4 * * * /stream/scripts/shuffle.sh && systemctl restart lofi-stream
The restart is brief (seconds) and barely noticeable to viewers.
Resource Usage
A 1080p lo-fi stream with static background uses:
- CPU: 1-2 cores (~30-50% of a modern core)
- RAM: ~500MB
- Bandwidth: ~2-4 Mbps upload
- Storage: Depends on music library (10-50GB typical)
On a Space-Node VPS, this runs at a fraction of the server's capacity, leaving room for other tasks.
Growing Your Stream
Lo-fi streams grow slowly but steadily:
- Consistent uptime builds algorithmic favor (YouTube especially)
- Unique aesthetics differentiate from competitors
- Engaging chat community (Discord integration)
- Regular new music additions keep returning viewers
The overhead is minimal after initial setup. Upload new tracks monthly, and the stream manages itself.
