Skip to the content
2 layers20 × 109 mmBufferedMult, the printed circuit board in 3D

A BufferedMult made with SKiDL

Size
20 × 109 mm
Copper layers
2
Thickness
1.6 mm
Parts
44
Nets
32
Pads
144
Tracks, vias
170, 24
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
21 Oct 2026
Updated
29 Oct 2026

Overview

BufferedMult is an open-source printed circuit board by domesticmouse, from the domesticmouse/BufferedMult-SKiDL repository on GitHub, published under the Apache-2.0 licence. It is a 2-layer board of 20 × 109 mm with 44 parts on 32 nets, routed with 170 tracks and 24 vias.

It is built around the TL074HID, CC0603KRX7R9BB104 and PESD12VL1BA,115-ES, with the ECEA1EKS100 and 1N5819WS among its other parts. Its parts include 15 resistors, 13 connectors, 8 capacitors, 5 diodes and 3 ICs.

Main components

5

README

README.md

Eurorack Buffered Multiple (SKiDL + KiCad 10)

A precision Triple 1-to-3 (Normalized to 1-to-6 / 1-to-9) Eurorack Buffered Multiple designed in Python using SKiDL and targeting KiCad 10.

This project is a SKiDL re-implementation and 3-channel expansion of domesticmouse/Buffered-Mult, omitting the LED feedback circuitry.

Interactive Course & Tutorial: https://domesticmouse.github.io/BufferedMult-SKiDL/ (published via GitHub Pages from tutorial/)

A ray traced image of the Buffered Multiple PCB


Features & Architecture

  • Triple 1-to-3 / Cascaded 1-to-6 / 1-to-9 Routing:
    • Channel 1: 1 input (IN_1) driving 3 individually buffered outputs (OUT_1A, OUT_1B, OUT_1C). When IN_1 is unpatched, its normalled switch contact (TN) grounds the input to 0V.
    • Channel 2: 1 input (IN_2) driving 3 individually buffered outputs (OUT_2A, OUT_2B, OUT_2C). When IN_2 is unpatched, its normalled switch contact (TN) receives the buffered signal from Channel 1 (CH1_BUF), cascading Channels 1 and 2 into a 1-to-6 buffered multiple with zero loading droop between channels. Patching a cable into IN_2 breaks the normal connection for independent channel operation.
    • Channel 3: 1 input (IN_3) driving 3 individually buffered outputs (OUT_3A, OUT_3B, OUT_3C). When IN_3 is unpatched, its normalled switch contact (TN) receives the buffered signal from Channel 2 (CH2_BUF), cascading all three channels into a 1-to-9 buffered multiple (or a 1-to-3 + 1-to-6 split if IN_2 is patched while IN_3 is unpatched). Patching a cable into IN_3 breaks the normal connection for independent triple 1-to-3 operation.
  • Dedicated Input & Output Buffering:
    • Each channel uses one quad TL074H (TL074HIDR) op-amp (SOIC-14):
      • Stage A: Unity-gain input follower protected by a PESD12VL1BA (SOD-323) bidirectional 12V TVS/ESD diode, a 100K input pull-down resistor (0603), and a 1K series input current-limiting resistor (0603).
      • Stages B, C, D: Three independent unity-gain output followers, each isolated with a 470R series output protection resistor (0603).
  • Eurorack Power Supply Protection:
    • Standard 10-pin (2x5) through-hole shrouded IDC power header (±12V, GND).
    • Reverse-polarity protection via 1N5819WS Schottky diodes (SOD-323, or B5819W in SOD-123 as a larger alternative).
    • 10uF radial through-hole electrolytic bulk bypass capacitors per rail plus 100nF (0603) local ceramic decoupling capacitors at each op-amp's V+ and V- pins.

Signal Flow

