---
name: adom-lbr-fusion-export
description: >
  Export a KiCad part to a Fusion 360 library (.lbr) with a REAL footprint and a
  3D body — and avoid the four traps that bite. Companion to the adom-lbr app.
  Use when generating/importing an EAGLE .lbr for Fusion 360 (or Altium/OrCAD),
  attaching a 3D model to a Fusion package, or debugging a wrong footprint / a
  gray 3D placeholder / a rejected URN. Trigger words: fusion library export,
  fusion 360 library, lbr for fusion, eagle lbr, .lbr footprint, lbr 3d model,
  package3d, package3dinstance, wip_urn, fusion cloud urn, adsk.wipprod fs.file,
  bind 3d, create3dpackage, lbr placeholder footprint, lbr footprint wrong,
  fusion gray placeholder, fusion no components, altium lbr, orcad lbr.
---

# adom-lbr — Fusion 360 library export

How to turn a KiCad part into a Fusion 360 library that places correctly — with
the real footprint and a 3D body. The same `.lbr` also imports into **Altium**
and **OrCAD**. This skill is the focused field guide; the `adom-lbr` app is the
tool. Read this before exporting an `.lbr` you'll fabricate or hand to Fusion.

## The one-liner

```bash
adom-lbr generate --sym part.kicad_sym --fp part.kicad_mod --model part.step -o part.lbr
#                                        ^^^^ real footprint   ^^^^^^^ 3D handoff sidecar
```

Then the **Fusion bridge attaches the 3D** (it can't be baked into the file).

## The four traps (this is why the skill exists)

1. **No `--fp` → a 2-column PLACEHOLDER, not the real footprint.** Without the
   `.kicad_mod`, every pad is dumped into two columns. A 4-sided LQFP comes out
   as a domino. **Always pass `--fp` for anything you'll fabricate.** The tool now
   prints a HINT when you forget — heed it.

2. **3D is a Fusion-side ATTACH, not a flat-file write.** A 3D body only renders
   once Fusion brings the model into a session. So the `.lbr` stays 2D and the
   **bridge** does: open `.lbr` (library active) → `Electron.Create3DPackage` →
   import `model.path` → orient → `Package3DStop` (**FINISH**) → Save. That step
   both binds *and* renders. `--model` just emits the sidecar that points the
   bridge at the model + package.

3. **Self-hosted models use `wip_urn`, NOT `urn:adsk.eagle:package`.** That eagle
   form is for MANAGED (library.io) parts only. A model you upload yourself links
   by the **versioned file URN** with an empty `urn`:
   ```xml
   <package3d name="P" urn="" wip_urn="urn:adsk.wipprod:fs.file:vf.<id>?version=N"
              locally_modified="yes" type="model">…</package3d>
   <!-- device: --> <package3dinstance package3d_urn="urn:adsk.wipprod:fs.file:vf.<id>?version=N"/>
   ```

4. **Never put a `dm.lineage` URN in the `.lbr`.** Fusion pins the *versioned*
   `fs.file:vf …?version=N`. `dm.lineage` is the stable cross-version id — keep it
   only as sidecar provenance. `adom-lbr bind-3d` refuses a `dm.lineage` URN.

Bonus: a pre-written `wip_urn` shows a **gray placeholder** on a cold open until
the model is brought into a session — so `bind-3d` is a fast-path for known-synced
models, never a substitute for the bridge attach.

## The flow (who does what)

| Step | Who | Command / action |
|---|---|---|
| Generate 2D `.lbr` + sidecar | adom-lbr | `generate --sym … --fp … --model part.step` |
| Attach 3D (binds **and** renders) | Fusion bridge | Create3DPackage → import → orient → FINISH → Save |
| Report the minted URN | Fusion bridge | `fusion_aps_file_info {query:"<package>"}` → `fs.file:vf…?version=N` |
| Record URN back (provenance) | adom-lbr | `bind-3d --record-only --sidecar part.fusion3d.json --wip-urn <that>` |
| (Optional) bake binding into `.lbr` | adom-lbr | `bind-3d --lbr part.lbr --wip-urn <that>` |

The **in-Fusion library is the runtime source of truth**; the sidecar is
adom-lbr-owned bookkeeping (idempotency + provenance).

## Footprint mapping facts

- KiCad is Y-down, EAGLE is Y-up → **Y is negated**.
- The KiCad pad angle maps **directly** to EAGLE `rot=` (KiCad 90 → `R90`),
  matching Fusion's own export — top/bottom QFP/SOIC pads get `rot="R90"`.
- Silkscreen outline comes from the footprint body (`F.SilkS` → `F.Fab` → pad
  extents), matched per-layer.

## Drawing the chip outline on the symbol — `--symbol-art`

If adom-symbol gave a 3D outline (`<mpn>-3d-outline-*.svg`), draw it on the symbol:

```bash
adom-lbr generate --sym P.kicad_sym --fp P.kicad_mod --symbol-art P-3d-outline-bold.svg -o P.lbr
```

- Transcribes the outline's polylines → EAGLE `<wire>`s on layer 94, Y negated,
  centred + scaled to ~0.38× the body (matches adom-symbol). Tune with
  `--symbol-art-scale`. One `.lbr` carries it into Fusion/Altium/OrCAD.
- **Pitfall — heavy art:** `-blueprint` ≈ 3000 wires / ~300 KB; the tool prints a
  WARN telling you to use a lighter `-bold`/`-thin` outline. Heed it.
- **Standing rule:** match adom-symbol's outline as closely as possible on every
  export. `.lbr` done; KiCad `.kicad_sym` + future native exporters are TODO
  ([../../docs/ROADMAP.md](../../docs/ROADMAP.md)).

## Quick triage

| Symptom | Fix |
|---|---|
| Footprint is two columns / a domino | regenerate **with `--fp part.kicad_mod`** |
| Fusion: "No Components" | `adom-lbr lint part.lbr` → fix the reported code |
| 3D body is a gray placeholder | let the bridge attach it (Create3DPackage → FINISH) |
| `bind-3d` rejected the URN | self-uploaded → `--wip-urn` (`fs.file:vf…?version=N`); managed → `--urn` |
| 3D offset / wrong pin 1 | run chipfit; set `placement` in the sidecar before FINISH |
| Chip drawing on symbol too big/small | `--symbol-art-scale <frac>` (default 0.38) |
| `.lbr` huge / symbol editor laggy | use a lighter outline (`-bold`/`-thin`) or drop `--symbol-art` |

Human walkthrough + screenshots: **[README.md](README.md)** next to this skill
(and the deeper dive in [docs/fusion-export.md](../../docs/fusion-export.md)). This
is a sub-skill of the **[adom-lbr](https://wiki.adom.inc/adom/adom-lbr)** app — it
installs and surfaces with it.
