Skip to content

Write a Logic/GarageBand ProjectData record walker #5

Description

@sepehrsadri

Wit needs a ProjectData parser for Logic and GarageBand (they share a container). Do not start from scratch, and do not start from logic2ableton.

Start here: jonkubis/LogicProFormatWriter — Python, MIT, ~4,100 LOC plus a ~1,000-line PROJECTDATA_FORMAT.md. It writes valid .logicx from scratch, which is strictly harder than reading, and it ships 30 real Logic 11.2.2 fixtures.

Its spec already documents the root frame (24-byte header, LE u32 length at +0x10), the universal 36-byte record header with size at +0x1c, the reversed-FourCC tag table, tempo encoding, and — critically — track names, which other projects list as unsolved.

The task

Write a read-only ProjectData walker in experiments/ that:

  1. Walks records via the 36-byte header (never by scanning for magic signatures — see below).
  2. Emits a per-tag record census.
  3. Extracts track and region names.
  4. Runs against both a Logic .logicx and a GarageBand .band, proving one parser serves both.

Two traps, both documented in docs/FORMATS.md

  • Never scan for magic signatures. logic2ableton recovers zero MIDI notes from all 30 real fixtures for exactly this reason — and even with its wrong byte corrected, a terminal flag bit inside the signature window means it structurally cannot find the last note of any region. Walk the framing.
  • Two time origins at 960 PPQ. Region placements use origin 34560 (9 bars); tempo, marker and note events use 38400. Confusing them silently corrupts arrangement placement.

Also known: three consecutive saves of a real project had identical record censuses (no semantic change) yet differed in 97 and 140 bytes — a plugin-state UUID is regenerated every save. Your parser should make that detectable.

⚠️ Read-only. Copy to a scratch directory before any experiment that writes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    format-researchReverse-engineering a DAW project formathelp wantedExtra attention is neededm20.0 pilot milestone (see docs/ROADMAP.md 'Now: the 0.0 pilot')phase-3Logic and GarageBand milestone — post-0.0 write-path roadmap

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions