Skip to the content
PCBKitNew board
4 layers59.6 × 85.6 mmRecorder, the printed circuit board in 3D

A simple audio recording device that magnetically attaches to the back of a Pixel device

Size
59.6 × 85.6 mm
Copper layers
4
Thickness
0.8 mm
Parts
60
Nets
69
Pads
256
Tracks, vias
752, 224
Pours
8
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
2 Sep 2026
Updated
3 Nov 2026

Overview

Recorder is an open-source printed circuit board by zeeman-effect, from the zeeman-effect/pixel-snap-voice repository on GitHub. It is a 4-layer board of 59.6 × 85.6 mm with 60 parts on 69 nets, routed with 752 tracks and 224 vias.

It is built around the ESP32-S3-MINI-1U-N8, ES8311 and MKDV4GCL-ABB, with the AP2112K-3.3, AP22804AW5 and BQ24073RGTR among its other parts. Its parts include 18 capacitors, 15 resistors, 7 ICs, 2 diodes and 2 connectors. It belongs with the ESP32 boards of this library.

Main components

9

README

README.md

pixel-snap-voice

A one-off slim rectangular voice-note recorder that snaps to the back of a Google Pixel 10 using Pixelsnap / Qi2 magnets (MagSafe-style accessory rings work). It records raw WAV files, charges and dumps data over USB, can share those files over its own Wi-Fi network, and leaves transcription to a computer.

This repo holds hardware, firmware, simulation, and (later) a local transcription helper. The first board is meant to be ordered from quick-turn services after the sims pass — not invented from unsolved problems.

What it is

  • ESP32-S3-MINI-1U, ES8311 codec (I2S master), analog MEMS mic, class-D speaker (or headphone jack if thickness loses)
  • 16-bit PCM WAV, 48 kHz mono (~173 MB/hour)
  • USB Mass Storage when plugged into a computer
  • Wi-Fi share: the recorder makes its own WPA2 network and serves /recordings in a browser (and read-only WebDAV)
  • No on-device transcription, no Bluetooth file transfer, no wireless charging through the accessory

MCU choice and why we did not switch off Espressif: docs/audio-platform.md.

Repo layout

PathRole
docs/architecture.mdElectrical + mechanical constraints
docs/audio-platform.mdWhy ESP32-S3 + codec, not a different MCU
docs/bom.mdLiving bill of materials
docs/manufacturing.mdJLCPCB / print / CNC
docs/phase0-bringup.mdOff-the-shelf DevKit path before a custom PCB
firmware/ESP-IDF app + portable recorder/WAV core
sim/host/HOST_SIM HAL, tests, PC WAV fixture
sim/spice/USB → charger → battery → 3.3 V model
hardware/cad/Parametric envelope (OpenSCAD) + keepout checker
hardware/kicad/KiCad 10 schematic / PCB / stackup notes
scripts/check_gates.py ship gate, setup-ubuntu.sh toolchain install
.claude/skills/Agent skills, including vendored KiStack KiCad workflows
software/Local whisper.cpp CLI (transcribe.py)

Set up a machine

The hardware checks need KiCad 10 (kicad-cli plus its pcbnew Python module), the host sim needs CMake and a C compiler, the power-path sim needs ngspice, and route_pcb.py needs the freerouting autorouter.

Ubuntu 24.04 (a dev box, CI runner, container, or a cloud coding agent): from the repo root, run

bash
bash scripts/setup-ubuntu.sh

It installs build-essential, CMake, ngspice, KiCad 10 from the official KiCad PPA, and freerouting 2.4.1 into /opt/freerouting, then builds the host sim into build/host. It is safe to run again. It uses sudo for apt unless it is already root. For a cloud agent or CI job, make that command the environment's setup or install step.

