master
Download ZIP Propose a change
Name Last commit message Last updated
docs v2.1.0 — direct Altium export: STEP + Gerbers, pads/silk overlay, make_overlay.py · barrett-land 2mo ago
install.sh Publish 2.1.0 · barrett-land 2mo ago
make_overlay.py Publish 2.3.0 · barrett-land 2mo ago
package.json Merge PR #265: Carry full Altium fabrication sources into molecule publishing · AdityaAngajala 1d ago
page.json Merge PR #265: Carry full Altium fabrication sources into molecule publishing · AdityaAngajala 1d ago
README.md Merge PR #265: Carry full Altium fabrication sources into molecule publishing · AdityaAngajala 1d ago
SKILL.md Include native board and fabrication files in final Altium handoff · AdityaAngajala 1d ago
uninstall.sh Publish 2.1.0 · barrett-land 2mo ago

altium-export-molecule

Every molecule export includes <slug>-fab.zip (both sides' fabrication layers and drill) and export.json (producer versions and source hashes). The exporter hands both to molecule-publish, which checks them before and after the page push. See SKILL.md for the tool-specific steps.

Take an Altium Designer board to a GLB that actually looks like the board — pads, silkscreen and all — and on to a wiki molecule.

Altium board exported to GLB with pads and silkscreen

The thing everyone gets wrong

Altium's STEP export contains the board substrate and component 3D bodies. Nothing else. No copper, no silkscreen. Convert it on its own and you get a bare green slab with no pads and no designators, and it is not obvious why.

Copper and silk have to be rebuilt from Gerbers and composited onto the board's top face:

  • silkscreen = .GTO
  • exposed pads = .GTL ∩ .GTS — .GTS is TF.FilePolarity,Negative, so its features are the mask openings. Using all of .GTL paints the covered ground pour gold (~76% of the board) instead of the ~8% that is really exposed metal.

make_overlay.py does that composite, aligned to the .GM1 board rect so it registers exactly.

Which path to use today

Goal Status
GLB / render of an Altium board (pads + silkscreen) ✅ proven end to end
Full molecule (anchored GLB + footprint.json + symbol.json) ⚠️ blocked — Stage ② needs .kicad_pcb emit from altium-pcbdoc; use the v1 KiCad-importer route

Getting the files out of Altium

What How Headless?
STEP OutJob with an ExportSTEP output ❌ one human click on Generate content
Gerbers OutJob with a Gerber output ✅ fully headless via altium_run_outjob

There is no headless STEP-export process in Altium. Pcb:ExportSTEP does not exist, and because Altium silently ignores unknown process ids, calling it reports success and writes nothing. The real PCB:Export is index-based and opens a file dialog. This is settled — do not go hunting for a process id.

Convert

python3 make_overlay.py --gerber-dir gerber --out overlay_top.png
step2glb convert board.step -o board.glb --molecule --silk-top overlay_top.png --compress quantize

--silk-top is silently ignored without --molecule (the GLB comes back byte-identical). Check the response says silkscreen_applied: true. --compress quantize avoids the Draco default, which needs a decoder plain three.js viewers do not have.

The overlay renders coplanar with the board face, so it z-fights: in your viewer set polygonOffset and depthWrite = false on the silkscreen_top material, and keep the camera's near/far tight (0.05 / 20, not 0.001 / 100).

See SKILL.md for the full stage-by-stage recipe and the transfer gotchas.