1. Introduction

Tonearm Profile Designer is a single-file, browser-based design and analysis tool for parametric concept work on tonearm beams, headshell-like front sections and tail/counterweight assemblies. The intent is fast iteration between geometry, visualization, coarse mechanical analysis and parametric STL export.

The application targets DIY tonearm builders and engineers who want to explore the relationship between geometric parameters (apex height, neck length, asymmetry, tail mass, etc.) and downstream metrics such as effective mass, system resonance with a given cartridge compliance, center-of-mass placement, inertia about the pivot and a static load-equivalent estimate.

Scope of analysis. The internal physics layer is intentionally first-order. It is suitable for ranking design candidates and exploring trade-offs, but it is not a substitute for FEA, modal analysis or measurements on a built prototype.

Empty start and Engrove Manual Trace import

A new session intentionally contains no active 3D object. The viewport remains empty until you import Manual Trace files, open a saved Tonearm Designer session, create a parametric design, or explicitly apply a Freeform preset/response.

Required trace set

  • At least one calibrated top view whose engineering plane is X–Y.
  • At least one calibrated side view whose engineering plane is X–Z.
  • A finite positive millimetre scale, an engineering origin, unique axis mappings and usable contour geometry in each file.

The importer accepts Manual Trace JSON, .engrove-trace, .engrove-project and paired SVG exports. Plane classification is read from trace_frame.axes; use the per-file selector only when correcting an older artifact with stale/default axes.

A multi-view .engrove-trace-project package is imported as a single file. It carries its own view types and engineering axes, so plane assignment comes from the package contract and the per-file selector stays locked; a view whose declared type contradicts its declared axes is rejected rather than reinterpreted.

JSON coordinates are authoritative. SVG is parsed as inert XML and contributes only supported geometry plus the Engrove binding metadata. External references and active SVG content are rejected.

How the loft is derived

Manual Trace stations are reused when present; otherwise a deterministic station grid is sampled across the common top/side X range. Top-view intersections define center Y and width. Side-view intersections define center Z and height. The remaining cross-section surface uses a declared superellipse assumption because two silhouettes cannot uniquely determine a complete 3D body.

Dimensional boundary. The importer blocks missing calibration, ambiguous axes, insufficient station coverage and dimensions outside the Freeform kernel limits. It does not silently rescale or clamp an invalid trace into acceptance.

2. Running the Application

The deployed application is intended for a current desktop Chromium-based browser or Firefox with WebGL enabled. Mobile use is outside this tool's layout and verification contract.

External dependencies

  • Three.js r128 — pinned by the tool lockfile and served locally with the application.
  • OrbitControls — served locally from the same pinned Three.js package.

An internet connection is required on first load so the browser can fetch the two CDN scripts. After they are cached the application can be reopened offline.

Browser requirements

  • WebGL 2 capable GPU and driver.
  • Hardware-accelerated 2D canvas.
  • Pointer events (mouse, trackpad or pen).

3. Coordinate System

All geometry, all reported coordinates and all analysis results use the same right-handed Cartesian system, expressed in millimetres unless otherwise stated.

X — Length along the beam (front to rear). Y — Width across the beam (left/right). Z — Height (vertical).
  • Origin is at the front of the beam: the leftmost ring of the discretized beam sits at x = 0.
  • The pivot lives at x = apex + pivotOffsetX, with optional Y- and Z-offsets.
  • The stylus tip sits at x = cartX for the Goldring and Custom modes, or at x = nomStylusX in Arm-Only mode.
  • Effective length (L_eff) is the planar distance from pivot to stylus tip in the X/Y plane.

4. Recommended Workflow

  1. Pick a cartridge mode. Choose Goldring 1042 (the bundled reference profile), Manual Cartridge, or None (Arm Only). The mode controls how mass and stylus position are introduced into the analysis.
  2. Enter cartridge compliance. Either type the explicit dynamic compliance at 10 Hz, or enter a 100 Hz value and a conversion factor k; the 10 Hz value will be derived automatically.
  3. Set the alignment target. Pick an alignment preset (Löfgren A / B or Stevenson, all IEC) and a pivot-to-spindle distance. The target L_eff, overhang and offset angle are computed and shown in the Tonearm Kinematics block.
  4. Match the beam to the target. Either drag Apex Pos until the "current L_eff" lines up with the target, or click Sync to target L_eff to snap the relevant slider.
  5. Shape the beam. Use the Headshell, Beam Geometry, Tail Section and Material controls to sculpt the mass and stiffness distribution along the arm.
  6. Tune neutral balance. If you are using the Hollow Elbow (Cobra) tail, use the Disc and Fine Trim controls to land the rear CG and watch the Neutral Balance score in the Tail block.
  7. Inspect the physics. Open the Physics Panel (floating bottom-right). Confirm that Total COM, static imbalance, and inertia about the pivot are within sensible ranges.
  8. Export. Pick an export type (thin-walled, solid plug, vertical or horizontal split) and download STL files for further work in your CAD or slicer.

