Skip to content

Add OSC → OSC routing with value transforms and calibration#14

Open
jcrystal wants to merge 8 commits into
sndwrks:mainfrom
jcrystal:osc-transform
Open

Add OSC → OSC routing with value transforms and calibration#14
jcrystal wants to merge 8 commits into
sndwrks:mainfrom
jcrystal:osc-transform

Conversation

@jcrystal
Copy link
Copy Markdown

Summary

  • Adds OSC → OSC as a new mapping direction alongside OSC → MIDI and MIDI → OSC
  • Supports passthrough (forward args unchanged to a different address), linear scaling, logarithmic (fader-style) curves, and a calibrated mode
  • Calibrated mode includes a 5-point calibration wizard that sends test values to the target plugin and records the response, then fits a smooth curve using monotone cubic Hermite interpolation (Fritsch-Carlson)
  • Calibration data can be copied/pasted between mappings via clipboard — useful when multiple mappings target the same plugin type
  • New send_osc_test_value backend command enables the wizard to send values independent of engine state
  • Widened OSC address input fields across all mapping types for better visibility
  • Updated CLAUDE.md and README with OSC → OSC documentation

Test plan

  • All 53 Rust tests pass (cargo test --workspace)
  • All 44 frontend tests pass (npm test)
  • TypeScript type check clean (npm run typecheck)
  • Manual testing: create OSC → OSC mappings with each transform type
  • Manual testing: run calibration wizard end-to-end
  • Manual testing: copy/paste calibration between mappings
  • Verify backward compatibility with existing mappings.json files

🤖 Generated with Claude Code

jcrystal and others added 2 commits March 25, 2026 16:08
Adds a new OSC → OSC mapping direction that supports passthrough, linear
scaling, logarithmic (fader-style) curves, and a calibrated mode with a
5-point wizard. Calibrated mode uses monotone cubic Hermite interpolation
(Fritsch-Carlson) for smooth, overshoot-free curves. Calibration data
can be copied/pasted between mappings via the clipboard.

New backend command send_osc_test_value enables the calibration wizard
to send test values independent of engine state.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Users can now export all settings and mappings to a single JSON file
and import them on another machine. Uses tauri-plugin-dialog for native
save/open dialogs. Import is disabled while the engine is running.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@johnmckenna-snd
Copy link
Copy Markdown
Contributor

hi so sorry i did not get a notification of this! i will test it out and roll it in.

Removed duplicated TransformCurve / CalibrationPoint / OscTransform definitions and added missing MSC fields to the OSC→OSC mapping serialization test.
…graph preview

Replaces the step-by-step wizard with a single dialog: input range and output type up top, 5 calibration rows with per-row send buttons, and a curve preview + smoothing slider on the right. Adds a backend smoothing parameter (serde-defaulted to 1.0) that blends piecewise-linear interpolation with the existing Fritsch-Carlson cubic so users can tune knee sharpness at calibration points.
Each calibration row now has two Send buttons: the one next to In sends the row's input value, the one next to Out sends the row's output value.
@johnmckenna-snd
Copy link
Copy Markdown
Contributor

johnmckenna-snd commented May 2, 2026

@jcrystal howdy. i adjusted the calibrate from a wizard flow into just rows of values. i figured that'd be a nicer ux so you can edit it after the fact with a little graph that shows what you're doing to it. i also added send buttons for the input and output side of the transform. i allowed for the user to adjust the smoothing amount with the max being the curve you put in.

i am curious your thoughts. if this looks good. i'd be happy to release it!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants