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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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