Skip to content
This repository has been archived by the owner. It is now read-only.
Switch branches/tags
Go to file
Cannot retrieve contributors at this time

Skylights is a random collection of modules that I thought would be fun to have.

They are not profitable to work on, so they are maintained or developed on a whim.

You are still free to send a tip or commission a module.


What Note?

The What Note? is a CV tuner with a digital display. It shows the semitone, octave, cents and absolute voltage of the signal which enters its port.

Turing Machines


The ALAN is an SK version of Tom Whitwell’s Turing Machine. I wrote it because the original Turing Machine is open hardware, and so the virtual version should be open source too[fn::There is also a weird rite of passage that one build their own Turing Machine when they start building Eurorack components, as the Turing Machine is a common first project despite its complexity.].

PortWhat it does
Lock KnobControls the probability that bits in the sequence are flipped.
OutOutputs the last eight bits of the sequence, run through an 8-bit DAC.
GateOutputs high if the final bit is lit (represented by a bar through the LED.)
WriteForces new bits to always be zero.
PoleSets whether the DAC emits a unipolar or bipolar signal.
ScaleScales the outgoing signal from the DAC.

ALAN sequences are also exported over the XPND interface. This allows one or more expanders to access the sequence and provide linked functionality.

Lock knob

Use of the lock knob is the primary way to control a Turing Machine sequencer. Rotating the knob places it in to a different “mode” which determines how much variation will be introduced to the existing sequence over time.

Beta side
sequence loops indefinitely.
around one in eight bits is changed.
approximately every other bit is flipped.
Alpha side
every bit is flipped.

There is a CV port beneath the lock kob. When a patch cable is connected to this, the knob is ignored and the control voltage takes its place. CV signals should be within [0V, 10V].


When the write switch is set, bits are always set to zero when they scroll past the right side of the display. This can be used to manually clean up a busy sequence or to clear the sequencer after enough steps pass.


When the bit on the far right of the display is set (the light is blue), gate will output a high signal. Otherwise gate will output a low signal.


The pole switch allows you to set the module output between unipolar [0V, 10V] or bipolar [-5V, 5V] modes.


The scale knob allows you to attenuate or boost the output signal. By default this is set to 1, which covers a single octave in unipolar mode.


Out will perform an analogue to digital encoding of the 8 visible bits on the display, scale the signal through the Scale knob and perform a polarity shift depending on the UNI/BI switch.


While a turing machine sequencer is not designed to hold on to state forever, ALAN does write its internal sequence to JSON. This means:

  • A locked sequence is saved along with your .vcv file, and,
  • You can right click and use Save preset or Open preset to keep a library of locked sequences.

Patching ideas

Turing sequencers can drive an entire synthesizer cabinet; an external clock feeds pulses in, while Out and Gate produce notes or rhythms. Connecting Out to a note quantizer and further to a VCO can produce melodies over time. Using two turing sequencers, you can have a separately generated melody and rhythm that are independently evolvable.

When an oscillator is used as the clock, turing sequencers are driven at audio rates and behave similar to 8-bit wavetable synthesizers. Placing the lock knob will then control the amount of “grit” present in the sound, from 8-bit white noise to a more normal waveform.

Volts (Turing Expander)

PortWhat it does
InFeeds signals to the mixer.
KnobsAttenuverts the respective input signal. Clamped to the range [-1V, 1V].
OutStereo output of the mixer. Clamped to the range [-5V, 5V].

Volts is an expander for the ALAN based on Tom Whitwell’s own “Volts” expansion module.

Volts reads the last eight bits of a sequence generated by ALAN. This means you need an ALAN (or ALAN XPND-compatible module) in conjunction with a Volts. Each bit corresponds to an LED on the faceplate.

Input signals are fed in through the audio ports, then attenuverted based on their corresponding knobs. Each knob also has two LEDs that display if that channel will be added to the left, right, or both output channels.

Pulses (Turing Expander)



When a clock signal is connected, outputs from this module only happen both at the correct steps and when the incoming clock signal is high. If you do not have a cable plugged in to this port the outputs operate as gates instead of pulses.


See XPND Ports.

Vactrol (Turing Expander)

The Vactrol mixer accepts four incoming signals, passes them through four independent attenuvators, then outputs them to the left and/or right output channels depending on the state of a turing machine connected via the XPND port.



See XPND Ports.


Single channel audio signals going in to the mixer.


The left and right output channels from the mixer.


Each knob controls an internal attenuvator; the knobs from top to bottom represent the same input as the input jacks from top to bottom.

XPND Ports

The expansion port encodes the internal 16-bit sequence of an ALAN to a [0V, 10V] control voltage. XPND does not obey any scale or pole settings. You can use this to drive other modules in your patch, but its primary purpose is connecting to expanders.

Internally an unsigned 16-bit integer is converted to a double and divided against 65,535.0 and then normalized to 10V. Expansion modules perform these steps in reverse to regain access to individual rhythm bits.

Note that Volts only reads the five least significant bits of the sequence regardless of however many are live.


PortWhat it does
AllTriggers all channels to sample new noise.
TurbulenceControls amount of noise added to each channel.
InCV to have noise added.
SailTriggers a single channel to sample new noise.
BIPWhether noise is bipolar.
OutInput CV with attenuverted noise added.

ADRIFT is based on the idea of using a sample and hold, connected to a noise source, as a means of adding minor amounts of flavor to notes. It simplifies the need for multiple Kinks, VCAs and mixers when all you want is just a little bit of drift to your attacks.

DetunersSample & Holds
Continue to change V/Oct CVs throughout a note.Lock the noise added during a note.
Usually allow a single input with multiple separately detuned outputs.Usually a single input, single output.

Sail is always handled prior to coloring and outputting signals throughout each channel. This means you can connect the Gate or Retrig from note inputs to Sail and attacks will appropriately receive detuned input.

ADRIFT does not sample new noise unless explicitly told to (via a high pulse to either All or a Sail port.) Retriggering while a note is probably fun but will be abrupt–you will need to bring your own slew limiter if smoothness is desired.


The vactrolyzer has only in and out ports, two pairs. Any signal which is sent to the input is run through an analogue modelled vactrol and the resulting signal is sent to the output.

These are used in low pass gates or certain unusual pieces of equipment (like the Turing Machine’s stereo mixer) to add a natural pluck and lag to on/off signals. It can be used as a kind of slew limiter for simpler control signals but is based on the response curve of the actual VTL5C3 chip (which is not configurable.)

A scaler/amplifier may be needed as a second stage to bring the output up to whatever range you need.

Vactrols are typically low voltage and their response curves are not linear. They do not accept negative control voltages and over-volting them causes distortions or failure of the device. In the simulation overvoltage simply returns an output of 1V and negative voltages are ignored (it will output 0V.)

Internal notes

The analogue modeling works as follows:

  • Incoming voltages from Rack are adapted to the chip’s actual operating range.
  • An “exponentially weighted moving average” is taken but it has two weight factors: increase and decrease. Each one was tuned with genetic programming to match the light on and light off values from the chip’s spec sheet. So an on signal “pulls” the LED towards brightness in the sensor chamber and an off signal allows it to fall.
  • This weighted value is then run through a small formula which was curve fit against the data sheet, to simulate non-linear output.


Skylights itself is available under the BSD license.

Custom graphics were designed by github user @infamedavid (David Rodriguez), provided under CC-BY.

Skylights is based on the Rack plugin template, which was provided under CC-0.