zeptocore
a handmade, handheld sample player.
orders ship every Tuesday.
Stereo playback of 16-bit audio files @ 44.1 kHz sampling rate · SD-card storage for up to 32 gigabytes of samples · Recalls up to 256 audio files (16 banks of 16 tracks) · 16 different effects (saturate, fuzz, delay, reverb, etc…) · Single-cycle wavetable synthesizer · Realtime sequencer with optional quantization · Optional clock sync out · MIDI (in + out) over USB · Built-in 8-ohm speaker · Powered by two AAA batteries or USB-C · Open-source · Handmade in Seattle
this is the zeptocore. a handmade, handheld sample player.
Download a one page PDF of this guide for easy reference.
on & off
To power on the device, toggle the switch on the top right to the “up” position. The device comes pre-loaded with several samples. A sample will start playing automatically.
Press keys to jump samples.
Navigate through the samples by pressing any of the 1-16
keys.
Hold a key and press to initiate a retrigger.
Experiment with retriggering samples by pressing and holding one 1-16
key and then pressing a different 1-16
key.
volume & tempo
The A
, B
, C
, and D
keys are used in combination with the knobs to adjust various settings.
Changing the volume.
Adjust the volume by holding the A
key (top left key) and turning Knob Z
located on the right-hand side.
Changing the tempo.
Similarly, modify the tempo by holding the A
key and turning Knob Y
.
banks & samples
There are 16 banks of samples, with each bank capable of holding 16 samples. By default, you are in the first bank and the first sample.
Pressing two keys while holding B
will select a bank and then sample.
To switch to a different bank and select a different sample, follow these steps: first, hold B
, then while holding B
, press 1-16
to choose a bank. Keep the B
key pressed and then press another 1-16
button to select a sample within that bank.
effects
The device powers up in JUMP
mode, where pressing 1-16
allows you to navigate through samples. When in jump mode you can hold A
and press any of the 1-16
to activate an effect.
Example of toggling the `fuzz` effect in `JUMP` mode.
There are 16 different effects to choose from.
effect parameters & probabilities
Each effect can be customized with up to two parameters and features a probability setting. To adjust the effect parameters, enter MASH
mode by pressing (A
+ C
). While in MASH
mode, press and hold the effect you wish to edit. For instance, hold down 2
to modify the LOSS
effect. While holding the effect, use Knob X
or Knob Y
to tweak the parameters for that effect. Detailed information about each parameter can be found in the effect reference section below. For example, loss allows adjustments to “loss type” and “loss amount.” To modify the likelihood of the effect occurring randomly, use Knob Z
.
adding samples & updating firmware
To add samples, power off the device and remove the microSD card. Samples must be pre-processed before uploading them directly to the SD card. You can utilize the online tool for sample processing or opt to download the tool for offline use. Updating the firmware is simple - download a new release and upload it using a USB-C cable. Follow the provided instructions for uploading firmware to complete the process and install the new firmware.
long guide
For any additional information, refer to this guide or utilize the handy reference guide which provides quick access to button combinations and the effect list for easy reference.
Also, check out this video walkthrough for a visual guide on how to use the device:
About
The zeptocore is an open-source handheld device for playing with samples, featuring:
- stereo playback of 16-bit audio files @ 44.1 kHz sampling rate
- sd-card storage for up to 8 gigabytes of samples
- recalls up to 256 audio files (16 banks of 16 tracks)
- 16 different effects (saturate, fuzz, delay, reverb, etc…)
- single-cycle wavetable synthesizer
- realtime sequencer with optional quantization
- clock sync in (or midi sync with ittybittymidi)
- optional clock sync out
- tiny built-in speaker
- powered by two AAA batteries or USB-C
Goals
- Open-source: The source code is publicly available at https://github.com/schollz/_core, allowing anyone to modify this device today or in the future.
- Low learning curve: The device should be enjoyable without the need to read a manual, although reading the manual can enhance the experience.
- Unquantized: By default, the sequencer does not enforce 4/4 time signatures.
Non-Goals
- Similarity: The intention is not for this device to resemble anything else. Some decisions are highly opinionated, but since it is completely open-source, you can modify the device as you wish.
- Audio synthesis: The CPU is already quite taxed by the current system, and I believe that synthesis requires significantly more cycles to sound good.
- Polyphony: This device only supports two voices—a monophonic sample voice and a monophonic bass voice. These voices are smoothly crossfaded, but the CPU limits the possibility of having more polyphony. (Consider syncing more devices together instead!)
friends
if you like this device, you might also like these other small devices made by friends:
- Distropolis Goods
- prismatic spray - a bytebeat adventure synth
- phantasmal force - a micro midi controller.
- Curious Sound Objects
- bitty - an Arduino-compatible device that makes making music fun.
- Denki Oto
- OMX-27 - a compact MIDI controllers and sequencer
- yzhk instruments
- joydrums - as if a beat pad and a loop pedal had a baby.
- Gieskes
- hss2020 - a trimmed down version of the hard soft synth that fits in the hands.
zeptoboard
zeptoboard is the breadboard variant of the zeptocore. It has most of the same functionality, but instead of using the buttons on the handheld device, you can utilize your keyboard and a midi interface (this website). This version requires some knowledge of breadboarding, but it is ideal if you want to develop your ideas based on the firmware.
you can purchase the components directly from me (helps to support my development!):
or directly from another manufacturer like Amazon:
- WeAct Raspberry Pi Pico (others should work too) ($2.50)
- pcm5102 ($9)
- sdio sd card ($3.50)
(note: if you purchase components from me, I am able to provide reasonable amounts of support to help with your project).
pcm5102
when you get these off-the-shelf pcm5102 chips, make sure that you solder the backside to ensure proper audio connections. see this diagram:
zeptocade
the zeptocade offers a seamless plug-and-play experience with its zeptocore, housed in an arcade box featuring twenty led arcade buttons and eleven dedicated knobs. it’s perfect for those seeking a more tactile and colorful interaction with their music.
a handmade, handheld sample player...in an arcade box.
the zeptocade offers a seamless plug-and-play experience with its zeptocore, housed in an arcade box featuring twenty led arcade buttons and eleven dedicated knobs. it’s perfect for those seeking a more tactile and colorful interaction with their music.
zeptocade demo
zeptocade diy guide
zeptocore exchange
Removing and adding the zeptocore into the zeptocade is simple and straightforward. The zeptocore is held in place by four screws, which can be removed using a screwdriver. Once the screws are removed, the zeptocore can be lifted out of the zeptocade. To reinsert the zeptocore, simply place it back into the zeptocade and secure it with the screws.
If you are adding the zeptocore for the first time, make sure to first separate the top chip from the bottom plate - the top chip will sit in the top left of the zeptocade (see image below).
The first step is to remove the top four screws with an M4 hex key or Allen wrench.
Remove the four top screws to allow the plate to be opened.
The second step is to remove the back top corner screw and the standoff in the corner to leave enough room to add/remove the zeptocore.
Remove the back corner screw to remove the standoff.
Now, if adding the zeptocore, simply slide in the zeptocore and slot the knobs into the three holes. Then align the pins and push onto all of the header pins so that it is secure.
If removing the zeptocore, simply pull the zeptocore out of the header pins and slide it out of the zeptocade.
Carefully pull/push the zeptocore onto the header pins to exchange it.
For more information, see the demo video on how to add the zeptocore onto the header pins.
MIDI
MIDI Out
The zeptocore is a MIDI-compliant device that outputs midi when buttons are pressed or knobs are turned.
MIDI In
The zeptocore will automatically interpret MIDI start/stop/continue messages and automatically sync to the MIDI timing of the incoming signal.
Note: Interpretting other messages like button presses is not yet implemented but planned for a future update.
There are two ways to do MIDI input to the zeptocore.
USB MIDI
Simply plug in a USB cable from the zeptocore to a computer. The zeptocore will show up as a MIDI device on the computer. You can then forward MIDI messages from the computer to the zeptocore. For example, you can use midi2midi in a Chrome browser to forward MIDI messages from a MIDI controller to the zeptocore.
Using MIDI you can also easily sync up with Ableton or other DAWs.
An error occurred.
Try watching this video on www.youtube.com, or enable JavaScript if it is disabled in your browser.
Itty Bitty MIDI
I created a device called the itty bitty midi which you can use directly with a MIDI controller to send MIDI messages to the zeptocore. Simply plug in the MIDI controller to the “IN” side of the itty bitty midi and then plug the “OUT” side to the CLOCK
input of the zeptocore. The itty bitty midi will automatically forward MIDI messages to the zeptocore.
Note: By default the zeptocore expects clock signals in the CLOCK
input. You can switch to MIDI
input by pressing the following combination: 13
+10
+11
+16
. More information here.
Combo for activating itty bitty midi MIDI input through the CLOCK in
Computer keyboard
The MIDI layer allows you to communicate with the zeptocore via a browser and computer keyboard. Simply open a browser (Note: Chrome only) to zeptocore.com and plug in the zeptocore to the computer.
If successful, a small screen will pop up that lets you see the current state of the zeptocore and allows you to interact with the zeptocore directly via the keyboard:
Modes
There are three modes that can be activated within the zeptocore:
Jump Mode is the default mode that is activated when turning on the zeptocore or by pressing A + B. In this mode, the 1-16 keys are used to navigate through audio slices, create loops, or retrigger audio samples for dynamic performance effects.
Mash Mode is accessed by pressing A + C and transforms the 1-16 keys into toggles for activating or deactivating effects. This mode adds complexity and textures to a sample.
Bass Mode can be initiated with A + D and assigns bass notes to the 1-16 keys, allowing users to play melodic basslines directly from the device. This mode enables easy integration of speaker-shaking audio elements into the output.
Uploading firmware
Periodically, new firmwares are released with updated effects or improved performance. If you have the tool installed, you can connect your device to your computer and automatically update the firmware. You can also download the latest release directly from this link:
Latest firmware: zeptocore v6.4.3
Instructions
To update your zeptocore to the latest version, follow these steps:
- Connect a USB-C cable to the device and hold the
BOOTSEL
button (located near the USB-C jack). - While holding the
BOOTSEL
button, press theNRST
button (also near the USB-C jack). - After a few seconds, a new drive named
RPI-RP2
should appear on your computer. - Drag and drop the downloaded zeptocore_v6.4.3.uf2 file onto the
RPI-RP2
drive. - Wait momentarily for the drive to disappear, indicating the update is complete, and the device will turn on automatically.
Your browser does not support the video tag.
Congratulations, your zeptocore has been successfully updated to the latest version.
(Note: If using zeptoboard, follow the same instructions but ensure you download the latest zeptoboard_v6.4.3.uf2).
Tool uploader
If you have installed the tool on your computer, launch the tool and click on the top right to upload a new firmware while the device is connected. Download the tool compatible with your operating system from the latest releases.
Firmware development
Follow these instructions if you want to develop the firmware yourself and create custom images.
Windows
Install WSL 2
$ wsl --set-default-version 2
$ wsl --install Ubuntu
Then restart computer and run
$ wsl --install
That should start your system. Then you can follow the Linux directions.
macOS
First install homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
You will need to add Homebrew to your PATH. Do so by running the following two commands:
which brew
will tell you which path your brew is on. then
echo 'eval "$([path to homebrew from command above] shellenv)"' >> /Users/USERNAME/.zprofile (remembering to substitute your username)
eval "$(/opt/homebrew/bin/brew shellenv)"
Now you can install the toolchain:
brew install cmake python
brew tap ArmMbed/homebrew-formulae
brew install gcc-arm-embedded
Now clone the repo and install the Pico SDK
git clone https://github.com/schollz/_core
cd _core
export PICO_SDK_PATH=$(pwd)/pico-sdk
git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk && git checkout 1.5.1 && git submodule update --init && cd ..
Now you should be able to build zeptocore:
make clean zeptocore
Linux
Install the pre-requisites:
sudo apt install cmake gcc-arm-none-eabi \
libnewlib-arm-none-eabi \
libstdc++-arm-none-eabi-newlib \
git python3 g++
sudo -H python3 -m pip install numpy \
matplotlib tqdm icecream librosa click
Clone this repo and install the Pico SDK:
git clone https://github.com/schollz/_core
cd _core
git clone https://github.com/raspberrypi/pico-sdk
cd pico-sdk && git checkout 1.5.1 && git submodule update --init && cd ..
export PICO_SDK_PATH=$(pwd)/pico-sdk
Do a build:
make clean zeptocore
(replace ‘zeptocore’ with ’ectocore’ or ‘zeptoboard’ if you are building a different image)
Uploading samples
Uploading samples is a straightforward process similar to transferring a file onto an SD card. However, as the samples need to be processed to meet the specifications of 44.1 kHz / 16-bit.
The sample tool is required for the sample preprocessing step, before transferring the samples to the SD card. This tool can be accessed online or downloaded to your computer for local use.
Use tool online: zeptocore v6.4.3 (Chrome and Firefox only)
Screenshot of the core tool
Stock samples
The zeptocore arrives with “stock” samples on it. If you ever want to remove them and replace them you can get them here by redownloading and transfering them back to the SD card.
- zeptocore stock samples pack 1 (drums) (393 MB).
- zeptocore stock samples pack 2 (melodic + drums) (853 MB).
Make sure you have the firmware updated to v5+ to use these samples.
Allowable formats
The sample tool will allow a variety of audio formats to be uploaded, including: .wav, .aif (OP-1 kits), .flac, .mp3, .xrni (Renoise splices), and even .wav (morphagene reels).
Transfering samples to SD card
Once you finish using the tool to collect your samples, click the Download .zip button in the lower left corner. This will download a zip file containing all of your samples.
Unzip this .zip file extract all the bankX folders into the SD card. The SD card structure should look like this:
Each of those bankX folders contains all the nessecary audio files. The bank0 folder corresponds to the first bank (they are “0-indexed”). If you want a bank to be in a different slot, you can simply rename it. For example, you could rename bank0 to bank2 and it would be loaded into the third bank slot.
Download to use tool offline:
Windows
Download for Windows: x64
Once downloaded, double click on the executable file to run it.
macOS
To install the tool on macOS, first open a terminal.
Then, if you are on an Intel-based mac install with:
curl -L https://github.com/schollz/_core/releases/download/v6.4.3/core_macos_amd64_v6.4.3 > core_macos
Or, if you are on a M1/M2-based mac install with:
curl -L https://github.com/schollz/_core/releases/download/v6.4.3/core_macos_aarch64_v6.4.3 > core_macos
Then to enable the program do:
chmod +x core_macos
xattrc -c core_macos
Now to run, you can just type
./core_macos
A window should pop up in the browser with the offline version of the tool.
Linux
Download for Linux: x64
After downloading, run it directly from the terminal.
Building from source
Windows
First install Scoop by opening PowerShell terminal and type:
> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
> Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
Then in the Powershell:
> scoop update
> scoop install go zig sox
Now you can build directly from Powershell with:
> cd core
> $env:CGO_ENABLED=1; $env:CC="zig cc"; go build -v -x
Now the upload tool can be run by typing
./core.exe
Linux
Make sure Go is installed and then install air:
> go install github.com/cosmtrek/air@latest
Now you can build the tool using the following:
> git clone https://github.com/schollz/_core
> cd _core/core
> go build
For development, you will need to have a SSL certificate installed on localhost, otherwise the MIDI won’t work.
To get a local SSL server that redirects to the core server, follow these instructions. First install mkcert:
sudo apt install libnss3-tools
git clone https://github.com/FiloSottile/mkcert && cd mkcert
go build -ldflags "-X main.Version=$(git describe --tags)"
go install -v
mkcert -install
mkcert localhost
Then install and run local-ssl-proxy
:
npm install -g local-ssl-proxy
local-ssl-proxy --key localhost-key.pem --cert localhost.pem --source 8000 --target 8101
Now you can run the core
software:
cd core && air
And now the server can be accessed at https://localhost:8000
.
Cases
The zeptocore comes as a PCB aesthetic which I find to be plenty durable and fun, but there are also 3rd party options for casings.
Cases for purchasing
Dich Studios has cases available for purchase, featuring frosted buttons which allow the LEDs to shine through well.
Dich Studios case
3D-printed cases
The case is a 3D-printed housing that fits the zeptocore and provides a more tactile interface.
There is a simple lower case made by @vectorstofinal that is available for download and 3D printing:
www.thingiverse.com/thing:6616773
There is also a case for USB powering only by @pabloantxon that is available for download and 3D printing:
www.thingiverse.com/thing:6648821
Combos
See the quick reference for the short form of this information.
Mode jump
Key combo: A + B from any
mode
There are three possible modes: jump, mash, and bass.
In the JUMP
mode, pressing in the 1-16 will jump slices, create little loops, or do retriggers.
Combo going to JUMP
mode.
Mode mash
Key combo: A + C from any
mode
There are three possible modes: jump, mash, and bass.
In the MASH
mode, pressing in the 1-16 will toggle effects on and off depending on where you press. If you want to have the effects only active while the button is pressed, you can switch to momentary mode by pressing 1+4+13+16.
Combo going to MASH
mode.
Mode bass
Key combo: A + D from any
mode
There are three possible modes: jump, mash, and bass.
In the BASS
mode, pressing in the 1-16 will play bass notes.
Combo going to BASS
mode.
Tempo
Key combo: A + B + B + ... from any
mode
Key combo: A + Knob X from any
mode
The Tempo feature offers three methods for precision tempo control.
First, you can adjust dynamically by holding A and rotating Knob X—with the middle position representing the original BPM, turning fully clockwise for double speed, and turning fully counter-clockwise for half speed.
Combo for changing the tempo with a knob.
Secondly, you can hold A and tap B to manually tap in the tempo, which ranges from 30 to 300 BPM.
Combo for changing the tempo with tapping.
In both methods, the newly set tempo is briefly displayed, providing immediate visual confirmation of adjustments. This feature ensures that users can easily synchronize their audio to the desired pace.
Thirdly, you can press and hold A, and then hold B, and then tap any of the keys, 1-16 to set the tempo to a pre-defined value. This is useful for quickly setting the tempo to a common value.
Pitch
Key combo: A + Knob Y from any
mode
Change the pitch by holding A and turning Knob Y. Pitch can be changed independent of tempo.
Try it: Interesting effects can be obtained by turning the tempo high and turning the pitch down or vice-versa.
Changing pitch.
Volume
Key combo: A + Knob Z from any
mode
Change the volume by holding A and turning Knob Z. Turning the knob fully clockwise may cause clipping for some audio files, while turning it fully counter-clockwise will mute the current audio.
Changing volume.
Jump
Key combo: 1-16 from jump
mode
Key combo: A + 1-16 from mash
mode
In jump
mode, pressing any of the 16 keys will “jump” the sample between slices. The slice position depends on what is set in the Zeptocore tool. The Zeptocore will instantly crossfade from the current position to the beginning of the slice that is jumped to.
Press any of the 16 keys to jump while in JUMP
mode.
Retrigger
Key combo: 1-16 + 1-16 from jump
mode
Select a slice with 1-16 and then press another key on the 1-16 keypad to initiate a retrigger effect on the selected slice. The retrigger rate will depend on the second key press, with 1 being the fastest rate and 16 being the slowest rate.
If you want pitch up/down effects to be applied to the retriggering, you can enable the Retrigger Setting under the effects (A + 15 in jump mode).
Hold any of the 16 keys and then press any of the 16 keys to jump while in JUMP
mode to do a retrigger.
Loop sequence
Key combo: 1-16 + 1-16 + 1-16 from jump
mode
Select a slice with 1-16 and then press another key on the 1-16 keypad. Subsequently, press a third key on the 1-16 keypad. This action will create a loop between the first and second slices pressed.
Hold three keys in JUMP
mode to activate looping.
Change samples
Key combo: B + 1-16 + 1-16 from any
mode
To change samples, you can hold B and press 1-16 to select a bank. While still holding B, press another 1-16 to select the sample. The current sample will be instantly faded out (within 10 ms), and the next sample will load at the position where the current sample is playing.
Pressing two keys while holding B
will select a bank and then sample.
Alternatively, you can use the knobs to change samples - C + X will change to any sample.
Alternatively hold the C
key while turning knobs to change bank/sample individually.
Mute
Key combo: B + C from any
mode
This key combo will mute the audio but playback and clocking will continue.
If you want to stop everything you need to use start/stop.
Combo for toggling mute.
Start/Stop
Key combo: B + D from any
mode
This key combination will mute the audio and stop playback. Pressing it again will restart the audio from the first beat. If you only need to mute the audio without stopping playback, you can use the mute key combination.
Combo for toggling the start and stop.
Random sequencer
Key combo: B + Knob X from any
mode
Turning this knob fully CCW will allow the full sequence to play. Turning the knob fully CW will create a new random sequence in the current sample. Turning the knob in between both ends will adjust the number of steps available to the random sequence.
The random sequence can be re-rolled by turning fully CW. You can also re-roll a single random step by holding B and pressing A.
Filter sweep
Key combo: B + Knob Y from any
mode
Rotating this knob clockwise will increase the cutoff frequency of the low pass filter, allowing higher frequencies to pass through. Rotating it counterclockwise will decrease the cutoff frequency, restricting the passage of higher frequencies.
Combo for doing a filter sweep.
Bass volume
Key combo: B + Knob Z from any
mode
Turning this knob will adjust the volume of the bass. Turn it clockwise to increase the volume. Please note that high volume levels may cause crackling, depending on the headroom in your samples.
Combo for changing the volume of the bass.
Select sequence
Key combo: C + 1-16 from any
mode
Select any one of the 16 slots (1-16) to store a sequence. Each of the three modes (JUMP, MASH, and BASS) has 16 slots available for storing sequences. This is the first step to record a sequence.
Combo for selecting a sequence slot.
Play/stop sequence
Key combo: C + B from any
mode
If a sequence is recorded in this slot, this button will toggle playback for the sequence. If recording, pressing this button will end the recording.
Combo for playing a sequence slot.
Record sequence
Key combo: C + D from any
mode
This key combination will toggle sequence recording. In the JUMP mode, it will record a sequence of jumps. In the MASH mode, it will record a sequence of toggling effects. In the BASS mode, it will record a bass sequence.
Combo for recording/deleting a sequence slot.
Recording a sequence on Zeptocore differs slightly from other devices. The key distinction is that Zeptocore records the time between presses. Therefore, to record a sequence of 4 steps, you will need to make 5 presses. The final press will not be counted as a sequenced step, but it is necessary to determine the duration of the penultimate press.
It is important to note that Zeptocore does not have a concept of time signature. All recorded actions are quantized to 1/96th of a beat, ensuring precise preservation of the recorded press timing. For quantizing the press timing with less resolution, you can utilize the C + Knob Z key combination.
Please be aware that the button combination of C
+ D
also functions to delete a sequence currently stored in the selected slot.
Chain sequence
Key combo: C + 1-16 + 1-16 from any
mode
Sequences can be combined into “chains” of sequences, which are saved as new sequences that can be recalled or further chained into new sequences.
Combo for creating a sequence chain.
To create a sequence chain, follow these steps:
- Press and hold the
C
key (the sequence selector). Lit buttons indicate where sequences are stored, while unlit buttons signify empty slots. - While holding down the
C
key, press an unlit button to select the sequence slot where the new chain sequence will be stored. - While still holding down the
C
key, press the lit buttons with existing sequences in any order to create the sequence chain. - Release the
C
key, and the sequence chain will be automatically generated and saved in the slot chosen in step #2.
If there are no free slots available, you cannot create sequence chains. In such cases, you can delete a sequence by selecting it (C
+ 1-16
) and then deleting it (C
+ D
).
Change samples (with knob)
Key combo: C + Knob X from any
mode
You can change the current sample using this combination.
You can also change banks + samples simultaneously using button presses.
Alternatively hold the C
key while turning knobs to change bank/sample individually.
Random tunnel
Key combo: C + Knob Y from any
mode
“Tunneling” is where the sample will randomly jump to a neighboring sample in the current bank.
Quantize
Key combo: C + Knob Z from any
mode
This knob will increase the quantization for the current playing sequence (JUMP, MASH, or BASS).
Hold the C
key while turning Knob Z
to change quantization.
Select save
Key combo: D + 1-16 from any
mode
Select any one of the 16 slots (1-16) to store a saved copy of the current state.
Load save
Key combo: D + B from any
mode
Load the settings from the current saved slot.
Create save
Key combo: D + C from any
mode
Save the current settings into the selected slot.
Octave +1
Key combo: A + 1-16 from bass
mode
By pressing A in bass mode you will be able to press any of the notes (1-16) and they will be pitched up by one octave.
Random jump
Key combo: D + Knob X from any
mode
Adjust the probability of random jumping by increasing it when turning the knob clockwise.
If you want to maintain sequence lock, you can use the sequence lock combo.
Random effects
Key combo: D + Knob Y from any
mode
Adjust the probability of random effects. The effects that are activated are the ones designated in the current random effects banks. You can change the random effect bank by holding D and turning Knob Z.
Random effects banks
Key combo: D + Knob Z from any
mode
When turning up the random effects, the precise effects that are affected will be determined by the effects selected for the current bank of effects. To change which effects are toggled, simply use the sample tool and adjust the settings and select the effects you’d like.
The effects are randomly activated by holding D and turning Knob Y.
Kick layering
Key combo: A + D + 1-16 from any
mode
Key combo: 13 + 10 + 7 + 16 from any
mode
Note: v6.4.0 and later firmware required for this feature.
This is an experimental mode that lets you choose from 16 different kick samples (keys 1
to 16
). Hold down the A
button and then hold down the D
button and then press one of the 16 keys to layer the selected kick sample with the currently loaded sample. Continue to hold down the A
and D
buttons and press another of the 16 keys to set the volume of the selected kick sample.
You can turn this mode off by holding down the A
button and then holding down the D
button and then pressing the 1
key twice.
This mode can also be toggled using the button combo 13
, 10
, 7
, 16
.
When activated, the selected kick sample will be played at the same time as the detected kick drums in the sample. This can be useful for adding more punch to your kick drums.
Kick detection in web tool
Use the web tool in v4+ to generate information for the placement of kick samples. Determined placements are shown with a small kick drum icon “” placed at the position of each estimated kick.
In this sample, there were four detected locations for kick samples.
Kick detection
Unlike the slices which are manually set or defined by intervals, the kicks (and snares too) are detected using a machine learning approach. The detection is based of an ML model of drums and placement of kicks and snares. An original audio file of drums can be separated into just kick drums:
Original audio:
Kick stem:
The transients in the kick stem are used to calculate the best placement for kick drums.
An error occurred.
Try watching this video on www.youtube.com, or enable JavaScript if it is disabled in your browser.
One-shot
Key combo: 5 + 6 + 5 from any
mode
The Zeptocore tool can be utilized to configure the one-shot mode for each sample. On the device, you can use this combination to toggle the one-shot mode on and off. When in one-shot mode, the sample will stop playing upon reaching the end of the sample (as opposed to default playback mode, detailed further in Play mode).
One-shot mode will show ONESHOT ON
when enabled and ONESHOT OFF
when disabled.
Combo for toggling one-shot mode.
MIDI with ittybittymidi
Key combo: 13 + 10 + 11 + 16 from any
mode
The ittybittymidi is a device that allows you to send MIDI messages directly from another device to the zeptocore through the zeptocore clock input. To use this feature, you must first enable MIDI mode on the zeptocore. To do this, press the following combination: 13+10+11+16. The screen will show MIDI ON
when MIDI mode is enabled.
Combo for activating itty bitty midi MIDI input through the CLOCK in
Momentary FX mode
Key combo: 1 + 4 + 16 + 13 from any
mode
By default, the MASH
mode will let you turn on and off effects by pressing the buttons to toggle them. You can change this toggling behavior to a momentary press behavior by using this combo. Press 1+4+16+13 to switch between momentary and toggling FX in MASH
mode. The screen will show MOMENTARY
when momentary mode is enabled. When in momentary mode, the effects will only be active while the button is pressed.
Combo for switching between activating effects with toggling or with momentary presses in MASH
mode.
Change play mode
Key combo: 7 + 8 + 7 from any
mode
Slice playback
Key combo: 1 + 2 + 1 from any
mode
Sequence lock
Key combo: 1 + 2 + 3 + 4 from any
mode
Sequence lock mode, when activated, will synchronize the sequence to a global clock. This ensures that manipulations to the sequence (such as jumping) will revert back to the intended beat position. Sequence lock mode will show LOCK ON
when enabled and LOCK OFF
when disabled. The sequence lock is enabled by default.
Combo for toggling sequence lock.
Tempo match
Key combo: 5 + 6 + 7 + 8 from any
mode
Tempo matching involves adjusting the playback speed of a sample by a multiplier to align with the ratio between the sample’s BPM (set in the tool) and the BPM of the current tempo in Zeptocore. Typically, this adjustment is configured per sample when loading samples onto Zeptocore, but it can also be adjusted on the fly.
When enabled, the Tempo Match mode will show MATCH ON
, and when disabled, it will display MATCH OFF
.
This setting can be customized on a file-by-file basis using the tool.
Retrigger pitching
Key combo: 9 + 10 + 11 + 12 from any
mode
When this effect is active, it will cause the retriggering to pitch up or down the audio randomly.
Sync out
Key combo: 13 + 9 + 5 + 1 + 15 + 11 + 7 + 3 from any
mode
The Sync Out feature enables Zeptocore to output a sync signal through the left channel of the output. This signal channel can be utilized with external equipment that accepts a clock pulse.
When enabled, the Sync Out mode will show SYNC ON
, and when disabled, it will display SYNC OFF
.
Combo for activating itty bitty midi MIDI input through the CLOCK in
Randomize sequence
Key combo: 6 + 7 + 10 + 11 from any
mode
Activating this combo will create a random sequence that will be used in place of the current sequence (whether is from sequencing or normal playback). (Requires v2.5.+ version of the firmware). Demo video.
If this is activated with random fill, then a new sequence will automatically be generated every 32 beats.
If this is activated, holding down and pressing any of the 1-16 keys will automatically generate a new sequence of that length.
New in v2.7.4: If this is activated, holding down B and pressing A will swap out a random entry in the sequence for another random entry.
Combo for toggling a random sequence.
Random fill
Key combo: 10 + 11 + 15 + 14 from any
mode
Activating this combo will continuously toggle a random fill at the end of a sequence.
Combo for toggling the random fill mode.
An error occurred.
Try watching this video on www.youtube.com, or enable JavaScript if it is disabled in your browser.
Kicks
Key combo: 4 + 7 + 10 + 13 from any
mode
Switching the kick mode will adjust the playback sequence to only play sequences containing kicks.
When enabled, the Kick mode will show KICKS
, and when disabled, it will display NORM
.
Snares
Key combo: 13 + 10 + 7 + 4 from any
mode
Switching to snare mode will adjust the playback sequence to only play sequences containing snares.
When enabled, the Snare mode will show SNARES
, and when disabled, it will display NORM
.
Effects
Each effect can be adjusted using Knob Z to change the probability of occurrence from none (fully counter-clockwise) to often (fully clockwise).
Refer to the quick reference for a concise version of this information.
Saturation
Key combo: 1 from mash
mode (or A + 1 from jump
mode)
Knob X: preamp
The Saturation effect enriches audio by adding warmth and depth using a double sine wave technique. This enhances the overall texture and loudness without introducing distortion.
Loss
Key combo: 2 from mash
mode (or A + 2 from jump
mode)
Knob X / Y: loss type / loss amount
The Loss effect simulates the analog imperfections of a worn tape or faulty radio transmission. It provides controls for adjusting the type and amount of degradation, allowing you to achieve vintage or distressed audio textures.
Fuzz
Key combo: 3 from mash
mode (or A + 3 from jump
mode)
Knob X / Y: preamp / postamp
The Fuzz effect adds a rich, fuzz-like distortion to audio. It includes preamp and postamp knobs for finely tuning the intensity before and after the effect is applied.
Bitcrush
Key combo: 4 from mash
mode (or A + 4 from jump
mode)
Knob X / Y: bits / frequency
The Bitcrush effect aggressively degrades audio fidelity by reducing the bit depth to 2 bits and sampling frequency to 4 kHz. This mimics the characteristics of early digital audio gear.
Timestretch
Key combo: 5 from mash
mode (or A + 5 from jump
mode)
The Timestretch effect significantly slows down audio playback by a factor of approximately 8x without changing its pitch.
Delay
Key combo: 6 from mash
mode (or A + 6 from jump
mode)
Knob X / Y: feedback / duration
The Delay effect introduces a feedback delay mechanism where the knobs can finely adjust feedback intensity and delay duration. This feature allows for extensive creative flexibility, which can extend into overclipping for intense audio textures.
Comb filter
Key combo: 7 from mash
mode (or A + 7 from jump
mode)
Knob X / Y: left spread / right spread
The comb filter introduces a very short delay to the audio chain, creating a metallic resonating sound when activated.
Repeat
Key combo: 8 from mash
mode (or A + 8 from jump
mode)
Knob X: duration
The Repeat effect uses zero-crossings to loop audio segments that best match the requested duration. This effect is distinct from delay as it overtakes the audio rather than adding to it, allowing for speeds up to the audio rate.
Tighten
Key combo: 9 from mash
mode (or A + 9 from jump
mode)
Knob X: duration
The Tighten effect uses a gate to cut off the audio towards the end of a step, based on the duration setting. This clipping of the ends helps create a more defined and tighter sound profile.
The gate effect is a tool used in audio engineering to control the volume level of a signal. It works by allowing or blocking the passage of audio based on a set threshold. This can help eliminate unwanted noise or shape the dynamics of a sound.
Expand
Key combo: 10 from mash
mode (or A + 10 from jump
mode)
Knob X / Y: expanse / dry/wet
The Expand effect will create a reverberation effect on the sound. Please note that this effect consumes more CPU and memory than other effects. Using combinations of effects may create instabilities in the system.
Circulate
Key combo: 11 from mash
mode (or A + 11 from jump
mode)
Knob X / Y: rate / depth
The Circulate effect enhances the audio experience by dynamically circulating sound between the left and right channels. It offers adjustable rate and depth settings for creating immersive spatial movement.
Scratch
Key combo: 12 from mash
mode (or A + 12 from jump
mode)
Knob X: rate
The Scratch effect replicates a record scratch by rapidly altering the playback speed, and includes a rate knob to adjust the frequency of speed changes.
Lower
Key combo: 13 from mash
mode (or A + 13 from jump
mode)
Knob X / Y: duration / depth
The Lower effect activates a low-pass filter, gradually filtering out high frequencies to emphasize lower tones. It offers controls for adjusting the duration and depth of the transition.
Pitch
Key combo: 14 from mash
mode (or A + 14 from jump
mode)
Knob X / Y: duration / depth
This effect will alter the pitch without affecting the tempo, allowing beats to be split or doubled when the speed is halved or doubled, respectively.
Reverse
Key combo: 15 from mash
mode (or A + 15 from jump
mode)
This will reverse the audio and change the playback direction of the sequence to play it in reverse. If you are using the sequence, it will only reverse the audio.
Tapestop
Key combo: 16 from mash
mode (or A + 16 from jump
mode)
Knob X: duration
The Tapestop effect simulates the sound of a tape machine being stopped by gradually decreasing the pitch and halting audio playback. It includes a control for adjusting the duration of the effect.
Questions
Why is it randomly shutting down?
I apologize for any inconvenience. When encountering issues due to low battery levels, I recommend first replacing both batteries with fresh ones. Try powering the device using USB-C to check if it resolves the issue. I also suggest using high-quality alkaline batteries instead of carbon zinc ones, as alkaline batteries maintain voltage better over time and are less likely to cause operational problems.
To adjust the volume, hold A and turn Knob Z. For additional details, refer to this section.
Sometimes I hear a weird glitch?
I apologize for any issues you may be experiencing. The audio drops are likely related to the SD cards being used. Not all SD cards are equal, as some may have high latencies that can cause audio disruptions. Refer to the answer to this question to identify the best SD card for optimal performance. When glitches occur, the zeptocore can typically recover, producing varying glitch sounds. However, in rare cases, a restart may be necessary. The provided SD card should be suitable, but if you encounter ongoing issues, please inform me.
You can easily start and stop by holding B and then pressing D. If the audio is playing, it will stop, and if it’s already stopped, it will start playing from the beginning. Additional details can be found in this section.
To change samples using the buttons, follow these steps: hold B and press 1-16 to choose a bank. While still holding B, press another 1-16 to select the sample.
Alternatively, you can change the sample by selecting a bank with a knob or by selecting a sample with a knob. For more information, refer to changing banks with a knob and changing samples with a knob.
Alternatively hold the C
key while turning knobs to change bank/sample individually.
If you purchased the zeptocore from me, I have made efforts to supply the best SD card available.
Please note that not all SD cards are equal. Terms like “high-speed,” “A1,” or “U3” on the card do not necessarily indicate its actual speed performance.
Below is a list of known good and bad cards:
Known bad cards
Do not use these cards! They may appear to work, but they can cause spurious glitches.
- Lexar brand
- Kootion brand
- Sandisk Ultra
- Kingston brand
- 5% of JUANWE cards
Known good cards
- Gigastone 16GB + 32GB
- SP Elite
- SanDisk Extreme
- Samsung EVO
- PNY Elite
- MicroCenter
The schematics are open-source - you are welcome to utilize them to customize the device according to your preferences. If you intend to produce boards based on my schematics, I kindly ask for your financial support to help sustain the development of future devices.
How do I know which version I have?
When you power on the device, you can quickly check the current version by observing the flashing “Z” along with a version number such as “1.0.0,” indicating version 1.0.0.
How does the zeptocore compare?
[TABLE]
Why is the web tool not showing waveforms?
The web tool only supports Chrome. If you are using a different browser, you may experience issues with the waveform display.
What is in the battery holder?
The residue is the battery holder is dried expoy glue. The battery holder is glued to the PCB to ensure that it doesn’t move around when you insert or remove batteries. The glue is a non-conductive epoxy that is safe to touch.
Dried expoy underneath the batteries to hold the battery pack.
Why is MIDI not working on Mac OS?
The zeptocore is a class-compliant MIDI device, which means it should work with any operating system that supports MIDI. However, some users have reported issues with Mac OS. Here are some common troubleshooting steps:
- Check the cable: Make sure the MIDI cable is securely connected to both the zeptocore and your Mac using a USB A connector. Currently it seems that MIDI communication will not work through a Thunderbolt bus or plugged via a USB-C to USB-C cable.
- Check the MIDI settings: Go to
System Settings > Privacy & Security
and click the the pop-menu next to “Allow accessories to connect
” and choose “Automatically When Unlocked
”.
Reference
Combo list
Action | Combo | Description | Mode |
Jump | 1-16 | Crossfade into new slice position | jump |
Jump | A + 1-16 | Crossfade into new slice position | mash |
Retrigger | 1-16 + 1-16 | Creates retrig ramp, speed depends on second press | jump |
Loop sequence | 1-16 + 1-16 + 1-16 | Loop a sequence between first and second press | jump |
Octave +1 | A + 1-16 | Increase octave in the bass mode | bass |
Mode jump | A + B | Switches into jump mode |
any |
Mode mash | A + C | Switches into mash mode |
any |
Mode bass | A + D | Switches into bass mode |
any |
Tempo | A + B + B + ... | Sets new tempo based on the cadence of B presses | any |
Tempo | A + Knob X | Sets new tempo based on the position of knob X | any |
Pitch | A + Knob Y | Change pitch | any |
Volume | A + Knob Z | Change volume | any |
Change samples | B + 1-16 + 1-16 | The first 1-16 loads the bank, and then the next is the sample | any |
Mute | B + C | Mutes playback but does not stop playback | any |
Start/Stop | B + D | Toggles the playback to start or stop | any |
Random sequencer | B + Knob X | Create random seqeuences of different lengths | any |
Filter sweep | B + Knob Y | Sweep the low pass filter | any |
Bass volume | B + Knob Z | Change the volume of the bass | any |
Select sequence | C + 1-16 | Select sequence slot for current mode | any |
Play/stop sequence | C + B | Toggle sequence playback for current mode | any |
Record sequence | C + D | Toggle sequence recording for current mode | any |
Chain sequence | C + 1-16 + 1-16 | Chain sequences together | any |
Change samples (with knob) | C + Knob X | Change samples with a knob | any |
Random tunnel | C + Knob Y | Change the probability of tunneling | any |
Quantize | C + Knob Z | Quantize the current playing sequence | any |
Select save | D + 1-16 | Select save slot | any |
Load save | D + B | Load from current save slot | any |
Create save | D + C | Save into the current slot | any |
Random jump | D + Knob X | Change probability of random jump | any |
Random effects | D + Knob Y | Change probability of effects | any |
Random effects banks | D + Knob Z | Select bank for random effects | any |
Kick layering | A + D + 1-16 | Layer kick drums with preloaded samples | any |
Kick layering | 13 + 10 + 7 + 16 | Layer kick drums with preloaded samples | any |
One-shot | 5 + 6 + 5 | Toggle one-shot mode on/off on current sample | any |
MIDI with ittybittymidi | 13 + 10 + 11 + 16 | Toggle MIDI mode for using with ittybittymidi | any |
Momentary FX mode | 1 + 4 + 16 + 13 | Switch between momentary/toggling FX in MASH mode | any |
Change play mode | 7 + 8 + 7 | Change between play modes | any |
Slice playback | 1 + 2 + 1 | Change between the slice playback modes | any |
Sequence lock | 1 + 2 + 3 + 4 | Toggle sequence locking mode | any |
Tempo match | 5 + 6 + 7 + 8 | Toggle tempo matching mode | any |
Retrigger pitching | 9 + 10 + 11 + 12 | Toggle retrigger pitching | any |
Sync out | 13 + 9 + 5 + 1 + 15 + 11 + 7 + 3 | Toggle sync out mode | any |
Randomize sequence | 6 + 7 + 10 + 11 | Toggles randomization of the current sequence. | any |
Random fill | 10 + 11 + 15 + 14 | Toggles random fills at the end of a sequence. | any |
Kicks | 4 + 7 + 10 + 13 | Play only the kicks found in the sample | any |
Snares | 13 + 10 + 7 + 4 | Play only the snares found in the sample | any |
Effect list
Effect | Key | Knob X | Knob Y | Description |
Saturation | 1 | preamp | Adds warmth, depth without distortion, uses double sine | |
Loss | 2 | loss type | loss amount | Simulates analog imperfections, type and amount control |
Fuzz | 3 | preamp | postamp | Adds rich fuzz-like distortion, tunable intensity |
Bitcrush | 4 | bits | frequency | Reduces fidelity to mimic early digital audio |
Timestretch | 5 | Timestretch of the original audio | ||
Delay | 6 | feedback | duration | Delay controls feedback and duration of delay. |
Comb filter | 7 | left spread | right spread | Creates tight comb delay filter |
Repeat | 8 | duration | Loops audio at zero-crossings, overtakes original audio | |
Tighten | 9 | duration | Gates audio, clips ends for tightness | |
Expand | 10 | expanse | dry/wet | Expands the sound. |
Circulate | 11 | rate | depth | Pans audio for immersive spatial experience |
Scratch | 12 | rate | Simulates record scratch, rapidly changes playback speed | |
Lower | 13 | duration | depth | Activates low pass filter, emphasizes lower tones |
Pitch | 14 | duration | depth | Adjusts pitch up or down with depth, duration |
Reverse | 15 | Reverses audio playback and sequence direction | ||
Tapestop | 16 | duration | Drops pitch, halts playback |
Contact
For any questions or feedback, please contact me at zack@infinitedigits.co.
There are some common questions that have been answered here, but if you have any other questions, please feel free to reach out.
Version history
v6.4.3 - August 12, 2025
v6.4.1 - May 15, 2025
zeptocore v6.4.3
© 2023-2024 infinitedigits.co
This document contains 1 file(s) as attachments.
Attachments
This article was automatically generated for PDF files.×
bank 1 sample 1 volume 10 120 bpm
zeptocore
a handmade, handheld sample player.
Blurbs
Buy Demo Quickstart About zeptoboard zeptocade MIDI Modes Uploading firmware Uploading samples Cases
Combos
Mode jump Mode mash Mode bass Tempo Pitch Volume Jump Retrigger Loop sequence Change samples Mute Start/Stop Random sequencer Filter sweep Bass volume Select sequence Play/stop sequence Record sequence Chain sequence Change samples (with knob) Random tunnel Quantize Select save Load save Create save Octave +1 Random jump Random effects Random effects banks Kick layering One-shot MIDI with ittybittymidi Momentary FX mode Change play mode Slice playback Sequence lock Tempo match Retrigger pitching Sync out Randomize sequence Random fill Kicks Snares
Effects
Saturation Loss Fuzz Bitcrush Timestretch Delay Comb filter Repeat Tighten Expand Circulate Scratch Lower Pitch Reverse Tapestop
Questions
Why is it randomly shutting down? How do I change volume? Sometimes I hear a weird glitch? How do I start and stop? How do I change samples? Which SD card can I use? Is a schematic available? How do I know which version I have? How does the zeptocore compare? Why is the web tool not showing waveforms? What is in the battery holder? Why is MIDI not working on Mac OS?
Reference
Combos Effects Contact Version history
Buy
a handmade, handheld sample player.
orders ship every Tuesday.
Stereo playback of 16-bit audio files @ 44.1 kHz sampling rate · SD-card storage for up to 32 gigabytes of samples · Recalls up to 256 audio files (16 banks of 16 tracks) · 16 different effects (saturate, fuzz, delay, reverb, etc…) · Single-cycle wavetable synthesizer · Realtime sequencer with optional quantization · Optional clock sync out · MIDI (in + out) over USB · Built-in 8-ohm speaker · Powered by two AAA batteries or USB-C · Open-source · Handmade in Seattle
demo
this is the zeptocore. a handmade, handheld sample player.
An error occurred.
Unable to execute JavaScript.
An error occurred.
Try watching this video on www.youtube.com, or enable JavaScript if it is disabled in your browser.
Quickstart
Download a one page PDF of this guide for easy reference.
on & off
To power on the device, toggle the switch on the top right to the “up” position. The device comes pre-loaded with several samples. A sample will start playing automatically.
Press keys to jump samples.
Navigate through the samples by pressing any of the 1-16
keys.
Hold a key and press to initiate a retrigger.
Experiment with retriggering samples by pressing and holding one 1-16
key and then pressing a different 1-16
key.
volume & tempo
The A
, B
, C
, and D
keys are used in combination with the knobs to adjust various settings.
Changing the volume.
Adjust the volume by holding the A
key (top left key) and turning Knob Z
located on the right-hand side.
Changing the tempo.
Similarly, modify the tempo by holding the A
key and turning Knob Y
.
banks & samples
There are 16 banks of samples, with each bank capable of holding 16 samples. By default, you are in the first bank and the first sample.
Pressing two keys while holding B
will select a bank and then sample.
To switch to a different bank and select a different sample, follow these steps: first, hold B
, then while holding B
, press 1-16
to choose a bank. Keep the B
key pressed and then press another 1-16
button to select a sample within that bank.
effects
The device powers up in JUMP
mode, where pressing 1-16
allows you to navigate through samples. When in jump mode you can hold A
and press any of the 1-16
to activate an effect.
Example of toggling the `fuzz` effect in `JUMP` mode.
There are 16 different effects to choose from.
effect parameters & probabilities
Each effect can be customized with up to two parameters and features a probability setting. To adjust the effect parameters, enter MASH
mode by pressing (A
+ C
). While in MASH
mode, press and hold the effect you wish to edit. For instance, hold down 2
to modify the LOSS
effect. While holding the effect, use Knob X
or Knob Y
to tweak the parameters for that effect. Detailed information about each parameter can be found in the effect reference section below. For example, loss allows adjustments to “loss type” and “loss amount.” To modify the likelihood of the effect occurring randomly, use Knob Z
.
adding samples & updating firmware
To add samples, power off the device and remove the microSD card. Samples must be pre-processed before uploading them directly to the SD card. You can utilize the online tool for sample processing or opt to download the tool for offline use. Updating the firmware is simple - download a new release and upload it using a USB-C cable. Follow the provided instructions for uploading firmware to complete the process and install the new firmware.
long guide
For any additional information, refer to this guide or utilize the handy reference guide which provides quick access to button combinations and the effect list for easy reference.
Also, check out this video walkthrough for a visual guide on how to use the device:
An error occurred.
Try watching this video on www.youtube.com, or enable JavaScript if it is disabled in your browser.
About
The zeptocore is an open-source handheld device for playing with samples, featuring:
- stereo playback of 16-bit audio files @ 44.1 kHz sampling rate
- sd-card storage for up to 8 gigabytes of samples
- recalls up to 256 audio files (16 banks of 16 tracks)
- 16 different effects (saturate, fuzz, delay, reverb, etc…)
- single-cycle wavetable synthesizer
- realtime sequencer with optional quantization
- clock sync in (or midi sync with ittybittymidi)
- optional clock sync out
- tiny built-in speaker
- powered by two AAA batteries or USB-C
Goals
- Open-source: The source code is publicly available at https://github.com/schollz/_core, allowing anyone to modify this device today or in the future.
- Low learning curve: The device should be enjoyable without the need to read a manual, although reading the manual can enhance the experience.
- Unquantized: By default, the sequencer does not enforce 4/4 time signatures.
Non-Goals
- Similarity: The intention is not for this device to resemble anything else. Some decisions are highly opinionated, but since it is completely open-source, you can modify the device as you wish.
- Audio synthesis: The CPU is already quite taxed by the current system, and I believe that synthesis requires significantly more cycles to sound good.
- Polyphony: This device only supports two voices—a monophonic sample voice and a monophonic bass voice. These voices are smoothly crossfaded, but the CPU limits the possibility of having more polyphony. (Consider syncing more devices together instead!)
friends
if you like this device, you might also like these other small devices made by friends:
- Distropolis Goods
- prismatic spray - a bytebeat adventure synth
- phantasmal force - a micro midi controller.
- Curious Sound Objects
- bitty - an Arduino-compatible device that makes making music fun.
- Denki Oto
- OMX-27 - a compact MIDI controllers and sequencer
- yzhk instruments
- joydrums - as if a beat pad and a loop pedal had a baby.
- Gieskes
- hss2020 - a trimmed down version of the hard soft synth that fits in the hands.
zeptoboard
zeptoboard is the breadboard variant of the zeptocore. It has most of the same functionality, but instead of using the buttons on the handheld device, you can utilize your keyboard and a midi interface (this website). This version requires some knowledge of breadboarding, but it is ideal if you want to develop your ideas based on the firmware.
you can purchase the components directly from me (helps to support my development!):
or directly from another manufacturer like Amazon:
- WeAct Raspberry Pi Pico (others should work too) ($2.50)
- pcm5102 ($9)
- sdio sd card ($3.50)
(note: if you purchase components from me, I am able to provide reasonable amounts of support to help with your project).
pcm5102
when you get these off-the-shelf pcm5102 chips, make sure that you solder the backside to ensure proper audio connections. see this diagram:
zeptocade
the zeptocade offers a seamless plug-and-play experience with its zeptocore, housed in an arcade box featuring twenty led arcade buttons and eleven dedicated knobs. it’s perfect for those seeking a more tactile and colorful interaction with their music.
a handmade, handheld sample player...in an arcade box.
the zeptocade offers a seamless plug-and-play experience with its zeptocore, housed in an arcade box featuring twenty led arcade buttons and eleven dedicated knobs. it’s perfect for those seeking a more tactile and colorful interaction with their music.
zeptocade demo
An error occurred.
Try watching this video on www.youtube.com, or enable JavaScript if it is disabled in your browser.
zeptocade diy guide
An error occurred.
Try watching this video on www.youtube.com, or enable JavaScript if it is disabled in your browser.
zeptocore exchange
Removing and adding the zeptocore into the zeptocade is simple and straightforward. The zeptocore is held in place by four screws, which can be removed using a screwdriver. Once the screws are removed, the zeptocore can be lifted out of the zeptocade. To reinsert the zeptocore, simply place it back into the zeptocade and secure it with the screws.
If you are adding the zeptocore for the first time, make sure to first separate the top chip from the bottom plate - the top chip will sit in the top left of the zeptocade (see image below).
The first step is to remove the top four screws with an M4 hex key or Allen wrench.
Remove the four top screws to allow the plate to be opened.
The second step is to remove the back top corner screw and the standoff in the corner to leave enough room to add/remove the zeptocore.
Remove the back corner screw to remove the standoff.
Now, if adding the zeptocore, simply slide in the zeptocore and slot the knobs into the three holes. Then align the pins and push onto all of the header pins so that it is secure.
If removing the zeptocore, simply pull the zeptocore out of the header pins and slide it out of the zeptocade.
Carefully pull/push the zeptocore onto the header pins to exchange it.
For more information, see the demo video on how to add the zeptocore onto the header pins.
MIDI
MIDI Out
The zeptocore is a MIDI-compliant device that outputs midi when buttons are pressed or knobs are turned.
MIDI In
The zeptocore will automatically interpret MIDI start/stop/continue messages and automatically sync to the MIDI timing of the incoming signal.
Note: Interpretting other messages like button presses is not yet implemented but planned for a future update.
There are two ways to do MIDI input to the zeptocore.
USB MIDI
Simply plug in a USB cable from the zeptocore to a computer. The zeptocore will show up as a MIDI device on the computer. You can then forward MIDI messages from the computer to the zeptocore. For example, you can use midi2midi in a Chrome browser to forward MIDI messages from a MIDI controller to the zeptocore.
Using MIDI you can also easily sync up with Ableton or other DAWs.
An error occurred.
Try watching this video on www.youtube.com, or enable JavaScript if it is disabled in your browser.
Itty Bitty MIDI
I created a device called the itty bitty midi which you can use directly with a MIDI controller to send MIDI messages to the zeptocore. Simply plug in the MIDI controller to the “IN” side of the itty bitty midi and then plug the “OUT” side to the CLOCK
input of the zeptocore. The itty bitty midi will automatically forward MIDI messages to the zeptocore.
Note: By default the zeptocore expects clock signals in the CLOCK
input. You can switch to MIDI
input by pressing the following combination: 13
+10
+11
+16
. More information here.
Combo for activating itty bitty midi MIDI input through the CLOCK in
Computer keyboard
The MIDI layer allows you to communicate with the zeptocore via a browser and computer keyboard. Simply open a browser (Note: Chrome only) to zeptocore.com and plug in the zeptocore to the computer.
If successful, a small screen will pop up that lets you see the current state of the zeptocore and allows you to interact with the zeptocore directly via the keyboard:
Modes
There are three modes that can be activated within the zeptocore:
Jump Mode is the default mode that is activated when turning on the zeptocore or by pressing A + B. In this mode, the 1-16 keys are used to navigate through audio slices, create loops, or retrigger audio samples for dynamic performance effects.
Mash Mode is accessed by pressing A + C and transforms the 1-16 keys into toggles for activating or deactivating effects. This mode adds complexity and textures to a sample.
Bass Mode can be initiated with A + D and assigns bass notes to the 1-16 keys, allowing users to play melodic basslines directly from the device. This mode enables easy integration of speaker-shaking audio elements into the output.
Uploading firmware
Periodically, new firmwares are released with updated effects or improved performance. If you have the tool installed, you can connect your device to your computer and automatically update the firmware. You can also download the latest release directly from this link:
Latest firmware: zeptocore v6.4.3
Instructions
To update your zeptocore to the latest version, follow these steps:
- Connect a USB-C cable to the device and hold the
BOOTSEL
button (located near the USB-C jack). - While holding the
BOOTSEL
button, press theNRST
button (also near the USB-C jack). - After a few seconds, a new drive named
RPI-RP2
should appear on your computer. - Drag and drop the downloaded zeptocore_v6.4.3.uf2 file onto the
RPI-RP2
drive. - Wait momentarily for the drive to disappear, indicating the update is complete, and the device will turn on automatically.
Your browser does not support the video tag.
Congratulations, your zeptocore has been successfully updated to the latest version.
(Note: If using zeptoboard, follow the same instructions but ensure you download the latest zeptoboard_v6.4.3.uf2).
Tool uploader
If you have installed the tool on your computer, launch the tool and click on the top right to upload a new firmware while the device is connected. Download the tool compatible with your operating system from the latest releases.
Firmware development
Follow these instructions if you want to develop the firmware yourself and create custom images.
Windows
Install WSL 2
$ wsl --set-default-version 2
$ wsl --install Ubuntu
Then restart computer and run
$ wsl --install
That should start your system. Then you can follow the Linux directions.
macOS
First install homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
You will need to add Homebrew to your PATH. Do so by running the following two commands:
which brew
will tell you which path your brew is on. then
echo 'eval "$([path to homebrew from command above] shellenv)"' >> /Users/USERNAME/.zprofile (remembering to substitute your username)
eval "$(/opt/homebrew/bin/brew shellenv)"
Now you can install the toolchain:
brew install cmake python
brew tap ArmMbed/homebrew-formulae
brew install gcc-arm-embedded
Now clone the repo and install the Pico SDK
git clone https://github.com/schollz/_core
cd _core
export PICO_SDK_PATH=$(pwd)/pico-sdk
git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk && git checkout 1.5.1 && git submodule update --init && cd ..
Now you should be able to build zeptocore:
make clean zeptocore
Linux
Install the pre-requisites:
sudo apt install cmake gcc-arm-none-eabi \
libnewlib-arm-none-eabi \
libstdc++-arm-none-eabi-newlib \
git python3 g++
sudo -H python3 -m pip install numpy \
matplotlib tqdm icecream librosa click
Clone this repo and install the Pico SDK:
git clone https://github.com/schollz/_core
cd _core
git clone https://github.com/raspberrypi/pico-sdk
cd pico-sdk && git checkout 1.5.1 && git submodule update --init && cd ..
export PICO_SDK_PATH=$(pwd)/pico-sdk
Do a build:
make clean zeptocore
(replace ‘zeptocore’ with ’ectocore’ or ‘zeptoboard’ if you are building a different image)
Uploading samples
Uploading samples is a straightforward process similar to transferring a file onto an SD card. However, as the samples need to be processed to meet the specifications of 44.1 kHz / 16-bit.
The sample tool is required for the sample preprocessing step, before transferring the samples to the SD card. This tool can be accessed online or downloaded to your computer for local use.
Use tool online: zeptocore v6.4.3 (Chrome and Firefox only)
Screenshot of the core tool
Stock samples
The zeptocore arrives with “stock” samples on it. If you ever want to remove them and replace them you can get them here by redownloading and transfering them back to the SD card.
- zeptocore stock samples pack 1 (drums) (393 MB).
- zeptocore stock samples pack 2 (melodic + drums) (853 MB).
Make sure you have the firmware updated to v5+ to use these samples.
Allowable formats
The sample tool will allow a variety of audio formats to be uploaded, including: .wav, .aif (OP-1 kits), .flac, .mp3, .xrni (Renoise splices), and even .wav (morphagene reels).
Transfering samples to SD card
Once you finish using the tool to collect your samples, click the Download .zip button in the lower left corner. This will download a zip file containing all of your samples.
Unzip this .zip file extract all the bankX folders into the SD card. The SD card structure should look like this:
Each of those bankX folders contains all the nessecary audio files. The bank0 folder corresponds to the first bank (they are “0-indexed”). If you want a bank to be in a different slot, you can simply rename it. For example, you could rename bank0 to bank2 and it would be loaded into the third bank slot.
Download to use tool offline:
Windows
Download for Windows: x64
Once downloaded, double click on the executable file to run it.
macOS
To install the tool on macOS, first open a terminal.
Then, if you are on an Intel-based mac install with:
curl -L https://github.com/schollz/_core/releases/download/v6.4.3/core_macos_amd64_v6.4.3 > core_macos
Or, if you are on a M1/M2-based mac install with:
curl -L https://github.com/schollz/_core/releases/download/v6.4.3/core_macos_aarch64_v6.4.3 > core_macos
Then to enable the program do:
chmod +x core_macos
xattrc -c core_macos
Now to run, you can just type
./core_macos
A window should pop up in the browser with the offline version of the tool.
Linux
Download for Linux: x64
After downloading, run it directly from the terminal.
Building from source
Windows
First install Scoop by opening PowerShell terminal and type:
> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
> Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
Then in the Powershell:
> scoop update
> scoop install go zig sox
Now you can build directly from Powershell with:
> cd core
> $env:CGO_ENABLED=1; $env:CC="zig cc"; go build -v -x
Now the upload tool can be run by typing
./core.exe
Linux
Make sure Go is installed and then install air:
> go install github.com/cosmtrek/air@latest
Now you can build the tool using the following:
> git clone https://github.com/schollz/_core
> cd _core/core
> go build
For development, you will need to have a SSL certificate installed on localhost, otherwise the MIDI won’t work.
To get a local SSL server that redirects to the core server, follow these instructions. First install mkcert:
sudo apt install libnss3-tools
git clone https://github.com/FiloSottile/mkcert && cd mkcert
go build -ldflags "-X main.Version=$(git describe --tags)"
go install -v
mkcert -install
mkcert localhost
Then install and run local-ssl-proxy
:
npm install -g local-ssl-proxy
local-ssl-proxy --key localhost-key.pem --cert localhost.pem --source 8000 --target 8101
Now you can run the core
software:
cd core && air
And now the server can be accessed at https://localhost:8000
.
Cases
The zeptocore comes as a PCB aesthetic which I find to be plenty durable and fun, but there are also 3rd party options for casings.
Cases for purchasing
Dich Studios has cases available for purchase, featuring frosted buttons which allow the LEDs to shine through well.
Dich Studios case
3D-printed cases
The case is a 3D-printed housing that fits the zeptocore and provides a more tactile interface.
There is a simple lower case made by @vectorstofinal that is available for download and 3D printing:
www.thingiverse.com/thing:6616773
There is also a case for USB powering only by @pabloantxon that is available for download and 3D printing:
www.thingiverse.com/thing:6648821
Combos
See the quick reference for the short form of this information.
Mode jump
Key combo: A + B from any
mode
There are three possible modes: jump, mash, and bass.
In the JUMP
mode, pressing in the 1-16 will jump slices, create little loops, or do retriggers.
Combo going to JUMP
mode.
Mode mash
Key combo: A + C from any
mode
There are three possible modes: jump, mash, and bass.
In the MASH
mode, pressing in the 1-16 will toggle effects on and off depending on where you press. If you want to have the effects only active while the button is pressed, you can switch to momentary mode by pressing 1+4+13+16.
Combo going to MASH
mode.
Mode bass
Key combo: A + D from any
mode
There are three possible modes: jump, mash, and bass.
In the BASS
mode, pressing in the 1-16 will play bass notes.
Combo going to BASS
mode.
Tempo
Key combo: A + B + B + ... from any
mode
Key combo: A + Knob X from any
mode
The Tempo feature offers three methods for precision tempo control.
First, you can adjust dynamically by holding A and rotating Knob X—with the middle position representing the original BPM, turning fully clockwise for double speed, and turning fully counter-clockwise for half speed.
Combo for changing the tempo with a knob.
Secondly, you can hold A and tap B to manually tap in the tempo, which ranges from 30 to 300 BPM.
Combo for changing the tempo with tapping.
In both methods, the newly set tempo is briefly displayed, providing immediate visual confirmation of adjustments. This feature ensures that users can easily synchronize their audio to the desired pace.
Thirdly, you can press and hold A, and then hold B, and then tap any of the keys, 1-16 to set the tempo to a pre-defined value. This is useful for quickly setting the tempo to a common value.
Pitch
Key combo: A + Knob Y from any
mode
Change the pitch by holding A and turning Knob Y. Pitch can be changed independent of tempo.
Try it: Interesting effects can be obtained by turning the tempo high and turning the pitch down or vice-versa.
Changing pitch.
Volume
Key combo: A + Knob Z from any
mode
Change the volume by holding A and turning Knob Z. Turning the knob fully clockwise may cause clipping for some audio files, while turning it fully counter-clockwise will mute the current audio.
Changing volume.
Jump
Key combo: 1-16 from jump
mode
Key combo: A + 1-16 from mash
mode
In jump
mode, pressing any of the 16 keys will “jump” the sample between slices. The slice position depends on what is set in the Zeptocore tool. The Zeptocore will instantly crossfade from the current position to the beginning of the slice that is jumped to.
Press any of the 16 keys to jump while in JUMP
mode.
Retrigger
Key combo: 1-16 + 1-16 from jump
mode
Select a slice with 1-16 and then press another key on the 1-16 keypad to initiate a retrigger effect on the selected slice. The retrigger rate will depend on the second key press, with 1 being the fastest rate and 16 being the slowest rate.
If you want pitch up/down effects to be applied to the retriggering, you can enable the Retrigger Setting under the effects (A + 15 in jump mode).
Hold any of the 16 keys and then press any of the 16 keys to jump while in JUMP
mode to do a retrigger.
Loop sequence
Key combo: 1-16 + 1-16 + 1-16 from jump
mode
Select a slice with 1-16 and then press another key on the 1-16 keypad. Subsequently, press a third key on the 1-16 keypad. This action will create a loop between the first and second slices pressed.
Hold three keys in JUMP
mode to activate looping.
Change samples
Key combo: B + 1-16 + 1-16 from any
mode
To change samples, you can hold B and press 1-16 to select a bank. While still holding B, press another 1-16 to select the sample. The current sample will be instantly faded out (within 10 ms), and the next sample will load at the position where the current sample is playing.
Pressing two keys while holding B
will select a bank and then sample.
Alternatively, you can use the knobs to change samples - C + X will change to any sample.
Alternatively hold the C
key while turning knobs to change bank/sample individually.
Mute
Key combo: B + C from any
mode
This key combo will mute the audio but playback and clocking will continue.
If you want to stop everything you need to use start/stop.
Combo for toggling mute.
Start/Stop
Key combo: B + D from any
mode
This key combination will mute the audio and stop playback. Pressing it again will restart the audio from the first beat. If you only need to mute the audio without stopping playback, you can use the mute key combination.
Combo for toggling the start and stop.
Random sequencer
Key combo: B + Knob X from any
mode
Turning this knob fully CCW will allow the full sequence to play. Turning the knob fully CW will create a new random sequence in the current sample. Turning the knob in between both ends will adjust the number of steps available to the random sequence.
The random sequence can be re-rolled by turning fully CW. You can also re-roll a single random step by holding B and pressing A.
Filter sweep
Key combo: B + Knob Y from any
mode
Rotating this knob clockwise will increase the cutoff frequency of the low pass filter, allowing higher frequencies to pass through. Rotating it counterclockwise will decrease the cutoff frequency, restricting the passage of higher frequencies.
Combo for doing a filter sweep.
Bass volume
Key combo: B + Knob Z from any
mode
Turning this knob will adjust the volume of the bass. Turn it clockwise to increase the volume. Please note that high volume levels may cause crackling, depending on the headroom in your samples.
Combo for changing the volume of the bass.
Select sequence
Key combo: C + 1-16 from any
mode
Select any one of the 16 slots (1-16) to store a sequence. Each of the three modes (JUMP, MASH, and BASS) has 16 slots available for storing sequences. This is the first step to record a sequence.
Combo for selecting a sequence slot.
Play/stop sequence
Key combo: C + B from any
mode
If a sequence is recorded in this slot, this button will toggle playback for the sequence. If recording, pressing this button will end the recording.
Combo for playing a sequence slot.
Record sequence
Key combo: C + D from any
mode
This key combination will toggle sequence recording. In the JUMP mode, it will record a sequence of jumps. In the MASH mode, it will record a sequence of toggling effects. In the BASS mode, it will record a bass sequence.
Combo for recording/deleting a sequence slot.
Recording a sequence on Zeptocore differs slightly from other devices. The key distinction is that Zeptocore records the time between presses. Therefore, to record a sequence of 4 steps, you will need to make 5 presses. The final press will not be counted as a sequenced step, but it is necessary to determine the duration of the penultimate press.
It is important to note that Zeptocore does not have a concept of time signature. All recorded actions are quantized to 1/96th of a beat, ensuring precise preservation of the recorded press timing. For quantizing the press timing with less resolution, you can utilize the C + Knob Z key combination.
Please be aware that the button combination of C
+ D
also functions to delete a sequence currently stored in the selected slot.
Chain sequence
Key combo: C + 1-16 + 1-16 from any
mode
Sequences can be combined into “chains” of sequences, which are saved as new sequences that can be recalled or further chained into new sequences.
Combo for creating a sequence chain.
To create a sequence chain, follow these steps:
- Press and hold the
C
key (the sequence selector). Lit buttons indicate where sequences are stored, while unlit buttons signify empty slots. - While holding down the
C
key, press an unlit button to select the sequence slot where the new chain sequence will be stored. - While still holding down the
C
key, press the lit buttons with existing sequences in any order to create the sequence chain. - Release the
C
key, and the sequence chain will be automatically generated and saved in the slot chosen in step #2.
If there are no free slots available, you cannot create sequence chains. In such cases, you can delete a sequence by selecting it (C
+ 1-16
) and then deleting it (C
+ D
).
Change samples (with knob)
Key combo: C + Knob X from any
mode
You can change the current sample using this combination.
You can also change banks + samples simultaneously using button presses.
Alternatively hold the C
key while turning knobs to change bank/sample individually.
Random tunnel
Key combo: C + Knob Y from any
mode
“Tunneling” is where the sample will randomly jump to a neighboring sample in the current bank.
Quantize
Key combo: C + Knob Z from any
mode
This knob will increase the quantization for the current playing sequence (JUMP, MASH, or BASS).
Hold the C
key while turning Knob Z
to change quantization.
Select save
Key combo: D + 1-16 from any
mode
Select any one of the 16 slots (1-16) to store a saved copy of the current state.
Load save
Key combo: D + B from any
mode
Load the settings from the current saved slot.
Create save
Key combo: D + C from any
mode
Save the current settings into the selected slot.
Octave +1
Key combo: A + 1-16 from bass
mode
By pressing A in bass mode you will be able to press any of the notes (1-16) and they will be pitched up by one octave.
Random jump
Key combo: D + Knob X from any
mode
Adjust the probability of random jumping by increasing it when turning the knob clockwise.
If you want to maintain sequence lock, you can use the sequence lock combo.
Random effects
Key combo: D + Knob Y from any
mode
Adjust the probability of random effects. The effects that are activated are the ones designated in the current random effects banks. You can change the random effect bank by holding D and turning Knob Z.
Random effects banks
Key combo: D + Knob Z from any
mode
When turning up the random effects, the precise effects that are affected will be determined by the effects selected for the current bank of effects. To change which effects are toggled, simply use the sample tool and adjust the settings and select the effects you’d like.
The effects are randomly activated by holding D and turning Knob Y.
Kick layering
Key combo: A + D + 1-16 from any
mode
Key combo: 13 + 10 + 7 + 16 from any
mode
Note: v6.4.0 and later firmware required for this feature.
This is an experimental mode that lets you choose from 16 different kick samples (keys 1
to 16
). Hold down the A
button and then hold down the D
button and then press one of the 16 keys to layer the selected kick sample with the currently loaded sample. Continue to hold down the A
and D
buttons and press another of the 16 keys to set the volume of the selected kick sample.
You can turn this mode off by holding down the A
button and then holding down the D
button and then pressing the 1
key twice.
This mode can also be toggled using the button combo 13
, 10
, 7
, 16
.
When activated, the selected kick sample will be played at the same time as the detected kick drums in the sample. This can be useful for adding more punch to your kick drums.
Kick detection in web tool
Use the web tool in v4+ to generate information for the placement of kick samples. Determined placements are shown with a small kick drum icon “” placed at the position of each estimated kick.
In this sample, there were four detected locations for kick samples.
Kick detection
Unlike the slices which are manually set or defined by intervals, the kicks (and snares too) are detected using a machine learning approach. The detection is based of an ML model of drums and placement of kicks and snares. An original audio file of drums can be separated into just kick drums:
Original audio:
Kick stem:
The transients in the kick stem are used to calculate the best placement for kick drums.
An error occurred.
Try watching this video on www.youtube.com, or enable JavaScript if it is disabled in your browser.
One-shot
Key combo: 5 + 6 + 5 from any
mode
The Zeptocore tool can be utilized to configure the one-shot mode for each sample. On the device, you can use this combination to toggle the one-shot mode on and off. When in one-shot mode, the sample will stop playing upon reaching the end of the sample (as opposed to default playback mode, detailed further in Play mode).
One-shot mode will show ONESHOT ON
when enabled and ONESHOT OFF
when disabled.
Combo for toggling one-shot mode.
MIDI with ittybittymidi
Key combo: 13 + 10 + 11 + 16 from any
mode
The ittybittymidi is a device that allows you to send MIDI messages directly from another device to the zeptocore through the zeptocore clock input. To use this feature, you must first enable MIDI mode on the zeptocore. To do this, press the following combination: 13+10+11+16. The screen will show MIDI ON
when MIDI mode is enabled.
Combo for activating itty bitty midi MIDI input through the CLOCK in
Momentary FX mode
Key combo: 1 + 4 + 16 + 13 from any
mode
By default, the MASH
mode will let you turn on and off effects by pressing the buttons to toggle them. You can change this toggling behavior to a momentary press behavior by using this combo. Press 1+4+16+13 to switch between momentary and toggling FX in MASH
mode. The screen will show MOMENTARY
when momentary mode is enabled. When in momentary mode, the effects will only be active while the button is pressed.
Combo for switching between activating effects with toggling or with momentary presses in MASH
mode.
Change play mode
Key combo: 7 + 8 + 7 from any
mode
Slice playback
Key combo: 1 + 2 + 1 from any
mode
Sequence lock
Key combo: 1 + 2 + 3 + 4 from any
mode
Sequence lock mode, when activated, will synchronize the sequence to a global clock. This ensures that manipulations to the sequence (such as jumping) will revert back to the intended beat position. Sequence lock mode will show LOCK ON
when enabled and LOCK OFF
when disabled. The sequence lock is enabled by default.
Combo for toggling sequence lock.
Tempo match
Key combo: 5 + 6 + 7 + 8 from any
mode
Tempo matching involves adjusting the playback speed of a sample by a multiplier to align with the ratio between the sample’s BPM (set in the tool) and the BPM of the current tempo in Zeptocore. Typically, this adjustment is configured per sample when loading samples onto Zeptocore, but it can also be adjusted on the fly.
When enabled, the Tempo Match mode will show MATCH ON
, and when disabled, it will display MATCH OFF
.
This setting can be customized on a file-by-file basis using the tool.
Retrigger pitching
Key combo: 9 + 10 + 11 + 12 from any
mode
When this effect is active, it will cause the retriggering to pitch up or down the audio randomly.
Sync out
Key combo: 13 + 9 + 5 + 1 + 15 + 11 + 7 + 3 from any
mode
The Sync Out feature enables Zeptocore to output a sync signal through the left channel of the output. This signal channel can be utilized with external equipment that accepts a clock pulse.
When enabled, the Sync Out mode will show SYNC ON
, and when disabled, it will display SYNC OFF
.
Combo for activating itty bitty midi MIDI input through the CLOCK in
Randomize sequence
Key combo: 6 + 7 + 10 + 11 from any
mode
Activating this combo will create a random sequence that will be used in place of the current sequence (whether is from sequencing or normal playback). (Requires v2.5.+ version of the firmware). Demo video.
If this is activated with random fill, then a new sequence will automatically be generated every 32 beats.
If this is activated, holding down and pressing any of the 1-16 keys will automatically generate a new sequence of that length.
New in v2.7.4: If this is activated, holding down B and pressing A will swap out a random entry in the sequence for another random entry.
Combo for toggling a random sequence.
Random fill
Key combo: 10 + 11 + 15 + 14 from any
mode
Activating this combo will continuously toggle a random fill at the end of a sequence.
Combo for toggling the random fill mode.
An error occurred.
Try watching this video on www.youtube.com, or enable JavaScript if it is disabled in your browser.
Kicks
Key combo: 4 + 7 + 10 + 13 from any
mode
Switching the kick mode will adjust the playback sequence to only play sequences containing kicks.
When enabled, the Kick mode will show KICKS
, and when disabled, it will display NORM
.
Snares
Key combo: 13 + 10 + 7 + 4 from any
mode
Switching to snare mode will adjust the playback sequence to only play sequences containing snares.
When enabled, the Snare mode will show SNARES
, and when disabled, it will display NORM
.
Effects
Each effect can be adjusted using Knob Z to change the probability of occurrence from none (fully counter-clockwise) to often (fully clockwise).
Refer to the quick reference for a concise version of this information.
Saturation
Key combo: 1 from mash
mode (or A + 1 from jump
mode)
Knob X: preamp
The Saturation effect enriches audio by adding warmth and depth using a double sine wave technique. This enhances the overall texture and loudness without introducing distortion.
Loss
Key combo: 2 from mash
mode (or A + 2 from jump
mode)
Knob X / Y: loss type / loss amount
The Loss effect simulates the analog imperfections of a worn tape or faulty radio transmission. It provides controls for adjusting the type and amount of degradation, allowing you to achieve vintage or distressed audio textures.
Fuzz
Key combo: 3 from mash
mode (or A + 3 from jump
mode)
Knob X / Y: preamp / postamp
The Fuzz effect adds a rich, fuzz-like distortion to audio. It includes preamp and postamp knobs for finely tuning the intensity before and after the effect is applied.
Bitcrush
Key combo: 4 from mash
mode (or A + 4 from jump
mode)
Knob X / Y: bits / frequency
The Bitcrush effect aggressively degrades audio fidelity by reducing the bit depth to 2 bits and sampling frequency to 4 kHz. This mimics the characteristics of early digital audio gear.
Timestretch
Key combo: 5 from mash
mode (or A + 5 from jump
mode)
The Timestretch effect significantly slows down audio playback by a factor of approximately 8x without changing its pitch.
Delay
Key combo: 6 from mash
mode (or A + 6 from jump
mode)
Knob X / Y: feedback / duration
The Delay effect introduces a feedback delay mechanism where the knobs can finely adjust feedback intensity and delay duration. This feature allows for extensive creative flexibility, which can extend into overclipping for intense audio textures.
Comb filter
Key combo: 7 from mash
mode (or A + 7 from jump
mode)
Knob X / Y: left spread / right spread
The comb filter introduces a very short delay to the audio chain, creating a metallic resonating sound when activated.
Repeat
Key combo: 8 from mash
mode (or A + 8 from jump
mode)
Knob X: duration
The Repeat effect uses zero-crossings to loop audio segments that best match the requested duration. This effect is distinct from delay as it overtakes the audio rather than adding to it, allowing for speeds up to the audio rate.
Tighten
Key combo: 9 from mash
mode (or A + 9 from jump
mode)
Knob X: duration
The Tighten effect uses a gate to cut off the audio towards the end of a step, based on the duration setting. This clipping of the ends helps create a more defined and tighter sound profile.
The gate effect is a tool used in audio engineering to control the volume level of a signal. It works by allowing or blocking the passage of audio based on a set threshold. This can help eliminate unwanted noise or shape the dynamics of a sound.
Expand
Key combo: 10 from mash
mode (or A + 10 from jump
mode)
Knob X / Y: expanse / dry/wet
The Expand effect will create a reverberation effect on the sound. Please note that this effect consumes more CPU and memory than other effects. Using combinations of effects may create instabilities in the system.
Circulate
Key combo: 11 from mash
mode (or A + 11 from jump
mode)
Knob X / Y: rate / depth
The Circulate effect enhances the audio experience by dynamically circulating sound between the left and right channels. It offers adjustable rate and depth settings for creating immersive spatial movement.
Scratch
Key combo: 12 from mash
mode (or A + 12 from jump
mode)
Knob X: rate
The Scratch effect replicates a record scratch by rapidly altering the playback speed, and includes a rate knob to adjust the frequency of speed changes.
Lower
Key combo: 13 from mash
mode (or A + 13 from jump
mode)
Knob X / Y: duration / depth
The Lower effect activates a low-pass filter, gradually filtering out high frequencies to emphasize lower tones. It offers controls for adjusting the duration and depth of the transition.
Pitch
Key combo: 14 from mash
mode (or A + 14 from jump
mode)
Knob X / Y: duration / depth
This effect will alter the pitch without affecting the tempo, allowing beats to be split or doubled when the speed is halved or doubled, respectively.
Reverse
Key combo: 15 from mash
mode (or A + 15 from jump
mode)
This will reverse the audio and change the playback direction of the sequence to play it in reverse. If you are using the sequence, it will only reverse the audio.
Tapestop
Key combo: 16 from mash
mode (or A + 16 from jump
mode)
Knob X: duration
The Tapestop effect simulates the sound of a tape machine being stopped by gradually decreasing the pitch and halting audio playback. It includes a control for adjusting the duration of the effect.
Questions
Why is it randomly shutting down?
I apologize for any inconvenience. When encountering issues due to low battery levels, I recommend first replacing both batteries with fresh ones. Try powering the device using USB-C to check if it resolves the issue. I also suggest using high-quality alkaline batteries instead of carbon zinc ones, as alkaline batteries maintain voltage better over time and are less likely to cause operational problems.
To adjust the volume, hold A and turn Knob Z. For additional details, refer to this section.
Sometimes I hear a weird glitch?
I apologize for any issues you may be experiencing. The audio drops are likely related to the SD cards being used. Not all SD cards are equal, as some may have high latencies that can cause audio disruptions. Refer to the answer to this question to identify the best SD card for optimal performance. When glitches occur, the zeptocore can typically recover, producing varying glitch sounds. However, in rare cases, a restart may be necessary. The provided SD card should be suitable, but if you encounter ongoing issues, please inform me.
You can easily start and stop by holding B and then pressing D. If the audio is playing, it will stop, and if it’s already stopped, it will start playing from the beginning. Additional details can be found in this section.
To change samples using the buttons, follow these steps: hold B and press 1-16 to choose a bank. While still holding B, press another 1-16 to select the sample.
Alternatively, you can change the sample by selecting a bank with a knob or by selecting a sample with a knob. For more information, refer to changing banks with a knob and changing samples with a knob.
Alternatively hold the C
key while turning knobs to change bank/sample individually.
If you purchased the zeptocore from me, I have made efforts to supply the best SD card available.
Please note that not all SD cards are equal. Terms like “high-speed,” “A1,” or “U3” on the card do not necessarily indicate its actual speed performance.
Below is a list of known good and bad cards:
Known bad cards
Do not use these cards! They may appear to work, but they can cause spurious glitches.
- Lexar brand
- Kootion brand
- Sandisk Ultra
- Kingston brand
- 5% of JUANWE cards
Known good cards
- Gigastone 16GB + 32GB
- SP Elite
- SanDisk Extreme
- Samsung EVO
- PNY Elite
- MicroCenter
The schematics are open-source - you are welcome to utilize them to customize the device according to your preferences. If you intend to produce boards based on my schematics, I kindly ask for your financial support to help sustain the development of future devices.
How do I know which version I have?
When you power on the device, you can quickly check the current version by observing the flashing “Z” along with a version number such as “1.0.0,” indicating version 1.0.0.
How does the zeptocore compare?
[TABLE]
Why is the web tool not showing waveforms?
The web tool only supports Chrome. If you are using a different browser, you may experience issues with the waveform display.
What is in the battery holder?
The residue is the battery holder is dried expoy glue. The battery holder is glued to the PCB to ensure that it doesn’t move around when you insert or remove batteries. The glue is a non-conductive epoxy that is safe to touch.
Dried expoy underneath the batteries to hold the battery pack.
Why is MIDI not working on Mac OS?
The zeptocore is a class-compliant MIDI device, which means it should work with any operating system that supports MIDI. However, some users have reported issues with Mac OS. Here are some common troubleshooting steps:
- Check the cable: Make sure the MIDI cable is securely connected to both the zeptocore and your Mac using a USB A connector. Currently it seems that MIDI communication will not work through a Thunderbolt bus or plugged via a USB-C to USB-C cable.
- Check the MIDI settings: Go to
System Settings > Privacy & Security
and click the the pop-menu next to “Allow accessories to connect
” and choose “Automatically When Unlocked
”.
Reference
Combo list
Action | Combo | Description | Mode |
Jump | 1-16 | Crossfade into new slice position | jump |
Jump | A + 1-16 | Crossfade into new slice position | mash |
Retrigger | 1-16 + 1-16 | Creates retrig ramp, speed depends on second press | jump |
Loop sequence | 1-16 + 1-16 + 1-16 | Loop a sequence between first and second press | jump |
Octave +1 | A + 1-16 | Increase octave in the bass mode | bass |
Mode jump | A + B | Switches into jump mode |
any |
Mode mash | A + C | Switches into mash mode |
any |
Mode bass | A + D | Switches into bass mode |
any |
Tempo | A + B + B + ... | Sets new tempo based on the cadence of B presses | any |
Tempo | A + Knob X | Sets new tempo based on the position of knob X | any |
Pitch | A + Knob Y | Change pitch | any |
Volume | A + Knob Z | Change volume | any |
Change samples | B + 1-16 + 1-16 | The first 1-16 loads the bank, and then the next is the sample | any |
Mute | B + C | Mutes playback but does not stop playback | any |
Start/Stop | B + D | Toggles the playback to start or stop | any |
Random sequencer | B + Knob X | Create random seqeuences of different lengths | any |
Filter sweep | B + Knob Y | Sweep the low pass filter | any |
Bass volume | B + Knob Z | Change the volume of the bass | any |
Select sequence | C + 1-16 | Select sequence slot for current mode | any |
Play/stop sequence | C + B | Toggle sequence playback for current mode | any |
Record sequence | C + D | Toggle sequence recording for current mode | any |
Chain sequence | C + 1-16 + 1-16 | Chain sequences together | any |
Change samples (with knob) | C + Knob X | Change samples with a knob | any |
Random tunnel | C + Knob Y | Change the probability of tunneling | any |
Quantize | C + Knob Z | Quantize the current playing sequence | any |
Select save | D + 1-16 | Select save slot | any |
Load save | D + B | Load from current save slot | any |
Create save | D + C | Save into the current slot | any |
Random jump | D + Knob X | Change probability of random jump | any |
Random effects | D + Knob Y | Change probability of effects | any |
Random effects banks | D + Knob Z | Select bank for random effects | any |
Kick layering | A + D + 1-16 | Layer kick drums with preloaded samples | any |
Kick layering | 13 + 10 + 7 + 16 | Layer kick drums with preloaded samples | any |
One-shot | 5 + 6 + 5 | Toggle one-shot mode on/off on current sample | any |
MIDI with ittybittymidi | 13 + 10 + 11 + 16 | Toggle MIDI mode for using with ittybittymidi | any |
Momentary FX mode | 1 + 4 + 16 + 13 | Switch between momentary/toggling FX in MASH mode | any |
Change play mode | 7 + 8 + 7 | Change between play modes | any |
Slice playback | 1 + 2 + 1 | Change between the slice playback modes | any |
Sequence lock | 1 + 2 + 3 + 4 | Toggle sequence locking mode | any |
Tempo match | 5 + 6 + 7 + 8 | Toggle tempo matching mode | any |
Retrigger pitching | 9 + 10 + 11 + 12 | Toggle retrigger pitching | any |
Sync out | 13 + 9 + 5 + 1 + 15 + 11 + 7 + 3 | Toggle sync out mode | any |
Randomize sequence | 6 + 7 + 10 + 11 | Toggles randomization of the current sequence. | any |
Random fill | 10 + 11 + 15 + 14 | Toggles random fills at the end of a sequence. | any |
Kicks | 4 + 7 + 10 + 13 | Play only the kicks found in the sample | any |
Snares | 13 + 10 + 7 + 4 | Play only the snares found in the sample | any |
Effect list
Effect | Key | Knob X | Knob Y | Description |
Saturation | 1 | preamp | Adds warmth, depth without distortion, uses double sine | |
Loss | 2 | loss type | loss amount | Simulates analog imperfections, type and amount control |
Fuzz | 3 | preamp | postamp | Adds rich fuzz-like distortion, tunable intensity |
Bitcrush | 4 | bits | frequency | Reduces fidelity to mimic early digital audio |
Timestretch | 5 | Timestretch of the original audio | ||
Delay | 6 | feedback | duration | Delay controls feedback and duration of delay. |
Comb filter | 7 | left spread | right spread | Creates tight comb delay filter |
Repeat | 8 | duration | Loops audio at zero-crossings, overtakes original audio | |
Tighten | 9 | duration | Gates audio, clips ends for tightness | |
Expand | 10 | expanse | dry/wet | Expands the sound. |
Circulate | 11 | rate | depth | Pans audio for immersive spatial experience |
Scratch | 12 | rate | Simulates record scratch, rapidly changes playback speed | |
Lower | 13 | duration | depth | Activates low pass filter, emphasizes lower tones |
Pitch | 14 | duration | depth | Adjusts pitch up or down with depth, duration |
Reverse | 15 | Reverses audio playback and sequence direction | ||
Tapestop | 16 | duration | Drops pitch, halts playback |
Contact
For any questions or feedback, please contact me at zack@infinitedigits.co.
There are some common questions that have been answered here, but if you have any other questions, please feel free to reach out.
Version history
v6.4.3 - August 12, 2025
v6.4.1 - May 15, 2025
zeptocore v6.4.3
© 2023-2024 infinitedigits.co