Frescobaldi LilyPond Editor

Related tags


README for Frescobaldi

Main author: Wilbert Berendsen

Frescobaldi is a LilyPond sheet music text editor. It aims to be powerful, yet lightweight and easy to use. Frescobaldi is Free Software, freely available under the General Public License.


  • Powerful text editor with syntax highlighting and automatic completion
  • Music view with advanced two-way Point & Click
  • Midi player to proof-listen LilyPond-generated MIDI files
  • Midi capturing to enter music
  • Powerful Score Wizard to quickly setup a music score
  • Snippet Manager to store and apply text snippets, templates or scripts
  • Use multiple versions of LilyPond, automatically selects the correct version
  • Built-in LilyPond documentation browser and built-in help
  • Configurable document outline view to navigate large LilyPond scores easily
  • Smart layout-control functions like coloring specific objects in the PDF
  • Import ABC, Midi and MusicXML using the LilyPond-provided tools
  • Experimental export to MusicXML
  • Modern user interface with configurable colors, fonts and keyboard shortcuts
  • Translated into: Dutch, English, French, German, Italian, Swedish, Czech, Russian, Spanish, Galician, Turkish, Polish, Brazilian and Ukrainian.

Music functions:

  • Transpose music
  • Change music from relative to absolute and vice versa
  • Change the language used for note names
  • Change the rhythm (double, halve, add/remove dots, copy, paste) etc
  • Hyphenate lyrics using word-processor hyphenation dictionaries
  • Add spanners, dynamics, articulation easily using the Quick Insert panel
  • Update LilyPond syntax using convert-ly, with display of differences

Frescobaldi is designed to run on all major operating systems (Linux, Mac OS X and MS Windows). It is named after Girolamo Frescobaldi (1583-1643), an Italian composer of keyboard music in the late Renaissance and early Baroque period.

Here is an idea of the basic Frescobaldi workflow:

  • Start Frescobaldi
  • Open a .ly file or create one using File->New from template or Tools->Setup new Score... and fill in some music
  • Press Ctrl+M to run LilyPond
  • If the LilyPond output shows errors, press Ctrl+E to jump to the first error
  • If you see other mistakes in the music, click the notes to move the text cursor there
  • Fix the errors or mistakes in the text
  • Press Ctrl+M again to update the music view
  • When a piece is finished, press Ctrl+Shift+P once to run LilyPond with point and click turned off (this results in a much smaller PDF file).

Frescobaldi is written in Python and uses PyQt for its user interface.

