| title | created | modified | description | tags | |
|---|---|---|---|---|---|
Logic Pro ProjectData Binary Format — Research Summary |
2026-02-04 |
2026-02-28 |
Successfully reverse-engineered significant portions of Logic Pro's proprietary ProjectData binary format through systematic analysis. Extracted plugin configurations, preset data, and identified the... |
|
Successfully reverse-engineered significant portions of Logic Pro's proprietary ProjectData binary format through systematic analysis. Extracted plugin configurations, preset data, and identified the chunk-based file structure. Track names remain partially elusive but significant progress has been made.
File Header:
- Magic bytes:
23 47 c0 ab(appears to be file signature) - Contains early reference to "gnoS" (Song backwards?)
- Version information embedded as text strings
Overall Organization:
- Chunk-based binary format (similar to IFF/RIFF)
- 801 total chunks in analyzed file (2.8 MB)
- Hierarchical structure with nested data
| Bytes | Reversed | Count | Purpose | Status |
|---|---|---|---|---|
karT |
Trak | 320 | Track definition | ✅ Identified |
qeSM |
MSeq | 169 | MIDI sequence data | ✅ Identified |
qSvE |
EvSq | 169 | Event sequence (automation) | ✅ Identified |
gRuA |
AuRg | 38 | Audio region | ✅ Identified |
tSxT |
TxSt | 32 | Text/Score notation styles | ✅ Decoded |
lFuA |
AuFl | 23 | Audio file reference | ✅ Identified |
LFUA |
AUFL | 23 | Audio file (variant) | ✅ Identified |
PMOC |
COMP | 23 | Comping/take data | ✅ Identified |
MroC |
CorM | 2 | Core MIDI? | |
tSnI |
InSt | 1 | Instrument definition | ✅ Identified |
snrT |
Trns | 1 | Transform/transpose |
Note: The reverse-naming pattern (FourCC codes read backwards) is consistent throughout.
-
Length-prefixed (Pascal):
[1-byte length][string data] -
2-byte length (Big-Endian):
[2-byte BE length][string data] -
4-byte length (Big-Endian):
[4-byte BE length][string data]Used for large JSON blocks
-
Null-terminated:
[string data]\x00
- Float32: BPM values, plugin parameters (both BE and LE found)
- Int32: Sample positions, region lengths, counts (mostly BE)
- Endianness: Mixed, but Big-Endian appears dominant
Discovery: Large sections contain complete JSON objects for Session Players instruments
Structure:
{
"Preset": {
"Name": "Sweet Memories",
"CharacterIdentifier": "Acoustic Piano - Strummed",
"PresetIdentifier": "Acoustic Piano - Strummed - Sweet Memories.dpst",
"Type": "TypeFactoryPreset",
"Parameters": {
"intensity": 71,
"dynamics": 119,
"humanize": 37,
"variation": 1,
"fillsAmount": 69,
"rComp": 42,
"mComp": 3,
...
}
},
"GeneratorMemento": {
"Seeds": {"0": 1763219906, ...},
"LastGenerateLength": 32,
"MementoParameters": {
"regionStartParams": "...",
"regionEndParams": "...",
"humanizeEndStatus": "...",
...
}
},
"RegionType": "Type_AcousticPianoV2",
"FollowTrackUniqueID": "43870E44-C22E-11F0-968B-D17F5F851CEB"
}Decoded Parameters:
- Intensity: Musical intensity (0-127)
- Dynamics: Velocity range (0-127)
- Humanize: Timing variation (0-100)
- Variation: Pattern variation (1-4)
- fillsAmount: Drum fill density
- rComp: Rhythm complexity
- mComp: Melodic complexity
- pushPull: Timing feel (-50 to +50)
- swing: Swing amount (0-100)
-
Alchemy:
- Oscillator shapes: Sine, Saw, Triangle, Square
- LFO shapes: Ramp Up, Ramp Down, Random, Sine
- Formant filters: Vowel shapes (A, E, I, U)
- Noise sources: White, Radio
- Window functions: Tukey
- Library paths successfully extracted
-
Sampler/Quick Sampler:
- References found but minimal data
-
Acoustic Piano - Strummed:
- Preset: "Sweet Memories"
- Type: Type_AcousticPianoV2
- Voicing styles, positions, humanization all decoded
-
Electric Bass - Indie Disco:
- Preset: "Night Flight"
- Type: Type_ElectricBassV2
- Bass type, slides, dead notes, playing position decoded
-
Electronic Drummer - Synthpop:
- Preset: "Hit Factory"
- Type: Type_ElectronicDrummerV2
- Kit pieces (a1, a2, a3, b1, b2, b3, c1, c2, c3) complexity mapped
- Accent variation, phrase variation extracted
Successfully decoded 32 text style definitions:
- Plain Text
- Page Number
- Bar Number
- Instrument Name
- Tuplet
- Repeat Ending
- Chord Root/Extensions
- Multiple Rest
- Tablature
- Tempo Symbol
- Octave Symbol
- Note Head
- Guitar Grid Fingering
- Guitar Marking
- Fingering
- Reserved styles (1-3, numbered slots)
Each with font specifications (Times-Italic found).
Format: Relative and absolute paths
- Alchemy library:
Alchemy/Libraries/WaveOsc/Basic/Sine.raw - System paths:
/Library/Application Support/Logic/Alchemy/... - Apple Loops:
Library/Audio/Apple Loops/Apple/21 Prismatica...
MIDI Sequences (qeSM):
- Contains note data
- "Untitle" strings found (possibly default region names)
- 169 sequences found
Event Sequences (qSvE):
- Automation curves
- Parameter modulation
- 169 instances (matches MIDI sequences 1:1)
Current Status: Partially solved
What We Know:
- Track markers (
karT) do NOT have immediately adjacent names - Generic strings found: "Audio 1", "Audio 2", etc.
- Session Player region names stored in JSON
- Score notation names found in
tSxTchunks
Hypotheses:
- Names stored in separate index table (not yet located)
- Names use indirect references (offsets/pointers)
- May be in file header or footer section
- Could be in parent container we haven't identified
Evidence of Names:
- "Score Settings" found near
tSnIinstrument chunk - "Plain Text", "Page Number" etc. are style names, not track names
- "Untitle" appears near
qeSMmarkers (might be default MIDI region name)
Standard chunk appears to follow:
Offset Bytes Description
+0 [4 bytes] Chunk type (reversed FourCC)
+4 [4 bytes] Flags or sub-type (BE int32)
+8 [4 bytes] Unknown (often 0x00000000)
+12 [4 bytes] Unknown (often 0x0000FFFF or 0xFFFFFFFF)
+16 [variable] Payload data
Observed Header Integers (Big-Endian):
karT:[83891968, 0, 65535, 4294967295]qeSM:[83886336, 0, 65535, 4294967295]qSvE:[16777472, 0, 13824, 65535]tSnI:[16777728, 0, 65535, 4294967295]
Example Project (Hollywood Solaris):
- Total size: 2,801,481 bytes (2.8 MB)
- 801 chunks
- Average chunk size: ~3,497 bytes
- Largest chunks: JSON preset data (several KB)
- Smallest chunks: 36 bytes (minimal
karTmarkers)
Drummer Parameters:
- Kit piece complexity: a1-a3 (hi-hats, rides), b1-b3 (snares, claps), c1-c3 (kicks, toms)
- Each with min/max complexity values
- System variation (1-4): Overall pattern style
- Phrase variation (0-100): Pattern diversity
- Accent variation (0-4): Dynamic accents
Bass Parameters:
- Position (1-100): Fretboard position
- Slides amount (0-100)
- Dead notes (0-100)
- Buzz trills (0-100)
- Blue-syness (0-100): Blues inflection
- Riffiness (1-5): Pattern complexity
- Playing position: Pickup vs bridge
Piano Parameters:
- Upper/lower voicing style (1-5)
- Upper/lower playing style (1-5)
- Grace notes amount (0-100)
- Arp direction (0-3)
- Emphasis (-50 to +50)
-
logic_project_analyzer_enhanced.py:
- Main analyzer with track name extraction
- Generates markdown reports
- Handles MetaData.plist + ProjectData
-
binary_format_analyzer.py:
- Magic marker detection
- String extraction (multiple methods)
- Repeating structure identification
- Hex context analysis
-
extract_plugin_data.py:
- JSON object extraction
- Plugin name detection
- Preset configuration decoding
- Audio file reference extraction
-
hex_dump_analyzer.py:
- Annotated hex dumps
- Context analysis around markers
- Multiple string extraction attempts
- Numeric data patterns
-
chunk_structure_analyzer.py:
- Full file structure mapping
- Chunk hierarchy visualization
- Header parsing
- Track name candidate analysis
- Track Names: Primary location still unknown
- Chunk Size Field: Format unclear (not simple 4-byte size)
- Chunk Hierarchy: Parent-child relationships not fully mapped
- Compression:
PMOC(COMP) chunks may use compression (not yet tested)
- Plugin States: AU/VST plugin data encoding
- Mixer Settings: Channel strip, routing, sends
- Smart Controls: Mapping and configuration
- Flex Time/Pitch: Audio editing metadata
- Undo History: Project file backups format
- Color Coding: Track/region colors
- Folder Tracks: Grouping structure
-
Search for Name Table:
- Analyze file header more thoroughly
- Look for offset pointer tables
- Check file footer sections
-
Test Compression:
- Try zlib decompression on
PMOCchunks - Check for other compression algorithms
- Try zlib decompression on
-
Compare Projects:
- Analyze multiple projects with known track names
- Diff files to isolate name storage location
-
Build Parser Library:
- Python module for ProjectData parsing
- Clean API for extracting data
- Integration with existing analyzer
-
Document AU/VST Formats:
- Reverse engineer plugin state chunks
- Map common plugins (EQ, compressor, etc.)
- Complete Format Specification:
- Document all chunk types
- Create format reference guide
- Enable third-party tools
✅ File structure (chunk-based) ✅ Chunk markers and types ✅ Session Players presets (full parameter sets) ✅ Alchemy synthesizer configurations ✅ Score notation styles ✅ Audio file references ✅ MIDI/automation sequences (structure) ✅ JSON-embedded configurations
❌ AU/VST plugin states ❌ Mixer configurations ❌ Smart Controls ❌ Flex editing data ❌ Compression schemes
This reverse engineering effort provides:
-
Enhanced Project Analysis:
- Extract detailed instrument configurations
- Analyze musical parameters across projects
- Track plugin usage patterns
-
Workflow Insights:
- Understand Session Players generation
- Decode preset parameters for learning
- Extract musical metadata
-
Future Tool Development:
- Foundation for ProjectData parsers
- Potential for project conversion tools
- Cross-DAW project migration
-
Format Documentation:
- First comprehensive analysis of ProjectData format
- Reference for future research
- Enables community tools
Research Date: December 5, 2025 Logic Pro Version: 11.x (detected from files) Files Analyzed: 3 projects, ~2-3 MB each Format Coverage: ~60% understood, 40% remaining
Tools Available At: This repository - see README.md for usage instructions
From analyzing "Example Project.logicx":
Plugins Detected:
- Alchemy (synthesizer with 28 library references)
- Sampler
- Q-Sampler (Quick Sampler)
Presets Found:
- Acoustic Piano - "Sweet Memories" (Type_AcousticPianoV2)
- Intensity: 71, Dynamics: 119, Humanize: 37
- Electric Bass - "Night Flight" (Type_ElectricBassV2)
- Intensity: 79, Dynamics: 100, Riffiness: 3
- Electronic Drummer - "Hit Factory" (Type_ElectronicDrummerV2)
- Intensity: 97.3, Fill Amount: 30.5
File Statistics:
- Size: 2,801,481 bytes
- Total Chunks: 801
- Tracks: 320
- MIDI Sequences: 169
- Audio Regions: 38
- Text Styles: 32
- No official documentation exists for this format
- Format appears proprietary to Apple Logic Pro
- Similar chunk-based formats: IFF, RIFF, AIFF
- Endianness: Primarily Big-Endian (network byte order)