Windows or macOS: there is no script. Install by hand:

  • KiCad 10. Run the pcbnew scripts (generate_pcb.py, route_pcb.py, check_placement.py) with KiCad's bundled python, not system Python.
  • CMake and a C compiler (MSVC, MinGW, or clang).
  • ngspice, only for the power-path sim.
  • freerouting, only for route_pcb.py. Put it on PATH, unpack it to ~/.local/opt/freerouting/, or set PSV_FREEROUTING to the launcher.

Python packages are in requirements.txt: numpy (for route_pcb.py) and cadquery (only for the metal tray STEP). Install them into a virtual environment made with --system-site-packages, so KiCad's pcbnew stays importable. The file also lists what comes with KiCad and Blender instead of pip.

Firmware needs ESP-IDF on top of this. See firmware/README.md.

Simulate first

From the repo root, with CMake and a C compiler (MSVC, MinGW, or clang):

bash
cmake -S sim/host -B build/host
cmake --build build/host
./build/host/recorder_test      # Windows: build/host/Debug/recorder_test.exe
./build/host/recorder_sim

Mechanical keepouts (Python 3, no extra packages):

bash
python hardware/cad/check_envelope.py

Power path (needs ngspice):

bash
ngspice -b sim/spice/power_path.cir

Physical phases

  1. Prove capture and playback on an Espressif voice board (Korvo-2 / ESP-BOX) or OpenMic; Sense is recorder-core only. See docs/phase0-bringup.md.
  2. Custom slim PCB + 3D-printed chassis + bought magnet ring (JLCPCB).
  3. Same PCB in CNC 6061 aluminum (not steel).

After you change the product schematic sources, run python hardware/kicad/recorder/generate_recorder.py then python hardware/kicad/recorder/verify_schematic.py. That overwrites sheets only. It does not write recorder.kicad_pcb. Edit the board (or rebuild it on purpose with generate_pcb.py) until traces and DRC are clean. Do not order boards until python scripts/check_gates.py is clean and kicad-cli pcb drc is clean and kicad-cli has written Gerbers from hardware/kicad/recorder/recorder.kicad_pcb.

Transcription

Dump WAVs over USB, then run a local model (whisper.cpp) on the computer:

bash
python software/transcribe.py /path/to/recordings/20260828-181742.wav

Parts

60
QtyValueFootprintReferences
910kResistor_SMD:R_0603_1608MetricR1, R10, Rboot, Rsd0, Rsd1, Rsd2, Rsd3, Rsd4, Rstat
91uFCapacitor_SMD:C_0603_1608MetricC2, C6, C9, C10, C11, C12, C13, C15, C16
4M1.6 NPTHPSV:MountingHole_1.7mm_M1.6H1, H2, H3, H4
2100nFCapacitor_SMD:C_0603_1608MetricC3, C14
210uFCapacitor_SMD:C_0805_2012MetricC8, C20
21kResistor_SMD:R_0603_1608MetricRchg, Rled
23.01kResistor_SMD:R_0603_1608MetricR8, R11
24.7kResistor_SMD:R_0603_1608MetricR5, R6
24.7uFCapacitor_SMD:C_0603_1608MetricC4, C5
10RResistor_SMD:R_0603_1608MetricRagnd
11.8kResistor_SMD:R_0603_1608MetricR4
110uFCapacitor_SMD:C_0603_1608MetricC21
112.288MHzOscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mmY1
12.2uFCapacitor_SMD:C_0603_1608MetricC7
122uFCapacitor_SMD:C_0805_2012MetricC1
149.9kResistor_SMD:R_0603_1608MetricR9
1500mA PTCFuse:Fuse_0603_1608MetricF1
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U4
1AP22804AW5Package_TO_SOT_SMD:SOT-23-5U5
1BQ24073RGTRPackage_DFN_QFN:VQFN-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mmU3
1ENTestPoint:TestPoint_Pad_D1.5mmTP_EN
1ES8311Package_DFN_QFN:QFN-20-1EP_3x3mm_P0.4mm_EP1.65x1.65mmU2
1ESP32-S3-MINI-1U-N8PSV:ESP32-S3-MINI-1UU1
1GNDTestPoint:TestPoint_Pad_D1.5mmTP_GND
1GPIO0TestPoint:TestPoint_Pad_D1.5mmTP_BOOT
1IM73A135PSV:IM73A135_PG-LLGA-5-3MK1
1LP5907MFX-2.8Package_TO_SOT_SMD:SOT-23-5U8
1MKDV4GCL-ABBPSV:ZDSD32GLGEAGJ3
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U7
1VDD33TestPoint:TestPoint_Pad_D1.5mmTP_3V3
1YZ103915020TPSV:YZ103915020T_4PJ2
1chgLED_SMD:LED_0603_1608MetricD2
1pigtail 1SPSV:Battery_Pigtail_2PBT1
1recordButton_Switch_SMD:SW_SPST_EVQP7CSW1
1statusLED_SMD:LED_0603_1608MetricD1