6. Cartridge & Physics

Cartridge Mode

OptionMeaning
Goldring 1042 (Reference)Uses the bundled, anchor-driven Goldring 1042 profile (body, plate, cantilever, pins). Mass and stylus geometry are taken from the reference data set.
Selected CartridgeUses the cartridge chosen in the picker. Mass, 10 Hz compliance and tracking-force target are copied from the compact cartridge dataset.
Manual CartridgeA simple 18 × 16 × tipToTop box with a configurable mass and tip-to-top distance.
None (Arm Only)No cartridge. A nominal stylus reference X is used purely for L_eff calculation. Static imbalance and resonance are not meaningful in this mode.

Setback (Stylus Tip X)

Position of the stylus tip along the beam axis. In Goldring, Selected Cartridge and Manual modes this drives the cartridge body position and therefore the cartridge COM. The slider's upper bound is automatically clamped so the cartridge body cannot run past the physical pad.

Custom Mass & Stylus Tip-to-Top

Visible when Selected Cartridge or Manual Cartridge is selected. For picked cartridges, mass is copied from the compact data file. Tip-to-top remains the app box-geometry reference; the picker does not change body-shape geometry. For manual entries, mass is user-controlled. Tip-to-top is the vertical distance from the stylus tip to the top of the cartridge body (used to align the box geometry under the pad).

Dynamic Compliance

Two compliance values are tracked because manufacturers report compliance at either 10 Hz or 100 Hz. They are linked through a conversion factor k:

C10 = C100 · k
  • Editing C10 directly is the explicit case (label turns green: [Explicit measurement]).
  • Editing C100 or k drives an estimated C10 (label turns yellow: [Estimated value (C100 · k)]).
k is empirical and varies with the cartridge suspension. A common rule-of-thumb range is 1.5–2.0; always prefer a manufacturer-supplied 10 Hz figure when one is available.

Nominal Stylus X (Arm-Only)

Visible only when the cartridge mode is None. Sets the X position used as a virtual stylus reference for L_eff calculation even though no cartridge mass is present.

Cartridge Picker

The Select Cartridge button opens a modal backed by data/tonearmdesigner-cartridges.min.js. The JS data file is compact app data: it contains usable cartridge fields such as manufacturer, model, type, mass, 10 Hz compliance, tracking-force range, stylus, cantilever and output when available.

Search and filters

  • Search is case-insensitive over manufacturer plus model.
  • Type filtering uses the cartridge type value when present, for example MM, MC, MI or source-specific equivalents.
  • Mass, compliance, tracking force and optional output mV filters are numeric min/max filters.
  • The stylus filter is optional and matches stylus text such as elliptical, line-contact or Shibata when those words exist in the data.
  • The result count shows the number of matching cartridges. Large matches are rendered as a capped visible list for responsiveness.

Apply, Cancel and close behavior

Selecting a result row only updates the preview inside the modal. Apply updates the live design once: cartridge display name, cartridge mass, 10 Hz compliance and the tracking-force target are copied into TonearmDesigner state. If a cartridge lacks a recommended tracking force, the midpoint of min/max is used. Cancel, the X button and backdrop clicks do not change the live design.

Some cartridge records sit outside the default controller ranges. When Apply needs this, TonearmDesigner expands the affected controller ranges for cartridge mass, 10 Hz compliance or tracking force before setting the value, so selected cartridge data is not silently clamped. The picker warns before Apply when a range expansion is required and shows a status note after Apply. Preview, search, Cancel and X close do not mutate live values or controller ranges.

Mass, compliance and tracking force

Mass contributes to the arm/cartridge mass and COM calculations. Compliance is the dynamic 10 Hz value used by the resonance formula. Tracking force is copied to the solver target field so optimization can compare the static load-equivalent result against the selected cartridge's recommended force.

Estimated compliance indicator

Some dataset entries have compliance_10hz_estimated=true. The app shows an estimated compliance indicator and the compliance label turns yellow. Treat that value as an estimate in resonance and solver interpretation, not as an exact lab measurement.

Fallback behavior

The picker loads the local cartridge data through a normal script loading tag, not through fetch(). This avoids Chrome CORS blocking when the app is opened directly from file://. If the script is missing or fails to load, TonearmDesigner keeps running and the original Goldring/reference behavior remains available, with a clear status message in the picker area.

Solver and resonance assumptions

