- Python 100%
| 1_extracted_originals | ||
| 2_my_music | ||
| 3_normalized_wavs | ||
| 4_install_to_game | ||
| examples/fh1-horizon-xs-song-picker | ||
| .gitignore | ||
| forza_radio.py | ||
| LICENSE | ||
| NOTICE.md | ||
| README.md | ||
Forza Custom Radio Tool
Source-only helper for replacing a Forza Horizon radio station with your own legally-owned music files. It can unpack a station bank, loudness-normalize replacement tracks, rebuild a .assets.bank, and update RadioInfo_EN.xml metadata so song titles/artists display in-game.
This repository intentionally does not include music, generated WAVs, game files, rebuilt banks, downloaded third-party tools, or prebuilt executables.
What is included
forza_radio.py— Tkinter workflow app for unpack/normalize/rebuild/update-XML.- Empty workflow folders used by the app:
1_extracted_originals/2_my_music/3_normalized_wavs/4_install_to_game/
examples/fh1-horizon-xs-song-picker/— static song-selection example for a Forza Horizon 1-inspired Horizon XS playlist. It contains metadata and review links only, not audio.
Safety and legal notes
- Supply your own audio files. Do not use this repository as a music downloader.
- Back up original game files before copying anything into a game install.
- Test offline / Solo first. Online play and anti-cheat/mod-policy consequences are not verified.
- The app downloads external audio tools on first use if they are missing: ffmpeg, vgmstream, and FMOD/fsbankcl-related files. Those tools have their own licenses/terms; you are responsible for complying with them.
- This project is not affiliated with, endorsed by, or supported by Microsoft, Playground Games, Turn 10, Forza, or FMOD.
Basic workflow
-
Copy the target
RadioInfo_EN.xmlfrom your game audio folder into this tool folder. -
Put replacement music you own into
2_my_music/usingArtist - Title.extfilenames where possible. -
Run the app:
python forza_radio.py -
Use the app tabs to unpack/inspect the original bank, normalize your music, rebuild the bank, and update XML metadata.
-
Copy generated outputs from
4_install_to_game/into the game folder only after backing up the originals.
Build a local Windows executable
A prebuilt executable is not tracked in this repository. If you want one, build it locally from source:
python -m pip install pyinstaller
python -m PyInstaller --onefile --windowed --name forza_radio forza_radio.py
The executable will be created under dist/. It still downloads the external audio tools on first use if they are not already present.
FH1 Horizon XS song-picker example
Open the static example directly in a browser:
examples/fh1-horizon-xs-song-picker/index.html
It lets you review a Forza Horizon 1 Bass Arena + Pulse candidate set, adjust selection/order/metadata, and export JSON/CSV manifests. Links are for review/evidence only; the example does not download or include music.
Credits
Original tool/source copyright: Jan Mazanek, MIT licensed.
Thanks/third-party ecosystem noted by the upstream project:
- vgmstream team — FSB5 → WAV decoding.
- FMOD Studio —
fsbankcl, used to rebuild Vorbis banks. - Wouldubeinta / Fmod-Bank-Tools — prior-art workflow.
- ElRors / ForzaRadioModTool — mirror used by the tool for FMOD-related files.
- ffmpeg — audio normalization.
- Forza modding community research around radio audio formats.
License
MIT. See LICENSE.