Questions

How big is the Recorder PCB?

It measures 59.6 × 85.6 mm and has 4 copper layers, 0.8 mm thick.

What parts does the Recorder use?

60 parts, built around the ESP32-S3-MINI-1U-N8, ES8311, MKDV4GCL-ABB and AP2112K-3.3. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Recorder KiCad files?

From the zeeman-effect/pixel-snap-voice repository on GitHub, at the commit this page was made from: the board is hardware/kicad/recorder/recorder.kicad_pcb and its schematic hardware/kicad/example_project/example_project.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Recorder design in my own project?

Its repository states no licence, so its author keeps all rights: ask zeeman-effect before reusing the design.

Similar boards

  • 2 layers52.9 × 35.9 mmADC Silence Detector, the printed circuit board in 3D

    ADC Silence Detector

    markusbichl/ADC_Silence_Detector

    WCH CH32X033 based Silence detector for turntable to Toslink converter

    17 parts
  • 6 layers25 × 42.5 mmSerene Mini, the printed circuit board in 3D

    Serene Mini

    cshariq/Serene

    Can't hear your friend talking on the highway? Do you need to blast your music just to hear it well? Well, you're in luck, because Serene is a portable noise-cancelling device that can remove all of that noise!

    81 parts
  • 4 layers66 × 36 mmGas sensor, the printed circuit board in 3D

    Gas sensor

    JamesTwallin/gas_sensor

    A tiny plug-in board for the rev E phone-companion board. It stands upright in a notch in rev E's sensor end, between the two gas sensor cans, and pokes 4.5 mm out through a slot in the case face, so its tip sits in the…

    81 parts7MIT
  • 2 layers150 × 100 mmFalcon rc, the printed circuit board in 3D

    Falcon rc

    yedidiaSch/FalconDrone

    [IN PROGRESS] High-performance flight controller for quadcopters, providing real-time stabilization and attitude control using FreeRTOS and C++ on STM32

    78 partsMIT
  • 4 layers191 × 158 mmPandapute, the printed circuit board in 3D

    Pandapute

    mail2adnanyazik-bit/pandapute

    A small, esp 32 based portable computer - an upgraded version of the cardputer adv, with more functionality, processing power, and ease of use.

    131 parts
  • 4 layers81.2 × 81.2 mmView base, the printed circuit board in 3D

    View base

    SeedLabs-it/smartknob-hardware

    PCB and CAD files for smartknob devkit

    259 parts47
  • 4 layers60 × 60 mmUsb switch, the printed circuit board in 3D

    Usb switch

    alvarop/debugotron

    Debugotron is a collection of debugging/automation tools I've wanted in the past but didn't have access to. Currently, the tools include:

    77 parts52BSD-3-Clause
  • 2 layers56 × 65 mmRock audio, the printed circuit board in 3D

    Rock audio

    artixzhang/rock-module

    Extension PCB boards for Radxa Rock 3C for Audio and Display Screen functions

    59 partsGPL-3.0