Installation instructions for the program and MIDI support as well as other information can be found in the Wiki. Other requirements and installation instructions may also be found in the INSTALL file.

  • Store and retrieve state(s) from viewers in preferences

    Store and retrieve state(s) from viewers in preferences

    This came up in #732. It's not clear yet whether we need a "Viewers" Preferences page, but in any case I think some stuff should be saved/restored using the QSettings interface. Among them should be the visibility of a viewer's toolbar and the "synchronize with cursor" option. As the latter is already saved we should look into that for a start.

    opened by uliska 90
  • [manuscript dev] multiple instances of viewers.ViewdocChooser

    [manuscript dev] multiple instances of viewers.ViewdocChooser

    When debugging something else I found out that multiple instances of viewers.ViewdocChooser (the QComboBox for the manuscript files) were created.

    The instances are created when calling createWidget in ViewdocChooserAction. createWidget is called when the action is added to a widget. And that is done by the toolbar which it should but also by QMenu objects which I believe is a problem. I think this must be happening in the context menu, but couldn't find where directly.

    opened by PeterBjuhr 84
  • Improve

    Improve "Show available fonts" dialog

    Closes #420 Closes #1077

    This PR is not ready to be merged but I would like to get some feedback. I want more functionality, but actually the code would be a significant improvement already now.

    [EDIT:] I've removed the "WIP" from the title and consider the PR ready by now.

    The output of the LilyPond=>Show Available Fonts... command is practically unusable when more than a few fonts are available on a system. It is totally overwhelming, and the structure is hard to understand. Therefore I wanted to have an improved presentation of the data.

    In its initial state the PR doesn't simply print out the LilyPond output but parses it to a number of dictionaries. The most important one is the families dictionary with entries for each font family. For now an ordered and structured list is printed to the same log window as was previously in that dialog. The "filter" line edit is still non-functional.


    To be done:

    • Replace the log widget with a custom widget. What I think would be appropriate is a list-style widget where initially only the font families are listed. Only upon "opening" an entry will additional information be loaded and displayed (and these can then be pretty detailed).
    • Implement the filter edit. When some text is typed into that line edit all fonts not matching the pattern should be suppressed by making their parent widget invisible.
    • Add an export/print/save function

    The code could be merged without these additional features, after removing the non-functional filter edit.

    opened by uliska 74
  • Wish: session-specific LilyPond include paths list

    Wish: session-specific LilyPond include paths list

    Different projects often need different LilyPond include paths. To avoid manually changing the include paths list every time I switch project, I'd like to have session-specific include paths lists (in the session management window).

    There should also be a toggle in the session management window to control whether the general include paths list should be used for the session. It should be enabled by default for new sessions. (Of course when in "No Session" the behaviour could not be configurable, so the general list would always be enabled.)

    If the general list is enabled for a session, the paths in it should be appended after the session-specific list.

    opened by dliessi 45
  • Suggestion: Add option to convert to relative mode after MusicXML import

    Suggestion: Add option to convert to relative mode after MusicXML import

    We have this new dialog to wrap MusicXML.

    It leaves out some of the less important command line options, which is a good idea.

    But I think it would be a good idea to also offer options that aren't part of musicxml2ly itself, e.g. converting notes to \relative mode. And, thinking of it: offering the option of target language (checkbox plus combobox) would be nice too. If there are tasks that a given user might apply to each imported score it would be nice to have them as automatical options too.

    I don't think adding more sophisticated options to that import dialog is a problem .

    PS: Do you already call 'format' on successful import?

    opened by uliska 45
  • proposed project restructuring

    proposed project restructuring

    I am very happy that now multiple codevelopers help bringing Frescobaldi forward. Also it is desired that python-ly becomes visible and is further developed on its own. To reflect this, and to make some development paths easier, I propopse some changes to how Frescobaldi is structured:

    • make python-ly a separate package and have Frescobaldi depend on it (can be done as of 2.18)
    • (later) make qpopplerview a separate package and have Frescobaldi depend on it
    • (much later, e.g. next year, or when Frescobaldi supports Qt5 and reaches version 3.0) make a GitHub organisation (named "frescobaldi") and add python-ly and frescobaldi to that organisation.

    What do co-developers think?

    opened by wbsoft 37
  • Problems with sip 4.14.3 and PyQt 4.9.6 (was: Slow parsing in editor window)

    Problems with sip 4.14.3 and PyQt 4.9.6 (was: Slow parsing in editor window)

    Frescobaldi used to work fast! However since some time the parsing in the editor window seems to be so slowwww that it renders Frescobaldi nearly useless...

    This is what happens:

    • open a .ly file: seems to be as fast as it used to be but then the GUI "stalls" for some seconds until the actual .ly file is shown in the editor window
    • scrolling through the .ly file is pretty fast but every change, say something like commenting out a line takes a few seconds before it appears. Undoing such a change is fast again, but scrolling down some lines introduces the wait time again. For this reason I thought it may have something to do with parsing.
    • when compiling the .ly file no progress or output is shown before the compilation has finished (this used to be different )

    This happens for both the 2.0.8 release as the current git version and with the following versions of the used libraries: Python: 2.7.3 Qt: 4.8.4 PyQt4: 4.9.6 sip: 4.14.3

    Are these library versions not supported or am I overseeing some other things?

    opened by sverd 36
  • Porting to Qt5

    Porting to Qt5

    I'm working with a computer where for some reason Frescobaldi breaks by using Qt5 instead of Qt4. And I have not yet managed to change Qt version. While I'm finding a solution to the problem (I'm of course thankful for any advice!) I'm planning on taking the opportunity to learn more about the differences between Qt4 and Qt5. What I've read so far is that the porting should be fairly smooth. I've created a branch for changes in the code to adapt to Qt5:

    opened by PeterBjuhr 35
  • musicxml export issue

    musicxml export issue

    Here is what I get when trying the musicxml export feature. I first get the file saving dialog. After choosing a filename, I validate then get this message:

    %%% Traceback (most recent call last): File "/Applications/frescobaldi_philmassart/frescobaldi_app/file_export/", line 57, in exportMusicXML writer.parse_tokens(tokeniter.all_tokens(doc)) File "/Applications/frescobaldi_philmassart/frescobaldi_app/ly/musicxml/", line 56, in parse_tokens func_call(t) File "/Applications/frescobaldi_philmassart/frescobaldi_app/ly/musicxml/", line 133, in Note self.mediator.new_note(token, self.pitch_mode) File "/Applications/frescobaldi_philmassart/frescobaldi_app/ly/musicxml/", line 111, in new_note self.current_note = bar_note(note_name, self.duration) File "/Applications/frescobaldi_philmassart/frescobaldi_app/ly/musicxml/", line 213, in init plist = notename2step(note_name) File "/Applications/frescobaldi_philmassart/frescobaldi_app/ly/musicxml/", line 345, in notename2step note_num = base_list.index(note_name) ValueError: u'q' is not in list %%%

    opened by philmassart 33
  • Release 2.17

    Release 2.17

    I'd like to release 2.17 in a few days. Please mention all little things that could be done, or update translations, etc!

    opened by wbsoft 32
  • Add etc to autocomplete

    Add etc to autocomplete

    Add etc to autocomplete

    opened by ksnortum 0
  • MIDI synth reset sets program change to 0

    MIDI synth reset sets program change to 0

    Reported by a user: Frescobaldi always sets the MIDI instrument to the Grand Piano, even if the LilyPond-generated MIDI file specifies no program change at all. This breaks the situatiuon where the user sets an instrument manually and then wants Frescobaldi to play it.

    Solution: not send a program change on reset? Or even no reset at all?

    opened by wbsoft 1
  • Right-click menus do not appear

    Right-click menus do not appear

    I am unable to get right-clicks to have any effect. For example, no menu appears when I right-click on a file tab; I can not right-click to copy or paste, etc. It will occasionally work, but will break again during the same session.

    I have closed the app and restarted it, rebooted the computer, and deleted the program and then reinstalled it, but none of this has affected the issue.

    I am using Frescobaldi 3.1.3 on a MacBook Air with Catalina (macOS-10.15.7-x86_64-i386-64bit)

    I installed it from Frescobaldi-3.1.3-x86_64.dmg which I downloaded from GitHub using the Frescobaldi site link. (installation kind: standalone .app bundle)

    opened by brumleygap 0
  • Fix engraving of unsaved files using relative pathnames without \include

    Fix engraving of unsaved files using relative pathnames without \include

    Unconditionally add directory of current LilyPond file to LilyPond include directory list (-I ...) if engraving an unsaved file. This enables use of relative paths in commands like \markup\epsfile ... even if no actual \includes are being used in the .ly file.

    opened by lfm83 0
  • Error when reloading all with unsaved file

    Error when reloading all with unsaved file

    To reproduce, open a file, and create a new tab without saving the file in that tab. Then return on the open file and select "File > Reload All". Even though it works, an error is warned about:

    Could not reload:
    : None (None)
    opened by Jean-Abou-Samra 0
  • Frescobaldi mangles input paths with spaces on windows with temp files

    Frescobaldi mangles input paths with spaces on windows with temp files

    When compiling an unsaved file Frescobaldi will save the document to a temporary location. In case the user name contains spaces that path will be mangled by Frescobaldi. E.g. when you user is called "lytest account" Frescobaldi will call Lilypond on "C:/Users/LYTEST~1/AppData/Local/Temp/".

    This can cause big problems in Lilypond if the input path is ever used with formatting strings, because the ~... is used by GUILE to specify a placeholder. Unless there is a good reason for this I think Frescobaldi should not mangle these Paths in such a way.

    opened by vpetzel 0
  • TypeError: unsupported operand type(s) for +: 'bool' and 'str'

    TypeError: unsupported operand type(s) for +: 'bool' and 'str'

    I am brand new to Frescobaldi. I downloaded to MacOS 11.5.2. I tried to run my first file containing a sample from the documentation and got this error (attached below). Can you help me resolve this? I would love to be able to use the program.

    Screen Shot 2021-09-01 at 1 28 36 PM macosx 
    opened by bradleybuilt 5
  • File name bar buttons use wrong color in dark mode

    File name bar buttons use wrong color in dark mode

    The "buttons" which contain the file names do not change color when using the application in Dark Mode. The text does, though, so the buttons become pretty much unreadable (light colored text on a light colored background).

    opened by rpspringuel 0
  • Crashes on startup in KDE neon 20.04

    Crashes on startup in KDE neon 20.04

    If this is a KDE neon problem, then I'll pass it on to them. But I thought I would run it by you all first.

    After a recent update to KDE neon, I have discovered that Frescobaldi now crashes on startup. This happens regardless of whether I am using 3.0.0, packaged with Ubuntu, or 3.1.3 downloaded from the GitHub releases page. Here is the traceback when I run it from bash:

    Traceback (most recent call last):
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/", line 79, in instance
        return _instances[cls][obj]
      File "/usr/lib/python3.8/", line 383, in __getitem__
    KeyError: <weakref at 0x7f66d55ae4a0; to 'type' at 0x29e8770 (PanelManager)>
    During handling of the above exception, another exception occurred:
    Traceback (most recent call last):
      File "frescobaldi", line 28, in <module>
        main.main()                     # Parse command line, create windows etc
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/", line 210, in main
        win = mainwindow.MainWindow()
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/", line 129, in __init__
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/", line 1105, in createMenus
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/", line 61, in createMenus
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/", line 95, in menu_file
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/snippet/", line 146, in __init__
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/snippet/", line 58, in tool
        return panelmanager.manager(self.mainwindow()).snippettool
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/", line 38, in manager
        return PanelManager.instance(mainwindow)
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/", line 84, in instance
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/", line 70, in __init__
        self.loadPanel("musicview.MusicViewPanel", "viewers")
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/", line 107, in loadPanel
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/musicview/", line 52, in <module>
        import pagedview
      File "[path]/frescobaldi-3.1.3/frescobaldi_app/", line 36, in <module>
        import popplerqt5
    ValueError: PyCapsule_GetPointer called with incorrect name

    Thank you for your help!

    opened by DWW256 7
  • Accessibility: cursor position in pixels doesn’t match actual caret’s Y coordinates

    Accessibility: cursor position in pixels doesn’t match actual caret’s Y coordinates

    Greetings eveybody,
    I’ve just opened his bug with Qt upstream, but I want to report it here
    as well since it was a Frescobaldi user who brought it to my attention
    in the first place; apparently the QTextDocument widget doesn’t accurately
    report its caret’s vertical position through the At-SPI bus.
    The X coordinates are correct, but not the Y coordinates, that remain
    stuck on the first line (see the attached screenshot).

    This is important from an accessibility point of view because assistive
    technologies rely on that output to provide visually-impaired users with
    focus tracking (e.g. moving zoom, screen readers etc.). Needless to
    say, that’s a crucial feature when it comes to LilyPond music.

    It does look like a bug from Qt upstream, but not all Qt editors out there
    are affected. (ReText works fine, so do any KatePart-based editors; even
    the Qt Notepad tutorial example doesn’t have that bug.)

    Here’s a Python script that can help reproduce the problem.
    It depends on Cairo, GTK 3 and py-atspi.


    opened by vvillenave 0
The Frescobaldi sheet music text editor
A Music programming language. Translates source code into MIDI. Includes a player. Supports MIDI-Karaoke. Includes a MIDI analyzer.

Get Started | Features | Screenshots | Programming | CLI | Contribute | License Midica is an interpreter for a Music Programming Language. It translat

Jan Trukenmüller 47 Sep 17, 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 102 Jul 10, 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
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
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 24, 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
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
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
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
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
An Internet radio player for Linux

Radiotray-NG: An Internet radio player for Linux It became clear as one of the early contributors to the RadioTray project that it was not getting the

Ed Bruck 187 Aug 21, 2021
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 1k Sep 16, 2021
Audio Editor

Audacity is an easy-to-use, multi-track audio editor and recorder for Windows, Mac OS X, GNU/Linux and other operating systems. Developed by a group o

Audacity 6.4k Sep 17, 2021
Cross-platform music production software

LMMS A soft PR-Freeze is currently underway to prepare for refactoring (#5592). Please do not open non-essential PRs at this time. What is LMMS? LMMS

LMMS 5.3k Sep 15, 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
Qt5 Graphical MPD Client

Cantata NOTE Cantata is now in a bug-fix only state. Therefore, new features are unlikly to be implemented unless pull requests are submitted. The cur

CraigD 919 Sep 14, 2021
The fre:ac audio converter project

fre:ac - free audio converter fre:ac is a free and open source audio converter. It supports audio CD ripping and tag editing and converts between vari

Robert Kausch 619 Sep 24, 2021