Documentation for the OWL family of devices.

View the Project on GitHub pingdynasty/OpenWareLab

Pure Data OWL Patches

OpenWare devices are capable of running Pure Data patches that have been compiled first with Heavy, then with the GCC ARM cross-compiler.

Currently Pd extensions are not supported, only (most) Pd Vanilla objects. See this list of supported objects. Notably expr, expr~ and vline are not currently supported.


The easiest way to run a Pure Data patch on an OWL device is to use the online compiler. Go to the patch library and, if necessary, create an account. Then click on My Patches, Create patch, and upload all .pd files that your patch requires. Make sure to specify Compilation Type pd, and select the correct Main File (your top level Pd file).

You can also compile Pd patches offline using OwlProgram and a local installation of hvcc (the Heavy compiler; use our fork to take advantage of OWL-specific features and bug fixes). For details on using OwlProgram, see the project readme.

Inputs and Outputs


There is a legacy and a recommended way to assign [receive] objects to specific OWL parameters. The legacy way is to use e.g. [receive Channel-A] to receive a value (between 0 and 1) from OWL parameter A. The recommended way is to use the @owl attribute.


receive a value called NAME, assigned to OWL parameter PARAM, in the range MIN to MAX, with default value DEFAULT.


[r Freq @owl A 220 880 440]

defines a receiver (r is shorthand for receive) called Freq, assigned to OWL parameter A. The output is a float in the range 220.0 to 880.0 with default value 440.0.

MIN, MAX and DEFAULT are optional. If omitted, MIN is 0, MAX is 1, and DEFAULT is calculated as the midway between the two. It is fine to declare only MIN and MAX, only MIN, none, or all.

The compiler supports up to 24 parameters, in three groups of eight, named from A to H, AA to AH and BA to BH, but the available hardware assignments vary depending on the OWL device. Magus has 20 CV inputs/outputs, OWL Pedal, OWL Modular and Wizard have 5, Alchemist has 4. All 24 OWL parameters can also be controlled by MIDI, as each is associated with a MIDI CC controller.

Output parameters can be assigned in the same way, using [send] instead of [receive]. The compiler will add > to the end of the parameter name, to ensure it is recognised as an output.

Buttons, Gates and Triggers

For hardware that supports input and output triggers, gates, and buttons, these can be assigned with the names B1 through B8. Output values from [receive] are 0 for off, 1 for on. Any [send] value greater than 0.5 will be interpreted as on.


For a simple example patch that uses both input and output parameters and buttons, see e.g. this Witch Pd Template.

A library of Heavy compatible Pure data abstractions is available here


Patches can send and receive MIDI messages with the usual Pd Vanilla MIDI I/O objects: [notein], [bendin], [ctlin], [pgmin], and [noteout], [bendout], [ctlout], [pgmout]. For an example see this patch.

Known Bugs and Limitations