app
Fusion - the Fusion 360 Bridge
Public Made by Adomby adom
Drive Autodesk Fusion 360 from the cloud via Adom Bridge: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.
← Commit history
.release-page-head+1−1@@ -1 +1 @@-0c3fadffc4ffebde92af8c3c294b17cf82cd1b7d+8086eb6faf7f37691ec86eba9425a7e38b7e53d0
fusion_helper.py+14−1@@ -45,6 +45,13 @@ GetWindowThreadProcessId = ctypes.windll.user32.GetWindowThreadProcessId WNDENUMPROC = ctypes.WINFUNCTYPE(ctypes.wintypes.BOOL, ctypes.wintypes.HWND, ctypes.wintypes.LPARAM) ++# Console tools (tasklist / taskkill) spawned WITHOUT this flag flash a visible terminal+# window on the user's screen for ~50ms - and some of these run on POLLS, so the user sees+# rhythmic blips while "nothing" is happening (John, 2026-09-01: "really annoying to the+# human"). Every console-tool spawn in this codebase must carry it.+_NO_WINDOW = subprocess.CREATE_NO_WINDOW if hasattr(subprocess, "CREATE_NO_WINDOW") else 0+ def _get_fusion_processes() -> list[dict]: """Get all running Fusion-related processes using tasklist.""" result = []@@ -53,6 +60,7 @@ def _get_fusion_processes() -> list[dict]: ["tasklist", "/FO", "CSV", "/NH"], stderr=subprocess.DEVNULL, text=True,+ creationflags=_NO_WINDOW, ) fusion_names = {"Fusion360.exe", "FusionLauncher.exe", "Fusion.exe", "FusionService.exe", "FusionCEF.exe", "Fusion360Helper.exe"}@@ -113,6 +121,7 @@ def _is_fusion_pid(pid: int) -> bool: stderr=subprocess.DEVNULL, text=True, timeout=5,+ creationflags=_NO_WINDOW, ) fusion_names = {"Fusion360.exe", "FusionLauncher.exe", "Fusion.exe"} for name in fusion_names:@@ -132,7 +141,8 @@ def _force_kill_pid(pid: int): """Force kill a process by PID.""" try: subprocess.run(["taskkill", "/F", "/PID", str(pid)],- stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)+ stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,+ creationflags=_NO_WINDOW) except Exception: pass @@ -230,10 +240,13 @@ def cmd_start(wait_for_addin: bool = True, timeout: int = 120): exe_path = info["exe_path"] print(f"Launching: {exe_path}") try:+ # Fusion itself SHOULD show a window; _NO_WINDOW only suppresses the+ # console that would otherwise ride along with the spawn. subprocess.Popen( [exe_path], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,+ creationflags=_NO_WINDOW, ) except Exception as e: print(f"ERROR: Failed to launch: {e}")
page.json+7−10@@ -11,10 +11,6 @@ "uninstall": "./uninstall.sh" }, "tags": [- "ab",- "bridge",- "fusion",- "desktop-app", "fusion360", "autodesk", "cad",@@ -79,10 +75,7 @@ "build a basic parts library", "add a 3d model to a component", "make a fusion 360 library with 3d",- "set up the fusion bridge",- "fusion dashboard",- "fusion status page",- "open the fusion launch page"+ "set up the fusion bridge" ], "discovery_pitch": "Use the Adom Bridge Fusion 360 bridge when the user wants to DRIVE Autodesk Fusion 360 from the cloud: open/search their team's Fusion cloud designs, lay out a PCB or do electronics, export STEP/IGES/STL/Gerbers/BOM, or build a component library with real rendering 3D. It runs Fusion on the user's own machine via Adom Bridge. NOT for web/browser/login/form-filling (that's the native-browser extension) and NOT for KiCad (that's the kicad bridge).", "brief": "Drive Autodesk Fusion 360 from the cloud via Adom Bridge: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.",@@ -111,5 +104,9 @@ "label": "Part volume", "prompt": "How much material does each printed part in this assembly use?" }- ]-}+ ],+ "author": {+ "name": "John Lauer",+ "email": "[email protected]"+ }+}