| title | created | modified | description | tags | |
|---|---|---|---|---|---|
Contributing to LogicX Analyzer |
2026-02-04 |
2026-02-04 |
Thank you for your interest in contributing to the LogicX Analyzer project! This document provides guidelines for contributing to the reverse engineering effort of Logic Pro's binary format. |
|
Thank you for your interest in contributing to the LogicX Analyzer project! This document provides guidelines for contributing to the reverse engineering effort of Logic Pro's binary format.
- Decode Logic Pro's proprietary ProjectData binary format
- Extract metadata, plugins, presets, and project structure
- Create tools for musicians and researchers to analyze Logic projects
- Document findings for educational and archival purposes
- ~60% format decoded - significant progress but still incomplete
- High priority: Track name extraction (custom names location unknown)
- See docs/RESEARCH_SUMMARY.md for detailed status
Found a new chunk type or data structure?
- Document your findings in markdown format
- Include hex dumps showing the pattern
- Provide sample data (anonymize file paths)
- Explain how to reproduce the discovery
- Update docs/RESEARCH_SUMMARY.md
Example format:
## New Chunk Discovery: `XyZw` marker
**Purpose**: Appears to control [functionality]
**Location**: Found at offset [X] in ProjectData
**Frequency**: [N] occurrences per project
**Structure**:
- Bytes 0-3: `XyZw` marker
- Bytes 4-7: Length (Big-Endian int32)
- Bytes 8+: Data payload
**Hex dump example**:
\`\`\`
00001234: 58 79 5a 77 00 00 00 10 ...
\`\`\`Adding new analyzers or improving existing ones:
-
Follow existing patterns:
- Use classes like
ProjectDataAnalyzer,PluginDataExtractor - Include docstrings for all functions
- Use type hints where possible
- Follow PEP 8 style guidelines
- Use classes like
-
Test with multiple projects:
- Test on at least 3-5 different Logic projects
- Include different Logic Pro versions (10.x, 11.x)
- Test various project sizes and complexities
-
Update documentation:
- Add usage examples to README.md
- Document new findings in appropriate docs/ files
- Update CLAUDE.md if architecture changes
-
Submit clean commits:
git add <files> git commit -m "Add: Brief description of what you added"
Found an issue?
Include:
- Python version
- macOS version
- Logic Pro version
- Sample error output
- Steps to reproduce
Have an idea for improvement?
- Check existing documentation first
- Open an issue describing the feature
- Explain the use case
- Suggest implementation approach (if you have ideas)
logic_project_analyzer_enhanced.py- Main analyzer (add general features here)binary_format_analyzer.py- Low-level binary analysischunk_structure_analyzer.py- File structure mappingextract_plugin_data.py- Plugin/preset extractionhex_dump_analyzer.py- Hex-level investigationextract_track_names.py- Track name extraction (needs improvement!)
- Archive for research prototypes
- Not for production use
- See scripts/experimental/README.md
RESEARCH_SUMMARY.md- Complete findingsBINARY_FORMAT_FINDINGS.md- Technical specificationREADME_BINARY_ANALYSIS.md- Analysis guideQUICK_REFERENCE.md- Command reference
# Test main analyzer
python3 scripts/logic_project_analyzer_enhanced.py
# Test on specific project
python3 scripts/binary_format_analyzer.py "path/to/ProjectData"
# Compare results across Logic versions
python3 scripts/chunk_structure_analyzer.py "path/to/Project_v10.logicx/Alternatives/000/ProjectData"
python3 scripts/chunk_structure_analyzer.py "path/to/Project_v11.logicx/Alternatives/000/ProjectData"- ✅ Correct tempo extraction
- ✅ Plugin names properly decoded
- ✅ JSON presets parse without errors
- ✅ Chunk counts match expected values
- ✅ No crashes on malformed data
- ✅ Handles missing files gracefully
- PEP 8 compliance
- Type hints for function signatures
- Docstrings for all public functions
- 4 spaces for indentation (no tabs)
def extract_chunk_data(data: bytes, offset: int, marker: bytes) -> Optional[Dict[str, Any]]:
"""
Extract data from a chunk starting at the given offset.
Args:
data: Complete binary file data
offset: Position where chunk begins
marker: 4-byte chunk marker to look for
Returns:
Dictionary with chunk info, or None if invalid
"""
if data[offset:offset+4] != marker:
return None
# Implementation...
return chunk_info- Classes:
PascalCase(e.g.,ProjectDataAnalyzer) - Functions:
snake_case(e.g.,extract_json_objects) - Constants:
UPPER_SNAKE_CASE(e.g.,CHUNK_MARKERS) - Private:
_leading_underscore(e.g.,_parse_header)
-
Always use hex editors alongside Python scripts
- HexFiend (macOS), 010 Editor, or ImHex recommended
-
Document byte offsets in your findings
- Makes it reproducible for others
-
Look for patterns across multiple files
- Don't assume one project is representative
-
Test edge cases:
- Empty projects
- Maximum track count
- Different time signatures
- Non-standard sample rates
GitHub Issue: #214 — LogicX Analyzer: research priorities
-
Track Name Location 🔥 HIGH PRIORITY
- Custom track names location still unknown
- Generic names work ("Audio 1") but custom names elusive
- Likely in offset table or index structure
-
Compression Detection
- Some chunks may be compressed (zlib, gzip)
- PMOC chunks are candidates
-
AU/VST Plugin States
- Native plugins work (Alchemy, Sampler)
- Third-party plugin state format unknown
-
Complete Automation Curves
- qSvE chunks identified but not fully decoded
- Parameter automation over time
-
Full MIDI Note Data
- qeSM chunks contain MIDI data
- Note on/off, velocity, CC extraction
✅ Allowed:
- Analyzing your own Logic Pro projects
- Educational reverse engineering
- Interoperability research
- Personal archival purposes
- Publishing findings and tools
❌ Not Allowed:
- Circumventing copy protection
- Enabling piracy
- Violating Logic Pro EULA
- Redistributing Apple's binaries
- Commercial use without proper licensing
- Logic Pro is © Apple Inc.
- This project is not affiliated with or endorsed by Apple
- Always include disclaimer in derivative works
- Fork the repository
- Create a branch for your feature:
git checkout -b feature/your-feature-name - Make changes following guidelines above
- Test thoroughly with multiple projects
- Commit with clear messages
- Push to your fork
- Open a Pull Request with description of changes
## Description
Brief description of what this PR does
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Research findings
- [ ] Documentation update
- [ ] Code refactoring
## Testing
Describe testing performed:
- Logic Pro version:
- Number of projects tested:
- Test results:
## New Findings (if applicable)
Document any new chunk types, markers, or format discoveries
## Checklist
- [ ] Code follows style guidelines
- [ ] Documentation updated
- [ ] Tested on multiple projects
- [ ] No personal file paths in code/output- Check docs/ folder first
- Review RESEARCH_SUMMARY.md
- Open a GitHub Issue for discussion
When sharing discoveries, please:
- Anonymize file paths
- Remove personal project names
- Include only relevant hex dumps (not entire files)
Contributors will be recognized in project documentation. Significant research contributions may be highlighted in RESEARCH_SUMMARY.md.
Thank you for helping decode Logic Pro's format! 🎵
Last Updated: January 2, 2026