Hi all,
I've been building a CLI tool to automate the repetitive parts of going from KiCad to OpenPnP. It's open source (GPL-3.0) and works with any strip feeder setup — I'm using it daily with an Opulo Lumen.
What it does:
- generate — reads a KiCad position CSV and generates an OpenPnP board XML with remapped package names. Fiducials are auto-detected, hand-place parts are automatically disabled.
- ensure-parts — creates missing parts and packages in OpenPnP config with correct heights, tape specs, nozzle tip assignments, and rotation offsets.
- assign — loads feeder assignments from a simple CSV, sets tape type, part pitch, and rotation automatically.
- map — generates a self-contained HTML page showing feeder positions, job parts, missing feeders, and board outlines. Optionally cross-references with a KiCad BOM for IPN/inventory tracking.
- config — manages the base machine config in a git repo (backup, apply, pull, save, status). Version-controlled calibration and vision settings with automatic backup using OpenPnP's own format.
The key idea: a single CSV file (openpnp-package-map.csv) maps KiCad footprints to OpenPnP packages and carries all the tape metadata (type, pitch, width, nozzle tip, rotation offset). This is the single source of truth shared across all projects. When you add a new component type once, every future project picks it up automatically.
Typical workflow:
# Generate board + ensure parts exist
kicad-cli pcb export pos ... | openpnp-tools generate -o pnp -n myboard
openpnp-tools ensure-parts pnp/myboard.board.xml
# Set up machine and run job
openpnp-tools config apply
openpnp-tools assign --reset-unused pnp/feeders.csv
# open OpenPnP, run job, close
# Save tuning changes
openpnp-tools config save -m "tuning: update from myboard"
With a Makefile this becomes just "make setup" before a job and "make save" after.
Install: binaries for Linux, macOS, and Windows on the releases page, or with mise:
mise use -g github:laenzlinger/openpnp-tools@latest
GitHub:
https://github.com/laenzlinger/openpnp-toolsThe interactive feeder map was inspired by Pat Deegan's psypnp scripts.
Happy to hear feedback, feature requests, or ideas for improvement.