Skip to the content
2 layers392.6 × 198.3 mmAudio routed, the printed circuit board in 3D

Audio routed

Bu3nd14/EDA

Scripted analog EDA + PCB automation environment (KiCad 10 + ngspice + SKiDL) for macOS Apple Silicon

Size
392.6 × 198.3 mm
Copper layers
2
Thickness
1.6 mm
Parts
657
Nets
396
Pads
1,678
Tracks, vias
6,154, 419
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
7 Sep 2026
Updated
5 Nov 2026

Overview

Audio routed is an open-source printed circuit board by Bu3nd14, from the Bu3nd14/EDA repository on GitHub. It is a 2-layer board of 392.6 × 198.3 mm with 657 parts on 396 nets, routed with 6,154 tracks and 419 vias.

It is built around the LM4040B50FTA, MMBT5401 and MMBT5551, with the DZT5551, DZT5401 and MJE15032 among its other parts. Its parts include 303 resistors, 104 transistors, 98 capacitors, 79 diodes and 17 switches. It belongs with the audio and music boards of this library.

Main components

8

README

README.md

EDA — Analog EDA + PCB Automation Environment

A scripted, non-interactive toolchain for taking an analog circuit from code-first topology definition through SPICE simulation, KiCad schematic generation, PCB layout, autorouting, DRC/ERC, and fabrication export — on macOS / Apple Silicon.

This README documents only what has been verified by actually running commands in this environment. See docs/limitations.md for the full limitations list and docs/smoke-test.md for the end-to-end pipeline evidence.

Installed tools

ToolVersionPathNotes
ngspice47/opt/homebrew/bin/ngspiceNative arm64 (file → "Mach-O 64-bit executable arm64", non-fat). Installed via brew install ngspice.
KiCad10.0.6App: /Users/roberto/Applications/KiCad.app; CLI: /Users/roberto/Applications/KiCad.app/Contents/MacOS/kicad-cliUniversal binary (x86_64 + arm64), runs natively on Apple Silicon. Installed from the official CERN-hosted dmg into ~/Applications, without sudo.
Python (project)3.13.15/opt/homebrew/bin/python3.13Native arm64. Project venv at /Users/roberto/EDA/env/venv.
SKiDL2.3.0installed in env/venvCode-first circuit definition layer.
Python (KiCad bundled)3.9.13/Users/roberto/Applications/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/bin/python3.9The only interpreter where import pcbnew works. pcbnew is not pip-installable.
kinet2pcb(per bundled install)installed into the bundled python3.9 via --user pip installNot installed in the venv.
Freerouting2.4.1/Users/roberto/EDA/scripts/tools/freerouting.jarExternal autorouter. Needs a JRE (brew install openjdk).
poppler (pdftotext)26.09.0/opt/homebrew/bin/pdftotextNative arm64 (file → "Mach-O 64-bit executable arm64"). Installed via brew install poppler in L6. Reads vendor datasheet PDFs past page 1, which sips/qlmanage cannot. No script requires it, so verify_env.sh does not check for it: scripts/pdf_glyphs.py is the stdlib-only fallback.

Installation procedure (as actually done)

  1. ngspice: brew install ngspice.
  2. KiCad 10.0.6: download the official dmg from kicad.org and install into ~/Applications without sudo.
    • Pitfall (verified failure): the Homebrew cask (brew install --cask kicad) FAILS during install because its bundled demos artifact needs sudo to write to /Library/Application Support/kicad. Use the no-sudo dmg route instead — do not retry the brew cask expecting a different result.
  3. Python / venv: python3.13 -m venv /Users/roberto/EDA/env/venv, then pip install skidl (→ SKiDL 2.3.0) inside that venv.
  4. kinet2pcb: installed into KiCad's bundled python3.9, not the venv:
    text
    /Users/roberto/Applications/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/bin/python3.9 -m pip install --user kinet2pcb
  5. Freerouting: freerouting.jar placed at scripts/tools/freerouting.jar. Requires a JRE: brew install openjdk, then invoke with PATH="/opt/homebrew/opt/openjdk/bin:$PATH" java -jar scripts/tools/freerouting.jar ....
  6. poppler: brew install poppler (added in L6). Only needed to read vendor datasheet PDFs beyond the first page — macOS ships sips and qlmanage, which render page 1 only. No script in this repo depends on it; scripts/pdf_glyphs.py covers the text case with the stdlib alone.

