Generate shopping lists from Nonlinearcircuits PDF build guides.
If you've ordered a bunch of NLC PCBs and want to know exactly what components to buy, this tool extracts the Bills of Materials from the PDF build guides and creates organized shopping lists.
- Reads NLC PDF build guides and extracts the component lists
- Combines and organizes components across multiple modules
- Generates shopping lists showing exactly what to order (with quantities!)
- Includes part numbers for Tayda and Mouser where available
Example: You ordered 5 NLC modules. Instead of manually going through 5 PDFs and adding up how many 100K resistors you need total, this tool does it for you.
You'll need to install a few things first. Don't worry—this only takes a few minutes!
| Requirement | What it is | How to check if you have it |
|---|---|---|
| Python 3.8+ | Programming language that runs the tool | Open Terminal and type python3 --version |
| Java | Required for reading PDFs | Type java -version in Terminal |
| The NLC PDF build guides | Download from your NLC order or the NLC website | — |
Mac:
# Install Homebrew first (if you don't have it)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Then install Python
brew install pythonWindows: Download from python.org and run the installer. Important: Check the box that says "Add Python to PATH" during installation.
Linux:
sudo apt update
sudo apt install python3 python3-pip python3-venvMac:
brew install javaWindows: Download from java.com and run the installer.
Linux:
sudo apt install default-jreDownload and unzip this repository, or clone it:
git clone https://github.com/yourusername/nlc-bom-tools.git
cd nlc-bom-toolsOpen Terminal (Mac/Linux) or Command Prompt (Windows), navigate to the folder, and run:
# Create a virtual environment (keeps things tidy)
python3 -m venv venv
# Activate it
source venv/bin/activate # Mac/Linux
# OR
venv\Scripts\activate # Windows
# Install the required packages
pip install tabula-py pandas openpyxlNote: You'll need to run source venv/bin/activate (or venv\Scripts\activate on Windows) each time you open a new Terminal window to use this tool.
- Put your NLC PDF build guides in a folder (e.g.,
~/nlc-pdfs/) - Extract the BOMs from the PDFs into a combined file
- Generate a shopping list from that file
python3 nlc_bom_extractor.py ~/nlc-pdfs/ -o csv --combineThis creates output/all_boms_combined.csv containing all the component data.
What the options mean:
~/nlc-pdfs/— The folder containing your PDF files-o csv— Output as a CSV file--combine— Combine all PDFs into one file
python3 nlc_bom_processor.py output/all_boms_combined.csv --shopping shopping.xlsxThis creates output/shopping.xlsx — an Excel file with your complete shopping list!
First, see what modules are available:
python3 nlc_bom_processor.py output/all_boms_combined.csv --list-modulesThen generate a list for just those modules:
python3 nlc_bom_processor.py output/all_boms_combined.csv --shopping shopping.xlsx \
--modules "Sloth Chaos,Divine CMOS,4SEQ"Tip: Module matching is flexible—"sloth" will match "1u Sloth Chaos", "Super Sloth", etc.
python3 nlc_bom_processor.py output/all_boms_combined.csv --shopping ics.csv --type icOther types you can filter: resistor, capacitor, transistor, diode, connector, pot, led
python3 nlc_bom_processor.py output/all_boms_combined.csv --statsThis shows you things like:
- Total component count
- Most-used components
- Which modules have the most parts
Just change the file extension:
python3 nlc_bom_processor.py output/all_boms_combined.csv --shopping shopping.csv| Column | What it means |
|---|---|
| Component | What the part is (e.g., "100K", "TL072", "3.5mm Jack") |
| Type | Category (resistor, capacitor, ic, etc.) |
| Qty | How many you need total |
| Package | Size/footprint (0805, DIP, etc.) |
| Tayda_PN_1/2/3 | Tayda Electronics part numbers |
| Mouser_PN_1/2/3 | Mouser part numbers |
| Modules | How many of your modules use this part |
The Excel file has multiple sheets:
- All Components — Everything in one list
- Resistor — Just resistors
- Capacitor — Just capacitors
- Ic — Just ICs
- etc.
Extracts component lists from PDF build guides.
python3 nlc_bom_extractor.py <pdf_folder> [options]| Option | What it does |
|---|---|
-o csv |
Output as CSV (default) |
-o excel |
Output as Excel |
--combine |
Combine all PDFs into one file |
-r |
Search subfolders too |
-d folder |
Save output to a specific folder |
Processes extracted data and generates shopping lists.
python3 nlc_bom_processor.py <input_file> [options]| Option | What it does |
|---|---|
--shopping file.xlsx |
Generate shopping list (Excel) |
--shopping file.csv |
Generate shopping list (CSV) |
--modules "A,B,C" |
Only include specific modules |
--list-modules |
Show all available module names |
--type resistor |
Only include one component type |
--stats |
Show statistics |
-o file.csv |
Export cleaned/normalized data |
--max-pn 5 |
More part number columns (default: 3) |
--no-output-dir |
Save in current folder instead of output/ |
Python isn't installed or isn't in your PATH. See the installation instructions above.
Quick fix for Mac:
brew install pythonYou need to activate the virtual environment and/or install dependencies:
source venv/bin/activate # Mac/Linux
pip install tabula-py pandas openpyxlJava isn't installed. See the installation instructions above.
Quick fix for Mac:
brew install javaThese are harmless—the extraction still works. You can hide them:
python3 nlc_bom_extractor.py ~/pdfs/ --combine 2>/dev/nullThe module name might be slightly different. Check what's available:
python3 nlc_bom_processor.py output/all_boms_combined.csv --list-modulesModule matching is case-insensitive and partial, so try shorter names like "sloth" instead of "Sloth Chaos".
Make sure you're specifying the correct path. The input file is usually in the output/ folder:
python3 nlc_bom_processor.py output/all_boms_combined.csv --shopping shopping.xlsx- Start small: Test with one or two PDFs first to make sure everything works
- Check the output: Open the Excel file and verify it looks reasonable before ordering parts
- Part numbers aren't perfect: Not every component has a Tayda/Mouser part number in the PDF—you may need to look some up manually
- Back up your PDFs: Keep your original NLC build guide PDFs somewhere safe
If you run into problems:
- Make sure Python and Java are installed correctly
- Make sure you've activated the virtual environment (
source venv/bin/activate) - Check the troubleshooting section above
- Look at the exact error message—it usually tells you what's wrong
- Nonlinearcircuits — Andrew Fitch's amazing DIY synth modules
- tabula-py — PDF table extraction
MIT License — feel free to use and modify.