LilyPond mini-score engraving and sharing service for musicians.

Related tags



Build Status Code Climate

LilyPond mini-score engraving and sharing service for musicians.

The live Tunefl service is at

More sleep lost by tiredpixel.


The primary method of development installation is using Docker. You can also use this as a basis for production installation, but you'll probably want to change some things, if so.

You can also install manually, by installing the linked services and packages defined in Dockerfile & Dockerfile.worker, using bundle install, and running services using the supplied Procfile.

The default Ruby version supported is defined in .ruby-version. Any other versions supported are defined in .travis.yml.


Various versions will probably work. I'm currently using:

# docker --version
Docker version 1.9.1, build a34a1d5
# docker-compose --version
docker-compose version 1.5.2, build 7240ff3

Note that --x-networking will no longer be preview in Docker Compose 1.6, so this flag might not be necessary for you.


Copy and configure your settings:

cp .env.example .env


Start the postgres service:

docker-compose --x-networking up -d postgres

Connect using psql:

docker exec -it tunefl_postgres_1 psql -U postgres

Create the database:

CREATE ROLE tunefl_dev LOGIN PASSWORD 'password';
CREATE DATABASE tunefl_dev OWNER tunefl_dev;

Start the web service:

docker-compose --x-networking up -d web

Migrate the database:

docker exec tunefl_web_1 bundle exec rake db:migrate

Stop all services:

docker-compose stop


Start all services:

docker-compose --x-networking up

Open the web service in a browser:

xdg-open "http://$(docker-compose port web 8080)"

Open the web service admin area in a browser:

xdg-open "http://$(docker-compose port web 8080)/admin"

Monitor the queue using Sidekiq Spy:

docker exec -it tunefl_worker_1 sh \
    -c 'TERM=xterm bundle exec sidekiq-spy -h tunefl_redis_1.tunefl -n resque'


Create multiple stacks as required; the main one in installation is suitable for a dev stack, and you can build on this. You'll probably also want to create a test stack, following similar steps. One approach is to:

Add an alias to your shell; for Bash:

echo "alias docker-compose-stack='docker-compose -f docker-compose.\$STACK.yml -p \$STACK'" >> ~/.bashrc
source ~/.bashrc

Copy and configure a different settings file (here I'm using 0 as a separator as Docker Compose currently strips -_.):

cp .env.example .tunefl0test.env

Copy the Docker Compose file, modifying to point to your .tunefl0test.env:

cp docker-compose.yml docker-compose.tunefl0test.yml

Thereafter, execute docker-compose commands using docker-compose-stack. I prefer to be explicit and use a subshell, as a protection against forgetting which stack I'm using; e.g. to start all services:

(export STACK=tunefl0test; docker-compose-stack up)

To run all tests:

docker exec tunefl0test_web_1 bundle exec rspec

Tests are written using RSpec. There are not many tests, because the application is very simple. If generating a score from the home page works, then things are probably okay.

Stay Tuned

You can become a watcher on GitHub. And you can become a stargazer if you are so minded. :D


Contributions are welcome! Please fork the repository and prepare your patches in one or more branches, ensuring that any tests are not broken by the changes. Then, send me one or more pull requests. Proposed patches will then be reviewed prior to acceptance, usually into master branch. If you'd like to discuss something, then please get in touch.

Do whatever makes you happy. We'll probably still like you. :)


May you find peace, and help others to do likewise.


Copyright © 2012-2016 tiredpixel. See LICENSE.txt.

  • ScoresController#create redirects without message after failure

    ScoresController#create redirects without message after failure

    ScoresController#create needs to be changed, to display a failure message if the creation of the score (as in the Score record itself, not the LilyPond stage) fails.

    opened by tiredpixel 1
  • Write tests for uploaders

    Write tests for uploaders

    The present 3 uploaders have no tests. It would be lovely to test these. It is anticipated that such tests would be minimal, as the core functionality of CarrierWave will be trusted, and beyond the scope of the testing.

    opened by tiredpixel 1
  • Write tests for jobs

    Write tests for jobs

    Currently, CompileScoreJob has no tests. Having tests for this would be lovely indeed. :)

    opened by tiredpixel 1
  • Write tests for controllers

    Write tests for controllers

    Currently, no controllers are tested. Having such tests would be magical.

    This should ensure good test coverage for all controllers. Tests for other parts of the application will be part of another issue.

    opened by tiredpixel 1
  • Resque is not isolated

    Resque is not isolated

    Resque is not isolated or set up correctly for testing. As such, Resque is used even when factories are used.

    opened by tiredpixel 1
  • Callbacks are not tested

    Callbacks are not tested

    Callbacks for models are not currently tested. It would be lovely for them to be. :)

    opened by tiredpixel 1
  • Upgrade various gems, including Rack

    Upgrade various gems, including Rack

    There seem to be a lot of important security fixes, at the moment! ;) Upgrade all gems to the latest patch versions, also upgrading minor versions of gems, where possible.

    opened by tiredpixel 1
  • Update copyright information

    Update copyright information

    Update copyright information, renewing year of copyright.

    opened by tiredpixel 1
  • Add hard limits to processing

    Add hard limits to processing

    Add some basic hard limits to processing, limiting execution time, for example.

    opened by tiredpixel 1
  • Consider changing from AddThis sharing

    Consider changing from AddThis sharing

    The current sharing buttons use AddThis, which tracks user-clicks within the site, and requires that the notice be place onto the legal page. It might be worth considering whether to switch to a non-tracking list of sharing buttons, moving away from using AddThis, and removing the need for the legal notice.

    opened by tiredpixel 1
