Development notes

Writing our own renderer, and what it cost

Replacing the engine that drew the score made the app smaller and the notation ours. It also took the older Guitar Pro formats away.

September 19, 2026

One source of truth, one border

Tonograph was built around a single idea: the editing model is the truth, and everything else — the page you look at, the sound you hear, the file you hand to someone — is derived from it. Nothing downstream is ever edited in place; it is produced again from the model.

That leaves a border. On one side is the model and the editing commands; on the other, the engine that turns it into notation. We started on an open-source engine, and the arrangement was deliberate — the border was drawn so that the engine could be replaced without touching the model.

In the end we replaced it.

Why

Two requirements pushed us across.

The first was the round trip. When you open a .gp file, edit two bars and write it back out, everything you did not touch should come back byte-identical, and the things you did touch should be exactly what you meant. Bends with their curve, grace notes with their beams, whammy, barre, fingering, the lot. Getting that right means owning both ends — the reader and the writer — and being able to say precisely what the format can and cannot carry before you overwrite someone’s file.

The second was the page. An editor needs to draw on top of the notation: the cursor, the selection, a mark on a bar that does not add up, a note you are in the middle of typing. It needs to know where bar 31 is on screen, and it needs to put things exactly there. Every one of those is a question for whoever owns the layout.

So we wrote it. Engraving, painting, the .gp reader and writer, the playback sequence, PDF, and the notation images the AI integration hands back. It took months.

What it gave back

The measurable part is that the app got lighter: the renderer’s code dropped by about a third, and a thirteen-megabyte dependency left the bundle along with everything it brought with it.

The part that matters more is dull to describe and wonderful to live with. When notation comes out wrong, we can fix it. Not work around it, not wait — open the engraver and correct the rule. A list of small ugly things that had been marked “known limitation” for a year turned into a list of commits.

What it cost

This is the honest part.

Guitar Pro has changed its file format twice. The current one, .gp, is what versions 7 and 8 write, and it is the one we implemented. The older formats — .gp3, .gp4, .gp5 and .gpx — are a different, binary encoding, and Tonograph cannot open them.

For anyone with a library of .gp5 files, that is a real loss, and we would rather say it here plainly than let you find out after installing. Converting is not hard — you open the file in Guitar Pro 8 and save it again — but it is a step, and it needs a copy of Guitar Pro. There is a short guide to it.

Update, 29 September 2026: Tonograph 1.1.0 opens .gpx files from Guitar Pro 6. A .gpx turned out to hold the same kind of score data as .gp in a different container, so the same reader handles it. .gp3, .gp4 and .gp5 still need converting.

We chose to be exact about one format rather than approximate about five. That is a genuine trade, not a free win, and the people it costs are the ones whose files are the oldest.

All notes