Architecture: selected stack and rejected alternatives

Selected: KiCad 10 + ngspice, with SKiDL as the code-first circuit definition layer and Freerouting as an external autorouter.

AlternativeRejected because
LibrePCBNo SPICE export at all — structurally incompatible with a simulate-then-layout workflow. SKiDL also has no LibrePCB output path.
Qucs-SNo headless/CLI mode found. Usable only as an optional human-facing GUI visualization layer, not automation.
gEDA/gafEffectively dead (~1-2 commits/year, last stable release 2020).
XyceKept only as a possible alternate SPICE backend. ngspice is the reference engine KiCad targets and has a faster release cadence.

Source-of-truth strategy

A hybrid model with a hard boundary:

  • Circuit topology (parts, values, connections) is canonical in Python/SKiDL, intended to live under circuits/*.py (version-controlled, no GUI state). TODO: unverified — a circuits/ directory does not yet exist in this repo; the only SKiDL topology definition currently present is the smoke-test fixture at smoke/rc_circuit.py.
  • Physical layout (placement, routing, stackup) is canonical in the .kicad_pcb file, because layout cannot be expressed in SKiDL.
  • The netlist is a one-way sync contract: code → KiCad. Never hand-edit the generated schematic/netlist and expect it to survive regeneration. Never treat the .kicad_pcb as a topology source.
  • Correction to the naive "SKiDL → SPICE" assumption: the SPICE netlist used for simulation is derived from the generated schematic via kicad-cli sch export netlist --format spice, not from SKiDL's native SPICE generator. SKiDL's native SPICE path does not work with KiCad-library parts — see Limitations #2.

Project structure

text
EDA/
  models/         curated, canonical SPICE models (.include-able), each with a
                  <file>.provenance.json sidecar. See models/README.md,
                  models/PROVENANCE_CONVENTION.md.
  vendor/         read-only vendor originals (mode 0444, sha256 + PROVENANCE.json
                  per part). Never hand-edited. See vendor/README.md.
  scripts/        automation entry points (setup, validation, simulation, ERC/DRC,
                  fab export) and support tools (freerouting.jar). Owned/maintained
                  separately — see "Scripts" below.
  testbenches/    standalone ngspice .cir testbenches (01_op .. 08_vendor_model)
                  used to exercise/validate analysis types and the model library.
  smoke/          scratch: the trivial RC-lowpass smoke-test fixture and its
                  full pipeline output (schematic, netlists, sim results, PCB,
                  routing, DRC/ERC reports, gerbers).
  pcb/            scratch: PCB-automation-engineer's capability tests
                  (board creation, DSN/SES routing round-trip, DRC, fab export).
  results/        scratch: simulation outputs (raw + normalized CSV/JSON) and
                  model-validation testbenches/results.
  docs/           this documentation set (architecture, limitations, smoke-test
                  report).
  env/venv/       project Python 3.13 virtualenv (SKiDL).
  .claude/agents/ subagent role definitions (see AGENTS.md).

circuits/ (canonical topology home per the source-of-truth strategy) does not exist yet — TODO: unverified, flagged rather than assumed.

smoke/ and results/ are scratch, not canonical; models/, vendor/ are canonical (see AGENTS.md operating rules).

Simulation workflow

All ngspice runs are non-interactive (ngspice -b). Verified analysis types, with existing testbenches under testbenches/:

TestbenchAnalysis
01_op.cir.op
02_dc.cir.dc sweep
03_ac.cir.ac
04_tran.cir.tran
05_noise.cir.noise
06_paramsweep.cirparameter sweep (via .control/alterparam, not native .step — see Limitations #10)
07_temp.cirtemperature sweep
08_vendor_model.cirvendor-model .include

Run directly, e.g.:

text
/opt/homebrew/bin/ngspice -b /Users/roberto/EDA/testbenches/04_tran.cir

Results are written via wrdata/.print/.write and normalized to CSV/JSON with scripts/normalize_wrdata.py (present under results/*.normalized.{csv,json}).

Accuracy: verified against closed-form theory (RC -3dB point, RC time constant, thermal noise floor) to well under 1% error. Example from the smoke-test RC fixture (R=1k, C=100n): theoretical fc = 1591.55 Hz, simulated fc = 1587.62 Hz, error 0.25%.

Model library: models/ contains curated device models (resistor, capacitor, inductor, diode, BJT NPN/PNP, MOSFET N/P, JFET, opamp macro-model, generic transformer subckt), each validated by scripts/validate_models.py against a real ngspice testbench (38/38 checks passing at last verification). The R/C/L/transformer/opamp checks are exact analytic cross-checks; the BJT/MOSFET/JFET checks are order-of-magnitude sanity checks only, not exact — see Limitations #11. The validator was proven to catch both a bad model parameter and a tampered vendor file (exit 1 in both cases).

Vendor model provenance: vendor/ holds read-only (mode 0444) originals with sha256 + PROVENANCE.json; models/ holds curated/derived copies, each with a .provenance.json sidecar recording origin and any changes. See models/PROVENANCE_CONVENTION.md.

PCB workflow

Verified capabilities, driven through the pcbnew Python API (bundled python3.9) and kicad-cli:

  • Board creation; footprint load/place from KiCad standard libraries; footprint inspection; move/rotate with verified persistence; geometry/ courtyard queries; net enumeration and assignment; track and via creation; copper zone creation with real fill; save/reload round-trip fidelity.
  • ERC: kicad-cli sch erc --format json --exit-code-violations — real JSON output, correct exit codes.
  • DRC: kicad-cli pcb drc --format json --exit-code-violations — real JSON, exit 5 on violations / 0 when clean. Verified semantically correct: flagged genuine unconnected items before routing, clean after.
  • Fabrication export: kicad-cli pcb export gerbers and kicad-cli pcb export drill — verified by inspecting file contents (valid RS-274X and Excellon data), not just exit codes.
  • Routing: KiCad itself has no built-in autorouter. Routing is done via an external round-trip: pcbnew.ExportSpecctraDSN → Freerouting CLI → pcbnew.ImportSpecctraSES → DRC clean (0 violations), verified end-to-end. Note kicad-cli does not offer DSN export — only the pcbnew Python API does.

Example Freerouting invocation (from smoke/run_pipeline.sh):

text
PATH="/opt/homebrew/opt/openjdk/bin:$PATH" java -jar /Users/roberto/EDA/scripts/tools/freerouting.jar \
  -de rc_circuit.dsn -do rc_circuit.ses -mp 1 -l en

GUI-only KiCad features (e.g. the interactive router) were not tested and must not be assumed scriptable (Limitations #12).

API/automation workflow: the two-interpreter bridge

SKiDL runs on the project venv, Python 3.13 (/Users/roberto/EDA/env/venv/bin/python3). pcbnew and kinet2pcb run only on KiCad's bundled Python 3.9 (/Users/roberto/Applications/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/bin/python3.9). Any script that touches both must bridge explicitly with absolute interpreter paths — invoking each stage with its own interpreter, e.g. from smoke/run_pipeline.sh:

sh
SKIDL_PY=/Users/roberto/EDA/env/venv/bin/python3
KICAD_PY=/Users/roberto/Applications/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/bin/python3.9

venv/bin/python -c "import pcbnew" fails with ModuleNotFoundError — this is not a configuration bug, it is the expected split. Never assume one interpreter can do both halves of the pipeline.

Scripts

Scripts live under scripts/ (owned/maintained by a separate workflow — see AGENTS.md). Confirmed present at time of writing: scripts/validate_models.py, scripts/freeze_vendor.sh, scripts/normalize_wrdata.py, scripts/pcbnew_test.py, scripts/specctra_roundtrip_test.py, scripts/tools/freerouting.jar.

The following entry points are documented interface (purpose/invocation as specified) — they were being written/verified concurrently with this documentation, so their internals are not described here beyond intent:

ScriptPurpose
scripts/setup.shOne-shot environment setup.
scripts/verify_env.shVerify installed tool versions/paths match what's documented.
scripts/run_simulation.sh <netlist.cir> [outdir]Run an ngspice batch simulation and extract results.
scripts/run_tests.shRun the project's test/validation suite.
scripts/validate_models.pyValidate every model in models/ against a real ngspice testbench; also checks provenance (--check-provenance).
scripts/run_erc.sh <sch> [outjson]Run kicad-cli sch erc and emit JSON.
scripts/run_drc.sh <pcb> [outjson]Run kicad-cli pcb drc and emit JSON.
scripts/export_fab.sh <pcb> [outdir]Export gerbers/drill; refuses to export if DRC fails.
scripts/check_schematic.py <manifest.json> <netlist.cir>Verify a hand-laid-out schematic drawing against the netlist, in both directions. Exit 1 on any mismatch.
scripts/pdf_glyphs.py <file.pdf> [--offset N|--scan|--raw]Extract text from a PDF with the stdlib only (zlib + the text operators). The mechanical half of the two-independent-readings rule ADR-013 imposes on hand-transcribed vendor models. Not a general-purpose extractor — see its header.
scripts/freeze_vendor.shSet every file under vendor/ to mode 0444. Idempotent.

TODO: unverified — confirm the final invocation syntax/flags of the above against the actual script contents once they land; this table reflects the interface as specified to this documentation task, not a read of the scripts themselves (except validate_models.py, which already exists and is described above from models/README.md).

Human-reviewable schematics

Readable analog schematics cannot be auto-placed — researched and tested against ASG, lcapy and netlistsvg, none of which work for this (see docs/limitations.md #16). Every tool that does automatic placement targets digital netlists, where dataflow dictates layout; analog readability lives in conventions that encode designer intent and are absent from the netlist.

Drawings are therefore laid out by hand, in code, with schemdraw — a text source that versions and diffs. The resulting risk, a drawing drifting silently from the circuit, is mechanised away: each drawing emits a connectivity manifest next to its SVG, and scripts/check_schematic.py compares it to the netlist in both directions (nothing invented, nothing omitted). scripts/run_tests.sh discovers every manifest under docs/*/schematic/ automatically.