Nic Williams
devops engineer · programmer · data architect | creator of Isoxya web crawler
Nic Williams
Lilypond music preprocessor

Ripple - DRY for Lilypond Ripple is a small program that helps you generate scores and parts without repeating yourself, performing complex includes o

Sharon Rosner 21 Mar 24, 2020
A place to store useful pieces of LilyPond code - custom functions, engravers, hacks, templates, examples etc.

openLilyLib/snippets What's this? What is openLilyLib/snippets? There are two answers to this: it's a repository of LilyPond snippets, and it's part o

openlilylib 102 Jul 10, 2021
LilyPond mini-score engraving and sharing service for musicians.

Tunefl LilyPond mini-score engraving and sharing service for musicians. The live Tunefl service is at More sleep lost by tiredpixel. Insta

Nic Williams 22 Jun 22, 2020
Frescobaldi LilyPond Editor

README for Frescobaldi Homepage: Main author: Wilbert Berendsen Frescobaldi is a LilyPond sheet music text editor. It aims

Frescobaldi 501 Sep 21, 2021
Use Lilypond like a boss!

The lyp package index lyp - The Lilypond Swiss Army Knife lyp is an open-source tool that takes the pain out of working with Lilypond. Use packages: I

noteflakes 66 Sep 23, 2021
Music typeset with the Lilypond system

Intro (from long ago) This repo contains sheet music typeset with the Lilypond typesetter. The music chosen is in favour of cello music (mostly chambe

Enthusiastic about  the Cello 95 Sep 15, 2021
Typographic Beat-Oriented Notation for music

tbon Typographic Beat-Oriented Notation for music Tbon aims to be the fastest way to enter pitches, rhythms, meter and dynamic levels from a computer

null 11 Jan 23, 2020
Beautiful LilyPond scores under free licenses

A project to collect and maintain beautiful LilyPond music scores, and to document LilyPond engraving styles, Scheme programs and templates. You can

Wilbert Berendsen 39 Aug 11, 2021
🎵 Music notation engraving library for MEI with MusicXML and Humdrum support and various toolkits (JavaScript, Python)

Verovio is a fast, portable and lightweight library for engraving Music Encoding Initiative (MEI) digital scores into SVG images. Verovio also contain

RISM Digital Center 426 Sep 22, 2021
Repository of scores typeset using Lilypond & Ripple

Ciconia's Score Repository This repository contains my edition of works by Bach and other baroque composers typeset using Lilypond and Ripple. Process

Sharon Rosner 17 Aug 15, 2021
A JavaScript library for rendering music notation and guitar tablature.

VexFlow 3 A JavaScript library for rendering music notation. Copyright (c) 2010 Mohit Muthanna Cheppudira Sponsor this Project If you use VexFlow in y

Mohit Cheppudira 3.1k Sep 14, 2021
OpenSheetMusicDisplay renders sheet music in MusicXML format in your web browser based on VexFlow. OSMD is brought to you by

OpenSheetMusicDisplay (OSMD) A MusicXML renderer for the Browser About OSMD • Demo • Key Features • Limitations • How to Use

Open Sheet Music Display 800 Sep 15, 2021
Compose music and write score easily in your browser!

inknote Compose music easily in your browser! Store multiple files, tag them with colours. Made using Type

Michal Paszkiewicz 145 Aug 18, 2021
A beautiful cross platform Desktop Player for Google Play Music

Google Play Music™ Desktop Player Windows: MacOS / Linux: Run "Google Play Music" as a standalone desktop app. Never again will you have to hunt throu

Samuel Attard 8.5k Sep 12, 2021
A music programming language for musicians. :notes:

Installation | Docs | Changelog | Contributing composers chatting Alda is a text-based programming language for music composition. It allows you to co

Alda 4.7k Sep 15, 2021
Baroque music scores, typeset with GNU LilyPond

nénuvar - baroque music scores typeset with GNU LilyPond Available scores: J.B. Lully * La Revente des habits (ballet, LWV05) * Amour malade (ballet

Nicolas Sceaux 36 Aug 29, 2021
Open source sheet music

The Mutopia Project The Mutopia Project offers sheet music based on editions in the public domain. All sheet music is written in LilyPond by volunteer

null 187 Sep 3, 2021
The git repository of the advanced drum machine

Hydrogen drum machine Hydrogen is an advanced drum machine for GNU/Linux, Mac and Windows. It's main goal is to bring professional yet simple and intu

Hydrogen 702 Sep 15, 2021
🐦 A personal music streaming server that works.

koel Intro Koel (also stylized as koel, with a lowercase k) is a simple web-based personal audio streaming service written in Vue on the client side a

Koel 12.8k Sep 17, 2021