LilyPond mini-score engraving and sharing service for musicians.



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
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 147 Dec 10, 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.9k Jan 16, 2022
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 102 Jan 11, 2022
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
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 37 Dec 16, 2021
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 40 Jan 16, 2022
Frescobaldi LilyPond Editor

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

Frescobaldi 520 Jan 16, 2022
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
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 103 Jan 9, 2022
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
MuseScore is an open source and free music notation software. For support, contribution, bug reports, visit Fork and make pull requests!

Music notation and composition software MuseScore is an open source and free music notation software. For support, contribution, and bug reports visit

MuseScore 6.7k Jan 14, 2022
Music player and music library manager for Linux, Windows, and macOS

Quod Libet: an audio library, manager & player Quod Libet is a cross-platform audio / music management program. It provides many ways to view your loc

Quod Libet 1.1k Jan 10, 2022
music library manager and MusicBrainz tagger

beets Beets is the media library management system for obsessive music geeks. The purpose of beets is to get your music collection right once and for

beetbox 10.6k Jan 23, 2022
Small, fast and powerful console music player for Unix-like operating systems.

Warning: cmus is not actively maintained. For details, please see #856 cmus — C* Music Player Copyright © 2004-2008 Timo Hirvo

C* Music Player 4.5k Jan 16, 2022
A GTK3 app for finding and listening to internet radio stations.

The successor of Gradio is Shortwave. Get more information here: Gradio A GTK3 app for finding and listening

Häcker Felix 334 Oct 9, 2021
Full-featured CD/DVD/Blu-ray burning and ripping application

K3b Version 18.04.0 Thanx for downloading K3b - The CD Kreator These are the features so far: - the most userfriendly interface ever ;-) - thema

KDE GitHub Mirror 78 Jan 13, 2022
🎵 A simple, clean and cross-platform music player

Museeks A simple, clean and cross-platform music player. ( Features Museeks aims to be a simple and easy to use music player with a clean U

Pierre de la Martinière 1.1k Jan 10, 2022
Standalone lyrics fetcher/displayer (windowed and OSD mode).

OSD Lyrics Show synced lyrics with your favorite media player on Linux. Introduction OSD Lyrics is a desktop application to view lyrics compatible wit

OSD Lyrics 252 Jan 19, 2022