← Commit history

Upload 1 file(s)

John Lauer ·eb35b99570 ·4mo ago ·parent a943569
1 file changed +24−190
README.md+24−190
@@ -1,6 +1,8 @@ # Adom Desktop - Fusion 360 Bridge -Drive Fusion 360 Electronics from the cloud: open an EAGLE board, lay out copper, render the populated 3D PCB, and export Gerbers / BOM / STEP. Real boards: TI DRV8323SR + DRV8411A motor drivers and an ST VL53L8 time-of-flight sensor.+Drive **Autodesk Fusion 360** from the cloud through [Adom Desktop](https://wiki.adom.inc/adom/adom-desktop). A small local HTTP server that Adom Desktop spawns and proxies `fusion_*` verbs to — it launches Fusion, talks to the bundled **AdomBridge** add-in, and exposes Fusion Electronics + design automation: open an EAGLE board, lay out copper, render the populated 3D PCB, export Gerbers / BOM / STEP, walk the cloud tree, and **search your Fusion cloud files fast via APS**.++Real boards driven through it: TI DRV8323SR + DRV8411A motor drivers and an ST VL53L8 time-of-flight sensor.  ![TI DRV8323SR gate-driver board, rendered in 3D](fz-3d.png) @@ -8,208 +10,40 @@ Drive Fusion 360 Electronics from the cloud: open an EAGLE board, lay out copper  ![ST VL53L8 ToF sensor breakout, populated board](fz-sensor.png) -## Source code + contributing (2026-05)--The Fusion 360 bridge moved out of `adom-inc/adom-desktop`'s monorepo into its own dedicated repo so the community can extend it without coordinating with Adom Desktop's release cycle.--### Where the source lives--The canonical repo is **[`adom-inc/adom-bridge-fusion`](https://github.com/adom-inc/adom-bridge-fusion)** on GitHub. It's private today and will go public after a review pass.--In the meantime, the full source — code, history, contributing guide, license — is **mirrored on this wiki page**:--| Download | What it is | How to use |-|---|---|---|-| [`adom-bridge-fusion-source.tar.gz`](https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-desktop-fusion-bridge/adom-bridge-fusion-source.tar.gz) | Clean source tree, no `.git` directory. ~115 KB. | `tar xzf adom-bridge-fusion-source.tar.gz && cd adom-bridge-fusion/` |-| [`adom-bridge-fusion.bundle`](https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-desktop-fusion-bridge/adom-bridge-fusion.bundle) | Git bundle with full commit history. ~222 KB. | `git clone https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-desktop-fusion-bridge/adom-bridge-fusion.bundle adom-bridge-fusion && cd adom-bridge-fusion && git log` |--No GitHub account needed to download either — both URLs are public.--### How to contribute--We accept community improvements. Most useful targets right now:--- **Newer Fusion versions** — when Autodesk ships a major Fusion update, the add-in manifest + API call shapes may need tweaking. Fork-friendly.-- **Additional export formats** — Fusion supports more than what the bridge currently wraps.-- **Linux support** — Fusion 360 runs on macOS; Linux is a non-starter (Autodesk doesn't ship for Linux), but macOS coverage could expand.--Two contribution paths, depending on your access:--**With a GitHub account (preferred):** wait until we make the repo public, then fork on GitHub and open a PR. We're aiming to flip the repo public in the next maintenance pass.--**Without GitHub access (patch-by-email-style, available right now):** Clone the bundle, make your changes, generate a patch with `git format-patch origin/main..HEAD --stdout > my-changes.patch`, and email it to **`[email protected]`**. Adom maintainers will review and apply.--See `CONTRIBUTING.md` inside the tarball/bundle for the full PR + ship workflow.--### How shipping works after merge--1. Maintainer merges your PR into `main`-2. Maintainer tags `v<X.Y.Z>` + runs `bash scripts/release-bridge.sh fusion360` on their box-3. New zip + manifest published to this wiki page (replaces current version)-4. Every Adom Desktop install running v1.7.19+ auto-picks up your change within 4 hours OR immediately via `adom-desktop refresh_bridges`--No NSIS installer rebuild required. Your code reaches real users in ~30s after merge.--### License--MIT — see the `LICENSE` file in the tarball.------+## Install (via Adom Desktop) -The Fusion 360 bridge is one of three reference implementations bundled with Adom Desktop. It's the simplest of the three — a Python HTTP server that passes commands through to a Fusion 360 add-in via a local socket. The add-in does the actual Fusion API work in-process.--If you're authoring a new third-party bridge, see the [bridge SDK guide](https://wiki-ufypy5dpx93o.adom.cloud/wiki/apps/adom-desktop-bridges) first. Use this page if you're building a bridge to any app that exposes a plugin API the bridge can talk to (Altium, Eagle, SolidWorks add-ins all fit this pattern).--## Quick facts--| | |-|---|---|-| Name | `fusion360` |-| Display | Autodesk Fusion 360 |-| Spawn kind | Python (`server.py`) |-| Port | 8773 |-| Verb prefix | `fusion_*` (16 verbs) |-| Source zip | [`fusion360-bridge-v1.0.0.zip`](https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-desktop/fusion360-bridge-v1.0.0.zip) |-| Manifest | [`fusion360-bridge-manifest.json`](https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-desktop/fusion360-bridge-manifest.json) |-| User-facing skill | [`fusion-SKILL.md`](https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-desktop/fusion-SKILL.md) |--## What it does--- **Launch + window control** — `fusion_start` (handles the webdeploy glob + waits for the add-in handshake + dismisses the startup picker), `fusion_close_window`, `fusion_dismiss_blocking_dialogs`.-- **Design rules + parameters** — `fusion_apply_instapcb_rules`, `fusion_load_design_rules`.-- **Exports** — `fusion_export_step` / `iges` / `stl` / `3mf` / `usdz` / `obj` / `dxf` / `dwg` / `gerbers`. Each accepts a `{cloudFile, output}` or `{localFile, output}` pair.-- **Cloud tree walk** — `fusion_walk_cloud_tree` (lists hubs/projects/folders/files), `fusion_search_cloud_files` (text search within a hub).--## `bridge.json`--```json-{-  "manifest_version": 1,-  "name": "fusion360",-  "displayName": "Autodesk Fusion 360",-  "version": "1.0.0",-  "description": "Fusion 360 add-in bridge: design rules, exports (STEP/IGES/STL/3MF/USDZ/OBJ/DXF/DWG/Gerbers), cloud tree walk, search.",-  "homepage": "https://github.com/adom-inc/adom-desktop",-  "author": "Adom Inc.",-  "license": "MIT",-  "spawn": {-    "kind": "python",-    "entrypoint": "server.py",-    "port": 8773,-    "healthEndpoint": "http://127.0.0.1:8773/status",-    "stopMethod": "kill",-    "killImageName": "python.exe"-  },-  "verbPrefixes": ["fusion_"],-  "verbs": [-    "fusion_start", "fusion_close_window",-    "fusion_apply_instapcb_rules", "fusion_load_design_rules",-    "fusion_export_step", "fusion_export_iges", "fusion_export_stl", "fusion_export_3mf",-    "fusion_export_usdz", "fusion_export_obj", "fusion_export_dxf", "fusion_export_dwg",-    "fusion_export_gerbers",-    "fusion_walk_cloud_tree", "fusion_search_cloud_files",-    "fusion_dismiss_blocking_dialogs"-  ],-  "dependencies": { "python": ">=3.11", "fusion360": ">=2.0.0" },-  "category": "CAD",-  "tags": ["fusion360", "autodesk", "cad", "exports"]-} ```--## Architecture: passthrough-to-add-in--This is the cleanest pattern for any host app that runs Python (or any other language) in-process via a plugin API:-+adom-desktop bridge_install '{"manifestUrl":"https://wiki.adom.inc/api/v1/pages/adom-desktop-fusion-bridge/files/adom-bridge-fusion-manifest.json"}' ```-Docker Claude ──HTTP──→ adom-desktop CLI ──WS──→ Adom Desktop GUI-                                                       │-                                                       │ spawn fusion bridge process-                                                       ▼-                                            fusion360/server.py (port 8773)-                                                       │-                                                       │ socket to add-in-                                                       ▼-                                  Fusion 360 GUI exe + adom-fusion-addin (loaded)-                                                       │-                                                       ▼-                                            Fusion 360 Python API-                                                  (in-process)-```--The bridge is thin — it accepts JSON commands over HTTP, validates args, forwards to the add-in via a local socket, awaits the response, returns to the caller. The add-in (running inside Fusion's own Python interpreter) does the actual `adsk.fusion.*` API work and serializes the result back.--This decoupling means:-- The bridge has zero Fusion-SDK dependencies — it's stdlib Python.-- The add-in can be updated independently of the bridge (different version cadences).-- A Fusion crash takes down the add-in only; the bridge stays up and reports "add-in disconnected" until Fusion restarts. -## Directory layout+AD downloads the manifest + zip, sha256-verifies, and caches it; the cached version supersedes the copy bundled in the AD installer. Manage with `bridge_list` / `bridge_kill` / `bridge_log_read`. -```-fusion360/-├── server.py           ← HTTP entry + JSON dispatch-├── bridge.json-├── BRIDGE_VERSION-├── fusion_detect.py    ← Find FusionLauncher.exe via webdeploy glob-├── fusion_helper.py    ← Win32 helpers: launch, wait, dismiss-startup-picker-├── eagle_lbr.py        ← .lbr file format support for the Eagle import verbs-├── handlers/           ← One module per verb group-│   ├── exports.py      ← All fusion_export_* — POSTs to the add-in-│   ├── cloud_tree.py-│   ├── design_rules.py-│   └── …-├── addin/              ← The Fusion add-in itself (loaded into Fusion's Python)-│   ├── AdomFusionAddin.py-│   ├── AdomFusionAddin.manifest-│   └── commands/       ← One file per command the add-in implements-├── install_addin.py    ← Copies addin/ to %APPDATA%\Autodesk\... where Fusion finds it-├── start.bat           ← Local dev launcher-└── README.md-```--`install_addin.py` is the deployment glue — Fusion only loads add-ins from `%APPDATA%\Autodesk\Autodesk Fusion 360\API\AddIns\<name>\`. After the bridge is installed (or updated), the next `fusion_start` re-runs `install_addin.py` to keep the add-in in sync with whatever version of the bridge shipped.--## Example: export a Fusion design as STEP--```bash-# Open Fusion (handles webdeploy + login + startup picker)-adom-desktop fusion_start--# Walk the cloud tree to find the design-adom-desktop fusion_walk_cloud_tree '{"hub":"YourHub","project":"YourProject"}'+## What it does -# Export — bridge → add-in → adsk.fusion.ExportManager → file on disk-adom-desktop fusion_export_step '{"cloudFile":"/YourHub/YourProject/MyDesign.f3d","output":"C:/tmp/MyDesign.step"}'+- **Launch + drive Fusion** — `fusion_start`, dialog/recovery handling, window screenshots, key/click.+- **Electronics + exports** — open schematic/board, STEP / IGES / STL / 3MF / USDZ / OBJ / DXF / DWG / Gerbers, BOM / CPL, `.lbr` import/export, silkscreen capture, InstaPCB design rules.+- **Cloud files** — `fusion_walk_cloud_tree`, `fusion_search_cloud_files`, and **fast indexed search** via `fusion_aps_search` (Autodesk Platform Services Data Management index — seconds, not the multi-minute folder walk).+- **Self-reporting health** — serves `/status` (the manifest `healthEndpoint`) with a `{led, summary, tooltip}` GUI chip; every spawn logs to `~/.adom/bridge-logs/fusion360.log`. -# Pull the file back to Docker-adom-desktop pull_file '{"filePaths":["C:/tmp/MyDesign.step"],"saveTo":"/tmp"}'-```+`fusion_aps_*` (status / set_client_id / signin / search / get) run the bridge's own PKCE OAuth against APS — see the `fusion-aps-search` and `fusion-aps-signin` skills for the setup. -## Reference: install the source locally to read+## Source code -```bash-curl -L https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-desktop/fusion360-bridge-v1.0.0.zip -o /tmp/fusion-bridge.zip-mkdir -p /tmp/fusion-bridge && cd /tmp/fusion-bridge && python3 -c "import zipfile; zipfile.ZipFile('/tmp/fusion-bridge.zip').extractall()"-ls -la-```+The **canonical source is this wiki page** (`https://wiki.adom.inc/adom/adom-desktop-fusion-bridge`) — a git-backed page. A **GitHub backup mirror** is kept in lockstep at [`adom-inc/adom-desktop-fusion-bridge`](https://github.com/adom-inc/adom-desktop-fusion-bridge) (private). -Read `server.py` for the dispatch pattern (similar to hello sample but with handler dirs), then `handlers/exports.py` for an example of how a bridge passes a request through to a separate process. The `addin/` dir is the OTHER half — what the add-in does in-process inside Fusion.+The full source is also published right here on the wiki page — no GitHub account needed: -## Related+| Download | What it is | How to use |+|---|---|---|+| [`adom-bridge-fusion-source.tar.gz`](https://wiki.adom.inc/api/v1/pages/adom-desktop-fusion-bridge/files/adom-bridge-fusion-source.tar.gz) | Clean source tree, no `.git`. | `tar xzf adom-bridge-fusion-source.tar.gz && cd adom-bridge-fusion/` |+| [`adom-bridge-fusion.bundle`](https://wiki.adom.inc/api/v1/pages/adom-desktop-fusion-bridge/files/adom-bridge-fusion.bundle) | Git bundle with full commit history. | `git clone adom-bridge-fusion.bundle adom-bridge-fusion && cd adom-bridge-fusion && git log` | -- **[Bridge SDK guide](https://wiki-ufypy5dpx93o.adom.cloud/wiki/apps/adom-desktop-bridges)** — `bridge.json` schema, packaging recipe, lifecycle-- **[KiCad bridge reference](https://wiki-ufypy5dpx93o.adom.cloud/wiki/apps/adom-desktop-kicad-bridge)** — most complex of the three; multi-instance, reverse-bridge-- **[Puppeteer bridge reference](https://wiki-ufypy5dpx93o.adom.cloud/wiki/apps/adom-desktop-puppeteer-bridge)** — single-instance, Node + Chrome for Testing-- **[adom-desktop main page](https://wiki-ufypy5dpx93o.adom.cloud/wiki/apps/adom-desktop)** — install the parent app first+> The original home in `adom-inc/adom-desktop` → `plugins/fusion360/` is now a **frozen first-run fallback only** — stale, not canonical. See `STALE_SEED_README.md` there. -## Molecule pipeline+## Platforms -Part of the **Fusion → Hydrogen molecule pipeline** (➤ = you are here):+Windows (full) and macOS (Fusion runs there; add-in paths handled). **Linux is unsupported** — Autodesk doesn't ship Fusion 360 for Linux, so there's no host app for the add-in to attach to. -1. ➤ **[adom-desktop-fusion-bridge](https://wiki.adom.inc/adom/adom-desktop-fusion-bridge)** — Fusion add-in — exports BRD/SCH/STEP/USDZ + silkscreen PNGs-2. [fusion-export-for-hydrogen](https://wiki.adom.inc/adom/fusion-export-for-hydrogen) — skill that orchestrates the bridge export-3. [step2glb](https://wiki.adom.inc/adom/step2glb) — STEP→GLB conversion + silkscreen overlay (auto-run at `adompkg publish`)-4. [adom-molecule](https://wiki.adom.inc/adom/adom-molecule) — imports a published wiki molecule into Hydrogen+## Contributing -Published & installed via [adompkg](https://wiki.adom.inc/adom/adompkg) · bundled in [core](https://wiki.adom.inc/adom/core).+Clone the bundle, make changes, and email a patch (`git format-patch origin/main..HEAD --stdout`) to **`[email protected]`**, or open a PR once the GitHub mirror is public. Useful targets: newer Fusion versions, more export formats, faster cloud search.