mermaid
flowchart LR
    subgraph CH1["Channel 1 (U1: TL074H)"]
        J_IN1["IN_1 Jack<br/>(TN -> GND)"] --> TVS1["PESD12VL1BA TVS<br/>+ 100K to GND"]
        TVS1 --> R_IN1["1K Series"] --> U1A["U1A Input Buffer"]
        U1A --> U1B["U1B Buffer + 470R"] --> OUT_1A["OUT_1A Jack"]
        U1A --> U1C["U1C Buffer + 470R"] --> OUT_1B["OUT_1B Jack"]
        U1A --> U1D["U1D Buffer + 470R"] --> OUT_1C["OUT_1C Jack"]
    end

    subgraph CH2["Channel 2 (U2: TL074H)"]
        J_IN2["IN_2 Jack<br/>(TN <- CH1_BUF)"] --> TVS2["PESD12VL1BA TVS<br/>+ 100K to GND"]
        TVS2 --> R_IN2["1K Series"] --> U2A["U2A Input Buffer"]
        U2A --> U2B["U2B Buffer + 470R"] --> OUT_2A["OUT_2A Jack"]
        U2A --> U2C["U2C Buffer + 470R"] --> OUT_2B["OUT_2B Jack"]
        U2A --> U2D["U2D Buffer + 470R"] --> OUT_2C["OUT_2C Jack"]
    end

    subgraph CH3["Channel 3 (U3: TL074H)"]
        J_IN3["IN_3 Jack<br/>(TN <- CH2_BUF)"] --> TVS3["PESD12VL1BA TVS<br/>+ 100K to GND"]
        TVS3 --> R_IN3["1K Series"] --> U3A["U3A Input Buffer"]
        U3A --> U3B["U3B Buffer + 470R"] --> OUT_3A["OUT_3A Jack"]
        U3A --> U3C["U3C Buffer + 470R"] --> OUT_3B["OUT_3B Jack"]
        U3A --> U3D["U3D Buffer + 470R"] --> OUT_3C["OUT_3C Jack"]
    end

Bill of Materials (BOM)

The design separates SMT components (factory-assembled on B.Cu by JLCPCB) from Through-Hole (THT) components (hand-soldered after receiving the boards):

RefQtyValue / PartPackage / FootprintKiCad SymbolLCSC Part #Assembly / Description
U1–U33TL074H (TL074HIDR)Package_SO:SOIC-14_3.9x8.7mm_P1.27mmAmplifier_Operational:TL074C2878713SMT (B.Cu, Extended) — Quad Low-Noise High-Voltage Op-Amp
D1, D221N5819WSDiode_SMD:D_SOD-323Device:D_SchottkyC191023SMT (B.Cu, Basic) — Schottky Reverse-Polarity Protection Diode (Alt larger package: B5819W in Diode_SMD:D_SOD-123, LCSC C8598, Basic)
D3–D53PESD12VL1BA (PESD12VL1BA,115)Diode_SMD:D_SOD-323Device:D_TVSC38558SMT (B.Cu, Extended) — 12V Bidirectional Low-Capacitance (19 pF, <50 nA) Input ESD/TVS Protection Diode (Alt 15V: PESD15VL1BA,115 / C85378; Basic SOD-123FL: SMF12CA / C19077508)
C3–C86100nF (50V X7R)Capacitor_SMD:C_0603_1608MetricDevice:CC14663SMT (B.Cu, Basic) — Ceramic Decoupling Capacitor (CC0603KRX7R9BB104)
R1, R6, R113100K (1%)Resistor_SMD:R_0603_1608MetricDevice:RC25803SMT (B.Cu, Basic) — Input Pull-Down Resistor (0603WAF1003T5E)
R2, R7, R1231K (1%)Resistor_SMD:R_0603_1608MetricDevice:RC21190SMT (B.Cu, Basic) — Input Series Overvoltage / ESD Current-Limiting Resistor (0603WAF1001T5E)
R3–R5, R8–R10, R13–R159470R (1%)Resistor_SMD:R_0603_1608MetricDevice:RC23179SMT (B.Cu, Basic) — Output Series Protection Resistor (0603WAF4700T5E)
J2–J1312WQP-PJ398SMConnector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesConnector_Audio:AudioJack2_SwitchT—THT (F.Cu, Hand-Soldered) — 3.5mm Mono Switched Eurorack Jack (Thonkiconn)
C1, C2210uF (25V)Capacitor_THT:CP_Radial_D5.0mm_P2.00mmDevice:C_PolarizedC713347THT (F.Cu, Hand-Soldered) — Radial Electrolytic Bulk Cap (ECEA1EKS100)
J11EURORACK_PWR_10PINConnector_IDC:IDC-Header_2x05_P2.54mm_VerticalConnector_Generic:Conn_02x05_Odd_Even—THT (B.Cu, Hand-Soldered) — 10-Pin (2x5) Shrouded Eurorack Power Header

Getting Started

Prerequisites

  • KiCad 10 installed (default macOS symbol/footprint path /Applications/KiCad/KiCad.app/Contents/SharedSupport/ is detected automatically by buffered_multiple.py).
  • Python 3.12–3.14 and uv.

