Infinite Digits

More from the shop

Back to Store

zeptocore kit

A DIY handmade, handheld sample player.

Choose a variant
DIY In Stock Physical hardware Secure Shopify checkout

Details

zeptocore is an open-source handheld device for playing with samples, designed as a simple, tactile, and immediate tool for shaping sound in real time. it plays stereo 16-bit audio at 44.1 kHz from an sd card, organizing up to 256 samples across 16 banks, and pairs this with a set of built-in effects, a realtime sequencer, and a single-cycle wavetable bass voice. the interface is intentionally minimal and hands-on, encouraging experimentation through modes like jump, mash, and bass, while supporting midi, clock sync, and usb connectivity. powered by two aaa batteries or usb-c and built with a small onboard speaker, it’s meant to be portable, hackable, and fun—something you can pick up and play immediately, but also modify and extend as you like.

Specifications

  • manage audio with zeptocore.com
  • mono or stereo playback of 16-bit (internal 32-bit) audio files @ 44.1 kHz sampling rate
  • SD-card storage for gigabytes of samples, recalling up to 256 audio files across 16 banks
  • powered by two AAA batteries for up to 4 hours or powered by USB-C
  • tempo-synced with a selectable BPM between 60 and 300
  • loaded with 16 real-time effects like timestretching, delay, distortion, fuzz, tapestop, resonant filters, etc.
  • realtime sequencer with optional quantization and performance-oriented controls
  • MIDI (in + out) over USB for syncing with DAWs and external gear
  • sync-compatible with any gear that has a clock input/output signal
  • built-in speaker for portable playback
  • open-source, wonderfully hackable (GitHub)

Documentation

Zeptocore Guide

The complete guide to the handmade, open-source Zeptocore sample player. This is the shared manual for the assembled instrument and DIY kit, consolidated from the original zeptocore.com documentation.

Demo and overview

Zeptocore plays stereo 16-bit audio at 44.1 kHz from a microSD card, then lets you slice, retrigger, sequence, and process it immediately from the keypad.

Zeptocore handheld sample player
Handmade handheld sampler, sequencer, and effects instrument.

Specifications and highlights

  • AudioMono or stereo 16-bit files with internal 32-bit processing at 44.1 kHz.
  • Sample libraryUp to 256 files arranged as 16 banks of 16 samples on microSD storage up to 32 GB.
  • VoicesOne stereo sample voice and one monophonic bass voice with smooth crossfading.
  • Effects16 realtime effects plus per-effect parameters and probability.
  • SequencingRealtime, optionally quantized sequencing without a required time signature.
  • ConnectivityClock sync input, optional sync output, and class-compliant USB MIDI input/output.
  • PowerTwo AAA batteries for up to four hours, or USB-C power.
  • Portable soundA built-in 8-ohm speaker for immediate standalone playback.

Goals

  • Open source: firmware and schematics remain available for study and modification.
  • Low learning curve: the instrument is playable immediately, while the manual reveals deeper behavior.
  • Unquantized by default: sequences are not forced into a 4/4 grid.

Intentional limits

  • Zeptocore is opinionated rather than designed to imitate another sampler.
  • Its synthesis is intentionally focused: a monophonic wavetable bass voice complements the sample voice.
  • Two carefully crossfaded voices fit the RP2040 processing budget; sync multiple devices for more layers.

Quick start

Download the one-page quick-start PDF, or follow the essentials below.

  1. Move the top-right power switch up. A preloaded sample starts automatically.
  2. Press keys 1–16 to jump between slices.
  3. Hold one slice key and press another to retrigger; the second key sets the rate.
  4. Hold A and turn Knob Z for volume, Knob X for tempo, or Knob Y for pitch.
  5. Hold B, press a bank key, then a sample key to choose among 16 × 16 files.
  6. In Jump mode, hold A and press 1–16 to toggle an effect.
Keys 1 through 16 jump between slices
Jump between slices.
Hold one slice key and press another to retrigger
Retrigger a slice.
Hold B and press bank and sample keys
Choose a bank and sample.

Modes, controls, sequences, and saves

Jump makes the keypad perform slices, Mash makes it control effects, and Bass makes it play notes. Hold an effect key in Mash mode and turn Knobs X/Y to edit its parameters or Knob Z to change its probability.

