Clean-room note: this repository is outside the clean room. scarletbook-rs agents must not read it or follow its links; the clean side gets requirements only through scarletbook-rs issues. (An owner-directed read on 2026-11-01 is recorded in scarletbook-rs#155.)
Open tools for reading Super Audio CD disc images: a specification written from scratch, a clean-room Rust library built only from it, and the tools that use it. This repository is the map: what each project is for, how they fit together, where things stand and why the big decisions were made. It holds no code.
Board: SACD projects (open issues and PRs of all five repositories in one view).
| Project | What it is | Licence | Side of the wall |
|---|---|---|---|
| sacd-spec | Implementation-free specification of SACD disc images, plus a synthetic conformance corpus and the benchmark method and results | CC BY 4.0 (corpus CC0) | the wall itself |
| scarletbook-rs | Clean-room Rust library: TOC, audio, DST decoding, C ABI; written only from sacd-spec | MIT OR Apache-2.0 | clean |
| pysacd | Python toolkit and sacd_extract-compatible extractor (DSF, DSDIFF, FLAC, WAV), C engine; on PyPI |
GPL-2.0-or-later | not clean |
| beets-pysacd | beets plugin: imports SACD images into a music library, MusicBrainz matching, DVD/Blu-ray audio cataloguing; on PyPI | GPL-2.0-or-later | not clean |
| sacdfs | Read-only FUSE filesystem: mount a folder of images and browse every track as DSF (WAV in progress), decoded on demand by scarletbook | GPL-3.0-or-later | not clean |
sacd-spec (specification + corpus)
│ read only by the clean side
▼
scarletbook-rs (clean Rust library)
│ │
Rust API │ │ C ABI (scarletbook-ffi)
▼ ▼
sacdfs pysacd (will switch its engine to scarletbook)
│
▼
beets-pysacd
scarletbook-rs is permissively licensed, so it must not be derived from GPL code. It is written in an isolated environment by agents that have read only sacd-spec, and the specification side is written without looking at implementations' code. Every spec PR records its sources in PROVENANCE.md, and scarletbook-rs records its research in CLEANROOM.md.
Rules that keep it intact:
- Information may flow from the clean side to everyone else (its code is MIT/Apache).
- Nothing flows the other way. Requirements from pysacd or sacdfs reach scarletbook-rs as issues stating needs and measurements, never code, internals or links to non-clean code.
- Benchmarks of scarletbook are black-box: its released binaries are measured; numbers only are published in sacd-spec.
- This repository is a description, not an input to the clean side.
- scarletbook 0.3.0: passes the whole corpus and real-disc hash checks. DST decoding 0.171 ms
per frame on one core (4.0x
sacd_extract); 2.8x to 3.5xsacd_extractwith all cores. Working towards 1.0: interface stability, seeking, concurrent reads, channel assignment, patent hygiene review. - pysacd 0.2.2 and beets-pysacd 0.1.2: released; pysacd's own DST decoder is 2.4x to 3.0x
sacd_extract. - sacdfs: reads are bit-identical to extraction; reading a whole disc through the mount is
faster than
sacd_extractextracting it. WAV output under way; FLAC deferred.
Full figures: sacd-spec benchmarks.
- sacdfs WAV (in progress): converter, then files, then a real-world pass (sacdfs#11).
- Final scarletbook test, once every scarletbook-rs issue and PR is resolved: correctness on all builds, an idle-machine round, a head-to-head of every tool, a whole-library survey.
- scarletbook 1.0 and publication on crates.io.
- pysacd on scarletbook: pysacd switches its engine to scarletbook through the C ABI.
- Releases of sacdfs, and of pysacd on the new engine.
Every check the projects run against bugs, regressions, leaks, supply-chain problems and bad releases, with links to where each is implemented, and the known gaps: QUALITY.md.
What each minor version line brought, per project, newest first: RELEASES.md.
The major decisions and why they were made: DECISIONS.md.