The checker was proven to catch an invented device, an omitted device and a miswired pin — it passes a correct manifest and fails a deliberately broken one.

A human-reviewable schematic is a precondition for gates G1 and G2. See docs/architecture.md for the convention and AGENTS.md for the gate rule.

Limitations

Full detail in docs/limitations.md. Summary (none of these are soft-pedaled):

  1. Two-interpreter split (SKiDL venv 3.13 vs KiCad bundled 3.9) — must bridge with absolute paths.
  2. SKiDL's native SPICE path does not work with KiCad-library parts; the schematic→kicad-cli sch export netlist --format spice path is used instead.
  3. SKiDL drops Sim.Type/Sim.Device when caching symbols into the generated .kicad_sch — silent invalid SPICE line unless set manually.
  4. SKiDL-generated schematics fail real KiCad ERC (power_pin_not_driven on GND + 3 lib_symbol_mismatch warnings).
  5. SKiDL's schematic auto-placement is visually unusable (machine-valid, not human-presentable).
  6. SKiDL needs version-numbered env vars (KICAD10_SYMBOL_DIR/KICAD10_FOOTPRINT_DIR for SKiDL 2.3.0); wrong version → confusing FileNotFoundError.
  7. SKiDL treats a missing footprint as a hard error even for simulation-only symbols.
  8. item.GetLayerName() in pcbnew is unreliable — use board.GetLayerName(item.GetLayer()) or IsOnLayer().
  9. ImportSpecctraSES gives no error message on failure — only True/False.
  10. ngspice gotchas: no native .step (use .control/alterparam); multi-value .temp silently falls back to 27°C with only a warning (use dc TEMP start stop step inside .control); .lib <file> fails for plain model files (use .include); C/L need C=/inductance=, not a positional value; the first line of any .cir is always a title/comment.
  11. BJT/MOSFET/JFET model checks in validate_models.py are order-of-magnitude sanity checks, not exact analytic cross-checks like R/C/L/transformer/opamp.
  12. GUI-only KiCad features (e.g. interactive router) were not tested and must not be claimed as scriptable.

