HOME PRODUCTS DOCS NEWS BETA
DOCUMENTATION

BOM Extractor
Documentation

Extract Bill of Materials from engineering drawings using local AI. Everything runs on your machine — no cloud services, no API keys, no data leaves your environment.

Overview

BOM Extractor is a desktop application that extracts Bill of Materials (BOM) from engineering drawings using local AI. It analyzes technical drawings — assembly diagrams, part lists, title blocks, and balloon callouts — and produces a structured, editable BOM that exports directly to CSV in a format compatible with TCS iON ERP.

Everything runs locally. No cloud services, no API keys, no data leaves your machine.

System Requirements

Component Minimum Recommended
OS Windows 10 / macOS 11+ / Linux Windows 11 / macOS 14+ (Apple Silicon)
RAM 8 GB 16 GB
Storage 3 GB free (for AI model) 5 GB free
GPU Not required (CPU works) Any modern GPU accelerates inference
Python 3.10+ (Mac/Linux only) 3.12+
Internet Required on first run only ---

Installation

Windows

  1. Download BOMExtractor.exe from the Releases page
  2. Run the executable — no installation wizard, no admin rights needed
  3. On first use, the app automatically installs the AI engine and downloads the model (~2 GB)

macOS

  1. Download BOMExtractor-macOS.tar.gz from the Releases page
  2. Extract the archive (double-click or tar xzf BOMExtractor-macOS.tar.gz)
  3. Right-click BOMExtractor.app then select Open (required once to bypass Gatekeeper)
  4. The app auto-creates a Python virtual environment, installs dependencies, and sets up the AI engine on first launch

From Source (All Platforms)

git clone https://github.com/bruhman-rtx/BOM-Extractor-.git cd BOM-Extractor- pip install Pillow python bom_extractor.py

First Run

On the very first launch, BOM Extractor performs a one-time setup:

  1. Ollama Installation — If not already present, the app downloads and installs Ollama, a local AI model runtime
  2. Server Start — Starts the Ollama server on localhost:11434
  3. Model Download — Pulls qwen2.5vl:3b (~2 GB), a vision-language model capable of reading engineering drawings

This process takes 2-5 minutes depending on your internet speed. A progress indicator shows the current step. After first run, the app launches instantly and works fully offline.

Features

Drawing Upload

Upload engineering drawings in the following formats:

Format Extension
PNG.png
JPEG.jpg, .jpeg
Bitmap.bmp
WebP.webp

Click the upload zone or use Ctrl+O (Cmd+O on Mac) to select a file. A thumbnail preview appears in the left panel after upload.

AI-Powered BOM Extraction

Once a drawing is uploaded, the AI model analyzes it and extracts:

  • Part numbers from title blocks, parts lists, and balloon callouts
  • Part names and descriptions
  • Quantities per assembly
  • Material specifications (e.g., SS304, Aluminum 6061, MS)
  • Parent-child relationships to build the hierarchy
  • BOM levels (0 = top assembly, 1 = sub-assembly, 2+ = individual parts)
  • Make/Buy classification
  • Item categories (Finished Good, Semi-Finished, Raw Material, Bought Out, Consumable)
  • HSN/SAC codes for GST compliance (where identifiable)
  • Estimated weight and cost (where identifiable)

The extraction typically takes 15-60 seconds depending on drawing complexity and hardware.

Editable BOM Table

The extracted BOM appears in an editable table in the right panel. Columns:

Column Description
LvlBOM hierarchy level (0, 1, 2, ...)
Part NumberUnique item code
Part NameDescriptive name (indented by level)
QtyQuantity per parent assembly
UOMUnit of measure (EA, KG, M, L, SET)
MaterialMaterial specification
ParentParent item's part number
DescriptionFunctional description
Make/BuyManufacturing source
CategoryItem classification for ERP

Editing: Double-click any cell to modify its value. Use Ctrl+N to add a new row, Delete to remove selected rows.

Tree Diagram

Access via Ctrl+T or the View Tree toolbar button. Opens a visual hierarchy of the BOM with:

  • Color-coded nodes: Blue (Main Assembly, Level 0), Teal (Sub-Assembly, Level 1), Gray (Individual Part, Level 2+)
  • Connector lines showing parent-child relationships
  • Node details: Part name, part number, quantity, material
  • Scrollable canvas for large assemblies
  • Export as text — saves an indented text representation of the tree

CSV Export (TCS iON ERP)

Export via Ctrl+E or the Export CSV toolbar button. The CSV follows the TCS iON ERP BOM import template:

