PyFLP is an unofficial parser for FL Studio project and preset files written in Python.
| CI |
|
|---|---|
| PyPI |
|
| Activity |
|
| QA |
|
| Other |
|
From a very general point-of-view, this is the state of what is currently implemented. Click on a link to go to the documentation for that feature.
| Group | Feature | Issues | |
|---|---|---|---|
|
Arrangements |
πΌ Playlist |
|
|
| ποΈ Tracks |
|
||
|
Channel Rack |
π Automations |
|
|
| πΉ Instruments |
|
||
| π Layer |
|
||
| π Sampler |
|
||
|
Mixer |
ποΈ Inserts |
|
|
| π° Effect slots |
|
||
|
πΆ Patterns |
π Controllers |
|
|
| π΅ Notes |
|
||
| π© Timemarkers |
|
||
| Plugins | Native - 8 effects, 1 synth |
|
|
| VST 2/3 |
|
||
| Project - Settings and song metadata |
|
||
Upstream
demberto/PyFLPhas been unmaintained since mid-2023 and cannot parse project files saved by FL Studio 24+ / 25 / 26 (the event stream derails,channelsraisesNoModelsFound). This fork adds the fixes needed to parse modern projects while staying backward-compatible with older files.What changed (all verified on FL26.1.1 saves + legacy FL20.5 saves):
- Event
0xACis varint-length in FL26, not a fixed 4-byte DWORD β this single change fixes the stream desync that broke all FL26 parsing.- Playlist items: 80-byte records (FL 2024/25) and 88-byte records (FL26 adds an 8-byte tail), on top of the existing 32/60-byte layouts.
- Phantom pattern skipped: FL26 writes a small header
NotesEventbefore anyPatternID.New; it no longer surfaces as a bogus pattern (which crashedPattern.iid/arrangements).- Hardening: bounds-checked
DisplayGroupindices (FL24+), guardedsupports_sliceandPluginID.InternalName, and unparseable events degrade toUnknownDataEventinstead of aborting the whole parse.Install from this fork:
python -m pip install git+https://github.com/Meowrium/PyFLP.git
CPython 3.8+ / PyPy 3.8+ required.
python -m pip install -U pyflp
Load a project file:
import pyflp
project = pyflp.parse("/path/to/parse.flp")If you get any sort of errors or warnings while doing this, please open an issue.
Save the project:
pyflp.save(project, "/path/to/save.flp")It is advised to do a backup of your projects before doing any changes. It is also recommended to open the modified project in FL Studio to ensure that it works as intended.
Check the reference for a complete list of useable features.
- Monad.FLParser: https://github.com/monadgroup/FLParser
- FLPEdit (repo deleted by author)
Thanks goes to these wonderful people:
nickberry17 π» |
zacanger π π |
Tim π π» π§ |
This project follows the all-contributors specification. Contributions of any kind are welcome!
Please see the contributor's guide for more information about contributing.
You can contact me either via issues
and discussions or through
email via demberto(at)proton(dot)me.
The code in this project has been licensed under the GNU Public License v3.