Smoke test results

Trivial RC low-pass fixture (R=1k, C=100n), driven through the full pipeline by smoke/run_pipeline.sh. 11 stages PASSED, 3 PARTIAL, 0 FAILED.

StageVerdict
Circuit definitionPASSED
SimulationPASSED
Result extractionPASSED
KiCad netlist generationPASSED
PCB creationPASSED
Footprint assignmentPASSED
PlacementPASSED
RoutingPASSED
DRCPASSED
Gerber exportPASSED
Drill exportPASSED
Schematic generationPARTIAL
SPICE netlist generationPARTIAL
ERCPARTIAL

See docs/smoke-test.md for per-stage evidence (exact JSON/CSV values).

Reproducing the tests

sh
# Model library validation (38/38 checks)
/usr/bin/python3 /Users/roberto/EDA/scripts/validate_models.py

# Individual SPICE testbenches
/opt/homebrew/bin/ngspice -b /Users/roberto/EDA/testbenches/01_op.cir
/opt/homebrew/bin/ngspice -b /Users/roberto/EDA/testbenches/04_tran.cir
# ... etc. for 02..08

# Full smoke-test pipeline (schematic -> sim -> PCB -> routing -> DRC -> gerbers)
zsh /Users/roberto/EDA/smoke/run_pipeline.sh