Zeptocore button and knob reference diagram
Button and knob names used throughout this guide.
ActionCombinationModeBehavior
Jump mode A + B Any Return to the default performance mode. Keys 1–16 jump between slices, create short loops, or retrigger audio.
Mash mode A + C Any Turn keys 1–16 into effect toggles. Momentary FX mode can make an effect active only while its key is held.
Bass mode A + D Any Turn keys 1–16 into notes for the monophonic bass voice.
Jump 1–16; or A + 1–16 in Mash mode Jump / Mash Crossfade immediately to the selected slice. Slice positions are prepared in the Zeptocore sample tool.
Jump page lock D Jump Cycle the jump keys through the current, first, second, and third slice pages. The C and D LEDs show the selected page.
Retrigger 1–16 + 1–16 Jump Hold a slice key, then press a second key to retrigger it. Key 1 is the fastest rate and key 16 the slowest.
Loop slices 1–16 + 1–16 + 1–16 Jump Hold three slice keys to loop playback between the selected slice positions.
Octave +1 A + 1–16 Bass Play the selected bass note one octave higher.
Tempo A + Knob X; A + repeated B taps; A + B + 1–16 Any Turn for half-to-double the sample BPM, tap a tempo from 30–300 BPM, or select a predefined tempo with keys 1–16.
Pitch A + Knob Y Any Change pitch independently of tempo. Opposing high-tempo/low-pitch settings can create especially unusual textures.
Volume A + Knob Z Any Adjust output volume. Fully counter-clockwise mutes; very high settings can clip some source files.
Change bank and sample B + 1–16 + 1–16 Any While holding B, choose a bank and then a sample. The old sample fades out in about 10 ms and the new sample starts at the corresponding position.
Change sample with a knob C + Knob X Any Browse and load samples with the knob instead of the two-key bank/sample selection.
Filter sweep B + Knob Y Any Sweep the filter cutoff. Turn clockwise to admit more high frequencies and counter-clockwise to restrict them.
Realtime stretch B + Knob Z Any The low range bypasses stretching; continue clockwise to increase the realtime stretch amount.
Random sequencer B + Knob X Any Choose how many steps a random sequence may use. Fully clockwise rerolls it; B + A rerolls one random step.
Mute B + C Any Mute audio while playback and clocking continue.
Start / stop B + D Any Stop audio and playback, or restart playback from the first beat.
Select sequence C + 1–16 Any Select one of 16 sequence slots for the current mode. Jump, Mash, and Bass each have their own 16 slots.
Play / stop sequence C + B Any Toggle playback of the selected sequence; while recording, this ends the recording.
Record / delete sequence C + D Any Record actions and the time between them at 1/96-beat resolution. Make one final press to set the last step duration. The same combo deletes an existing selected sequence.
Chain sequences C + empty slot + filled slots Any Hold C, choose an empty destination, then press existing sequence slots in order. Release C to create and save the chain.
Quantize C + Knob Z Any Increase quantization for the currently playing Jump, Mash, or Bass sequence.
Random tunnel C + Knob Y Any Adjust the chance of tunneling, where playback jumps to a neighboring sample in the current bank.
Select save D + 1–16 Any Select one of 16 slots for a saved device state.
Load save D + B Any Load settings from the selected save slot.
Create save D + C Any Store the current settings in the selected save slot.
Random jump D + Knob X Any Adjust the probability of random slice jumps. Sequence lock can keep playback aligned to its intended beat.
Random effects D + Knob Y Any Adjust the probability that effects from the selected random-effects bank will activate.
Random-effects bank D + Knob Z Any Select which prepared bank of effects is used by random effects. Configure the bank contents in the sample tool.
One-shot 5 + 6 + 5 Any Toggle one-shot playback for the current sample so it stops at the end instead of looping.
Change play mode 7 + 8 + 7 Any Cycle the current sample between its available playback modes.
Slice playback 1 + 2 + 1 Any Toggle the current sample's slice-playback behavior.
Tempo match 5 + 6 + 7 + 8 Any Match playback speed using the ratio between the sample BPM saved by the tool and Zeptocore's current tempo.
Sequence lock 1 + 2 + 3 + 4 Any Keep a sequence synchronized to the global clock so performance jumps return to the intended beat position. Enabled by default.
Randomize sequence 6 + 7 + 10 + 11 Any Replace normal playback with a generated sequence. Holding a length key rerolls it; with Random Fill, a new sequence appears every 32 beats.
Random fill 10 + 11 + 15 + 14 Any Toggle an automatically generated fill at the end of a sequence.
Momentary FX mode 1 + 4 + 16 + 13 Any Switch Mash mode between latched effect toggles and effects that remain active only while held.
MIDI through CLOCK 13 + 10 + 11 + 16 Any Toggle MIDI input through the CLOCK jack for use with ittybittymidi. The display confirms MIDI ON.
Sync out 13 + 9 + 5 + 1 + 15 + 11 + 7 + 3 Any Toggle a clock pulse on the left output channel for external sync. The display confirms SYNC ON or SYNC OFF.
Retrigger pitching 9 + 10 + 11 + 12 Any Toggle random upward or downward pitch movement during retriggers.
Retrigger volume ramps 13 + 14 + 15 + 16 Any Toggle volume ramps during retriggers. This behavior is enabled by default.
Kick layering A + D + 1–16; or 13 + 10 + 7 + 16 Any Firmware 6.4.0 or later: choose and level one of 16 built-in kicks, then layer it at kick positions detected in the prepared sample.
Kicks only 4 + 7 + 10 + 13 Any Restrict sequence playback to detected kick positions. The display changes between KICKS and NORM.
Snares only 13 + 10 + 7 + 4 Any Restrict sequence playback to detected snare positions. The display changes between SNARES and NORM.
Visual control diagrams
A plus B selects Jump mode
Jump mode
A plus C selects Mash mode
Mash mode
A plus D selects Bass mode
Bass mode
A plus Knob Z adjusts volume
Volume
A plus Knob X adjusts tempo
Tempo
A plus repeated B presses taps tempo
Tap tempo
A plus Knob Y adjusts pitch
Pitch
B plus Knob Y sweeps the filter
Filter sweep
B plus Knob Z adjusts realtime stretch
Realtime stretch
Knob combination for selecting samples
Sample selection
C plus Knob Z adjusts quantization
Quantize
B plus C toggles mute
Mute
B plus D starts or stops playback
Start / stop
C plus a numbered key selects a sequence
Select sequence
C plus D records or deletes a sequence
Record sequence
C plus B plays or stops a sequence
Play sequence
C plus sequence slots creates a sequence chain
Chain sequences
Keys 1, 2, 3, and 4 toggle sequence lock
Sequence lock
Keys 6, 7, 10, and 11 randomize a sequence
Random sequence
Keys 10, 11, 15, and 14 toggle random fills
Random fill
Keys 1, 4, 16, and 13 toggle momentary effects
Momentary FX
One-shot mode button combination
One-shot
Sync output button combination
Sync out
CLOCK input MIDI mode button combination
MIDI through CLOCK

