An open format for the recipe behind procedurally generated music.
Not the audio. Not the score. The instructions.
A .pmf file is the complete description of a composition — readable by humans, LLMs, and any JSON tool.
Engine-generated natural language. An LLM reads this first and understands the composition without parsing anything else.
Seed, key, BPM with tempo label, mood, bar count. The fingerprint of the composition.
Chord progression as names and scale degrees, bass pattern, arp structure — musical vocabulary, not MIDI numbers.
Motifs in ABC notation with interval and rhythm descriptions. The only note format with proven LLM research behind it.
Section names (Intro, Groove, Lift), bar-gain masks per stem, melody-on bars. The dynamic shape of the loop.
Voice parameters, reverb room, delay type, sidechain depth. Engine-defined but structured with semantic labels.
{
"pmf_version" : "1.0" ,
"engine" : "synthwave_engine" ,
"summary" : "Mid-tempo NightDrive in A minor
at 128 BPM. Sparse intro
builds to full mix by bar 4." ,
"identity" : {
"seed" : 42 ,
"mood" : "NightDrive" ,
"bpm" : 128.0 ,
"bpm_label" : "mid-tempo synthwave" ,
"key" : "A minor" ,
"bars" : 8
},
"harmony" : {
"progression" : [ "Am" , "F" , "C" , "G" ],
"progression_degrees" : [ "i" , "VI" , "III" , "VII" ],
"progression_label" : "minor turnaround"
},
"melody" : {
"motif_a" : {
"abc" : "A2 c B A4" ,
"label" : "ascending minor third"
}
}
} Musical vocabulary throughout — chord names, scale degrees, tempo labels, reverb room names. Not raw indices and floats. An LLM that knows music theory reads a PMF file without documentation.
ABC notation handles melody motifs — the only text-based note format with serious LLM research behind it (ChatMusician 2024, ABC-Eval 2025).
Every existing format was built for a different job. PMF fills the gap they all leave open.