Quick start
- Drop an audio file, or click to browse — wav, mp3, m4a, flac, most things your browser can decode natively.
- Analysis runs in the background (a Web Worker, so the page won't freeze) — watch the status readout for progress on longer files.
- Adjust Length/Width, Max Depth, Max Frequency in Simple mode — or switch to Advanced for bit sizes, feed rates, and roughing.
- Optionally trim to a window of the track (see Trim below) — the board resizes to match that window, it doesn't stretch a short clip to fill a fixed size.
- Check the 3D preview: orbit, use Section or X-Ray to look inside, Reach to flag spots the bit can't fully carve, hit Play to hear it while a marker traces the relief in sync.
- Download G-code for the CNC, and/or STL to sanity-check the shape in a slicer or CAM tool first.
Board & carve (Simple mode)
- Length
- Footprint along the time axis — what the track gets stretched (or, with a trim active, cropped) across.
- Width
- Footprint along the frequency axis.
- Max depth
- Deepest point of the carve, 1–20mm (0.04–0.79in). Type past either end and it clamps to the limit and says why in the log — it's not ignoring your input, you hit the configured ceiling.
- Max frequency
- Audio content above this is ignored entirely. Lower it to focus on bass/mid content; raise it to capture more high-frequency detail (at the cost of the low end taking up proportionally less of the Width).
- Invert (quiet = deep)
- Off: quiet stays near the surface (the "peaks"), loud gets cut deep (the "valleys"). On: flips it — loud becomes the shallow/proud part.
Advanced mode (tooling & motion)
- Finish bit / Rough bit
- Cutter diameters — set toolpath stepover spacing.
- Finish allowance
- Material deliberately left behind by the roughing pass for the finish pass to clean up.
- Rough stepdown
- Max Z removed in a single roughing pass. Real multi-level stepdown CAM: the roughing pass clears bulk material in flat Z-level slices at this increment, not one deep plunge.
- Feed / Plunge
- Cutting and plunge feed rates.
- Safe Z
- Retract height between cuts.
- Include roughing pass
- Toggle off if you're hand-finishing with one bit only.
Trim
Selects a window of the track to actually carve — not the whole file stretched to fit, a true crop.
Board length scales proportionally: a 2-second clip out of a 60-second file, at a 250mm baseline, becomes ~8mm — sized and positioned as if the full 60s always mapped across 250mm, and you're keeping just that slice.
Drag the two handles, or type exact start/end seconds. Reset restores the full track (and the original board length).
Editing the Length field directly recalibrates the scale for whatever trim is currently selected — typing a number always means "this many mm for THIS window," not something that gets silently overwritten the next time you touch the trim handles.
Play/Stop/seek preview exactly the trimmed window, not the whole file — what you hear matches what gets carved.
Playback
- Play / Stop
- Starts at the trim's start, stops at its end.
- «5 / 5»
- Nudge back/forward 5 seconds, clamped within the trim window.
- Seek bar
- Drag to jump anywhere within the trim.
The cyan marker on the 3D relief traces the actual carved profile in sync with playback — it's a real readout of the terrain at that instant, not decorative.
Presets
Starter presets (Quick Test, Decorative Shallow, Deep Relief, Fine Detail) are fixed, always there, not deletable — ready-made starting points, not an empty save-your-own list.
Your own presets: name it, hit Save — captures every board/carve/tooling/motion value (not the audio file itself, not camera/viewport state). Load instantly reapplies all of it.
Stored in this browser's local storage only — nothing leaves your machine. One real catch: local storage on file:// pages (a downloaded copy opened directly, not the live site) can be unreliable — some browsers won't actually persist it. Presets work reliably on the deployed site (the axisbim.io link, top right). If Save silently doesn't show your preset afterward, that's almost certainly why — the app disables the whole Presets section on load if it detects storage genuinely isn't working, rather than let you save into a black hole.
Viewport & navigation
Drag to orbit, scroll to zoom.
- Home / Top / Front / Right
- Camera presets.
- 0,0
- Toggles the machine-origin marker: shows exactly where G-code X0/Y0 sits, colored to the ISO 841/DIN CNC convention (X=red, Y=green, Z=blue) — not this app's own accent palette, since mixing up axis colors is exactly the kind of thing worth avoiding.
- Section
- Cuts the board along X at a position you drag or type, with a red profile trace showing the actual depth at that line.
- X-Ray
- Ghosts the stock material so you can see straight through to the carved surface, plus a wireframe of the true board envelope (L×W×depth, real mm).
- Reach
- Highlights spots the finish bit can't physically reach — a real CNC limitation, not a bug. A round-nosed bit of radius r can't get into a valley narrower than its own diameter; the tool body hits a neighboring peak before the cutting edge reaches the bottom. Off, the preview shows the idealized target surface; on, flagged areas will actually come out shallower/wider than shown, no matter how many passes you run. The readout under the toolbar reports what percent of the surface is affected for the current finish bit size.
Export
- Download G-code
- The primary CNC output. Multi-level stepdown roughing pass (if enabled) + finishing pass. Always exports in mm (
G21) regardless of whether you're viewing in mm or in.
- Download STL
- A real, true-to-scale (not the exaggerated ~3.2× preview scale) watertight solid. Meant for sanity-checking the shape in a slicer or CAM tool before committing material — not itself a CNC toolpath. Bottom face is a single flat quad rather than one triangle-pair per grid cell (same shape, roughly half the file size).
- Re-render preview
- Rebuilds the 3D view from current settings without re-processing the audio.
Tips, limits, and things learned the hard way
Large files: STFT analysis runs in a background Web Worker so the tab stays responsive, but a big FLAC (100MB+) still takes real time to grind through — you'll see live progress instead of a frozen tab; that's the fix, not instant analysis.
No hard file-size cap, but very long files mean more STFT frames — more memory and more analysis time. If you only care about a slice of a long track, decode the whole thing once, then use Trim to iterate on carve settings from there.
The 3D preview exaggerates depth ~3.2× for visibility — display-only. Both the STL and G-code always use real, true-to-scale mm depth. Don't judge actual carve depth by eye in the preview; check the numbers.
Numeric fields clamp to their configured range and say so when they do (check the log) — if a value doesn't seem to "stick," it's very likely a clamp, not a bug.
Codec support depends entirely on your browser's native decoder — wav/mp3/m4a/aac/ogg/flac all generally work in current Chrome/Edge/Safari; less common formats are untested.