

Elements
Automatic PCB Analysis and Reverse Engineering
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 20
- Nets
- 11
- Pads
- 40
- Tracks, vias
- 112, 2
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 1 Jul 2026
- Updated
- 26 Jul 2026
Overview
Elements is an open-source printed circuit board by KamMalinski, from the KamMalinski/PRISM repository on GitHub, published under the AGPL-3.0 licence. It is a 2-layer board with 20 parts on 11 nets, routed with 112 tracks and 2 vias.
Its parts include 5 capacitors, 5 resistors, 5 diodes and 5 inductors.
README
README.md
PRISM
PCB Recognition and Intelligent Schematic Mapping
PRISM reconstructs an editable KiCad schematic from aligned images of the top and bottom sides of a PCB. It combines image processing, pad and trace detection, OCR-assisted component recognition, connectivity analysis, manual correction tools, and schematic optimization in one desktop application.
PRISM is currently alpha software. Generated connectivity and component assignments must be reviewed before they are used for manufacturing, servicing, or safety-critical work.
Features
- guided import of TOP and BOTTOM PCB images;
- automatic or manually sampled solder-mask and copper colors;
- board alignment, pad pairing, trace detection, and net reconstruction;
- OCR-assisted labels and component candidates;
- interactive correction editor for pads, traces, pairs, OCR, and components;
- text netlist and KiCad schematic export;
- optional KiCad CLI validation and schematic optimization;
- native desktop builds for Windows, macOS, and Linux.
Requirements
- Python 3.11 or newer when running from source;
- Tk 8.6 or newer;
- Tesseract OCR for OCR features;
- KiCad with
kicad-clifor round-trip validation and optimized previews.
PRISM searches PATH first and then conventional installation locations for
the current operating system. Tesseract can also be selected manually in the
interface.
On Debian or Ubuntu, install the native GUI and OpenCV runtime libraries before running from source or building:
sudo apt-get install python3-venv python3-tk libgl1 libglib2.0-0Run From Source
Create and activate a virtual environment, then install the project:
python -m venv .venvWindows PowerShell:
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
prismmacOS and Linux:
source .venv/bin/activate
python -m pip install -r requirements.txt
prismWindows users can alternatively run .\run.ps1.
Build Native Packages
PyInstaller creates native applications and does not cross-compile. Run the matching script on each target operating system:
# Windows
.\scripts\build\build_windows.ps1# macOS
bash scripts/build/build_macos.sh
# Linux
bash scripts/build/build_linux.shThe scripts create an isolated .venv-build environment and use the shared
configuration in scripts/build/package.py.
| Platform | Output |
|---|---|
| Windows | dist/PRISM/PRISM.exe |
| macOS | dist/PRISM.app |
| Linux | dist/PRISM/PRISM |
Windows and Linux use PyInstaller's onedir layout. Distribute the complete
dist/PRISM directory, not only the executable. The macOS application is
unsigned; public releases should be code-signed and notarized by the release
owner.
Basic Workflow
- Select images of the top and bottom PCB sides.
- Confirm automatic color detection or collect color samples manually.
- Run the analysis.
- Review detected geometry and connectivity in the correction editor.
- Recalculate after corrections and inspect the generated netlist.
- Open the result directory and validate the KiCad schematic.
Generated files are written under ~/PRISM/results by default. Set the
PRISM_OUTPUT_DIR environment variable to use a different location. A local
results/ directory is also excluded from version control.
Dataset
Dataset/ contains twelve PCB examples with TOP/BOTTOM
images and reference KiCad projects. It is intended for repeatable development
and evaluation, not as a formal train/test split.
Reproducible Evaluation
evaluation/ contains the versioned reference
annotations and English-language tools for synthetic regression tests and
ablation studies. A baseline run is started from the repository root with:
python evaluation/run_evaluation.pyThe six supported ablation configurations can be executed with:
python evaluation/run_ablations.pyThe tools generate machine-readable JSON reports, compact Markdown summaries,
and a LaTeX ablation table under evaluation/results/. See the
evaluation guide for sample selection, dependency
requirements, command-line options, report interpretation, and the exact scope
of the synthetic results. These tests exercise controlled KiCad-derived board
images; they do not validate PRISM on photographs of physical PCBs.
Project Structure
.
|-- Dataset/ Test images and reference KiCad projects
|-- evaluation/ Synthetic evaluation, ablations, and reference annotations
|-- scripts/build/ Native build entry points and shared build logic
|-- src/schematic_generator/
| |-- assets/ Application and executable icons
| |-- correction_editor/ Manual reconstruction editor
| |-- detection/ Pad, trace, plane, and pair detection
| |-- diagnostics/ Diagnostic reports
| |-- geometry/ Alignment and rectification
| |-- gui/ Main desktop workflow
| |-- kicad/ KiCad serialization and routing
| |-- netlist/ Connectivity and component inference
| |-- schematic/ Validation and optimization
| |-- platform_support.py Operating-system integration
| `-- __main__.py Application entry point
|-- pyproject.toml Package metadata and runtime dependencies
|-- requirements-build.txt Build-only dependencies
`-- requirements.txt Editable development installationAutomated Builds
The GitHub Actions workflow in .github/workflows/build.yml runs smoke tests
and creates Windows, macOS, and Linux artifacts using the same scripts as local
builds.
Contributing
Keep platform-independent behavior in the application modules. Operating-system
differences belong in platform_support.py, while packaging differences belong
in scripts/build/package.py. New detection or reconstruction behavior should
be checked against multiple samples from Dataset/.
License
No project license has been selected yet. Add a LICENSE file before presenting
PRISM as open-source software or accepting external contributions.
Parts
20| Qty | Value | Footprint | References |
|---|---|---|---|
| 1 | 100mH | Inductor_THT:L_Axial_L14.0mm_D4.5mm_P5.08mm_Vertical_Fastron_LACC | L5 |
| 1 | 100uF | Capacitor_THT:C_Radial_D10.0mm_H16.0mm_P5.00mm | C2 |
| 1 | 100uF | Capacitor_THT:CP_Radial_D14.0mm_P7.50mm | C5 |
| 1 | 10K | Resistor_THT:R_Axial_Power_L20.0mm_W6.4mm_P5.08mm_Vertical | R5 |
| 1 | 10R | Resistor_THT:R_Axial_DIN0516_L15.5mm_D5.0mm_P20.32mm_Horizontal | R1 |
| 1 | 10mH | Inductor_THT:L_Axial_L7.0mm_D3.3mm_P12.70mm_Horizontal_Fastron_MICC | L2 |
| 1 | 10uF | Capacitor_THT:C_Radial_D4.0mm_H5.0mm_P1.50mm | C1 |
| 1 | 1K | Resistor_THT:R_Axial_DIN0617_L17.0mm_D6.0mm_P25.40mm_Horizontal | R3 |
| 1 | 1uH | Inductor_THT:L_Radial_D7.5mm_P5.00mm_Fastron_07P | L1 |
| 1 | 2.2uF | Capacitor_THT:CP_Axial_L80.0mm_D35.0mm_P85.00mm_Horizontal | C3 |
| 1 | 220uF | Capacitor_THT:CP_Radial_D7.5mm_P2.50mm | C4 |
| 1 | 22R | Resistor_THT:R_Axial_DIN0614_L14.3mm_D5.7mm_P15.24mm_Horizontal | R2 |
| 1 | 22mH | Inductor_THT:L_Axial_L24.0mm_D7.1mm_P5.08mm_Vertical_Vishay_IM-10-28 | L4 |
| 1 | 4.7mH | Inductor_THT:L_Axial_L12.8mm_D5.8mm_P20.32mm_Horizontal_Fastron_HBCC | L3 |
| 1 | 470R | Resistor_THT:R_Axial_DIN0918_L18.0mm_D9.0mm_P25.40mm_Horizontal | R4 |
| 1 | D | Diode_THT:D_DO-201AE_P15.24mm_Horizontal | D5 |
| 1 | D | Diode_THT:D_DO-35_SOD27_P3.81mm_Vertical_AnodeUp | D4 |
| 1 | D | Diode_THT:D_DO-15_P10.16mm_Horizontal | D3 |
| 1 | D | Diode_THT:D_A-405_P10.16mm_Horizontal | D2 |
| 1 | D | Diode_THT:D_5W_P10.16mm_Horizontal | D1 |
Questions
What parts does the Elements use?
20 parts. 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 Elements KiCad files?
From the KamMalinski/PRISM repository on GitHub, at the commit this page was made from: the board is Dataset/Elements/Elements/Elements.kicad_pcb and its schematic Dataset/Cascade/Cascade/Cascade.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Elements design in my own project?
Its repository publishes it under the AGPL-3.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).
More from KamMalinski/PRISM
10- 2 layers