BOM Level,Item Code,Item Name,Quantity,UOM,Material,Parent Item Code,Description,Make/Buy,Item Category,HSN/SAC Code,Unit Weight (kg),Unit Cost (INR) 0,ASM-001,Main Assembly,1,EA,Various,,Complete assembly,Make,Finished Good,,25.0,15000 1,SUB-001,Frame,1,EA,MS,ASM-001,Welded frame structure,Make,Semi-Finished,7308,12.0,8000 2,PRT-001,Base Plate,1,EA,SS304,SUB-001,10mm base plate,Make,Raw Material,7326,3.5,1200

The file uses UTF-8 encoding with BOM (utf-8-sig) for Excel compatibility.

Keyboard Shortcuts

Shortcut Action
Ctrl+O / Cmd+OUpload drawing
Ctrl+E / Cmd+EExport BOM as CSV
Ctrl+T / Cmd+TOpen tree diagram view
Ctrl+N / Cmd+NAdd new BOM row
DeleteDelete selected rows

TCS iON ERP Integration

The CSV output is formatted to match the TCS iON Manufacturing module's BOM import template. To import:

  1. Export the CSV from BOM Extractor
  2. In TCS iON, navigate to Manufacturing → Bill of Materials → Import
  3. Upload the CSV file
  4. Map columns if prompted (column names follow the standard template)
  5. Validate and confirm the import

Supported TCS iON Fields

Field Description Values
BOM LevelHierarchy depth0 (top) to N
Item CodeUnique part identifierAlphanumeric
Item NamePart descriptionFree text
QuantityRequired per parentNumeric
UOMUnit of measureEA, KG, M, L, SET
MaterialMaterial specificationFree text
Parent Item CodeParent's item codeBlank for top level
Make/BuySource classificationMake, Buy
Item CategoryERP categoryFinished Good, Semi-Finished, Raw Material, Bought Out, Consumable
HSN/SAC CodeGST classification4-8 digit code
Unit WeightWeight in kgNumeric
Unit CostCost in INRNumeric

Architecture

┌─────────────────────────────────────────────┐ │ BOM Extractor App │ │ (Python + tkinter GUI) │ ├─────────────────────────────────────────────┤ │ │ │ ┌──────────┐ ┌───────────┐ ┌──────────┐ │ │ │ Drawing │ │ BOM Table │ │ Tree │ │ │ │ Upload │─> │ Editor │─> │ Diagram │ │ │ └──────────┘ └─────┬─────┘ └──────────┘ │ │ │ │ │ ┌────┴─────┐ │ │ │ CSV Export│ │ │ │(TCS iON) │ │ │ └──────────┘ │ ├─────────────────────────────────────────────┤ │ Ollama (localhost:11434) │ │ ┌─────────────────────────┐ │ │ │ Qwen2.5-VL 3B Model │ │ │ │ (Vision + Language) │ │ │ └─────────────────────────┘ │ └─────────────────────────────────────────────┘

Tech Stack

  • Frontend: Python tkinter with custom-styled widgets
  • AI Backend: Qwen2.5-VL 3B running on Ollama (local HTTP API)
  • Data Model: Dataclass-based BOM items with TCS iON field mapping
  • Export: CSV writer with UTF-8-sig encoding
  • Packaging: PyInstaller (Windows .exe), native .app bundle (macOS)

Troubleshooting

"Ollama is not running"

The app auto-starts Ollama, but if it fails:

# Start manually ollama serve

Extraction is slow

  • CPU-only machines: 1-3 minutes per drawing is normal for the 3B model
  • Apple Silicon Macs: Should complete in 15-30 seconds
  • GPU-equipped Windows: Ensure Ollama detects your GPU (ollama ps shows the device)

Model not found

# Re-pull the model ollama pull qwen2.5vl:3b

macOS: "App is damaged" or "Cannot verify developer"

Right-click the app then select Open (not double-click). This bypasses Gatekeeper for unsigned apps. You only need to do this once.

CSV encoding issues in Excel

The export uses utf-8-sig encoding which Excel handles natively. If characters appear garbled, open via Excel's Data → From Text/CSV import wizard and select UTF-8 encoding.

Building from Source

Windows (.exe)

pip install pyinstaller Pillow pyinstaller --onefile --windowed --name BOMExtractor bom_extractor.py # Output: dist/BOMExtractor.exe

macOS (.app)

pip install pyinstaller Pillow pyinstaller --onefile --windowed --name BOMExtractor bom_extractor.py # Output: dist/BOMExtractor.app