altium-export-molecule
Public Made by Adomby adom
Direct Altium -> OCCT molecule/board path: STEP export (bodies) + Gerber export (copper + silkscreen) -> composited top-face overlay -> step2glb molecule mode. Includes make_overlay.py. Hands off to molecule-publish.
Install?
Direct Altium -> OCCT molecule/board path: STEP export (bodies) + Gerber export (copper + silkscreen) -> composited top-face overlay -> step2glb molecule mode. Includes make_overlay.py. Hands off to molecule-publish.
adom-wiki pkg install adom/altium-export-molecule
Latest: v2.3.1, published
Dependencies 3 apps
- app adom/adom-step2glb ^1.1.0
- app barrett-land/adom-desktop-altium-bridge *
- app adom/adom-bridge ^2.0.0
Contents
README
markdownaltium-export-molecule
Take an Altium Designer board to a GLB that actually looks like the board — pads, silkscreen and all — and on to a wiki molecule.

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—.GTSisTF.FilePolarity,Negative, so its features are the mask openings. Using all of.GTLpaints 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.