A parametric organ console designer that runs entirely in your browser. Pick a console type, drag the parameters, and watch the instrument rebuild as you go. When it looks right, take away a STEP model, an STL, a nested DXF, a cut list, dimensioned A3 drawings and an assembly booklet — everything a workshop needs.
Nothing is uploaded and nothing is computed on a server. The CAD kernel is OpenCascade compiled to WebAssembly, running next to the page. Your designs stay in your browser.

Seven things it builds
Each type is a different piece of furniture with its own parameters, not the same box with options switched off.
| Type | What it is |
|---|---|
| Open console | Table on a pedestal, with terraced drawknob jambs either side of the manuals |
| Klais | Open console whose drawknob terraces bend onto a concentric arc facing the player |
| Angled jambs | A flat stop jamb each side, turned toward the player under a roof, carrying drawknobs or rocker tabs |
| Inline | The simple one — a plain box, manuals recessed into a table, stops on rocker tabs above |
| Upright cabinet | Closed cabinet with the manuals in an opening, flat register panels and a music desk |
| Pedalboard | AGO-pattern pedals in a frame of two cheeks with a back and front rail |
| Bench | Top, two end panels on feet, and a music shelf braced across the back |


It rebuilds while you drag
A change takes 30 to 110 ms to rebuild, so parameters apply as you move the slider rather than after you let go. Manual count and key count, jamb geometry, drawknob rows and columns and stagger, swell pedal count and travel, board thickness, the table recess, the music desk, speaker openings, pedal dimensions and sharp cap geometry — all live.
That speed comes from splitting the work in two. The layout is computed in JavaScript and emits a board list; the CAD kernel rebuilds that list as exact solids only when you ask for an export. Neither side reimplements the other, so the preview you dragged and the STEP file you download cannot drift apart — a test in the repository compares the kernel’s bounding box against the browser’s, board by board, and fails if they disagree by more than the sagitta of one curved segment.
Two ways to look at it


Realistic is lacquered wood under warm light, for judging how it will look. CAD is flat shading with every edge drawn, for reading how it goes together. Explode it by component and each subassembly moves as one rigid piece; explode it by board and every panel separates on its own, like a parts list in space.
Thirty measurements on the model

A console that looks right and plays badly is the expensive mistake. The designer carries a catalogue of 30 named measurements — overall width, depth and height; table height and depth; manual width, natural length, rise and setback; lowest manual height; cheek thickness and clearance; jamb width and step geometry; drawknob and piston spacing; pedal opening; foot reach and foot height — shown as dimension lines on the model and ticked off a checklist, so the numbers that decide whether the console is playable are on screen while you drag the sliders that change them. A 175 cm scale figure can be switched on beside the console when you want to sanity-check reach.
What you take to the workshop



| Output | Format | What it answers |
|---|---|---|
| Model | STEP | The exact solids, for taking into any other CAD package |
| Mesh | STL | For printing, or for a viewer that only reads meshes |
| Nesting | DXF · A3 per sheet | Every flat board laid onto stock, for a CNC or a laser |
| Cut list | CSV | What to buy, and what to cut it into |
| Drawing sheets | PDF · A3 or A4 | General arrangement, the assembly exploded from both sides, and a sheet for each sub-assembly too fiddly to show inline |
| Assembly booklet | One step to a page, the parts for that step picked out from the ones already standing | |
| CAD geometry | PDF on layers | The four views at full size, for dimensioning and printing elsewhere |
Three details that matter more than they sound:
- The drawings are drawings, not a contact sheet. Front elevation, plan directly below it and end elevation directly beside it, all at one scale in third-angle projection. You can measure one view with a rule and know it holds for the others.
- The nesting only makes guillotine cuts. A panel saw and a track saw can only cut edge to edge across whatever is in front of them. A nesting that packs parts into pockets is optimal on paper and unbuildable on a Saturday morning, so every cut here splits one rectangle into two, all the way down. Kerf, edge margin and grain direction are yours to set.
- One numbering throughout. Part 12 on the drawings is part 12 in the booklet and row 12 on the cut list. Nothing invents a number or a size.
Eighteen consoles to start from
The panel opens on a preset picker: eighteen shipped consoles from one to five manuals, modelled on the published dimensions and stop layouts of real instruments and named for what they are — a one-manual portable practice organ, a two-manual home console with a tab rail, a three-manual French terraced console, a five-manual cathedral console with terraced jambs, a four-manual historic case with 96 drawknobs.
Save your own and they are kept in the browser and marked with a star. Export writes your whole library to one JSON file, Import reads back a library, a single preset, or a preset saved by the old Streamlit Console Organizer. A preset records only what differs from its console type’s defaults, so it keeps working as new parameters are added.
How it works
| CAD kernel | OpenCascade (OCP.wasm 8.0.1.1) compiled to WebAssembly |
| Modelling | build123d 0.13.0, the same geometry code as the Streamlit original |
| Python runtime | Pyodide 314.0.7 — CPython 3.14 in the browser |
| Preview | Three.js, driven by a layout engine written in JavaScript |
The runtime is a 19 MB download the first time, cached afterwards. That is not an oversight: 131 MB of the OpenCascade module is compiled code, with no debug sections left to strip. A full parametric CAD kernel in a browser tab costs what it costs — so the page gives you something to look at while it arrives instead of a spinner.
Over HTTPS the archive is stored in Cache Storage and fetched once. Over plain HTTP there is no Cache Storage, so it comes down on every visit.
Replaces the Console Organizer
This is the successor to the Streamlit-based Console Organizer, and it is a different tool rather than a new coat of paint: six console types became seven, the four exports became seven, presets and the measurement catalogue are new, and there is no longer a server in the loop. Presets saved by the old app still import.
Open source
The complete source is on the OpenPipes GitHub. It deploys as static files to any web host — no Node, no Python, no build step at the receiving end.