Desktop app for recording and managing internet radio streams. It runs a background service that records all stations simultaneously to MP3 files, organised by station and date.
Install these before running the app.
Download from: https://www.python.org/downloads/
Critical — during installation:
- On the first screen, tick "Add Python to PATH" before clicking Install Now.
- If you missed this, fix it manually (see below).
Verify Python is in PATH: Open Command Prompt and run:
python --version
You should see something like Python 3.13.1. If you get 'python' is not recognized, Python is not in PATH.
To add Python to PATH manually:
- Press Win + S, search for "Edit the system environment variables", open it.
- Click Environment Variables.
- Under User variables, select Path and click Edit.
- Click New and add the folder where Python is installed, e.g.:
C:\Python313\C:\Python313\Scripts\- (The exact folder name depends on your Python version — check
C:\for a folder starting withPython)
- Click OK on all dialogs.
- Restart your PC (or sign out and back in) for the change to take effect.
If Python was installed from the Microsoft Store, it is usually already in PATH automatically.
ffmpeg must be placed at exactly this path:
C:\ffmpeg\bin\ffmpeg.exe
How to install ffmpeg:
- Download a Windows build from: https://www.gyan.dev/ffmpeg/builds/ (get
ffmpeg-release-full.7zor the.zipversion) - Extract it.
- Inside the extracted folder, find the
binfolder (it containsffmpeg.exe,ffplay.exe,ffprobe.exe). - Create the folder
C:\ffmpeg\bin\and copy those three.exefiles into it.
Verify ffmpeg works: Open Command Prompt and run:
C:\ffmpeg\bin\ffmpeg.exe -version
You should see ffmpeg version info.
LAUNCH_APP.bat ← Double-click to start the app
stations.txt ← List of radio stations to record
README.md
app\
LAUNCH_APP.vbs ← Hidden-window launcher (called by the .bat)
radio_control_app.py ← GUI frontend
rc_backend_service.py ← Recording supervisor (runs in background)
rc_config.py ← Configuration constants
rc_process.py ← Process management (start/stop)
rc_station_store.py ← stations.txt read/write
rc_status.py ← Status/health checks
rc_logs.py ← Log helpers
rc_power.py ← Keep-awake (prevents sleep during recording)
rc_preflight.py ← Startup self-checks
Runtime\ ← Runtime logs and health files (auto-created)
RadioRecordings\ ← Saved recordings by station/date (auto-created)
Double-click LAUNCH_APP.bat in the project root folder.
The app window will open. No CMD/console window should appear during normal use.
Manual start (for debugging):
python app\radio_control_app.py
Click Start Recording to begin recording all stations in stations.txt.
- The backend supervisor starts as a background process.
- Each station gets its own ffmpeg process streaming and saving audio.
- Status updates every 5 seconds automatically.
Click Stop Recording to stop all recordings immediately.
- All ffmpeg processes are terminated.
- The backend supervisor is shut down.
- A stop flag is written so recording does not restart automatically.
Shows the real-time recording status of every station:
| Column | Meaning |
|---|---|
| Station | Station name from stations.txt |
| Status | RECORDING, IDLE, STARTING, NO WRITE, NO AUDIO, ERROR |
| Issue | Short description of any problem |
| Detail | Longer technical detail |
| Latest File | Most recently written recording file |
- Type the station name in the Name field.
- Paste the stream URL in the Stream URL field.
- Click Add Station.
Station names may contain letters, numbers, spaces, _, -, ., /.
Stream URLs must start with http:// or https://.
Select a station row in the table, then click Remove Selected.
Select a station in the table, then use the Yesterday / Today / Pick Date buttons to browse recording files for that day. Click Play Selected to open a recording in your default media player.
Click Run Self Check at any time to verify that Python, ffmpeg, folders, and the backend are all correctly set up. Any warnings or failures will be listed.
One station per line, name and URL separated by |:
Station_Name|https://stream.url/path
Radio_1|https://eu6.fastcast67hu.com/proxy/radio1?mp=/57
Hot_FM|https://s45.yesstreaming.com:89076/streams
- Names can contain letters, numbers, space,
_,-,.,/. - URLs must be
http://orhttps://. - Lines without
|are ignored. - Edit this file while recording is running — the backend picks up changes within 5 seconds.
Recordings are saved to:
RadioRecordings\<StationName>\YYYY\MM\DD\YYYY-MM-DD-HH-MM-SS.mp3
Example:
RadioRecordings\ZNBC_Radio_1\2026\03\03\2026-03-03-14-30-00.mp3
Files are recorded continuously. A new file starts automatically at each recording restart or reconnect.
Use this procedure to copy the app to a new machine.
Copy the entire project folder to the target machine. You can use a USB drive or network share.
On the target machine, preserve these if they exist:
RadioRecordings\— contains saved recordingsRuntime\— contains logs and statestations.txt— contains the station list for that machine
- On the target PC, install Python 3 with "Add Python to PATH" ticked.
- Install ffmpeg at
C:\ffmpeg\bin\ffmpeg.exe(see prerequisites above). - Copy the project folder to the target PC (e.g. to the Desktop).
- Do not overwrite
RadioRecordings\,Runtime\, orstations.txtif they already exist. - Double-click
LAUNCH_APP.batto start. - Click Run Self Check to confirm everything is working.
The launcher could not find app\radio_control_app.py.
- Make sure the entire project folder was copied — not just
LAUNCH_APP.baton its own. - The folder structure must be intact (
LAUNCH_APP.batand theapp\subfolder must be in the same directory).
Python is not in the system PATH.
- Follow the Python PATH setup steps in the Prerequisites section above.
- After adding Python to PATH, restart the PC before trying again.
- Verify the file exists at exactly
C:\ffmpeg\bin\ffmpeg.exe. - Re-run the Run Self Check after installing ffmpeg.
- The stream URL may be down or changed — check if you can open the URL in a browser or VLC.
- Update the URL in
stations.txtand the backend will reconnect within 5 seconds. - Some streams require authentication — if you see
401 Unauthorizedin the station log, the stream is password-protected or the URL has changed.
- This was a known bug that has been fixed. Make sure you have the latest version of all files in the
app\folder. - After updating files, close the app and reopen via
LAUNCH_APP.bat.
- Check
Runtime\launch_last.logfor error details. - Try running
python app\radio_control_app.pyin a Command Prompt window to see any error messages.
- Install the Microsoft Visual C++ Redistributable: https://aka.ms/vs/17/release/vc_redist.x64.exe
All logs are in the Runtime\ folder:
| File | Contents |
|---|---|
service.log |
Backend supervisor activity and errors |
metrics.json |
Per-station recording statistics |
service_heartbeat.json |
Backend alive status (updated every 5s) |
restart_state.json |
Retry backoff state for failed stations |
stopped_intentionally.flag |
Present when recording was manually stopped |
<StationName>.log |
Per-station ffmpeg output and errors |
To diagnose a specific station's problem: select it in the table and click Open Selected Log.