Esa Kataja 24b12214bb Fit the page on startup, name the bundle, show the selection
Three things a first session trips over.

The editor opened at an arbitrary zoom. show_page does fit the page, but
it runs before the window has been laid out, when the viewport is still
its default size; redo it once when the real size arrives.

The bundle was named after the PDF, which is whatever the download was
called. Take the song's title instead — unsafe characters dropped, then
whitespace collapsed to dashes. Accented letters stay, since ä and ö are
not a filesystem's problem, but a leading dot would hide the file.

And the selected slice was drawn as an outline whose top and bottom edges
run under the cut lines painted over them, leaving two thin verticals in
the margins and no way to tell what was selected. Wash the slice, as the
discard and engraved states already do, and keep the outline for the trim
anomalies it exists to show.
2026-07-29 13:09:27 +03:00
2026-07-29 11:42:36 +03:00

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 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.

New here? docs/guide.md walks you through making your first bundle.

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

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. LilyPond is optional and only enables re-engraving.

Then:

noteman-slicer edit my-song.pdf

Documentation

docs/guide.md How to use it: install, cut a score, place markers, export a bundle. Start here if you just want to make one.
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.
docs/bundle-format.md The Score Bundle Format — a standalone specification of the export format, independent of this tool.

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.
ADR 0007 A project is spent once exported; reopening starts fresh. Reverses an earlier decision.
S
Description
No description provided
Readme
195 KiB
Languages
Python 100%