The 16 effects

From Jump mode, hold A and press the numbered effect key. From Mash mode, press the key directly. While holding that key, turn Knobs X/Y for parameters and Knob Z for activation probability.

Zeptocore effects button reference
Effect positions on the 4 × 4 keypad.
EffectKeyKnob XKnob YSound
Saturation1PreampAdds warmth, depth, and loudness with a double-sine shaping technique.
Loss2Loss typeLoss amountSimulates worn tape or faulty radio transmission with controllable character and degradation.
Fuzz3PreampPostampAdds rich fuzz-like distortion with gain control before and after the effect.
Bitcrush4BitsFrequencyReduces bit depth and sample frequency for early-digital textures.
Timestretch5Slows playback by roughly eight times without changing pitch.
Delay6FeedbackDurationAdds a feedback delay that can be driven into intense clipped textures.
Comb filter7Left spreadRight spreadUses a very short delay to create metallic resonance and stereo movement.
Repeat8DurationLoops audio around suitable zero crossings and can reach audio-rate repetition.
Tighten9DurationGates the end of each step for a shorter, more defined sound.
Expand10ExpanseDry / wetCreates a reverberant expansion; combining it with many effects can tax the processor.
Circulate11RateDepthMoves audio dynamically between the left and right channels.
Scratch12RateSimulates a record scratch by changing playback speed rapidly.
Lower13DurationDepthSweeps a low-pass filter to emphasize lower frequencies.
Pitch14DurationDepthMoves pitch independently of tempo, allowing split or doubled beats at speed extremes.
Reverse15Reverses audio playback and, outside a running sequence, its playback direction.
Tapestop16DurationDrops pitch gradually and halts playback like a stopped tape machine.

Preparing and uploading samples

Samples must be prepared as 44.1 kHz, 16-bit audio. Use the online Zeptocore sample tool in Chrome or Firefox, or download an offline build from the current _core release. The importer accepts WAV, AIFF/OP-1 kits, FLAC, MP3, Renoise XRNI splices, and Morphagene WAV reels.

Zeptocore sample preparation tool interface
Prepare, slice, tempo-tag, and arrange samples.
Zeptocore SD card bank folder structure
Copy the generated bank0–bank15 folders to the SD card.

