Commit Graph
10 Commits
Author SHA1 Message Date
Cursor Agentandchen 7c988e9347 Add a New line button for another fingering row.
AppImage release / appimage (push) Successful in 49s
Each line keeps its own charts and staff. Save PNG stacks every line. Version 0.2.3.

Co-authored-by: catpersonisme <catpersonisme@gmail.com>
v0.2.3
2026-10-11 10:14:28 +00:00
Cursor Agentandchen e51fdf8216 Write the staff one octave below sounding pitch.
AppImage release / appimage (push) Successful in 54s
Sounding C5 sits on the ledger line below the treble staff. Sharps and flats move with the note. Fingerings and the foot-up charts stay as they are. Version 0.2.2.

Co-authored-by: catpersonisme <catpersonisme@gmail.com>
v0.2.2
2026-10-11 10:08:19 +00:00
Cursor Agentandchen dcca7f5e83 Show length on a staff under each fingering chart.
AppImage release / appimage (push) Successful in 50s
Dragging no longer selects text. The line box resizes, rests and spaces can be added, and Save PNG writes the row. Each chart keeps the foot at the top, and the treble staff shows the pitch with a notehead, stem, flags, and dots. Version 0.2.1.

Co-authored-by: catpersonisme <catpersonisme@gmail.com>
v0.2.1
2026-10-11 09:49:17 +00:00
Cursor Agentandchen b354ea9f88 Replace sheet reading with a fingering editor.
AppImage release / appimage (push) Successful in 53s
Drag Baroque charts onto a line, reorder them, set a duration, or remove a note. The AppImage no longer packages oemer, ONNX, or the models. Version 0.2.0.

Co-authored-by: catpersonisme <catpersonisme@gmail.com>
v0.2.0
2026-10-11 09:06:33 +00:00
Cursor Agentandchen 229a8d4723 Draw fingering charts foot-up, in grouped rows.
AppImage release / appimage (push) Successful in 1m36s
The foot and the double holes sit at the top of each narrow chart, and the mouthpiece sits at the bottom, matching hand-drawn tabs. Which holes are open or closed is unchanged. A repeat mark is shown only when the score repeats. Version 0.1.2.

Co-authored-by: catpersonisme <catpersonisme@gmail.com>
v0.1.2
2026-10-11 08:30:50 +00:00
Cursor Agent 6da116518f Rewrite oemer U-Net ConvTranspose pads before packaging.
AppImage release / appimage (push) Successful in 1m42s
ONNX Runtime 1.30+ rejects pads [0, 0, -1, -1] on the unet checkpoint. The build now rewrites those nodes to pads [0, 0, 0, 0] and output_padding [1, 1], which keeps the same output size. Version 0.1.1.
v0.1.1
2026-10-11 07:51:24 +00:00
Cursor Agentandchen ed55f02983 Add a Gitea Actions workflow that publishes the Linux AppImage.
AppImage release / appimage (push) Successful in 9m35s
The job builds with scripts/build-appimage.sh on an existing v* tag and uploads the AppImage as a release asset.

Co-authored-by: catpersonisme <catpersonisme@gmail.com>
v0.1.0
2026-10-11 06:59:54 +00:00
user-461470729 f243ff78ef Recorder Tab Converter (#1)
<!-- CURSOR_AGENT_PR_BODY_BEGIN -->
## What it does

Recorder Tab Converter turns a lead melody into soprano recorder fingering tabs. The instrument is a soprano in C at concert pitch. Baroque (English) fingering is the default. A German toggle changes only F, F♯, and B♭.

Timing stays on the page: time signature, bar lines, rests, and each note’s duration. Every note shows a fingering diagram (thumb and holes), the note name, and the duration. A compact text tab is the secondary view. The note list is editable, so a bad read can be corrected and the tabs update.

Two public-domain samples render immediately: the first verse of Twinkle, Twinkle, Little Star, and the Ode to Joy theme in C major.

## How to run

The usual way to run it is one Linux AppImage. From a checkout:

```bash
./scripts/build-appimage.sh
chmod +x dist/Recorder-Tab-Converter-0.1.0.AppImage
./dist/Recorder-Tab-Converter-0.1.0.AppImage
```

If FUSE is missing:

```bash
APPIMAGE_EXTRACT_AND_RUN=1 ./dist/Recorder-Tab-Converter-0.1.0.AppImage
```

The build writes `dist/Recorder-Tab-Converter-0.1.0.AppImage`. On the machine that produced this branch, that file is `/workspace/dist/Recorder-Tab-Converter-0.1.0.AppImage` (467,138,256 bytes, about 446 MiB). The cap is 600MB. The binary is not committed.

That AppImage was started here. The window opened, the local page loaded, and the bundled reader reported oemer 0.1.8.

For browser development:

```bash
npm install
npm test
npm run dev
```

The dev server is http://127.0.0.1:3847. Photo reading uses `build/python` from the AppImage build via `OEMER_PYTHON`.

## Fingering source

Baroque fingerings are the first-choice rows on the [Dolmetsch Online chart for recorders in C](https://dolmetsch.com/textfingeringchart.htm) (Brian Blood). Low C is concert C5. The chart runs through D7 and includes forked F, half-holes, and the second-octave thumb pinch. Alternate fingerings on that page are omitted. Notes outside C5–D7 are flagged instead of guessed.

German mode changes three notes:

- F is Dolmetsch’s German fingering: thumb plus holes 1–4 (`0 123 4`).
- F♯ and B♭ follow the school German shapes in Zach VanderGraaff’s [Baroque vs German recorder](https://dynamicmusicroom.com/baroque-vs-german-recorder/) article.
- The octave above keeps those front holes and uses the Dolmetsch second-octave thumb. Every other note stays Baroque.

## Recognition limits

Reading is local oemer 0.1.8 on CPU ONNX Runtime. It is not the GPU package. It keeps one lead line: the first part, the top staff, and the highest note of a chord. It misses notes, especially on phone photos, dense piano scores, and handwriting. A failed read leaves the editor usable and does not invent a melody.

A real sheet-music photo was not transcribed while checking this build. Empty files, non-images, and a too-small PNG were rejected, and no notes were filled in.
<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-6602f7d5-f1c1-53a9-8a48-a6b5bca61adc?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-6602f7d5-f1c1-53a9-8a48-a6b5bca61adc&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>
2026-10-09 03:44:26 +00:00
Cursor Agentandchen 59d65333e3 Add a soprano recorder tab converter as a Linux AppImage.
The app turns a lead line into Baroque fingering tabs with rhythm kept, ships Twinkle and Ode to Joy, and reads photos locally with oemer when the bundled Python is present.

Co-authored-by: catpersonisme <catpersonisme@gmail.com>
2026-10-09 03:35:16 +00:00
chen 72c2f509f6 Initialize project 2026-10-08 21:31:31 -05:00