The selected cartridge affects resonance through mass and 10 Hz compliance, and it affects the solver through the copied tracking-force target. It does not rewrite the solver architecture, replace the Fas 15.2 evaluation slider, or change the canonical Fas 14.4 counterweight model.

7. Tonearm Kinematics

The kinematics block computes the geometric alignment targets for a chosen pivot-to-spindle distance and IEC null-radii preset, then compares them with what the current beam geometry actually achieves.

Pivot-to-Spindle

Horizontal distance between the spindle axis of the turntable and the vertical pivot of the tonearm. This is the prime anchor of every overhang/offset calculation.

Alignment Preset

PresetInner null (mm)Outer null (mm)
Löfgren A (Baerwald) — IEC66.0120.9
Löfgren B — IEC70.3116.6
Stevenson — IEC60.325117.4

Targets and current values

  • Target L_eff — geometrically optimal effective length for the chosen preset and pivot-to-spindle.
  • Target OverhangL_eff − pivot-to-spindle.
  • Target Offset Angle — geometric headshell offset that places both nulls at the chosen radii.
  • Current L_eff (Apex − Stylus) — actual planar distance from the pivot point to the current stylus tip.
  • Δ — error between current and target. Green if |Δ| ≤ 0.5 mm, red otherwise.

Sync to target L_eff

Convenience button. When pressed, it back-solves which slider (cartX in cartridge modes, nomStylusX in Arm-Only mode) needs to be set so that the current L_eff matches the target. The slider value is clamped to its declared min / max range.

8. Tail / Neutral Balance

The tail block selects between the original Classic geometry and the Hollow Elbow (Cobra) geometry. The Cobra mode adds a smoothly-blended G1/C1 cubic-bezier rear bend that drops vertically and ends in a configurable rectangular mouth.

Tail Mode

ModeNotes
Classic TailBell-shaped tapered rear behind the apex; controlled by the "Tail Section (Classic Only)" sliders further down.
Hollow Elbow (Cobra)Adds a vertical bend with explicit blend zone and mouth, plus a counterweight stack and fine-trim screw.

Cobra blend / bend / mouth

SliderMeaning
Blend Zone LengthHow far back from Bend Start X the cross-section transition begins. Larger = smoother.
Bend Start XAxial position where the rear bend leaves the straight beam.
Bend Drop ZTotal vertical drop along the bend, in millimetres.
Bend Radius/LengthLength of the bend's horizontal projection. Combined with Drop Z, defines bend curvature.
Mouth Outer Width / LengthCross-section dimensions at the rear opening (Y × X).

Counterweight stack

Pure cylindrical discs stacked at the mouth. Diameter, thickness, count and mass per disc are independent. Discs are placed progressively further back so the stack center sits behind the mouth at −count·thickness/2.

Fine trim screw

Equivalent point mass for a fine-trim adjustment screw, attached above the apex. Mass can be negative to model a screw that is pulled inward (lowering the rear effective mass).

Rear CG / Neutral Balance / Score

Computed from the integrated rear shell mass plus the counterweight and fine-trim point masses. The neutral-balance score reflects how well the rear CG aligns with the line drawn from the front cartridge reference through the pivot:

ScoreError
good≤ 3.0 mm
ok3.0–7.0 mm
poor> 7.0 mm

Display toggles

  • Show counterweights (3D) — render the disc stack.
  • Show fine-trim screw (3D) — render the cylindrical fine-trim screw.
  • Show Rear CG — purple marker at the rear CG in 2D.
  • Show neutral balance line — yellow dashed line through stylus / pivot / rear CG in side view.
  • Show tower clearance — translucent red strip around the apex in side view.
  • Include weights in export — adds the disc stack geometry to the exported STL.

9. Organic Headshell & Neck

The front 60–80 mm of the beam is treated as a flat-bottomed headshell that smoothly transitions through a neck waist into the main beam.

SliderEffect
Pad Offset (Z-axis)Vertical translation of the cartridge mounting plane. Use to fine-tune VTA-like geometry independent of beam height.
Nose RoundingX-extent of the elliptical nose at the very front. Larger = blunter nose.
Pad Max WidthMaximum Y-width of the headshell pad.
Pad Total LengthX-length of the flat pad zone. Auto-clamped to be ≥ Nose Rounding.
Nose Height (Base)Z-height of the pad zone before the beam grows in height.
Neck Width (Waist)Minimum Y-width at the neck. Auto-clamped to be ≤ Pad Max Width.
Neck LengthX-length of the headshell-to-beam transition.

10. Beam Geometry & Asymmetry

The main beam profile is constructed from a small set of high-leverage parameters.