Setup & Run

  1. Create the virtual environment and install dependencies:

    bash
    uv venv --clear --python 3.14 .venv
    uv pip install skidl markdown-it-py pyyaml
  2. Generate the circuit outputs and run Electrical Rules Checking (ERC):

    bash
    .venv/bin/python buffered_multiple.py
  3. Generate or update the 4HP Eurorack front panel PCB and Gerbers:

    bash
    /Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/Current/bin/python3 \
        .agents/skills/eurorack-panel/scripts/generate_eurorack_panel.py \
        --main-pcb BufferedMult.kicad_pcb \
        --output BufferedMult_Panel.kicad_pcb \
        --title "BUF MULT" \
        --subtitle "1:3 / 1:6 / 1:9" \
        --gerber-dir production/panel \
        --zip production/BufferedMult_Panel.zip \
        --drc
  4. Build and validate the interactive tutorial HTML from Markdown (optional, for local previewing; GitHub Actions automatically builds and publishes to GitHub Pages via .github/workflows/pages.yml):

    bash
    .venv/bin/python tutorial/build.py --check
  5. Lint and format with ruff:

    bash
    ruff check --fix buffered_multiple.py buffered_multiple_sklib.py tutorial/build.py && ruff format buffered_multiple.py buffered_multiple_sklib.py tutorial/build.py

Generated Files

