♮lilypoint
Music, rules, and a little curiosity

A place to practice.
A sheet to make your own.

lilypoint generates two-voice counterpoint for you to read, hear, and play.

Counterpoint brings independent melodies together. Its rules make it an interesting meeting point between music theory and programming, and a source of new material for sight-reading.

The writing room

Build a sheet phrase by phrase. Change the musical settings, reroll a phrase, arrange the order, and set the tempo. Export a PDF, MIDI, or LilyPond file.

Open a sheet →

The practice room

Start with a lesson or choose your own filters. Listen with a count-in, isolate either voice, loop an exercise, and collect phrases for a practice sheet.

Start practicing →

How it got here

The original

C++ and LilyPond

Elliott Claus and Caleb Nelson built the first generator in C++. It turned musical rules into two-voice phrases and exported text for LilyPond to typeset. Elliott's June 2022 project post records the work, examples, and some of the rough edges. The original source code is still available.

August 2025

A version for the browser

Elliott used AI to help convert the C++ implementation to TypeScript and bring it online as lilypoint, using Bun to build the site and Netlify to host it. The classic web interface collects settings in a form, generates LilyPond text, and offers a Hacklily viewer for the score.

September 2026

Eight ways to work with the music

The prototype gallery explores an editable sheet, a phrase deck, a practice bench, sentence-based controls, a workbook, and a continuous feed. I used Fable 5.1 to generate the first six prototypes, then GPT-6-Astra to make 07 and 08, which became the writing and practice rooms. All eight remain available to try. Astra also fixed numerous bugs with the typescript port and counterpoint logic.

Using lilypoint

The music is generated by rules in your browser. AI helped with the software's development; it does not generate the notes when you use the site. The generator is still evolving, so use the exercises as material to explore rather than a definitive guide to every rule of species counterpoint.

No account is required. Write remembers your draft in the current browser tab. Practice keeps its collection until you reload or leave the page. Download a sheet or save a Write link to return to your music later.

Privacy

lilypoint does not create accounts and does not collect analytics. Theme preference is stored in this browser. The writing room keeps a draft in session storage for the current tab.

The site is hosted on Netlify, which may keep ordinary access logs. Fonts load from Google Fonts. Notation, PDF libraries, and piano samples load from jsDelivr. The classic generator can open a score in Hacklily. Those services see the requests your browser makes to them.

The source is published under the GNU General Public License, version 3. Questions about the project can go through the GitHub repository or Elliott's site.

Credits & source

Created by Elliott Claus, building on the original project with Caleb Nelson. The main rooms use abcjs for notation and piano playback, jsPDF and svg2pdf.js for PDF export, and the Flexoki color palette.

lilypoint is free to use. If it helps your practice, you can support it on Ko-fi.

Browse the lilypoint source · License · Classic generator · All prototypes