# Vendor freeze re-enforcement (idempotent)
/Users/roberto/EDA/scripts/freeze_vendor.sh

Further reading

  • docs/architecture.md — architecture decision detail (selected stack, rejected alternatives, source-of-truth contract).
  • docs/limitations.md — full limitations list with detail.
  • docs/smoke-test.md — per-stage smoke-test evidence.
  • AGENTS.md — subagent roster and delegation/operating rules.
  • models/README.md, models/PROVENANCE_CONVENTION.md, vendor/README.md — model library and provenance conventions (owned by the scaffolding agent, read here for reference).

Parts

657
QtyValueFootprintReferences
731N4148Diode_THT:D_DO-35_SOD27_P7.62mm_HorizontalD12, D13, D14, D15, D16, D17, D18, D19, D102, D103, D152, D153, D154, D155, D156, D157 +57
26100nCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC1, C2, C105, C138, C139, C205, C238, C239, C305, C338, C339, C405, C438, C439, C505, C537 +10
24100Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR108, R109, R111, R208, R209, R211, R308, R309, R311, R408, R409, R411, R508, R509, R511, R608 +8
24100uCapacitor_THT:CP_Radial_D8.0mm_P3.50mmC104, C140, C141, C204, C240, C241, C304, C340, C341, C404, C440, C441, C504, C539, C540, C604 +8
24MMBT5401Package_TO_SOT_SMD:SOT-23Q144, Q146, Q193, Q245, Q247, Q293, Q344, Q346, Q393, Q445, Q447, Q493, Q543, Q545, Q593, Q643 +8
24MMBT5551Package_TO_SOT_SMD:SOT-23Q106, Q117, Q118, Q206, Q216, Q217, Q306, Q317, Q318, Q406, Q416, Q417, Q506, Q516, Q517, Q606 +8
1810kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR4, R5, R147, R190, R248, R290, R347, R390, R448, R490, R546, R590, R646, R690, R746, R790 +2
1610Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR130, R131, R229, R230, R330, R331, R429, R430, R529, R530, R629, R630, R729, R730, R829, R830
162.4kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR151, R158, R252, R259, R351, R358, R452, R459, R550, R557, R650, R657, R750, R757, R850, R857
1620Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR142, R150, R243, R251, R342, R350, R443, R451, R541, R549, R641, R649, R741, R749, R841, R849
16200Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR112, R149, R212, R250, R312, R349, R412, R450, R512, R548, R612, R648, R712, R748, R812, R848
1622Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR134, R135, R233, R234, R334, R335, R433, R434, R533, R534, R633, R634, R733, R734, R833, R834
16220Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR119, R120, R218, R219, R319, R320, R418, R419, R518, R519, R618, R619, R718, R719, R818, R819
163.40kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR101, R191, R201, R291, R301, R391, R401, R491, R501, R591, R601, R691, R701, R791, R801, R891
16470kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR163, R166, R167, R168, R171, R172, R173, R174, R363, R366, R367, R368, R371, R372, R373, R374
16DZT5551Package_TO_SOT_SMD:SOT-223-3_TabPin2Q125, Q127, Q224, Q226, Q325, Q327, Q424, Q426, Q524, Q526, Q624, Q626, Q724, Q726, Q824, Q826
114.99kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R2, R3, R114, R213, R314, R413, R513, R613, R713, R813
101kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR179, R194, R294, R379, R394, R494, R594, R694, R794, R894
9TP_GNDTestPoint:TestPoint_Keystone_5000-5004_MiniatureTP3, TP102, TP202, TP302, TP402, TP502, TP602, TP702, TP802
81.00kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR129, R228, R329, R428, R528, R628, R728, R828
81.2kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR145, R246, R345, R446, R544, R644, R744, R844
81.50kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR136, R235, R336, R435, R535, R635, R735, R835
81.58kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR128, R227, R328, R427, R527, R627, R727, R827
810.0kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR115, R214, R315, R414, R514, R614, R714, R814
81000uCapacitor_THT:CP_Radial_D10.0mm_P5.00mmC143, C244, C343, C444, C542, C642, C742, C842
810MResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR175, R176, R177, R178, R375, R376, R377, R378
8137Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR107, R207, R307, R407, R507, R607, R707, R807
818.7Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR192, R292, R392, R492, R592, R692, R792, R892
81uCapacitor_THT:C_Rect_L26.5mm_W11.5mm_P22.50mm_MKS4C171, C172, C173, C174, C371, C372, C373, C374
8330pCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC137, C236, C337, C436, C536, C636, C736, C836
836.5Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR123, R222, R323, R422, R522, R622, R722, R822
84.7kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR148, R249, R348, R449, R547, R647, R747, R847
8470pCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC124, C223, C324, C423, C523, C623, C723, C823
847uCapacitor_THT:CP_Radial_D8.0mm_P3.50mmC116, C215, C316, C415, C515, C615, C715, C815
856Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR126, R225, R326, R425, R525, R625, R725, R825
8DZT5401Package_TO_SOT_SMD:SOT-223-3_TabPin2Q122, Q221, Q322, Q421, Q521, Q621, Q721, Q821
8LS352Package_SO:SOIC-8_3.9x4.9mm_P1.27mmQ121, Q220, Q321, Q420, Q520, Q620, Q720, Q820
8LSK489BPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmQ110, Q210, Q310, Q410, Q510, Q610, Q710, Q810
8MJE15032preamp:TO-220-3_Vertical_Ohmite_WA-T220-101EQ132, Q231, Q332, Q431, Q531, Q631, Q731, Q831
8MJE15033preamp:TO-220-3_Vertical_Ohmite_WA-T220-101EQ133, Q232, Q333, Q432, Q532, Q632, Q732, Q832
647Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR161, R164, R261, R361, R364, R461
41MResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR113, R265, R313, R465
4220kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR263, R264, R463, R464
4464Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR902, R903, R912, R913
4MountingHole_3.2mm_M3MountingHole_3.2mm_M3H1, H2, H3, H4
210uCapacitor_THT:C_Rect_L41.5mm_W19.0mm_P37.50mm_MKS4C265, C465
21uL73:C_Rect_L26.5mm_W7.0mm_P22.50mm_STAX_1uFC165, C365
23.57kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR237, R437
24.7uCapacitor_THT:C_Rect_L41.5mm_W19.0mm_P37.50mm_MKS4C162, C362
24.7uCapacitor_THT:C_Rect_L31.5mm_W15.0mm_P27.50mm_MKS4C262, C462
2845Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR901, R911
2866Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR242, R442
2BAV199Package_TO_SOT_SMD:SOT-23D179, D379
2LM4040B-5.0Package_TO_SOT_SMD:SOT-23U1, U2
2Schottky 1ADiode_THT:D_DO-41_SOD81_P10.16mm_HorizontalD10, D11
2TP_RLY_RETTestPoint:TestPoint_Keystone_5000-5004_MiniatureTP5, TP9
2TVS bidirDiode_SMD:D_SMAD1, D2
1G6K-2F-Y GAINRelay_SMD:Relay_DPDT_Omron_G6K-2F-YK1
1G6K-2F-Y GAIN10Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK5
1G6K-2F-Y HOLD10Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK12
1G6K-2F-Y HOLD3Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK11
1G6K-2F-Y MUTE1Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK2
1G6K-2F-Y MUTE3Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK4
1G6K-2F-Y PERMITRelay_SMD:Relay_DPDT_Omron_G6K-2F-YK6
1G6K-2F-Y SEL1Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK13
1G6K-2F-Y SEL2Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK14
1G6K-2F-Y SEL3Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK15
1G6K-2F-Y SEL4Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK16
1G6KU-2F-Y SPIA1Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK9
1G6KU-2F-Y SPIA2Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK10
1G6KU-2F-Y TRIM1Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK7
1G6KU-2F-Y TRIM2Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK8
1GAIN 0/+3/+10 dBConnector_PinHeader_2.54mm:PinHeader_2x08_P2.54mm_VerticalSW2
1GAIN_LEDConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ6
1IM06TS MUTE2Relay_SMD:Relay_DPDT_AXICOM_IMSeries_JLegK3
1IN1_LConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ101
1IN1_RConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ301
1IN2_LConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ102
1IN2_RConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ302
1IN3_LConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ103