SliderEffect
Asymmetry Belly/Crown0 = symmetric beam (top and bottom mirror each other); 1 = full belly (height grows downward only).
Apex Pos (Pivot)X-coordinate of the apex / vertical pivot. Drives where maximum height and maximum width sit.
Max Height (Side)Maximum Z-height of the beam at apex.
Max Width (Top)Maximum Y-width of the beam at apex.
Vertical Arch (Lift)How much the centerline of the beam arches upward toward the apex (Z lift between pad and apex).

11. Tail Section (Classic Only)

Active only when the Tail Mode is set to Classic Tail.

SliderEffect
Rear Radius (Bluntness)Power-law exponent that controls how blunt or pointy the tail termination is.
End DiameterFinal cross-section diameter at the rear of the beam.

12. Material (Effective Constants)

Material selection drives an effective 1D approximation: a single density, Young's modulus E (MPa), and shear modulus G (MPa). These are not anisotropic FEA constants — they are reasonable bulk values for a fibre-in-epoxy laminate.

MaterialDensity (g/cm³)E (MPa)G (MPa)
Carbon Fiber/Epoxy1.55135 0005 000
Glass Fiber/Epoxy1.9045 0004 000
Kevlar/Epoxy1.3875 0002 000
Flax Fiber/Epoxy1.3030 0001 500

Wall Thickness is the offset distance from the outer ring to the inner ring. The same wall thickness is used all the way along the beam. Increasing it adds mass and increases bending stiffness EI; decreasing it can trigger area-inversion validation warnings in narrow cross-sections.

13. Render Mode (3D)

ModeUse
Light CAD (Surface Analysis)Default. Neutral grey shell with orange caps; best for inspecting curvature.
Wireframe (Mesh)Shows the underlying triangulation; useful for spotting topology problems.
Dark Carbon FiberMarketing-style dark anisotropic shading.
X-Ray (Transparency)Translucent shell; lets you see the inner ring and accessory geometry through the wall.

14. Export (Parametric CAD)

The export block writes one or more STL files based on the current geometry and material thickness.

Export Type

TypeOutput
Thin-walled armHollow shell with the configured wall thickness, sealed by front and rear caps. Good for printable shells.
Solid plugSolid outer shell only. Good for FEA imports or as a casting positive.
Vertical split (Y=0)Two halves cut along the Y=0 plane, each as its own STL. The clearance slider opens an air gap between the parts.
Horizontal split (zCenter)Two halves cut along the local centerline of each ring (Z = ring center).
Pattern split across lengthFreeform/trace geometry only. Cuts the pattern across its length into two closed halves for printers whose build volume is shorter than the arm. Each half is checked for closure before it is written, and the clearance slider opens a gap between them. Hollow and the two parametric splits are generated from the parametric ring cache and are refused for freeform geometry.

Registration on the cut face

When the pattern is split, a keyed boss is added to the first half and a matching socket to the second, so the printed halves rejoin in one orientation only: the pin profile is a circle with a single chord flat, which a plain round pin would not give. The socket is the same profile opened by the fit clearance, so the pin can actually enter it. Leave the pin radius at 0 to have it sized from the cut section; a radius that would break through the wall is refused, and the message states the maximum the section allows. Unticking the box leaves plain flat cut faces.

Casting pattern allowance

The cross-section scale in the export panel multiplies every section of a freeform pattern by a percentage and leaves the traced length unchanged, so a printed pattern can allow for the shrinkage of a mould taken off it and of the part later laid up inside. Negative values shrink the sections. A factor that would drive any section outside the supported ring range is refused rather than clamped, since clamping would silently change the pattern's shape on the stations that hit the limit. The Onshape 1:1 export refuses a non-zero allowance, because it is defined as an exact reference whose sidecar states that no shrinkage compensation was applied.

The Check mould release button in the export panel runs this test on the pattern as it would be exported, allowance included, at the same mesh density the STL will use. Choose the pull axis first: Z splits the mould top and bottom, Y left and right. The verdict, the parting-line station count and the near-vertical surface fraction are also written into the technical report. Pattern split position sets where the across-length cut falls, as a percentage of the pattern's own length.

Whether a pattern can leave a two-part mould is a geometric question the tool can answer: along the chosen pull axis a releasable shape presents exactly one up-facing and one down-facing surface everywhere. Surfaces within the draft threshold of the pull direction are near-vertical walls, reported as a draft area fraction rather than counted as undercuts, because every closed pattern has a silhouette band at exactly zero draft. This is a ray-sampled check on the exported mesh, not a mould-flow or tooling simulation.

Export Format

  • Binary STL (Recommended) — compact, fast, the right default for almost everything downstream.
  • ASCII STL — human readable but very large; only useful for debugging.