Transfer to the SD card

  1. Finish arranging samples, then choose Download .zip in the tool.
  2. Unzip the download and copy its bankX folders to the microSD card.
  3. Banks are zero-indexed: bank0 is the first bank. Rename a folder to move it to another slot.

Restore the factory library with the drum sample pack (393 MB) or melodic + drum pack (853 MB). These packs require firmware v5 or newer.

Offline sample tool and source build

Release assets provide Windows x64, macOS Intel/Apple Silicon, and Linux x64 builds. On macOS, make the downloaded file executable and clear its quarantine metadata before running it:

chmod +x core_macos
xattr -c core_macos
./core_macos

To build the tool, install Go, clone the repository, and run:

cd _core/core
go build

Kick detection and layering

The v4+ sample tool estimates kick and snare positions with a drum-separation model. Unlike interval or manually placed slices, those transients drive the Kicks/Snares playback modes and firmware 6.4+ kick-layering feature.

Four detected kick positions in the Zeptocore sample tool
Estimated kick positions shown in the sample tool.
Original drum loop
Separated kick stem

MIDI, clock, and computer keyboard

Zeptocore is class-compliant USB MIDI. It sends button, knob, timing-clock, start, and stop data, and follows incoming start/stop/continue and timing clock. Connect it to a computer for DAW sync or route a controller with midi2midi. An ittybittymidi can feed MIDI through the CLOCK jack after enabling the CLOCK-input MIDI combo.

FunctionSentReceivedNotes
Basic channel1–611–3: Jump/Mash/Bass buttons; 4–6: their sequencers
Note On / OffYesNoNotes 0–31; velocity 127/0
CC 7YesUSB*Volume
CC 12 / 13 / 14YesNoKnobs X / Y / Z
CC 15 / 16YesUSB*Tempo / pitch
CC 18YesUSB*Random sequence
CC 19 / 20YesUSB*DJ filter / realtime stretch
CC 21 / 22YesUSB*Sample select / random tunnel
CC 23 / 24YesUSB*Sequencer quantize / random jump
CC 25 / 26YesUSB*Random-effects probability / random-effects bank
System ExclusiveYesNoUSB status and debug text
Timing ClockYesYes24 pulses per quarter note
Start / Continue / StopStart, StopAllMIDI realtime transport

* These CC messages are received over USB MIDI only. The CLOCK input accepts MIDI after MIDI mode is enabled.

Computer keyboard

Connect Zeptocore over USB and open the sample tool in Chrome. Its MIDI layer shows the current bank, sample, volume, and tempo and lets a computer keyboard control the instrument.

Zeptocore browser MIDI and computer keyboard interface
Browser keyboard and live state display.

Firmware and updates

Use the store’s zeptocore kit firmware selector for the current normal-, low-, or ultra-low-latency build. Release notes, desktop tools, Zeptoboard firmware, and source archives are on the _core releases page.

Upload a UF2

  1. Connect USB-C while holding the BOOTSEL button beside the USB-C jack.
  2. Continue holding BOOTSEL and press the nearby NRST button.
  3. Wait for a drive named RPI-RP2 to appear.
  4. Drag the downloaded zeptocore_vX.Y.Z.uf2 onto that drive.
  5. When the drive disappears, the update is complete and Zeptocore restarts.
Build firmware from source

Install CMake, Python, Git, a C++ compiler, and the Arm GNU embedded toolchain. The repository Makefile retrieves the Pico SDK 2.2.0 dependencies and builds the current target:

git clone https://github.com/schollz/_core
cd _core
make zeptocore

Use make zeptoboard, make ectocore, or make ezeptocore for another hardware target. Windows users can run the Linux workflow through WSL 2.

DIY build, schematic, and source

Firmware and hardware source live in the canonical _core repository. The schematic is open source and may be adapted; commercial derivative boards should help support continued development and must not use the Infinite Digits or Ectocore trademarks.

Download the Zeptocore v28 schematic PDF.

Zeptocore v28 hardware schematic Open the full schematic

Cases, Zeptoboard, and Zeptocade

Cases

The exposed-PCB form is durable by design, but several community enclosures are available.

Dich Studios frosted Zeptocore case
Dich Studios frosted case.
Community lower case for Zeptocore
Printable lower case by vectorstofinal.
USB-powered printable Zeptocore case
USB-powered printable case by pabloantxon.

Zeptoboard