The 624 most common of 657 parts.

More from Bu3nd14/EDA

6
  • 2 layers399 × 162.8 mmAudio routed, the printed circuit board in 3D

    Audio routed

    Bu3nd14/EDA

    Scripted analog EDA + PCB automation environment (KiCad 10 + ngspice + SKiDL) for macOS Apple Silicon

    462 parts
  • 2 layers218.6 × 100 mmPsu routed, the printed circuit board in 3D

    Psu routed

    Bu3nd14/EDA

    Scripted analog EDA + PCB automation environment (KiCad 10 + ngspice + SKiDL) for macOS Apple Silicon

    122 parts
  • 2 layers70 × 40 mmRc circuit, the printed circuit board in 3D

    Rc circuit

    Bu3nd14/EDA

    Scripted analog EDA + PCB automation environment (KiCad 10 + ngspice + SKiDL) for macOS Apple Silicon

    3 parts
  • 2 layers60 × 50 mmTest board ses imported, the printed circuit board in 3D

    Test board ses imported

    Bu3nd14/EDA

    Scripted analog EDA + PCB automation environment (KiCad 10 + ngspice + SKiDL) for macOS Apple Silicon

    2 parts
  • 2 layers60 × 50 mmTest board unrouted, the printed circuit board in 3D

    Test board unrouted

    Bu3nd14/EDA

    Scripted analog EDA + PCB automation environment (KiCad 10 + ngspice + SKiDL) for macOS Apple Silicon

    2 parts
  • 2 layers60 × 50 mmTest board, the printed circuit board in 3D

    Test board

    Bu3nd14/EDA

    Scripted analog EDA + PCB automation environment (KiCad 10 + ngspice + SKiDL) for macOS Apple Silicon

    2 parts