Download Export Model

Triggers an export-time validation pass. If the geometry is internally consistent the resulting file(s) are downloaded by the browser. If the geometry is invalid (area-inversion, bad bend parameters, etc.) the export is aborted with a banner message and no file is written. See Validation Warnings.

Pivot, COM markers and inertia axes are not part of the exported STL. They are render-only overlays. The disc stack and fine-trim screw are exported only when Include weights in export is enabled and the Cobra tail mode is active.

15. Main View Cameras & 2D Plots

3D camera buttons

ButtonView
IsometricDefault 3D oblique view of the whole arm.
SideStrict X/Z side projection from −Y.
TopStrict X/Y top projection from +Z.
FrontY/Z front projection from −X.
Focus CartridgeCamera framed on the stylus tip.
Focus TailCamera framed on the rear terminal of the beam.

OrbitControls is active in all views: drag to orbit, right-drag (or shift-drag) to pan, scroll to zoom. The small axes gizmo in the bottom-left of the 3D view always reflects the current camera orientation.

Side Profile (Z-X)

2D orthographic projection from the −Y direction. Renders the actual cross-section centerline and rims as well as optional bending-stiffness EI_y and per-mm mass envelopes. Markers for stylus, pivot and (when enabled) Total / Rear / Counterweight / Cartridge COM are overlaid.

Top View (Y-X)

2D orthographic projection from +Z. Shows the planar half-width and the optional EI_z envelope. Markers for stylus, pivot and Total COM are overlaid.

16. Physical Analysis & COM Panel

A floating, draggable, dismissible panel anchored bottom-right of the viewport. Toggle it via the Physics Panel button, drag it by its header, and close it with the × button. It is independent of sidebar scroll position.

Display toggles

  • Show Vertical Pivot — red marker and dashed vertical line in 2D and 3D.
  • Show Total COM — combined center of mass of shell + cartridge + counterweight + fine trim.
  • Show Rear Assembly COM — COM of the rear shell + counterweight + fine trim only.
  • Show Counterweight COM — disc stack COM only.
  • Show Cartridge COM — cartridge body COM only.
  • Show Inertia Axes (3D) — principal inertia axes in the X/Z plane plus the Y inertia axis, drawn through the pivot.
  • Show Measurement Lines (2D) — dashed lines between Stylus, Pivot, Total COM, Rear COM and Counterweight COM in the 2D projections.

Vertical pivot offset (XYZ)

Three sliders that translate the vertical pivot relative to the apex. They drive the same internal state that the 2D drag handles (see Interactivity) write to.

Vertical Relations meters

A bank of vertical bar meters that show, in millimetres, how high or low each of Pivot / Total COM / Rear COM / Counterweight / Cart COM sits relative to the stylus tip. The meter centerline is the stylus tip plane; positive readings are above the stylus, negative below. The colour gradient is purely cosmetic — the absolute number is what matters.

Coordinates & Distances

Numeric XYZ coordinates of pivot, stylus and all visible COM markers. Below them, the 3D distances and per-axis Δx, Δy, Δz components for every relevant pair (stylus → pivot, pivot → total COM, etc.).

Calculated Static Imbalance

First-order static load-equivalent estimate derived from the static moment of the total mass distribution about the pivot:

moment_gmm = total_mass · (pivot_x − total_COM_x)
gf         = moment_gmm / (pivot_x − stylus_x)
mN         = gf · 9.80665

The Static Imbalance Gauge below the readout reflects the same value on a 0–5 g coloured bar:

RangeQuality
1.5 – 2.5 ggood (green)
1.0 – 3.0 gok (yellow)
outside 1.0 – 3.0 g, or liftingpoor (red)

A textual hint adapts to the current state — for example, suggesting that the user shift the total COM forward when the downforce is too low, or reduce the rear moment when it is too high.

Inertia (about Pivot)

  • I_vertical (vertical bearing axis) — moment of inertia about the Z-axis through the pivot, in g·mm². Drives lateral tracking response.
  • I_horizontal (lateral axis) — moment of inertia about the Y-axis through the pivot, in g·mm². Drives vertical tracking response.
  • Radius of Gyration (vertical)k_zz = √(I_zz / m_total), in mm. Useful as a single-number characterization of mass distribution.

17. Solver Sandbox & Optimization Goals

The Solver opens from the main controls with Open Solver. It uses a full-screen modal with its own 3D preview and a read-only sandbox copy of the current design. The live design is not changed while variables, targets, candidates or the modal preview are edited. Live design changes only after Apply.

Apply-only contract: Apply writes the selected candidate to the live design. Discard and the upper-right X close the Solver without applying. Backdrop click and Escape are intentionally disabled. Reset returns the solver sandbox to the opening snapshot and does not apply changes to the live model.

