Command Line Tools and GUI


The mididings command line tool offers several ways to run patches without writing full-fledged Python scripts. See mididings --help for a list of all command line options.

mididings Patches and Scripts

Simple patches can be specified directly on the command line:

$ mididings "Transpose(3) >> Channel(2)"

mididings scripts in general are regular Python source files. They can be executed either by invoking the Python interpreter directly, or by invoking mididings with the -f option:

$ python
# or:
$ mididings -f

These two commands differ in that the latter reads the Default Configuration File, while the former does not. For convenience, mididings -f also imports the mididings and mididings.extra modules automatically, so that scripts may omit these import statements.

Interactive Shell

mididings provides a shell based on an interactive Python interpreter, offering history and tab-completion, to quickly build and test patches:

$ mididings -s
mididings 2014+rf6e2d01, using Python 3.3.2+
>>> run(Filter(NOTE) >> Channel(2) // Channel(3))
>>> run(Filter(NOTE|CTRL) >> Channel(1) // Channel(13))
>>> ...

The ALSA or JACK backend is initialized at startup and remains active if a call to the run() function is interrupted. This way you can easily switch patches without reconnecting your clients.

If mididings is started with the -S option, you don’t even need to call the run() function explicitly, and any valid patches you enter will be started automatically. This can be bypassed by prepending a space, resulting in Python’s usual behavior of evaluating the expression you entered, and displaying its result:

$ mididings -S
mididings 2014+rf6e2d01, using Python 3.3.2+
>>> ChannelFilter(2) % Transpose(3)
>>>  ChannelFilter(2) % Transpose(3)
[ChannelFilter(channels=[2]) >> Transpose(offset=3), -ChannelFilter(channels=[2])]
>>> ...

MIDI Event Logger

To execute a patch consisting of a single Print() unit, with client name 'printdings', run mididings -p.

Ports and Connections

The -A, -J and -R command line options correspond to (and override) the backend setting. The -i and -o options can be used to specify the number (but not names) of input and output ports. The -I and -O options may be specified multiple times, once for each port, to specify other client’s ports to connect to.

# split output of jack-keyboard between fluidsynth and yoshimi
$ mididings -R -o 2 -I jack-keyboard:midi_out \
    -O fluidsynth-midi:midi -O yoshimi:midi\ in \
    "KeySplit('c3', Port(1), Port(2))"

Default Configuration File

mididings reads settings from $XDG_CONFIG_HOME/mididings/ (~/.config/mididings/, if that file exists. This file will typically contain a call to config(), but may also be used to import additional modules, define classes or functions, and set global variables. Anything stored in the global scope within this config file is automatically made available to your mididings scripts or patches.

# change default octave_offset to match Scientific Pitch Notation
$ echo "config(octave_offset=1)" >> ~/.config/mididings/
# use JACK by default
$ echo "config(backend='jack')" >> ~/.config/mididings/

Global config() settings made here can be overridden by settings in mididings scripts, which in turn can be overridden by mididings command line options.


The configuration file is only read when invoking the mididings command line application. It is not used when the mididings module is imported from a regular Python script.


livedings is a graphical frontend for mididings that allows you to monitor and trigger scene changes. It runs as a separate application that uses OSC to communicate with mididings. To use it, enable the OSCInterface hook in your mididings script

from mididings.extra.osc import OSCInterface


Then run the livedings application.

By default, livedings uses the standard Tk theme. Specify the -T option to switch to a custom theme with higher contrast and larger fonts. See livedings --help for more options.

The buttons at the bottom of the screen can be used to switch to the previous/next scene, previous/next subscene, and to send all-notes-off messages (panic) on all output ports. It’s also possible to use the arrow keys to switch scenes (up/down) and subscenes (left/right).


send_midi is a simple utility to send MIDI events to any ALSA or JACK MIDI client, using a terse command line format:

$ send_midi LinuxSampler:0 NOTEON,1,60,127 CTRL,2,7,66
$ send_midi -J mididings:in_.* PROGRAM,1,42
$ send_midi 14:0 SYSEX,F0,23,42,F7

See send_midi --help for a list of all command line options.