README.md
SemantiFX
SemantiFX explores a musician-centered way to control familiar audio effects with natural language. A musician captures a representative excerpt, describes the change they want, previews the resulting effect settings, and remains free to edit, compare, refine, or reject them.
This repository is at the prototype stage. The current question is:
Does an asynchronous capture → describe → analyze → compare workflow feel compatible with music-making, and which interface makes the musician feel most in control?
Current scope
- Parametric EQ only
- Local inference
- macOS Standalone, Audio Unit, and VST3 targets
- Text input before integrated speech input
- Visible, editable parameters with compare and undo
The system is intentionally split at a narrow seam: JUCE owns deterministic real-time audio processing; the inference worker accepts an audio excerpt and a prompt, then returns a versioned set of named parameters. ML work never runs on the audio thread.
See Architecture and Initial research plan.
Try it
Explore three interaction directions in a browser:
| 1 | bun prototype/server.ts |
Then open http://localhost:4173/?variant=A. The bottom switcher moves among the guided studio, conversation, and workbench variants without losing the simulated session state.
Run a real Text2FX analysis using the sibling checkout's existing environment:
| 1 | scripts/analyze ../oss/text2fx/assets/guitar.wav "warm like a hug" 600 |
Build and open the JUCE standalone app:
| 1 | cmake -S plugin -B plugin/build -DCMAKE_BUILD_TYPE=Debug |
| 2 | cmake --build plugin/build --config Debug --parallel 4 |
| 3 | open plugin/build/Semantifx_artefacts/Debug/Standalone/Semantifx.app |
To try the complete development flow, pass audio through the app or plugin,
enter a prompt, click Listen 10s, and then click Shape sound. The plugin
runs Text2FX outside the audio and UI threads and applies the validated result.
Import Analysis… can still load /tmp/semantifx-analysis.json directly.
The same build produces AU and VST3 artifacts. Run all automated checks with
scripts/check.
Test in FL Studio
Use the VST3 build for FL Studio. This is a development build, so it expects this repository and the sibling Text2FX environment to stay where they were when you built it.
Build and install it
Close FL Studio first. From the root of this repository, run:
| 1 | cmake -S plugin -B plugin/build -DCMAKE_BUILD_TYPE=Debug |
| 2 | cmake --build plugin/build --target Semantifx_VST3 --config Debug --parallel 4 |
| 3 | mkdir -p "$HOME/Library/Audio/Plug-Ins/VST3" |
| 4 | ditto plugin/build/Semantifx_artefacts/Debug/VST3/Semantifx.vst3 \ |
| 5 | "$HOME/Library/Audio/Plug-Ins/VST3/Semantifx.vst3" |
The last command copies the new build into the normal VST3 folder on your Mac.
Let FL Studio find it
- Open FL Studio.
- Go to Options → Manage plugins.
- Turn on Verify plugins.
- Click Find installed plugins.
- Search for
Semantifxwhen the scan finishes.
If you already scanned an older build, turn on Rescan previously verified plugins before scanning. FL Studio also has a plugin installation guide if Semantifx does not appear.
Put it on some audio
- Open the Mixer and choose the insert used by your instrument or audio clip.
- Click an empty effect slot.
- Choose More plugins, find
Semantifx, and open it. - Leave the FL Studio effect-slot mix at 100%. Use the Mix control inside Semantifx instead.
Semantifx is an effect, so audio must be moving through that Mixer insert. If its meter is not moving, route an instrument or audio clip to the insert and press Play. FL Studio's effect-slot guide has more detail about Mixer routing.
Shape the sound
- Type what you want the sound to become.
- Play a representative part of the track.
- Click Listen 10s and keep playback running.
- When capture finishes, click Shape sound.
- Wait for the result. Once a preview appears, you can click Use current to stop early and apply the preview you see.
The first run can take longer because the worker has to load the model. Later runs in the same plugin instance reuse it. Press Escape if you want to stop without applying the preview.
Rebuild after a code change
Close FL Studio, then run:
| 1 | cmake --build plugin/build --target Semantifx_VST3 --config Debug --parallel 4 |
| 2 | ditto plugin/build/Semantifx_artefacts/Debug/VST3/Semantifx.vst3 \ |
| 3 | "$HOME/Library/Audio/Plug-Ins/VST3/Semantifx.vst3" |
Open FL Studio again and load Semantifx. If it still shows the old build, scan again with Rescan previously verified plugins turned on.
Current integration edge
The real inference worker and real-time plugin now share a strict, versioned 18-parameter contract. The development build captures audio, keeps a local inference worker alive across requests, reports model-loading and optimization progress, and previews the evolving EQ curve. Once a preview exists, Use current interrupts optimization and applies that visible curve; Escape cancels and discards it. The worker deliberately uses an atomic file spool and embeds this checkout's path. Packaging a shared worker and replacing repository-relative paths remain distribution work.