- 2 layers

- 2 layers

- 2 layers

- 2 layers

- 2 layers

- 2 layers

- 2 layers

- 2 layers

- 2 layers

Similar boards
- 2 layers66.9 × 74.5 mm

- 2 layers86.4 × 64.8 mm

- 2 layers36.2 × 26.8 mm

Esp32 minimal
atopile/atopile
Design circuit boards with code! ✨ Get software-like design reuse 🚀, validation, version control and collaboration in hardware; starting with electronics ⚡️
20 parts4kMIT - 2 layers108.1 × 393.8 mm

Sweep compact ble
davidphilipbarr/Sweep
Sweep - a small promicro based keyboard inspired by the Ferris.
20 parts2.1k - 2 layers26 × 15.9 mm

TPS54340 Buck Regulator
rusefi/rusefi
rusefi - GPL internal combustion engine control unit
20 parts1.2k - 2 layers67.6 × 30.5 mm

Rgb to hdmi
hoglet67/RGBtoHDMI
Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI
20 parts1kGPL-3.0 - 2 layers44.3 × 28.7 mm

Lin bus adapter esp32
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
20 parts915 - 2 layers89.5 × 61.6 mm

FreeDeck TH 2020-02
FreeYourStream/freedeck-hardware
all the stuff you need to build your own FreeDeck
20 parts772