TL;DR: This is a modular synth panel generator add-in for Autodesk Fusion
If you're like me and you like making DIY synth modules but absolutely hate milling aluminum panels because little bits of metal go flying everywhere and it's impossible to get all the holes to line up just right and it's just so damn tedious, maybe this thing will help you out.
I've been 3D printing DIY Eurorack module panels for a while now, but until I made this add-in, I'd been manually copying and pasting "template" components over and over again, which resulted in a number of very large and very slow Fusion project files.
With this add-in, you can...
- generate modular synth panels (currently Eurorack and 1U formats are supported), suitable for 3D printing (or CNC?)
- choose any width from 2 to 9000 HP
- set a custom panel thickness
- choose multiple reinforcement types, each of which thicken the center area of the panel, while leaving the panel
thickness in the mounting screw area unchanged:
Shell
: This creates a hollow shell, adding strength while leaving space inside for jacks and switches. Generally useful for 4 HP and larger panels.Solid
: This adds strength to larger blanks, or very narrow modules where the shell approach wouldn't leave enough space for components.
- save custom default values for easy recall
- easily edit generated sketches and features to change dimensions, after-the-fact
Format name | Reference Specification |
---|---|
3U Eurorack | Doepfer - A-100 Construction Details |
1U (Intellijel) | Intellijel - 1U Technical Specifications |
1U Tile (Pulp Logic) | Pulp Logic - About 1U Tiles |
<Your favorite format?> | Contributions welcome! |
- I print with PETG using a 0.4mm nozzle and 0.2mm layer height on a Bambu X1C, without issues.
- When using reinforcements, it'll probably be easiest if you print with the panel face down. 😛
- Pulp Logic tiles are meant to be made in multipes of 6 HP but I won't tell anyone if you make odd sizes.
1️⃣ Open the add-in | 2️⃣ Generate the panel |
---|---|
![]() |
![]() |
3U 6HP Panel (no reinforcement) | 3U 2HP Panel (solid reinforcement) | 3U 6HP Panel (shell reinforcement) |
---|---|---|
![]() |
![]() |
![]() |
1U 12HP Panel (solid reinforcement) | 3U 2HP Panel (solid reinforcement) | 3U 6HP Panel (shell reinforcement) |
---|---|---|
![]() |
![]() |
![]() |
Example generated sketch | Panel width HP in sketch is editable |
---|---|
![]() |
![]() |
- Requires parametric modeling (timeline) to be enabled. Does not work with direct modeling.
- Tested with Fusion 2603.1.31 (August, 2025) on Windows 11. Should work on other operating systems, but they are untested.
You have a few options:
Option 1: You just want to use the add-in
- Download the
ModularSynthPanelGenerator-vX.Y.Z.zip
file from the latest release page. Note that theX.Y.Z
part will change based on the release version. - Unzip it. You can unzip anywhere, but the Installing, Linking, and Removing Scripts and Add-Ins documentation page has suggestions.
Option 2: You plan on contributing
- Fork this repo.
- Clone your fork. You can clone anywhere, but the Installing, Linking, and Removing Scripts and Add-Ins documentation page has suggestions.
- In Fusion open the
Scripts and Add-Ins
dialog by pressingShift + S
or going toUtilities -> Add-Ins -> Scripts and Add-Ins
in the top menu of the Design workspace. - Click the
+
(plus) icon at the top of theScripts and Add-Ins
dialog and selectScript or add-in from device
. - Choose the folder created after unzipping / cloning. It will be named something like
ModularSynthPanelGenerator
orModularSynthPanelGenerator-vX.Y.Z
and will containlib
,commands
andresources
folders, as well as files likeModularSynthPanelGenerator.manifest
andModularSynthPanelGenerator.py
(you may not be able to see some of the folder contents in the+
file dialog). - Verify that you see the
ModularSynthPanelGenerator
add-in in theScripts and Add-Ins
dialog list. - Enable the
Run
option for theModularSynthPanelGenerator
add-in.
When done correctly, the Design workspace Solid -> Create
menu should have a Eurorack Panel Generator
option.
(coming soon)
To update this add-in, download the latest release into the same location and relaunch Fusion.
This project follows the Contributor Covenant 3.0 Code of Conduct.
Useful links:
- Fusion API User's Manual
- Fusion API Reference Manual
- Managing Scripts and Add-Ins
- Fusion 360 API Interactive Cheat Sheet
Development environment notes:
- Launch the editor (Visual Studio Code) from inside Fusion by opening the
Scripts and Add-Ins
dialog (Shift + S
), right-clicking on theModularSynthPanelGenerator
and clickingEdit in code editor
. This allows you to attach the vscode debugger to the running process as well as reload after you've made changes. - I've tried to leave the boilerplate files generated by Fusion's
Create script or add-in
relatively untouched, so that the code can be as modular as possible. Unused boilerplate has been removed where possible. - There are
# type: ignore
comments throughout the code to get Pylance to stop complaining. I would rather not need them, but I'm not sure how to improve this. Any advice or PRs that improve type checking would be greatly appreciated. - I've been using a
.vscode/settings.json
file that looks like this, but it's gitignored because it constains local paths. AFAIK, there's no way to write these paths in a user or operating system agnostic way. Until there's a better solution, I recommend creating a throwaway Fusion add-in from theScripts and Add-Ins
dialog just to grab those paths, then create your own local.vscode/settings.json
file in this project using the paths it generates. You'll probably also want to add in thefiles.exclude
section to hide auto-generated temp files.
{
"python.autoComplete.extraPaths": ["C:/Users/Cowboy/AppData/Roaming/Autodesk/Autodesk Fusion 360/API/Python/defs"],
"python.analysis.extraPaths": ["C:/Users/Cowboy/AppData/Roaming/Autodesk/Autodesk Fusion 360/API/Python/defs"],
"python.defaultInterpreterPath": "C:/Users/Cowboy/AppData/Local/Autodesk/webdeploy/production/2df205e6add6cffdc9b4f8421c671a7d78103826/Python/python.exe",
"files.exclude": {
"**/__pycache__/": true,
"**/*.py[codz]": true,
"**/*$py.class": true
}
}
Files of interest:
File | Description |
---|---|
commands/commandDialog | Boilerplate command code generated by Fusion. You likely won't be touching these files. |
lib/panelUtils/panel_command.py | Most of the command code that would have gone into the boilerplate command entry.py file. This is where the main dialog is initialized and updated. |
lib/panelUtils/panel_options.py | PanelOptions class with panel options and constants, including convenience getters/setters for ui dialog imputs. |
lib/panelUtils/panel_generate.py | Code that actually generates the panel, including the sketch and extrusions. |
lib/generalUtils/debug_utils.py | Debugging utilities |
lib/generalUtils/extrude_utils.py | Extrusion utilities |
lib/generalUtils/persist_utils.py | Persistable class for persisting defaults to disk |
lib/generalUtils/sketch_utils.py | Sketch utilities |
lib/generalUtils/value_utils.py | Value normalization utilities |
(More to come, but in the meantime, if you give this a try and have any issues, please let me know)
This add-in is free. However, if you want to support the project you can do so by buying me a coffee (or synthesizer). Thanks!
This work was heavily influenced by the FusionGridfinityGenerator add-in. I did my best to solve problems in my own way, but if you see similarities in the code or README, don't be surprised. There's no way I could've done this without studying that codebase. I honestly didn't even know Fusion add-ins were a thing until I stumbled across that project. Yay!
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.