Saving your work
A snapshot holds the whole instrument — patterns, sounds, levels, and the driver's own state. Two things it cannot hold, and one trap in the web interface.
Try it
- On the touchscreen (or through VNC in a browser), open the snapshot list and enter a bank.
- The first entry is Save as new snapshot. That is the one.
- To load, pick any snapshot in the list. Everything comes back — including which channels you had switched, and who owned each pattern.
The trap
In webconf's Snapshots page, the Name field and its checkmark RENAME THE SELECTED BANK. They do not save a snapshot.
It looks exactly like a save box. It is not one. Save from the touchscreen or VNC.
What a snapshot carries
The patterns themselves, play chance and swing, mixer levels and mutes, both effect sends per channel, and each channel's kit or preset.
Plus the driver's own state, which exists nowhere else: every voice's Turing register and its four-deep undo ring, the voice parameters, the globals, which channels you switched kind on, who owns each pattern, your modulators — depth, rate, shape, position and base — and the mode and page you were in.
A set saved mid-sweep comes back at the value you dialled in, not wherever a modulator happened to be when you saved.
What it will not carry, and why
A mute set on the sequencer does not persist. Mute the mixer strip instead — that is in the snapshot, and it shows on the touchscreen mixer too.
The phrase count and anything armed are not saved. The bar count is a live ruler rather than a position — it starts again from one on the next Play — and a macro still counting down is gone with it. A one-shot modulator comes back cycling, and a set saved while a drop is running saves those mutes, because mixer mutes are exactly what a snapshot does carry.
Amber provenance on a drum channel does not survive a reload. Your take does; the colour does not. A played drum note has the same pitch as a generated one, so once the pattern is read back nothing can tell them apart. The PLAY indicator remains the authority.
Taking your patterns elsewhere
A snapshot holds the eight patterns, and a small tool that ships with the project writes them out as an ordinary MIDI file you can open in anything:
python3 tools/export-patterns-midi.py snapshot/019-dub-factory.zss
You get one file: a tempo track, then a track per channel, each on its own MIDI channel and named for its group. It reads the saved snapshot rather than the running instrument, so it takes nothing from the rig — you can run it while you are playing, or with the instrument switched off entirely.
Two things it deliberately does not carry, so that nothing in the file is invented:
- Note lengths. Every note comes out one step long. The length the sequencer stores is not consistent between a drum and a voice, and it never had to be — the drum sounds are one-shots that play to the end of the sample whichever way you ask, and a voice’s notes are rewritten when the snapshot loads. A uniform gate you are told about is worth more than a length guessed from a field nobody has decoded.
- Per-note chance. A step that plays four times in five is not something a MIDI file can express, so it is written as a note that always plays. What you get is the pattern as it would sound with every chance turned up.
Putting a snapshot on an exact tempo
The phrase page explains why a handful of tempos are exact on this hardware and the rest run a few parts per million fast. If you want one of your own snapshots moved onto an exact one, there is a tool for it:
python3 tools/set-snapshot-tempo.py --tempo 125 snapshot/my-set.zss
Do not edit the file by hand. A snapshot carries the tempo in two places — the sequencer's own riff and the surface's saved globals — and writing one without the other gives you a set whose display and whose playback disagree. The tool writes both, then reads the file back, puts both fields where they were, and refuses unless the result is byte–identical to what it started with. That proves the tempo is the only thing that moved.
Generating starting points of your own
The genre pack is built from a plain list of snapshot descriptions. A second tool lets you write one of those descriptions as ranges rather than numbers — a tempo somewhere in the low 130s, a filter somewhere open — and draw as many concrete variants from it as you want, or blend two existing styles into a third:
python3 tools/style-sampler.py sample --style snapshot/example-style.json --variants 4 --seed 1234 --out /tmp/sampled.json
python3 tools/style-sampler.py blend --manifest snapshot/genre-pack-manifest.json --a 031-house-classic --b 046-minimal-dry --t 0.5 --out /tmp/blend.json
What comes out is an ordinary description list, which the normal pack builder turns into .zss files with no change at all. The seed is part of the command, so the same seed gives you the same set of variants tomorrow — a style you liked is a number you can write down. It runs on a computer, never on the instrument: nothing on the rig can read a range, and a knob that could show one has nowhere to put it on a 256×64 screen.
See also
- Playing and recording — what ownership means, and why amber matters
- Modulation — modulators are saved running