Running buffered_multiple.py produces:

  • buffered_multiple.net — KiCad 10 netlist with deterministic hierarchical tstamps and Power / Signal net classes.
  • buffered_multiple_bom.xml — KiCad XML Bill of Materials.
  • buffered_multiple_jlcpcb_bom.csv — Grouped JLCPCB SMT PCBA Bill of Materials (Comment,Designator,Footprint,LCSC Part #), excluding hand-soldered THT parts by default.
  • buffered_multiple.erc / buffered_multiple.log — SKiDL ERC report and execution log (0 errors, 0 warnings).
  • buffered_multiple_sklib.py — Auto-generated SKiDL backup symbol library.

KiCad 10 PCBs & Fabrication Outputs

Both the main circuit board and a mated 3U × 4HP Eurorack front panel are included in the repository:

  • Main Circuit PCB (BufferedMult.kicad_pro / BufferedMult.kicad_pcb):
    • Dimensions: 20.0 × 109.0 mm (4HP, Rev V2.0), 2-layer PCB with stitched F.Cu and B.Cu GND planes and 0.5 mm ±12V power spines.
    • Assembly: Full 3-channel (44-component) layout with single-sided SMT placement on B.Cu (29 SMD parts) and hand-soldered THT jacks/bulk caps on F.Cu (J2–J13, C1, C2) plus the 10-pin power header on B.Cu (J1), complete with a -12V orientation knockout, V2.0 revision marking, and repository URL on B.SilkS.
  • 4HP Eurorack Front Panel (BufferedMult_Panel.kicad_pro / BufferedMult_Panel.kicad_pcb):
    • Dimensions: 20.0 × 128.5 mm (Doepfer A-100 3U × 4HP standard).
    • Features: 12× 6.2 mm PTH grounded jack cutouts aligned to the +6.48 mm WQP-PJ398SM (Thonkiconn) bushing centers (14.40 mm uniform vertical row pitch), 2× 3.2 × 5.5 mm NPTH M3 mounting slots, exposed F.Mask copper/finish graphics (BUF MULT title, input callout badges for IN 1 / IN 2 / IN 3, and normalling cascade indicators), F.SilkS jack labels and TL074 callout, and solid F.Cu / B.Cu copper shield planes with exposed rear ground rings.
  • Fabrication Archives (production/):

Interactive Course & Tutorial (tutorial/)

The repository includes an 8-lesson interactive Hardware-as-Code course published at https://domesticmouse.github.io/BufferedMult-SKiDL/ (authored in Markdown under tutorial/ and compiled via tutorial/build.py). Starting from an empty Python file, the lessons progressively grow buffered_multiple.py and its post-netlist PCB, front-panel, and pre-fab verification scripts:

LessonStage & TitleMarkdown SourceRunnable Companion App
0001Stage 1: From an Empty File to KiCad 10 Bootstrap & First ERC() (0 → 72 lines)0001-environment-and-kicad-bootstrap.mdbootstrap_check.py
0002Stage 2: Programmatic Part Discovery & Adding FP_* / LCSC_* Constants0002-programmatic-component-discovery.mddiscover_parts.py
0003Stage 3: Growing the Script — Adding eurorack_power(vcc, vee, gnd) (68 → 155 lines)0003-eurorack-power-subcircuit.mdpower_subcircuit.py
0004Stage 4: Growing the Script — Adding buffered_channel_1to3() (155 → 255 lines)0004-single-buffered-channel.mdsingle_channel.py
0005Stage 5: Completing buffered_multiple.py — Cascaded Normalling (1:3 → 1:6 → 1:9), NetClass & JLCPCB BOM (255 → 334 lines)0005-cascaded-normalling-and-bom-export.mdbuffered_multiple.py
0006Stage 6: From .net Netlist to 4HP KiCad 10 PCB Layout & Single-Sided SMT Assembly0006-kicad-pcb-layout-and-assembly.mdinspect_netlist_and_layout.py
0007Stage 7: Automated 4HP Eurorack Front Panel Generation in Python (+6.48 mm Bushing Offset)0007-eurorack-front-panel-generator.mdgenerate_panel_plan.py
0008Stage 8 (Capstone): Programmatic Pre-Fab Design Review — Netlist-to-PCB Audit, DRC & Gerber Verification (5/5 checks)0008-prefab-design-review-and-drc.mdprefab_design_audit.py

Printable Reference Sheets (tutorial/reference/)

  • skidl-cheatsheet.md — SKiDL API, pre-import KiCad 10 configuration, dest=TEMPLATE, part.fields, u.p[n] vs u["V+"], @subcircuit, NetClass, and ERC() syntax cheat sheet.
  • kicad-jlcpcb-lookup.md — Four-step programmatic component discovery workflow (search, show, search_footprints, jlcpcb_search.py) and verified BOM pinout/LCSC table.
  • eurorack-power-and-normalling.md — Doepfer A-100 10-pin power header pinout, Schottky & bulk capacitor polarity, WQP-PJ398SM switched jack mechanics, and the 1:3 / 1:6 / 1:9 normalling truth table.
  • GLOSSARY.md — Standardized SKiDL, KiCad 10, JLCPCB PCBA, and Eurorack hardware terminology.

Documentation & Guides


License

Licensed under the Apache License, Version 2.0. See LICENSE.txt for details.

This is not an official Google product.

Parts

44
QtyValueFootprintReferences
9470RResistor_SMD:R_0603_1608MetricR3, R4, R5, R8, R9, R10, R13, R14, R15
6100nFCapacitor_SMD:C_0603_1608MetricC3, C4, C5, C6, C7, C8
3100KResistor_SMD:R_0603_1608MetricR1, R6, R11
31KResistor_SMD:R_0603_1608MetricR2, R7, R12
3PESD12VL1BADiode_SMD:D_SOD-323D3, D4, D5
3TL074HPackage_SO:SOIC-14_3.9x8.7mm_P1.27mmU1, U2, U3
210uFCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC1, C2
21N5819WSDiode_SMD:D_SOD-323D1, D2
1EURORACK_PWR_10PINConnector_IDC:IDC-Header_2x05_P2.54mm_VerticalJ1
1IN_1Connector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesJ2
1IN_2Connector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesJ6
1IN_3Connector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesJ10
1OUT_1AConnector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesJ3
1OUT_1BConnector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesJ4
1OUT_1CConnector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesJ5
1OUT_2AConnector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesJ7
1OUT_2BConnector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesJ8
1OUT_2CConnector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesJ9
1OUT_3AConnector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesJ11
1OUT_3BConnector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesJ12
1OUT_3CConnector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesJ13

Similar boards

  • 4 layers11.2 × 25.4 mm3374-VCO, the printed circuit board in 3D

    3374-VCO

    alanbog/3374-VCO

    CEM 3374 Clone PCB

    63 parts13CERN-OHL-P-2.0
  • 4 layers146 × 95 mmEEZ DIB MIO168, the printed circuit board in 3D

    EEZ DIB MIO168

    eez-open/dib-mio168

    EEZ DIB Mixed I/O module

    279 parts8
  • 2 layers113.5 × 35 mmPanthera stm32, the printed circuit board in 3D

    Panthera stm32

    passinglink/pcb

    PCB designs for use with Passing Link

    47 parts4MIT
  • 2 layers30 × 100 mmAttenuverter, the printed circuit board in 3D

    Attenuverter

    Schenktronics/ST03-attenuverter

    A 4 channel eurorack attenuverter

    73 parts
  • 2 layers30 × 100 mm4ch Mixer, the printed circuit board in 3D

    4ch Mixer

    Schenktronics/ST04-quad-mixer

    Four channel mixer for Eurorack (KiCad)

    60 parts
  • 2 layers90.1 × 30 mmIntegrated vil rml, the printed circuit board in 3D

    Integrated vil rml

    SCFormulaElectric/USC-Electrical-Systems

    32 parts9

Questions

How big is the BufferedMult PCB?

It measures 20 × 109 mm and has 2 copper layers, 1.6 mm thick.

What parts does the BufferedMult use?

44 parts, built around the TL074HID, CC0603KRX7R9BB104, PESD12VL1BA,115-ES and ECEA1EKS100. 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 BufferedMult KiCad files?

From the domesticmouse/BufferedMult-SKiDL repository on GitHub, at the commit this page was made from: the board is BufferedMult.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the BufferedMult design in my own project?

Its repository publishes it under the Apache-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).