APP v0.2.0

adom-chiplinter — 3D chip ↔ KiCad footprint linter

Detect every chip's electrical-contact features (legs / pins / pads / balls / tabs) automatically from a 3D model, validate against the KiCad footprint, and bake an annotated GLB so downstream tools can read pad positions from the scene graph. Stage 5b pin-1 vision validation catches rotational ambiguity in QFN/QFP/BGA/SOIC packages where 4-fold or 2-fold symmetric pad layouts make the bake-time orientation an arbitrary tie-break.

adom-chiplinter — 3D chip ↔ KiCad footprint linter
Install this app

Paste this into Claude Code (VS Code panel, Adom editor, or terminal) to install:

I want to install the "adom-chiplinter — 3D chip ↔ KiCad footprint linter" app from the Adom Wiki (https://wiki-ufypy5dpx93o.adom.cloud/wiki/apps/adom-chiplinter). For the Docker CLI: curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-chiplinter/chiplinter -o /tmp/chiplinter && chmod +x /tmp/chiplinter && sudo install -m 0755 /tmp/chiplinter /usr/local/bin/chiplinter && chiplinter install Then verify the install works.

Download v0.2.0

Windows coming soon
macOS coming soon
🐧 Linux coming soon
🐳 Adom Docker CLI chiplinter ·

See all releases on GitHub (private repo — access required)

adom-chiplinter

A Rust CLI + Hydrogen webview that detects every chip's electrical-contact features (legs / pins / pads / balls / tabs) automatically from a 3D GLB model, validates placement against the KiCad footprint, and bakes an annotated GLB so downstream Adom tools can read pad positions from the scene graph.

The "north star": you point chiplinter at a chip directory containing the GLB, KiCad footprint, datasheet PDF, and info.json, and it answers the question "are these aligned?" — with no human override required.

Why this exists

Every Adom flow that touches a real chip — InstaPCB previews, solder-jet planning, heatsink-via routing, KiCad library publishing — needs to trust that the 3D model and the footprint agree on where the pads are and which one is pin 1. chiplinter is the linter that produces that trust.

It runs four detection stages — geometric bbox-fit, kind-aware inside-test, material-color rescue, vision rescue — and writes a single confidence value per chip that downstream tools can gate on:

ConfidenceMeaning
verifiedBoth pad geometry AND the chip's manufacturer indicator agree
highPad geometry uniquely fits at identity rotation (canonical case)
assumedA non-identity rotation won uniquely; verify visually
ambiguousMultiple rotations tie at 100% — vision is the deciding factor
conflictVision saw the indicator at a different quadrant than pad-1

Quick start

chiplinter run path/to/chip-dir          # lint a single chip
chiplinter sweep test-cases/             # full coverage matrix
chiplinter inspect path/to/chip-dir      # interactive Babylon.js webview

Inspector webview

chiplinter inspect serves a Hydrogen webview at http://localhost:18420 showing the chip GLB rendered with FP pad bboxes, raycast lines, the pin-1 marker, and a per-pad walkthrough. One-click Bake annotated GLB writes <mpn>-chiplinter.glb with three named groups in the scene graph:

  • chiplinter_chip_pads — chip-frame rectangle meshes parented under the chip's __root__ (rotates with the chip on a PCB)
  • chiplinter_fp_pads — KiCad footprint pads at the scene root in PCB frame (stays fixed when the chip rotates above)
  • chiplinter_pin1_marker — pin-1 location with full confidence metadata

One-click Validate pin-1 captures a top-down render with N/S/E/W compass labels burned in, ships it to Claude vision with a structured-output schema, compares the indicator quadrant against KiCad pad-1's expected quadrant, and upgrades or downgrades the bake-time confidence accordingly.

Rotational symmetry detection

For QFN/QFP/BGA/SOIC packages with N-fold symmetric pad layouts, multiple orientations of the chip will fit the footprint at 100% coverage. chiplinter detects ties at bake time by running the FP-projection raycast at every one of the 24 axis-aligned rotations; if more than one rotation matches the max hit count, the marker carries rotational_symmetry_detected: true and tied_orientations: [0, 1, 2, 3] (or [0, 2] for 2-fold, etc.).

In this case bake-time confidence is ambiguous — the manufacturer's pin-1 indicator on the chip body is the only signal that breaks the tie. Stage 5b vision validation is the deciding factor.

Sweep results across the staged test set:

chipfamilytiedconfidence
RP2040QFN-56[0,1,2,3]ambiguous
LQFP-48QFP[0,1,2,3]ambiguous
LM358_DFN-8DFN[0,1,2,3]ambiguous
TMP102SOT-563[0,1,2,3]ambiguous
Texas_DSBGA-49BGA[0,1,2,3]ambiguous
iCE40HX1K-TQ144TQFP[0,1,2,3]ambiguous
ATtiny85_SOIC-8SOIC[0,2]ambiguous
W25Q128JVSOIC[0,2]ambiguous
WAGO-2601-3105THT[21]assumed
NE555_DIP-8DIP[1]assumed
USB-C-GCT-USB4085conn[16]assumed

Required infra

  • step2glb — used to convert STEP → color-preserving GLB at chip-staging time
  • claude CLI — used for Stage 5b pin-1 vision validation
  • adom-3d-viewer-babylon9 — vendored 3D viewer ESM bundle (Babylon 9.5.0 + Inspector v9), also published to the Adom Wiki

3D viewer + design-skill audit (v0.2.0)

The inspector webview uses adom-3d-viewer-babylon9 v0.2.0. Compliance vs the 3d-viewer-design skill:

RuleStatus
§1 Babylon engine, §3b gradient, §4a–4d HDRI + lights + shadows + ground
§5a PBRMaterial default
§6a zoom-to-mouse, §6c Shift+Alt+Click recenter, §7 ViewCube
§8a world-origin axes (default ON, R/G/B, 15% scene radius)new in v0.2.0 — toolbar "Axes" button, A keyboard
§8b mesh-local axes (default OFF, toggleable, parented to each GLB root)new in v0.2.0 — toolbar "Mesh axes" button, Shift+A keyboard
§8c screen-space corner triad (always on)deferred to v0.3.0 — second-camera-viewport rendering doesn't fire from the canonical viewer's render loop; needs UtilityLayerRenderer with explicit secondary engine.render() pass
§6b.i adaptive wheelDeltaPercentage⚠ open — currently constant 0.1
§11 Y-up→Z-up✅ via rotateYUpToZUp(scene) exposed on the bundle global

Architecture

The detection pipeline is described in SKILL.md. Source code lives at adom-inc/adom-chiplinter (private repo); the canonical install artifact is the wiki binary asset.

Output artifacts

chiplinter run <chip-dir> produces:

  • chiplinter-report.json — per-pad verdict + scoring metadata
  • chiplinter-inspector.json — manifest for the inspector webview
  • <mpn>-chiplinter.glb (after baking) — annotated GLB
  • <mpn>-pin1-vision.png (after vision validation) — labeled top-down render

chiplinter sweep produces:

  • coverage-matrix.json — rows=chips, cols=stages, cells=PASS|WARN|REFUSE
  • coverage.html — visual coverage matrix
CHIP
chiplinter 25 days ago
adom-chiplinter Linux x86_64 binary v0.2.0 — 3D chip ↔ KiCad footprint linter.
v0.2.0 binary uploadJohn Lauer · 25 days ago
3.4 MB
MD
SKILL.md 25 days ago
adom-chiplinter user-facing SKILL.md v0.2.0
v0.2.0 SKILL.md uploadJohn Lauer · 25 days ago
8.3 KB

Install notes

Adom Docker CLI install steps
curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-chiplinter/chiplinter -o /tmp/chiplinter && chmod +x /tmp/chiplinter && sudo install -m 0755 /tmp/chiplinter /usr/local/bin/chiplinter && chiplinter install

AI Skill — how Claude uses this app

Edit AI Skill

name: adom-chiplinter user-invocable: true description: "3D chip ↔ KiCad footprint linter. Detect every chip's electrical-contact features (legs / pins / pads / balls / tabs) automatically from a 3D model, and validate placement against the KiCad footprint. Stage 5b pin-1 vision validation catches rotational ambiguity in QFN/QFP/BGA/SOIC packages where 4-fold or 2-fold symmetric pad layouts make the bake-time orientation an arbitrary tie-break. Use when: linting a 3D chip against a footprint, finding pin-1, validating pad alignment, baking annotated GLBs with chip-pad / FP-pad scene-graph entries for downstream Adom tools, debugging chip placement, building a chip test library. Trigger words: chiplinter, chip linter, validate chip footprint, chip pad detection, pin-1 detection, pin-1 vision, footprint vs 3d model, bbox-fit chip, chip rotational symmetry, chip-pads alignment, bake annotated glb, chiplinter inspect, chiplinter sweep, chiplinter run."

adom-chiplinter — 3D chip ↔ KiCad footprint linter

Detects every chip's electrical-contact features (legs / pins / pads / balls / tabs) automatically from a 3D GLB model, validates placement against the KiCad footprint, and bakes an annotated GLB so downstream Adom tools can read pad positions from the scene graph.

The "north star": you point chiplinter at a chip directory containing the GLB, KiCad footprint, datasheet PDF, and info.json, and it answers the question "are these aligned?" — with no human override required.

Quick start

# Lint a single chip
chiplinter run path/to/chip-dir

# Lint every chip under test-cases/ and produce a coverage matrix
chiplinter sweep test-cases/

# Open the interactive inspector in a Hydrogen webview
chiplinter inspect path/to/chip-dir --port 18420

A chip directory contains:

  • <mpn>.kicad_mod — KiCad footprint
  • <mpn>.glb — 3D model (color-preserving GLB from step2glb or kicad-cli)
  • <mpn>.pdf — datasheet (optional, used by Stage 0 datasheet extraction)
  • info.json — structural classification + provenance

Detection pipeline

Five stages, self-validating:

StageWhat it does
0Datasheet extraction (Claude vision → <mpn>-datasheet.json sidecar)
1Load + classify (footprint pads, GLB triangles, body materials)
2Z-band slab + 2D rasterize + connected-components → detected pad bboxes
324-rotation fit-test + Hungarian matching (kind-aware inside-test)
4Material-color rescue (filter to gold/metal triangles for inset pads)
5Vision rescue (top-down render → Claude vision detects pin-1 indicator)

Stage 3 produces both the orientation transform and the per-pad correspondence in one pass. Stage 5b (pin-1 vision) is the deciding factor for rotationally- symmetric chips — see "Rotational symmetry" below.

Pin-1 confidence model

The bake step writes chiplinter_pin1_marker.extras.chiplinter.confidence based on pad-fit symmetry detection:

ConfidenceWhenMeaning
highorient #0 uniquely won at 100%kicad-packages3d STEPs author pin-1 in the conventional position; FP authors pad-1 in the matching position. Identity-rotation match means the chip's authored pin-1 indicator aligns by construction.
ambiguousmultiple rotations tied at 100%The chip's pad layout is rotationally symmetric (QFN/QFP/BGA/SOIC). Vision validation is the deciding factor.
assumeda non-identity rotation won uniquelyPosition derives from FP pad-1; chip-body indicator is the ground truth. Verify visually before reflow.
verifiedvision confirmed indicator at expected quadrantHigh confidence — both pad geometry and the manufacturer's chip-body indicator agree.
conflictvision saw indicator at a different quadrantReal disagreement. Downstream tools should refuse to auto-flow; human review required.
vision_inconclusivevision ran but couldn't see an indicatorFalls back to bake-time confidence.

Rotational symmetry

For QFN/QFP/BGA/SOIC packages with N-fold symmetric pad layouts, multiple orientations of the chip will fit the footprint at 100% coverage. The bake step detects ties by running the FP-projection raycast at every one of the 24 axis-aligned rotations; if more than one rotation matches the max hit count, the marker carries rotational_symmetry_detected: true and tied_orientations: [0, 1, 2, 3] (or [0, 2] for 2-fold, etc.).

In this case bake-time confidence is ambiguous — the manufacturer's pin-1 indicator on the chip body is the only signal that breaks the tie. Pin-1 vision validation is built in: render top-down via chiplinter inspect, click "Validate pin-1," and the inspector ships a labeled top-down PNG to Claude vision with a structured-output schema. The result writes back to the baked GLB extras.

Output artifacts

chiplinter run <chip-dir> produces:

  • chiplinter-report.json — per-pad verdict + scoring metadata
  • chiplinter-inspector.json — manifest for the inspector webview
  • <mpn>-chiplinter.glb (after baking) — annotated GLB with three named groups:
    • chiplinter_chip_pads (under __root__) — chip-frame rectangle meshes
    • chiplinter_fp_pads (at scene root) — FP pads in PCB frame
    • chiplinter_pin1_marker — pin-1 location + confidence metadata

chiplinter sweep produces a coverage matrix (coverage-matrix.json + coverage.html) showing every chip's pass/warn/refuse status across the detection pipeline.

Inspector webview

chiplinter inspect <chip-dir> --port 18420 serves an interactive Babylon.js webview at http://localhost:18420 showing:

  • The chip GLB rendered with FP pad bboxes + raycast lines + pin-1 marker
  • Per-pad walkthrough that proves each FP pad ↔ chip-surface association
  • 24-orientation iteration table with coverage % and σ
  • One-click "Bake annotated GLB" → writes <mpn>-chiplinter.glb
  • One-click "Validate pin-1" → captures top-down PNG, ships to vision, shows verdict (Verified / Conflict / Inconclusive) with the bake-time symmetry context

The inspector uses a vendored ESM build of adom-3d-viewer-babylon9 (Babylon 9.5.0 with the new Inspector v9). Open the page in a Hydrogen webview tab — not in the deprecated Adom Viewer panel.

CLI flags

Usage: chiplinter <COMMAND>

Commands:
  run      Run detection on one chip directory; emits chiplinter-report.json
  sweep    Run all chips under a test-cases directory; emits coverage matrix
  inspect  Generate inspector manifest + serve the webview
  install  Deploy this binary + SKILL.md to the user's PATH
  help     Print this message or the help of the given subcommand(s)

Run options:
  --verbose          Detailed per-band diagnostics

Inspect options:
  --port <PORT>      [default: 18420]
  --no-serve         Generate manifest only, don't serve

Sweep options:
  [cases_dir]        [default: test-cases]

Required infra (auto-checked by chiplinter install)

  • step2glb — used to convert STEP → color-preserving GLB at chip-staging time (chiplinter consumes pre-staged GLBs, but the staging pipeline assumes step2glb is on PATH)
  • claude CLI — used for Stage 5b pin-1 vision validation
  • adom-wiki (optional) — for publishing chip libraries

Troubleshooting

  • chiplinter inspect shows blank canvas — the vendored 3d-viewer assets weren't installed alongside the binary. The binary must be co-located with web/inspector.html and vendor/3d-viewer/. For now, run inspect from a checkout of adom-inc/adom-chiplinter.
  • Vision verdict is "conflict" — the manufacturer pin-1 indicator on the chip body disagrees with KiCad pad-1's quadrant. For 4-fold symmetric chips this is a true ambiguity that needs human review before reflow.
  • chiplinter sweep REFUSES on multiple chips — check info.json for the structural_type field; some classes (smd_inset_pads, hybrid_smd_plus_mech_clip) need Stage 4 material rescue or Stage 5 vision rescue, which require the corresponding flags to be enabled in DetectionParams.

Related

  • adom-3d-viewer-babylon9 — vendored 3D viewer ESM bundle (Babylon 9.5.0 + Inspector v9). Also published to the Adom Wiki.
  • adom-chipfit — sister tool, validates a chip GLB against a footprint with a simpler single-chip scope; chiplinter is the rebuilt "north-star" detector.
  • step2glb — STEP → GLB converter; chiplinter consumes the GLB output.

Sub-Skills
?
What are Sub-Skills?

Sub-skills are community-contributed AI skill extensions for this component. They teach AI assistants about specific tools, configurators, or workflows.

Examples:

  • A manufacturer’s configuration tool for a motor controller
  • A community-written design guide for an amplifier circuit
  • An automated test/validation script for a sensor module

How to add one: Click Add Sub-Skill, provide the URL to your skill and a brief description. Submissions are reviewed by the Adom team before going live.

No sub-skills yet. Be the first to contribute one!

🔎 How Claude finds this page (discovery snippet)

This page opts into Adom Wiki auto-discovery. When a user working in Claude Code mentions any of the trigger phrases below, Claude can proactively suggest this page. The pitch is exactly what Claude will say.

Pitch
"Lint a 3D chip GLB against its KiCad footprint with a self-validating bbox-fit detector. Detects pin-1, flags rotationally-symmetric pad layouts (QFN/QFP/BGA/SOIC) where pad-fit alone can't disambiguate, and ships pin-1 vision validation that reads the manufacturer indicator off the chip body. Bakes an annotated GLB with chip-pads, FP-pads, and pin-1 marker named in the scene graph for downstream Adom tools."
Triggers
"chiplinter", "chip linter", "validate chip footprint", "chip pad detection", "pin-1 detection", "pin-1 vision", "pin-1 validation", "footprint vs 3d model", "bbox-fit chip", "chip rotational symmetry", "ambiguous chip orientation", "chip-pads alignment", "bake annotated glb", "chiplinter inspect", "chiplinter sweep", "chiplinter run", "chip orientation tie-break", "qfn pin-1", "qfp pin-1", "bga pin-1", "soic pin-1"

Recent activity

10 commits