Similar boards

  • 2 layers100.3 × 55.2 mmAmp mosfet-80w, the printed circuit board in 3D

    Amp mosfet-80w

    schenkmi/electronic-projects

    misc electronic projects

    63 parts6CERN-OHL-W-2.0
  • 2 layers240 × 63 mmPowerampC300, the printed circuit board in 3D

    PowerampC300

    profdc9/PowerAmpAudio

    Power Amplifier based on Michael Chua's C300 amplifier

    128 parts25
  • 2 layers167.1 × 67 mmSubAmp, the printed circuit board in 3D

    SubAmp

    smileym4n-collab/Kicadprojects

    55 parts
  • 4 layers59.2 × 106.4 mmAlphaosc, the printed circuit board in 3D

    Alphaosc

    russellmcc/alphaosc

    eurorack digital audio oscillator for synthesizers

    108 parts8GPL-3.0
  • 2 layers337 × 150 mmEEZ PSU consolidated r5B13a, the printed circuit board in 3D

    EEZ PSU consolidated r5B13a

    eez-open/psu-hw

    EEZ H24005 programmable bench power supply (powered by Arduino Due)

    546 parts507
  • 4 layers185 × 95 mmEL Load Analog, the printed circuit board in 3D

    EL Load Analog

    fietser28/EL-Load

    The DCL8010 electronic load module features a DC Electronic Load with several modes and protections. This project is the for the development boards for this project. There is a seperate git project for the firmware.

    344 parts15
  • 4 layers180 × 103.5 mmEEZ DIB DCP405plus, the printed circuit board in 3D

    EEZ DIB DCP405plus

    eez-open/dib-dcp405plus

    BB3+ Programmable 1-ch power module

    437 parts12
  • 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

Questions

How big is the Audio routed PCB?

It measures 392.6 × 198.3 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Audio routed use?

657 parts, built around the LM4040B50FTA, MMBT5401, MMBT5551 and DZT5551. 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 Audio routed KiCad files?

From the Bu3nd14/EDA repository on GitHub, at the commit this page was made from: the board is docs/preamp/data/2026-11-05/L73/audio/audio_routed.kicad_pcb and its schematic smoke/rc_circuit.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Audio routed design in my own project?

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