Variables

The Variables panel lists adjustable design parameters. Each variable can be locked or unlocked. Only unlocked variables may be changed by the solver. For each adjustable variable the panel shows a current value plus editable min, max and step fields. The solver samples only inside those ranges and preserves hard safety limits where the application defines them.

Editing solver fields

Numeric fields in the Solver keep a local edit buffer while you type. Partial values such as -, 0., 0, or 2. remain in the field until you commit the edit with blur, Enter or Run Solver. The solver does not start, rebuild results or mutate its numeric policy on every keypress.

Invalid pending edits are marked in the field and must be corrected before a solver run starts. Dot and comma decimal input are accepted when committed.

Optimization targets

The Optimization Goals panel contains active solver targets. Enabled targets contribute to the candidate score; disabled targets are displayed for reference but do not affect scoring. If no target is enabled, Run Solver refuses to start and asks you to enable at least one optimization target.

  • Tracking force / needle pressure: target force in grams with tolerance.
  • Total tonearm COM: total center-of-mass target, shown as available X/Z values.
  • Counterweight COM: rear counterweight / rear disc stack COM target. This follows the rear-terminal, top-anchored downward disc stack model.
  • Manufacturing diameter min/max: a hard build constraint for the estimated maximum diameter, useful for carbon fiber sleeve or sock compatibility.
  • Effective mass / resonance: shown when available as target or acceptable range values.

Running the solver

Press Run Solver to evaluate candidates. Candidates are suggestions ranked from the active target score and hard constraints. The result list shows score, active target deltas, tracking force, total COM, counterweight COM, total mass, effective mass/resonance when available, estimated diameter/build constraint status and warning flags. Selecting a result updates only the solver modal preview until Apply is pressed.

Evaluation limit slider and async progress

The Solver evaluations slider controls the candidate evaluation cap for a run. It ranges from 2,500 to 15,000 candidates in 500-candidate steps. The selected value is displayed beside the slider and is used as the run's maximum evaluation count.

The solver still shows the estimated grid separately from evaluated candidates. If the estimated grid is smaller than the selected cap, only the estimated grid is evaluated. If the estimated grid is larger, the run is explicitly shown as a capped evaluation and does not imply exhaustive search. During calculation a spinner and progress text show evaluated count, actual cap and percentage. Evaluation is chunked so the browser can repaint between batches.

Warnings and validation

Solver output is a ranked candidate suggestion, not proof of final mechanical perfection. Some values may be marked estimated, especially build-envelope values such as maximum diameter. Browser rendering, WebGL behavior and physical build validation may still be required before treating a candidate as final.

18. 2D Drag & Tooltips

Tooltips

Hovering over any marker in the side or top view produces a contextual tooltip. The tooltip lists the marker's coordinates, its vertical relation to the stylus and to the pivot, and (where applicable) a hint about which slider the marker is bound to for direct dragging.

Drag handles

Markers that are bound to sliders show a thin white "halo" ring. They can be dragged directly:

MarkerSide view dragTop view drag
Vertical PivotX / Z via pivotOffsetX / pivotOffsetZX / Y via pivotOffsetX / pivotOffsetY
Stylus Tip (cartridge mode)X via cartX, Z via padOffset (or customZ in Manual mode)X via cartX
Stylus Tip (Arm-Only mode)X via nomStylusXX via nomStylusX

Slider values are clamped to their declared min / max and snapped to step. The drag is a relative offset from the value at the start of the gesture, not absolute, so coarse pointer movement will not overshoot a slider's bounds.

19. Validation Warnings

The application performs several validation passes; any failure is shown as a red banner above the 3D view.

Cobra tail validation (continuous)

  • Rear bend start must be after apex. Moving Bend Start X to or before the apex would collapse the blend zone.
  • Rear bend start is too far back. Bend Start X must leave at least 5 mm of beam behind it.
  • Bend radius (length) is too short. The bend's horizontal projection must be ≥ 5 mm.
  • Blend zone cannot be negative. Self-explanatory.
  • Mouth is too narrow. Both Mouth Outer Width and Length must be ≥ 2 mm.

Per-ring geometry validation (continuous)

For every cross-section ring, the application checks that the inner-ring area does not collapse below a small threshold of the outer-ring area. If the wall is too thick relative to a narrow cross-section the ring inverts and you get the message Area inversion detected. Solidity cannot be guaranteed.

Export-time validation

Pressing Download Export Model re-runs the full validation pass and additionally tries to pre-build the requested geometry. If anything fails an alert is shown (Export aborted: Geometry error) and no file is written.

