Initial commit

This commit is contained in:
Esa Kataja
2026-07-28 21:12:41 +03:00
commit ecd303322f
+49
View File
@@ -0,0 +1,49 @@
# noteman-slicer
Turns a score PDF into the ordered slice images [noteman](../noteman) consumes,
plus the navigation markers that sit on them.
A slice is one *system* — one full line of music across all voices, typically
412 bars with lyrics intact. noteman displays them as a continuous vertical
scroll, so the slicer's job is to cut a printed page into systems, clean them up
enough to read on a tablet, and tag them with the score's navigation symbols.
**Status: design only.** No code yet. The design is settled; see below.
## How it works
Open a PDF, and the tool proposes cuts between systems, a skew correction, and a
content rectangle. You correct all of it — source quality varies too much for
unattended processing, so detection is an accelerator that nothing depends on
being right. You mark the header and footer regions discarded, set black and
white points until the paper disappears and the notes go solid, place the
rehearsal letters and jump markers, fill in the title block, and export.
Out comes one zip: the slices in order, their markers, the original PDF, and the
song metadata. That bundle is the only channel to noteman — there's no API
between the two tools.
Erasing previous-owner pencil marks, chord letters and breath marks stays in
GIMP. That's the irreducible manual part, and GIMP with a stylus is already good
at it.
## Installation
Not yet installable. When it is:
```
uv tool install --editable .
```
That puts a `noteman-slicer` command on PATH which runs from any directory — no venv to
activate. Dependencies (PyMuPDF, PySide6, OpenCV, numpy) are all wheels; nothing
needs a system package.
## Documentation
| | |
|---|---|
| [CONTEXT.md](CONTEXT.md) | Glossary. What a slice, cut, discard, bundle and song scale actually mean here. Start here. |
| [slicer-handoff.md](slicer-handoff.md) | The design: pipeline, geometry model, detection, bundle format, and what noteman has to change. |
| [docs/adr/0001](docs/adr/0001-slicer-owns-image-processing-bundle-is-the-only-channel.md) | Why the slicer owns all image processing and the bundle is the only channel. |
| [BACKLOG.md](BACKLOG.md) | Deliberately deferred, with the reasoning that got it deferred. |