Closed bug report

Board render (--render-board) only fetches .kicad_pcb/.kicad_sch — components with non-stock 3D models (vendor / project-local ${KIPRJMOD}/3d/) render blank

noah · 11d ago ·closed by barrett-land

Symptom

In the board 3D render (service-kicad → render/board.glb), a component whose footprint 3D model is NOT part of service-kicad`s built-in stock KiCad library renders as a flat footprint (no body). Stock parts render fine (LQFP, 0402 caps, 0603 inductor, etc. all show bodies); a vendor QFN did not.

Root cause (traced end to end)

adom-project-manager --render-board <slug> fetches ONLY the board/schematic sources into its work dir and leaves the model resolution to service-kicad`s own KiCad stock 3D libraries:

/tmp/adom-lbr-apply/glb-<slug>/
  board.kicad_pcb      <- the only file fetched
  3d/                  <- EMPTY

So:

  • ${KICAD*_3DMODEL_DIR}/... refs resolve ONLY if that exact model ships in service-kicads image. A stock QFN-64 (Package_DFN_QFN.3dshapes/QFN-64-1EP_8x8mm_P0.4mm_EP6.5x6.5mm.step) did NOT resolve even though the equivalent LQFP/Capacitor/Inductor/Resistor models did — service-kicads stock set appears incomplete (or the image is stripped).
  • ${KIPRJMOD}/3d/<model>.step refs NEVER resolve, because the render work dir does not fetch the page repos 3d/folder (or any referenced model files) at all. I shipped the STEP in the repo at3d/LAN9370-I_KCX.stepand referenced it as${KIPRJMOD}/3d/LAN9370-I_KCX.step; the render work dirs 3d/ stayed empty and the body still didn`t render.

Proof its not the board: three different model refs for the same footprint (absolute path, ${KICAD10_3DMODEL_DIR}stock QFN,${KIPRJMOD}/3d/` project-local) all produced a BYTE-IDENTICAL board.glb (4030476 bytes) with no body for that ref. The footprint is a normal SMD part (not DNP/hidden). service-kicad was healthy the whole time (KiCad 10.0.2).

Request

For --render-board, fetch and stage the model files the board references so service-kicad can resolve them — specifically:

  1. Pull the page repos ${KIPRJMOD}/3d/(and any other referenced project-local model paths) into the render work dir alongsideboard.kicad_pcb`, and
  2. Optionally ship a complete stock 3D-model set in the service-kicad image (so ${KICAD*_3DMODEL_DIR} refs for any standard package resolve).

Without this, every board with a vendor part (SamacSys/Ultra Librarian/manufacturer STEP) shows that part blank in the PM 3D view — the common case for real designs.

Environment

  • adom-project-manager 0.3.3, service-kicad 0.0.1 (KiCad 10.0.2)
  • private org board, hierarchical schematic, 33-part PCB; the affected part is a Microchip LAN9370 in a QFN-64
  • Reproduced + traced 2026-07-10

1 Reply

barrett-land · 11d ago

Fixed in v0.3.6 — and the traced root cause turned out to be different from the missing-models theory. Two things were going on:

1. The real reason the LAN9370 rendered blank: it's flagged DNP. The footprint LAN9370:QFN40P800X800X90-65N has (attr smd dnp)Do-Not-Populate — and KiCad's 3D export omits DNP footprints by default. That's why no model rendered there regardless of path (a stock QFN, a stock LQFP, and the ${KIPRJMOD} STEP all gave byte-identical output). Proof: removing the dnp flag makes the body appear (glb 4224364 → 4559704, +335 KB for that one part). The STEP file itself is fine (valid QFN-64 ISO-10303-21). So the part reading as "not DNP" wasn't the case in the board data — a main IC left DNP is almost certainly unintended.

Since the PM 3D view is for browsing a design's components (not a manufacturing render), a mis-flagged DNP part silently vanishing is surprising. v0.3.6 now includes DNP footprints in the board GLB so every placed part gets its body.

2. Your other finding was also real and is fixed: project-local models weren't staged. --render-board only fetched .kicad_pcb/.kicad_sch and left the model resolution to service-kicad's stock libs. v0.3.6 now stages the referenced model files into the render bundle:

  • ${KIPRJMOD}/<rel> refs (e.g. ${KIPRJMOD}/3d/LAN9370-I_KCX.step) are fetched from the page repo at <rel> and placed at the same path (verified: the STEP lands in the bundle at 3d/…).
  • custom absolute/relative refs are looked up in a .3dshapes/, a 3d/ folder, or the referenced path.

So non-DNP vendor parts (SamacSys/Ultra Librarian/manufacturer STEPs) now resolve.

Your board: I re-rendered lan9370-stm32-molecule with v0.3.6 — the stored render/board.glb grew 5023107 → 5428848 and the LAN9370 body now shows. If that part is actually populated, also clear the DNP flag on the footprint so it's correct in your BOM/fab outputs.

Item 2 in your request (ship a complete stock 3D set in the service-kicad image): that's a service-kicad concern, not the PM — filing separately if the stock QFN gap persists on non-DNP parts.

Log in to reply.