Opening an exported song starts a fresh session from detection instead of resuming: cuts, discards and metadata do not carry over, so a re-cut never inherits decisions that have already shipped. --resume overrides it on edit, export and project. This reverses what was agreed in planning and written into docs/spec.md and CONTEXT.md, which promised resume-across-sessions and re-export. Both are corrected. The cost is deliberate and worth stating: changing the width cap or adding the SVG renderer later now means re-cutting each song by hand rather than regenerating every bundle from its project file. Export records the flag in bundle.write, so no caller can forget it. Also removed --refit and the Auto-fit buttons, which were added without being asked for and whose only purpose - migrating projects made before the content rectangle was proposed - disappears once exported projects start fresh. Reset now restores detection's proposal rather than the whole page: clearing to full width would undo the thing the rectangle exists for, so one button covers it. open_project() replaces four copies of load-or-detect across the CLI and the editor.
noteman-slicer
Turns a score PDF into the ordered slice images noteman consumes, plus the navigation markers that sit on them.
A slice is one system — one full line of music across all voices, typically 4–12 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 | Glossary. What a slice, cut, discard, bundle and song scale actually mean here. Start here. |
| docs/spec.md | The specification: pipeline, geometry model, detection, editor, bundle format, and what noteman has to change. |
Deferred work is tracked as issues and milestones on the Gitea repo, not in this tree.
Decisions that were expensive to reach, each with the evidence behind it:
| ADR 0001 | The slicer owns all image processing; the bundle is the only channel to noteman. |
| ADR 0002 | Raster only in release 1 — measured SVG slice sizes and what they showed. |
| ADR 0003 | Lossless WebP beats every lossy option and every alternative format here. |
| ADR 0004 | No unattended mode: detection suggests, a human confirms. |
| ADR 0005 | PyMuPDF for all PDF access, accepting AGPL. |
| ADR 0006 | Systems are found by vertical brackets; row-darkness gaps get it wrong. |