Zeptoboard is the breadboard version of Zeptocore. It uses a browser keyboard/MIDI interface in place of the handheld keypad and is intended for learning and firmware experimentation. Build it with a Raspberry Pi Pico-compatible board, PCM5102 DAC, and SDIO microSD breakout using the source and Zeptoboard firmware. On common PCM5102 boards, solder the rear configuration pads as shown so the audio connections are correct.

Zeptoboard breadboard wiring and component layout
Zeptoboard breadboard layout.
PCM5102 solder configuration for Zeptoboard
PCM5102 rear-pad configuration.

Zeptocade

Zeptocade is the open-source arcade enclosure: 20 illuminated buttons and 11 dedicated knobs provide a larger tactile interface for an installed Zeptocore. Its BOM, Gerbers, schematic, and source remain in the Zeptocade project archive.

Zeptocade arcade enclosure with Zeptocore installed
The open-source Zeptocade enclosure and control surface.
Install or remove Zeptocore in a Zeptocade
  1. Separate the Zeptocore top board from its bottom plate.
  2. Use an M4 hex key to remove the four top screws and open the Zeptocade.
  3. Remove the rear top-corner screw and standoff to make room.
  4. Slide Zeptocore into the top-left position, align its knobs with the three holes, and press it evenly onto every header pin. Reverse these steps to remove it.
Opening the Zeptocade enclosure
Remove the top screws.
Removing the Zeptocade corner standoff
Remove the corner standoff.
Installing Zeptocore on the Zeptocade header pins
Align and seat all headers.

Troubleshooting and common questions

Why does Zeptocore shut down unexpectedly?

Replace both batteries with fresh, high-quality alkaline cells, then test on USB-C power. Carbon-zinc cells lose usable voltage sooner and can cause unstable operation.

Why do I hear occasional glitches or dropouts?

MicroSD latency varies greatly, regardless of A1/U3 or “high speed” labels. Known good families include Gigastone 16/32 GB, SP Elite, SanDisk Extreme, Samsung EVO, PNY Elite, and MicroCenter. Avoid Lexar, Kootion, SanDisk Ultra, Kingston, and unreliable cards. Zeptocore usually recovers from a delayed read, but a severe stall can require a restart.

Why does the sample tool not show waveforms?

Use a current Chrome browser for the most reliable waveform and Web MIDI support. Firefox can prepare samples, but does not provide the same MIDI integration.

Why is USB MIDI not working on macOS?

Use a USB-A data path or adapter rather than a direct USB-C/Thunderbolt bus if the device is not detected. In System Settings → Privacy & Security, set Allow accessories to connect to Automatically When Unlocked.

How do I identify my firmware version?

At power-on, the display flashes a Z followed by the installed version number.

What is the residue beneath the battery holder?

It is cured, non-conductive epoxy used to keep the holder from moving when batteries are inserted or removed.

Epoxy securing the Zeptocore battery holder
How does Zeptocore compare with similar samplers?
FeatureZeptocorePikocorePO-33 K.O.Volca Sample
Open sourceYesYesNoNo
Voices1 stereo + 1 mono1 mono4 mono8 mono
Audio16-bit / 44.1 kHz8-bit / 33 kHz8-bit / 23 kHz12-bit / 32 kHz
Sample limit25610016100
Storage32 GB16 MB1 MB4 MB
Record audioNoNoYesNo
SyncIn / outIn / outIn / outIn / out
MIDIIn / outInNoIn

For help not covered here, email zack@infinitedigits.co or join the community Discord.

Friends and further instruments

If Zeptocore appeals to you, these independent instruments share a similarly compact, exploratory spirit:

Customer feedback Reviews 4.8 / 5 4 reviews

oldradioMike

Honestly one of the most rewarding builds I’ve done. You finish with an actual playable sampler, not something that just sits on the shelf looking like a science project :)

J. Carter

I bought this mostly because the whole platform is open source, and that ended up being the best part. Build the instrument, change the firmware, make it behave differently... exactly what DIY gear should be.

rachel77

great little DIY project. took me a bit to get everything dialed in but once it booted up and started chopping my own samples... very satisfying

Ben T.

Building it yourself makes the whole thing feel even more special. By the time I had it running I already understood the hardware well enough to start thinking about mods.

Field notes

Stories featuring zeptocore kit

All field notes
Community · Aug 13, 2026 Open-source Zeptocore things in the wild A collection of homemade Zeptocores, open-source relatives, modular versions, cases, visualizers, sample tools, and possible future ports.

Trial download

Choose a compatible installer

Installer compatibility

Firmware

Choose firmware for

Normal latency works best for most people. Lower-latency builds respond faster but leave less CPU bandwidth for effects.

Clock mode
Response latency