20. Limitations & Disclaimers

  • The physics layer is first-order. Static imbalance is a quasi-static moment-balance indicator; it ignores anti-skating, dynamic coupling between cartridge compliance and arm modes, and the mass of wiring.
  • Material constants are bulk approximations. EI_y and EI_z are computed from cross-section second moments and a single material E; they do not represent fibre-direction-dependent stiffness.
  • Resonance is calculated with a single 10 Hz dynamic compliance. Real cartridges show frequency-dependent compliance and damping that this calculation does not capture.
  • Goldring 1042 reference data is geometric only. Real cartridge body inertia distribution and cantilever effective mass are approximated by point masses.
  • STL export quality depends on the cross-section discretization (60 segments per ring). Smooth blends look good at this resolution; very tight features may need post-processing in the downstream CAD tool.

21. Troubleshooting

The 3D view is blank.

Confirm that the browser successfully fetched the Three.js and OrbitControls scripts (look in DevTools → Network). On first launch this requires an internet connection. WebGL must also be enabled in the browser flags.

The red "Geometry error" banner is stuck on.

Read the message. If it mentions area inversion, decrease Wall Thickness or increase the relevant cross-section dimension (Max Width / Max Height / Mouth dimensions). If it mentions the bend, increase Bend Start X or Bend Radius.

Static imbalance is negative or zero.

The total COM sits behind or directly under the pivot. In Cobra tail mode, reduce the disc count, decrease disc mass, or reduce Bend Drop Z so the rear assembly applies less counter-moment. In Classic mode, increase the cartridge mass or move the cartridge forward (smaller setback).

Resonance is N/A.

You are in Arm-Only mode. Pick a cartridge mode to enable the calculation.

The exported STL looks faceted in the slicer.

This is normal for an STL with 60 segments per ring. For surfaces of revolution the visible facet count is bounded; if finer tessellation is needed, post-process in your CAD tool.

The Sync to target L_eff button does nothing visible.

It only adjusts the slider that drives the stylus X (cartX or nomStylusX, depending on mode). If the target is outside that slider's range the value is clamped to the nearest valid endpoint and the Δ readout will still show a residual error.

22. Glossary

TermMeaning
ApexThe X-coordinate of the vertical pivot, also where Max Height and Max Width are reached.
COMCenter of Mass. Combined point at which the integrated mass distribution can be considered to act.
ComplianceCartridge suspension softness in 10⁻⁶ cm/dyn, frequency-dependent.
EI_y / EI_zBending stiffness about the Y- or Z-axis, product of Young's modulus E and area moment of inertia I.
Effective Length (L_eff)Planar distance pivot → stylus tip in the X/Y plane.
Effective Mass (M_eff)The mass "seen" at the stylus tip due to the inertia of the arm rotating about the pivot. M_eff = I_pivot / L_eff².
Null radiiThe two radii on the record at which a pivoting tonearm achieves zero tracking error for a chosen alignment.
OverhangL_eff − pivot-to-spindle. How far the stylus tip overhangs the spindle.
Offset AngleAngle between the cartridge's main axis and the line from pivot to stylus tip.
PivotThe vertical bearing axis the arm rotates about. Treated here as a point at (apex + Δx, Δy, Δz).
Static ImbalanceQuasi-static stylus-tip load-equivalent from mass distribution about the pivot, in grams-force equivalent.

TD041 Static-imbalance wording cleanup

TD041 is a maintenance correction on the previous engineering update. It removes remaining user-facing old force-label wording and keeps compatibility aliases internally.

  • Visible wording now uses static imbalance/load-equivalent terminology.
  • Compatibility identifiers such as legacy DOM/CSS names are preserved where needed.
  • Metadata was bumped to the TD041 release value in the TD041 package.

TD042 Export validation and AI cleanup

TD042 focuses on export winding correctness, mesh validation and prompt consistency without changing LT Mechanism behavior.

  • Export winding is corrected at the solid, hollow and split source mesh paths.
  • Validation checks signed volume, arc-length reference volume, cap normals and sliver metrics.
  • Watchdog winding correction remains available but should not trigger during normal export.
  • Sessions read legacy mesh-quality fields but no longer persist them in new saves.
  • AI prompt keeps computed shape facts as the primary current-form truth and reduces duplicated context.

TD043 reference-frame update

TD043 separates the vertical datum from the generated body envelope. The LP top plane is defined as scene Z=0, the vertical pivot is controlled as height above LP, and the body envelope can be lifted or lowered independently.

  • verticalPivotHeightAboveLP is the primary pivot-height control.
  • pivotOffsetZ is retained as a legacy load alias and is not saved in new sessions.
  • armBodyDatumOffsetZ moves the profile/body envelope without moving the pivot datum.
  • The side profile can show a dashed LP top plane and the Physics Panel shows read-only datum values.
  • Cobra mechanics metadata stubs are read-only and do not add pivot/tower/heart-counterweight geometry in TD043.

