c0ebe118cb06270c2dca93c8d61885f7f25ba9a8
Journey FM Playlist Creator
Desktop app + script that pulls recently played songs from Journey FM / Spirit FM and updates a Plex playlist.
What It Does
- Scrapes recently played songs from:
https://www.myjourneyfm.com/recently-played/https://spiritfm.com/ajax/now_playing_history.txt
- Matches tracks in your Plex Music library with title/artist normalization.
- Creates or updates your configured Plex playlist.
- Avoids adding duplicates already in the target playlist.
- Tracks run history in
playlist_history.db. - Writes missing songs to
amazon_buy_list.txtwith Amazon search links. - Provides a GUI with system tray support, settings, log viewer, history, stats, analytics, and CSV export.
Requirements
- Python 3.10+
- Plex account token + reachable Plex server
- A Chrome/Chromium browser for Selenium scraping
Dependencies are listed in requirements.txt (GUI uses PySide6).
Install
Windows
Simple install from GitHub (recommended):
- Open PowerShell.
- Run:
git clone https://github.com/nmemmert/journey-fm-playlist.git
cd journey-fm-playlist
.\install_windows.bat
- Launch from:
- Start Menu: Journey FM Playlist Creator
- Desktop shortcut: Journey FM Playlist Creator
No Git? Download ZIP from GitHub (Code -> Download ZIP), extract, open PowerShell in that folder, and run:
.\install_windows.bat
If script execution is blocked:
powershell -NoProfile -ExecutionPolicy Bypass -File .\install_windows.ps1
Optional installer switches:
-NoDesktopShortcutskips Desktop shortcut creation-NoStartMenuShortcutskips Start Menu shortcut creation
Manual install (advanced):
py -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
python journey_fm_app.py
Installer files:
install_windows.bat- one-click installer launcherinstall_windows.ps1- installer logic
Linux
Quick setup:
./install.sh
Manual setup:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python journey_fm_app.py
Configuration
Use the GUI setup wizard (first launch) or edit config.json directly.
Example config.json:
{
"PLEX_TOKEN": "your-plex-token",
"SERVER_IP": "192.168.1.100",
"PLAYLIST_NAME": "Journey FM Recently Played",
"AUTO_UPDATE": true,
"UPDATE_INTERVAL": 15,
"UPDATE_UNIT": "Minutes",
"SELECTED_STATIONS": "journey_fm,spirit_fm"
}
You can also provide runtime env vars:
PLEX_TOKENSERVER_IPPLAYLIST_NAME
Optional browser override:
CHROME_BINARY(absolute path to Chrome/Chromium executable)
If CHROME_BINARY is not set, the app auto-detects browser locations for Windows/Linux/macOS and then falls back to PATH.
Running Without GUI
Run one update cycle from CLI:
python main.py
GUI Notes
- Minimize-to-tray on close when tray is available.
- Tray menu supports Show / Update Now / Quit.
- Auto-update runs on configurable interval.
- Works on X11 and Wayland Linux sessions.
Output Files
config.json- runtime settings shared by GUI and CLIplaylist_history.db- update history and statistics dataplaylist_log.txt- GUI update logsamazon_buy_list.txt- missing songs with Amazon linksplaylist_export.csv- exported playlist from GUI action
Troubleshooting
- Server not found: verify
SERVER_IP, Plex availability, and that you are signed in with the correct account token. - No songs added: confirm scraped songs exist in your Plex library and metadata is correct.
- Browser startup errors: install Chrome/Chromium or set
CHROME_BINARYexplicitly. - No tray icon: some desktop environments disable or hide legacy trays.
- GUI fails at startup (
libGL.so.1/ PySide6 import errors): install missing system graphics libs (Linux example:sudo apt install libgl1) and reinstall Python deps withpip install -r requirements.txt.
Core Files
journey_fm_app.py- desktop GUI and tray appmain.py- scraping + Plex update pipelinerequirements.txt- Python dependenciesinstall.sh- Linux setup helper
Pre-Release Checklist
- Verify
config.jsonhas validPLEX_TOKEN,SERVER_IP, andPLAYLIST_NAME. - Run one CLI update:
python main.pyand confirm songs/history are written. - Run GUI update:
python journey_fm_app.pyand verify status/log output updates. - Confirm tray behavior (minimize to tray, Show/Update/Quit actions).
- On Windows/Linux, confirm Chrome/Chromium detection or set
CHROME_BINARY. - Export playlist once and verify
playlist_export.csvis created.
Languages
Python
93%
Shell
3.2%
PowerShell
3%
Dockerfile
0.5%
Batchfile
0.3%