Yggdrasil is a norns cyberdeck tracker — an instrument designed to be performed with a keyboard only. "Slots" are the nucleic acids of Yggdrasil, while "commands" and "interactions" are the twin helixes of the human-machine interface. Toggling Y Mode remaps the alpha-numerics, unlocking expressive performance gestures. Capital letters are not used and modifier keys only sparingly. Where other languages use may use commas or parenthesis, Yggdrasil favors the ; character for its position under the little finger: economic, ergonomic, exegesis.
Neurotically focused on their endless descent, slots are stacked into tracks of different heights, like so many stalactites reaching into the terminal darkness below. Slots can contain up to one each of: note, sample, velocity, and phenomenon. Slots contain two "macro control" values that range from 0 - 99. Phenomena allow for exotic events such as randomizers, "goto" events, and directional toggles.
Commands are built from the letters, numbers, and symbols that appear in the terminal as you type. Commands let you do things like create musical patterns, change notes, control playback, adjust tempo, and route tracks to different MIDI channels.
Commands that start with two numbers operate on a single slot.
Commands that start with one number operate on an entire track.
Commands that do not start with a number operate across all tracks.
| Signatures | Examples |
|---|---|
X Y COMMAND;VALUE |
2 4 arp;2 |
X COMMAND;VALUE |
1 arp;2 |
COMMAND;VALUE |
unmute |
These leading numbers correspond to X and Y coordinates, respectively. Most commands have both verbose and terse invocations. For example arpeggios can be invoked not only with arpeggio but also with arp and a. All commands are executed with the ↵ / return / enter key.
Interactions are simply "everything else" you do with the keyboard; our silent movements through Yggdrasil's data streams. While some interactions technically manipulate sound under certain conditions (such as mod + backspace to clear a selected slot), most are simply affordances for navigation — things like toggling views, dismissing messages, or paging through through command history. ctrl, alt, opt, and cmd are functionally identical and collectively referred to as mod.
Let's go.
Index
- Anchor
- Append
- Arpeggio
- Ascend / Descend
- BPM
- Chord
- Clade
- Clear
- Clock
- Crow
- Enable / Disable
- End
- Exit
- Follow
- Info
- Jump
- K3
- Lacuna
- Level
- Lucky
- MIDI
- Mute / Unmute
- New
- Note
- Oblique
- Off
- Panic
- Play / Stop
- Random
- Remove
- Rerun
- Reverse
- Routine
- Ruin
- Save / Load
- Screenshot
- Select
- Shadow / Unshadow
- Shift
- Shift (Phenomenon)
- Solo / Unsolo
- Sync
- Synth
- Track Depth
- Transpose Slot
- Velocity
- View
- Y Mode
- YPC
Musical Commands
Note
Set a slot’s MIDI value. Accepts YGG notation.
Signatures
X Y MIDI_NOTE |
↵ |
X Y YGG_NOTE |
↵ |
Examples
|
↵ |
|
↵ |
Velocity
Set a slot’s velocity value. Unlike most other systems, velocity is mixed with track level to produce a final result. For example, a slot with a velocity of 70 on a track with a level of 50% would produce a final velocity of 35. The exception to this rule is the crow clade, which can use neither velocity nor track level information.
Signatures
X Y velocity;VALUE |
↵ |
X Y vel;VALUE |
↵ |
X vel;40 |
↵ |
Examples
|
↵ |
|
↵ |
|
↵ |
Invocations
velocityvel
Chord
Paint a chord horizontally starting from X Y. Automatically append tracks and rows if needed. Any size chord can be built. An extensive chord library available or precision chords can be entered with MIDI values. Chords default to octave 4. Append a semicolon followed by an integer to set an octave: 1 1 c;cmin;6
Signatures
X Y chord;CHORD;OCTAVE |
↵ |
X Y c;CHORD |
↵ |
X Y c;MIDI_NOTE;MIDI_NOTE;… |
↵ |
Examples
|
↵ |
|
↵ |
|
↵ |
|
↵ |
|
↵ |
Invocations
chordc
Arpeggio
Arpeggiate the entire track X starting at Y with evenly-spaced notes. If Y is absent, start at 1. Default VALUE of spacing is 0. If multiple MIDI_NOTES are used, loop through the notes indefinitely. Arpeggiate indefinitely through any of the chords.
Signatures
X Y arp CHORD |
↵ |
X Y arp;VALUE CHORD |
↵ |
X arp;VALUE CHORD |
↵ |
X Y arp MIDI_NOTE;… |
↵ |
X a CHORD |
↵ |
Examples
|
↵ |
|
↵ |
|
↵ |
|
↵ |
|
↵ |
Invocations
arpeggioarpa
Clock
Set the “clock” value for a track. Default is 1. Max is 2. Tracks have independent clock sync rates.
Yggdrasil uses 96 PPQN, so any value entered will be snapped to the nearest pulse.
Signature
X clock;VALUE |
↵ |
Examples
|
↵ |
|
↵ |
|
↵ |
|
↵ |
Invocation
clock
Lacuna PHENOMENON
Slot a “lacuna” phenomenon. Lacuna first disables the current track, then enables and queues any other track. The net effect is a clean handoff of one track to another.
Lacunae honor ascending and descending tracks (it is smart enough to start at the top or bottom of a track) but lacunae do not effect solo and mute attributes. Thus, it is possible to queue and and play muted track. This is a feature, not a bug.
Signature
X Y @4 |
↵ |
Example
|
↵ |
Invocation
@
Anchor PHENOMENON
Slot an “anchor” phenomenon. This causes playback to jump to a specific slot in the track. If the slot is invalid then advance as if the slot was empty. History.
Signature
X Y #VALUE |
↵ |
Example
|
↵ |
Invocation
#
Core Commands
Append
Insert a number of tracks after track X. Optionally, have each shadow track X.
Signatures
X append;VALUE |
↵ |
X ap;VALUE |
↵ |
X append;VALUE shadow |
↵ |
X ap;VALUE sha |
↵ |
Examples
|
↵ |
|
↵ |
|
↵ |
Invocations
appendap
Arguments
shadowsha
New
Like clear but also resets track count, depth, clades, and shadows to defaults.
Signature
new |
↵ |
Mixer Commands
Level
Set the level of a track. Valid levels are 0% to 100%. Levels are linear.
Unlike most other systems, velocity is mixed with track level to produce a final result. For example, a slot with a velocity of 70 on a track with a level of 50% would produce a final velocity of 35. The exception to this rule is the crow clade, which can use neither velocity nor track level information. See Y Mode interactions, too.
Signatures
X level;VALUE |
↵ |
X l;VALUE |
↵ |
Examples
|
↵ |
|
↵ |
Invocations
levell
Synth
Set the track’s synth voice with synth;voice;.... Use either name (rikki) or their number (2). The Yggdrasil synth has three different polyphonic voices. You can use all three at once, across any number of tracks.
Set the macro control levels with synth;m1;... and synth;m2;.... You can use this command with X to set entire tracks or X Y to set individualslots.
Use synth;enc to toggle takeover mode for macro controls with norns encoders 2 and 3.
| # | Name | Description |
|---|---|---|
| 1 | PPM | The norns classic, with parameters pared down to the basics. |
| 2 | Rikki | All edges, angular digital angst. Fuzzy nudges through shimmering waves of banshee cries through broken glass. |
| 3 | Toast | Minimal FM. Tentative pings to warbly nostalgia to toxic swells. |
Signatures
X synth;v;VALUE |
↵ |
X synth;voice;VALUE |
↵ |
X synth;m1;VALUE |
↵ |
X synth;m2;VALUE |
↵ |
synth;enc |
↵ |
Examples
|
↵ |
|
↵ |
|
↵ |
|
↵ |
Invocation
synth
Arguments
voicevm1m2enc
YPC
Set a global sample bank and load samples into tracks and slots. Yggdrasil can access one bank at a time, but a bank can contain any number of samples. Slots contain can contain up to one sample, but tracks can contain any number of slots (each with unique samples.) “Banks” located at /dust/audio/yggdrasil/banks/.
Yggdrasil ships with a default factory bank.
If a filename has frequency information at the end, like your_sample_name_440hz.wav, Yggdrasil will repitch intelligently. If the filename does not have frequency information at the end, a default of 440hz will be used. Once a sample is loaded into a slot, a note value also needs to be set. A common technique is to use x ypc;l;your_sample_name_440hz.wav and then use x arp.
Signatures
X Y ypc;load;VALUE |
↵ |
X Y ypc;l;VALUE |
↵ |
X ypc;load;VALUE |
↵ |
X ypc;l;VALUE |
↵ |
ypc;bank;VALUE |
↵ |
ypc;b;VALUE |
↵ |
Examples
|
↵ |
|
↵ |
|
↵ |
Invocation
ypc
Arguments
loadlbankb
Shadow / Unshadow
Set a track to “shadow” another’s clade and clade attributes. For example, let Track 1 be a MIDI clade set to channel 16 and device 4. By invoking 2 shadow;1, Track 2 would shadow Track 1. Its clade would be set to MIDI, its channel to 16, and device to 4. Should any of these attributes on Track 1 change, they would also change on Track 2.
Shadowed attributes are: clade, synth voice, MIDI channel, MIDI device, crow pair, Just Friends mode. Tracks can shadow other shadowed tracks.
Signatures
X shadow;VALUE |
↵ |
X sha;VALUE |
↵ |
X unshadow |
↵ |
unshadow |
↵ |
unsha |
↵ |
Examples
|
↵ |
|
↵ |
|
↵ |
Invocations
shadowshaunshadowunsha
View Commands
View
Possible values for slot views are midi, ygg, freq, and ipn. Toggle velocity with velocity/vel/v. Reveal the heads up display with column and row numbers with hud/h.
Similarly, reveal or hide phenomenon with phenomenon/p. Reveal or hide macros with m1 and m2. index is also available to reveal the slot’s logical position. Change pages with tracker/t, mixer/m, and clades/c (this can also be accomplished with tab).
View current sample bank with bank/b. Toggle sample names with ypc/y.
Signatures
view;VALUE |
↵ |
v;VALUE |
↵ |
Examples
|
↵ |
|
↵ |
|
↵ |
|
↵ |
|
↵ |
Invocations
viewv
Arguments
midiipnyggfreqvelocityvelvindexphenomenonpm1m2trackerthudhmixermcladescbankbypcy
Utility Commands
Screenshot
Take a screenshot and drop it in /dust. See this for more info.
Signature
screenshot |
↵ |
Interactions
Eternal Interactions
Cycle Pages |
tab |
Cycle through views: tracker, tracker + HUD, mixer, clades. |
Delete |
mod + backspace / delete |
Delete all values from the selected slot or column. |
Select |
↵ / return / enter |
When the buffer is empty, select the focused slot, control, or option. |
Dismiss / Deselect |
esc |
The escape key dismisses messages. If no message exists it deselects. |
Y Mode Toggle |
caps lock |
Toggle Y Mode on and off. |
History |
↑ and ↓ |
Press the up and down keys to page through command history. Note you can recall and run commands with this even in Y Mode. |
Toggle Playback |
spacebar |
Start or stop playback. No commands start with an empty space so it will only execute when the buffer is empty. |
Word Jump |
mod + ← / → |
Jump to the beginning of the next (or end of previous) word. |
Y Mode Interactions
Level |
[ and ] |
Decrement and increment all selected track levels by 1% with the left and right brackets. If shift is held they are adjusted by 10%. |
Select Track |
1 … 0 |
Select tracks 1 through 10 with the number keys. Hold shift and then press another number to select a range of tracks. |
HJKL Focus |
h j k l |
h, j, k, or l to pan the tracker view and change focus. This can also be accomplished with norns encoders 2 and 3. History. |
Mute / Unmute |
a and q |
Mute selected track(s) with a. Unmute selected track(s) with q. |
Solo / Unsolo |
s and w |
Solo selected track(s) with s. Unsolo selected track(s) with w. |
Enable / Disabled |
e and d |
Enable selected track(s) with e. Disable selected track(s) with d. |
Digest
Commands
| Anchor | X Y #VALUE |
1 5 #8 |
| Append | X append;VALUE |
1 append;3 |
| Arpeggio | X Y arp CHORD |
1 arp;4 bmin |
| Ascend / Descend | X ascend |
1 ascend |
| BPM | bpm;VALUE |
bpm;149.3 |
| Chord | X Y chord;CHORD;OCTAVE |
1 1 chord;cmaj |
| Clade | X clade;VALUE |
1 clade;midi |
| Clear | clear |
|
| Clock | X clock;VALUE |
1 clock;.5 |
| Crow | X crow;pair;VALUE |
1 crow;pair;1 |
| Enable / Disable | X enable |
3 enable |
| End | X Y end |
1 5 end |
| Exit | exit |
|
| Follow | follow |
|
| Info | info |
|
| Jump | :Y |
:4 |
| K3 | k3 = ANY_COMMAND |
k3 = 1 arp;2 60;63;65 |
| Lacuna | X Y @4 |
1 8 @3 |
| Level | X level;VALUE |
3 level;88 |
| Lucky | X Y lucky |
1 5 lucky |
| MIDI | X midi;d;VALUE |
1 midi;d;2 |
| Mute / Unmute | X mute |
3 mute |
| New | new |
|
| Note | X Y MIDI_NOTE |
4 3 72 |
| Oblique | oblique |
|
| Off | X Y off |
1 5 off |
| Panic | panic |
|
| Play / Stop | 1 play |
|
| Random | X Y random |
1 5 random |
| Remove | X Y remove |
1 remove |
| Rerun | rerun |
|
| Reverse | X Y reverse |
1 5 reverse |
| Routine | routine;FILENAME |
routine;dreams.txt |
| Ruin | X Y ruin |
1 5 ruin |
| Save / Load | 1 save what-is-love.txt |
|
| Screenshot | screenshot |
|
| Select | X Y |
7 8 |
| Shadow / Unshadow | X shadow;VALUE |
1 shadow;3 |
| Shift | X shift;VALUE |
1 shift;3 |
| Shift (Phenomenon) | X Y <VALUE |
1 5 >8 |
| Solo / Unsolo | X solo |
3 solo |
| Sync | sync |
sync |
| Synth | X synth;v;VALUE |
1 synth;v;2 |
| Track Depth | X depth;VALUE |
1 depth;8 |
| Transpose Slot | X Y t;VALUE |
1 1 transpose;8 |
| Velocity | X Y velocity;VALUE |
4 3 velocity;127 |
| View | view;VALUE |
view;ipn |
| Y Mode | ymode |
|
| YPC | X Y ypc;load;VALUE |
1 1 ypc;load;909kick.wav |
Interactions
| Cycle Pages | tab | Eternal |
| Delete | mod + backspace / delete | Eternal |
| Dismiss / Deselect | esc | Eternal |
| Enable / Disabled | e and d | Y |
| HJKL Focus | h j k l | Y |
| History | ↑ and ↓ | Eternal |
| Level | [ and ] | Y |
| Mute / Unmute | a and q | Y |
| Select | ↵ / return / enter | Eternal |
| Select Track | 1 … 0 | Y |
| Solo / Unsolo | s and w | Y |
| Toggle Playback | spacebar | Eternal |
| Word Jump | mod + ← / → | Eternal |
| Y Mode Toggle | caps lock | Eternal |
ChordsDetails
Each chord must also be prefixed with a note: c, cs, d, ds, e, f, fs, g, gs, a, as, or b. Enharmonics are also valid: cb, db, eb, fb, gb, ab, or bb.
majmajormaj7ma7maj9maj13sixth6add6add1369maj7b6majs4minormminm7min7mi7-7maj7majmaj7m6-6m9-9minmaj9m11-11m13-13diminisheddimdim7m7b5-7b5h7h7dom937s117b97s9alteredalt7sus4sussus27sus47suseleventh11b9susphryg7b9sus7b9sus4fifth5augmentedaugms5maj75maj9s11sus24sus4add9maj9s57augaug77alt9s59s5s117s5b97b9s59s5s117s5b97b9s57s5b9s11padds9ms5add9padd96s116b5maj7add1369s11m69-697b6maj7s9s11maj13s11maj7b97s11b137b5b137add6677add137s9s117b5s97s9b513s9s117s9s11b1313s97s9b139s119s413s1113s49s11b139b5b137b9s117b5b97b9b513b9s117b9b13s117b9s11b137b5b9b1313b97b9b137b9s92add9add2majaddb9majb513b5maj7b5maj9b57b59b57no57b139no513no59b13madd4mmaj7b6mmaj9b6m7add11m7add4madd9o7maj7omaj7mb6maj7m7s5m9s5m11Amb6b9m9b5maj7s5sus4maj9s5sus47s5sus4maj7sus4maj9sus49sus49sus13sus413sus7sus4b9b137b9b13sus44quartal11b9
Glossary
Clade |
The taxonomic principal organizing tracks into one of: synth, MIDI, YPC, or crow. |
Phenomenon |
An event, action, or piece of logic associated with a slot. Slots can contain up to one phenomenon. |
Y Mode |
When toggled on, alpha-numeric character input to the buffer is broken and keys take on new functionality. This behavior is comparable to to vim’s normal/default mode. |
YGG Notation |
YGG notation is like IPN but faster to type - there are no capitals and the |
YPC |
“Yggdrasil Production Center” - the sampler/softcut system for Yggdrasil. History. The YPC uses an intelligent “first in, first out, round robin” algorithm to play samples. Softcut (the internal sampler engine in norns) has six voices, so if Yggdrasil is instructed to play 7 samples at once, only the first 6 will fire. Once the first sample is complete, another sample will be available. The YPC can support any number of banks, each with any number of samples. YPC can intelligently repitch samples. |
Changelog
- FIX Crow gates work again.
- FIX Update for norns
210114. - DEV Remove unneeded
clock.cancel()calls incleanup().
- FIX Copy and paste slots works again.
- FIX Copy and paste tracks works again.
- FIX Copy and paste samples works again.
- FIX Lucky phenomenon are no longer unlucky.
- NEW Use the lacuna
@phenomenon to first disable the current track, then enable and queue any other track. The net effect is a clean handoff of one track to another. Lacunae honor ascending and descending tracks (it is smart enough to start at the top or bottom of a track) but lacunae do not effect solo and mute attributes. Thus, it is possible to queue and and play muted track. This is a feature, not a bug. - FIX Any command specifically targeting a slot deeper than the track will automatically fill the track to that depth.
- FIX K3 assignment works again.
- FIX Copy and paste tracks works again.
- DEV Complete overhaul of the clock architecture to use 96 PPQN.
clockcommands remain the same.
- NEW Select samples in editor without typing them. (!)
- NEW Edit macros in the editor.
- NEW “Off” phenomenon to send MIDI off signals to all notes on the track.
- NEW View macros with
v;m1andv;m2. - NEW Toggle synth encoder override while in Y Mode with p.
- NEW Execute arbitrary routines with
routine;anthropocene.txt. - CHANGE After committing values in the editor, the last selected field remains selected.
- DEV Refactor commands to each use individual files.
- NEW Long messages scroll back and forth.
- NEW Long text entries in the terminal and editor scroll.
- NEW Jump to the beginning of the next (or end of previous) word with mod + left and right arrows.
- CHANGE Press enter to dismiss the editor when there are no changes.
- NEW Define your own variables with
$1 = anything. - NEW Chain commands together with
&&. - NEW Automatically execute commands on startup with the
routines/startup.txtfile.
- NEW Cut, copy, and paste with mod + x, c, and v.
- CHANGE ctrl, alt, opt, and cmd have identical behavior. Collectively these are now simply: mod (modify).
- CHANGE Focus with mod + arrow keys. Use shift to move in increments of 10.
- CHANGE Use shift to move in increments of 10 with Y Mode h, j, k, and l.
- CHANGE Remove adaptive increment/decrement controls.
- CHANGE Synth macros are invoked with
minstead ofc. - FIX Cursor appears in the editor field in Y Mode.
- NEW Editor.
- FIX Prevent registering MIDI note before killing.
- FIX Overhaul of shadow architecture.
- FIX Do crows eat bugs?
- NEW Parameter to set default row/column numbers (the “hud”) state.
- NEW Add documentation for how to set octave when invoking chords.
- FIX YPC only recognizes frequencies in sample names if the string “hz” is appended after the number.
- FIX Add missing enharmonics.
- NEW Add Just Friends on/off commands. See more info here.
- FIX Crow bug.
- NEW Add “Toasty” synth. See more info here.
- NEW Add
ymodecommand. This toggles it on. Pressing Y in Y Mode will toggle Y Mode off. - FIX Lucky bug.
- FIX
cb->b.
- NEW Ygg notation supports enharmonics. gs4 = ab4.
- NEW Add
versionas alias forinfo. - NEW Add vim-style jump command:
:Y - FIX
bpm;120works instead ofbpm 120. - FIX
1 ascend&1 descendworks as documented.
- ADD Adjust track levels with left and right bracket keys.
- FIX Issue with track selection.
- FIX Save honors empty slots.
- FIX Continued dev artifact cleanup.
- FIX Dev artifact cleanup.
- NEW Initial release.
- When the buffer is empty, pressing enter activates the editor.
- Pressing esc aborts.
- ← and → move the text cursor.
- tab and tab + shift cycle through the attributes.
- ↑ and ↓ also cycle through the attributes.
- mod + arrows aborts and moves to adjacent slot.
- Pressing enter at any time commits all valid values.
- Pressing enter will do nothing if invalid values are present.
- Pressing enter will close the editor if all values are unchanged.
- Pressing enter on the YPC field will open a sample selector window. Pressing esc will abandon the window without any updates. Pressing enter on a new sample will commit the new sample along with other values in the editor.
- Entries are validated in real-time. Invalid submissions are not allowed.
- Empty notes and values are valid - it is the same as deleting.
- YGG and MIDI values update each other.
- Spacebar is disabled when the editor is open.
- E1 aborts current edits and selects next not empty slot.
- E2 and E3 still pan X and Y as normal.
Imagine the tracker with five planes: notes, samples, macros, velocities, and phenomena. With the view command you can toggle each plane on and off.
- Note: stores note data. This can be viewed as IPN, YGG, MIDI, or frequency.
- YPC: stores samples name.
- Macro: stores “macro controls” of the synth. Each synth voice has two macro controls with values that range from 0 - 99.
- Velocity: stores velocity data.
- Phenomena: stores up to one phenomenon.
Use mod + ↑, ←, ↓, and → to to change focus. Press ↵ to select and backspace / delete to clear. Use shift to move in increments of 10. Note ↵, backspace, and shift are also Y Mode interactions.
While in Y Mode, use h, j, k, and l to to change focus. Press ↵ to select and backspace / delete to clear. Use shift to move in increments of 10. Note ↵, backspace, and shift are also eternal interactions.
You can assign any arbitrary text to variables. This text can be a fully valid command or a mere fragment… Perhaps a motif like 60;62;65?
Valid variables are constructed with the dollar sign ($) followed by a positive integer.
Once assigned, any command containing these will “expand” the first time you press ↵.
Chain commands together for rapid execution with &&.
Automatically execute any number of commands on startup by placing a file at /dust/data/yggdrasil/routines/startup.txt. Each command goes on a new line.
While in Y Mode, increment and decrement selected track levels by 1% with [ and ]. Hold shift to increment by 10%.
While in Y Mode, the number keys instantly select the corresponding track. With a track selected, hold shift and press another number to select a range of tracks.
While in Y Mode, use q, w, and e to unmute, unsolo, and enable selected tracks respectively. Use a, s, and d to mute, solo, and disable tracks respectively. Remember: s olo, e nable, d isable!
ctrl, alt, opt, and cmd and all do the same thing. Collectively, these keys are simply mod. Let there be peace among the kingdoms.
With slots or tracks selected, hold mod and press backspace / delete to clear all values.
Cut, copy, and paste selected tracks and slots. It works just like your favorite spreadsheet program. Cutting and copying entire tracks will also pickup track attributes such as level, clade, direction, and so on. Interactions are the same in Y Mode.
Toggle Y Mode off the Y key. (This is to support keyboards that do not have caps lock.)
Switch pages with tab. The pages are Tracker, Mixer, and Clades.
Toggle the synth;enc manual override controls with p.
Think “p” for potentiometer.
In the REPL, you can execute any Yggdrasil commands with cmd("YOUR COMMAND STRING").
Toggle Y Mode on and off with caps lock.