TD044 stylus-anchored playback datum update

TD044 defines the stylus tip as the playback Z-origin. During normal playback the stylus sits on the LP top plane, so stylus.z is constrained to lpTopZ.

  • Stylus lock. stylusLockedToLP is enabled by default and auto-solves armBodyDatumOffsetZ so the stylus tip remains on the LP plane as body-shape sliders change.
  • Body datum auto-solve. The solver uses the cartridge tip-to-top relationship; for Goldring 1042 it shifts the arm body so the headshell underside meets the cartridge-top plane above the stylus.
  • Manual override. Disable the lock only when intentionally studying VTA/SRA misalignment. Then armBodyDatumOffsetZ becomes a manual control and the Stylus → LP ΔZ readout shows the mismatch.
  • Correction from TD043. TD043 separated pivot and body datums but still allowed the stylus to float below the LP plane for default settings. TD044 corrects that latent physical-frame error.
  • Pivot height remains independent. verticalPivotHeightAboveLP remains the pivot/VTA-tower height control; when the stylus lock is on, Pivot–stylus ΔZ equals that value.

TD045 UI readability hotfix

TD045 keeps the TD044 stylus-anchored datum architecture and applies two UI readability fixes.

  • The red geometry/analysis warning banner can now be collapsed while preserving warning state and count.
  • The side-profile static-imbalance badge is drawn in a fixed status area instead of being anchored beside the stylus, so it no longer covers the headshell, cartridge, or front arm.
  • No STL winding, mesh validation, LT Mechanism, or core physics formulas changed in this hotfix.

TD045B AI engagement-policy update

TD045B changes the AI Shape Designer contract so large Cobra requests produce best-effort full-state deltas instead of empty safe exits.

  • Best effort is mandatory. If a requested Cobra detail is not available as writable geometry, the AI must still move every available writable control toward the requested design.
  • Full passthrough. AI deltas should include all writable inputs, all session selects and all session checkboxes. Sparse legacy deltas are accepted with a warning and auto-filled from the current session.
  • unsupportedAttributes. Missing geometry such as heart_shaped_counterweight, pivot_tower_separation is reported as a string array for transparency.
  • The former no_safe_cobra_delta_missing_geometry paved-road response is removed from the prompt contract.

Fas 15.3c Solver Continuation and Guided Mode

The solver modal is still a sandbox. The live design changes only when a selected candidate is applied. Discard and X close the modal without applying a candidate, and backdrop/Escape close remains disabled.

Smart solver ordering

The solver can run with Smart prioritized, Exhaustive order, Local refinement, Counterweight first, Geometry first or Resonance first strategy. Smart prioritized is the default and orders early batches by active targets, variable groups, baseline-near values and coarse-to-fine passes. It is deterministic and does not use external AI calls or hidden randomness.

Exhaustive order remains available for comparison. Prioritized and refinement modes still report that they have not covered the full grid unless continuation reaches exhaustion.

Run Solver, Continue Search and Reset Search

The first run starts a solver search session from cursor 0. If the variables, targets, weights and evaluation limit have not changed, the next run continues with the next batch and the button shows Continue Search. Progress and results are cumulative, for example batch 2 continues from the previous cursor and keeps the global best candidates. Reset Search clears the continuation cursor and results while preserving the current solver settings.

If a variable range, target setting, target weight or evaluation limit changes, the previous search session is invalidated. A new Run Solver begins a fresh search for the new signature. The app does not imply a full exhaustive search unless the estimated grid is exhausted.

Responsive solver layout

The solver uses Guide, Expert and Results as the left work panels while the 3D preview is a persistent right-side panel. The preview canvas stays mounted during normal solver use and is refreshed when the solver opens, results update, a selected candidate changes, or the layout is resized. This avoids depending on a hidden Preview tab for WebGL initialization.

Guided setup

Guided setup offers simple questions and presets: Tracking Force Fine Tune, Resonance Window Tune, Counterweight Balance Tune, Manufacturing Diameter Safe Tune and Balanced Optimization. Applying guide settings changes only the solver sandbox settings. Expert mode then reflects the variables, targets, weights and evaluation depth chosen by the guide. The guide does not run the solver automatically.

Input editing

Solver numeric fields keep local edit buffers while typing. Partial values such as "-", "0.", "0," and "2." are kept until blur, Enter or Run Solver commits them. Invalid pending values block Run Solver instead of being converted silently to zero.