552b82bbaf
- Replace 'DSP not written yet' description with actual stereo delay DSP summary. - Update src/lib.rs description in project structure tree. - Replace stale 192.168.2.199 IP with pi5-16.local hostname in the clone URL (both in README body and Quick Start example).
134 lines
5.6 KiB
Markdown
134 lines
5.6 KiB
Markdown
# Kolmekivi
|
|
|
|
A stereo delay/echo plugin — Rust, CLAP/VST3, egui.
|
|
|
|
Scaffolded from [`musiikki/nih-plug-template`](http://pi5-16.local:3005/musiikki/nih-plug-template);
|
|
the DSP is a simple stereo delay with independent left/right delay lines, feedback, and a wet/dry mix control.
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
git clone http://pi5-16.local:3005/musiikki/kolmekivi
|
|
cd kolmekivi
|
|
cargo xtask bundle kolmekivi --release --features vst3
|
|
```
|
|
|
|
## Branding
|
|
|
|
Identity lives in `tools/branding.conf`; `sh tools/check-branding.sh` asserts every copy of
|
|
it agrees, and CI runs that on each push. To rename the plugin, use
|
|
`sh tools/brand-plugin.sh` — it derives the package and type names, refuses to move the
|
|
frozen `CLAP_ID`/`VST3_CLASS_ID` without `--allow-identity-change`, and verifies itself with
|
|
the checker afterwards. The toolkit and the reasoning behind it live in
|
|
[`musiikki/nih-plug-template`](http://192.168.2.199:3005/musiikki/nih-plug-template).
|
|
|
|
The repository keeps the name `kolmekivi` even if the plugin is renamed — that is the
|
|
development codename, fixed at creation.
|
|
|
|
## Build
|
|
|
|
```bash
|
|
# Install Rust via rustup: https://rustup.rs
|
|
# No VST3 SDK needed — NIH-plug bundles its own bindings.
|
|
|
|
# Build + bundle the CLAP (default)
|
|
cargo xtask bundle kolmekivi --release
|
|
|
|
# Add the VST3 as well — see the licensing note below before you do this
|
|
cargo xtask bundle kolmekivi --release --features vst3
|
|
```
|
|
|
|
**Output:** `target/bundled/<name>.clap` (and `<name>.vst3` with `--features vst3`), where
|
|
`<name>` is the `name` set in `bundler.toml` — **not** the crate name. Out of the box that
|
|
means `target/bundled/Kolmekivi.clap`.
|
|
|
|
On Linux the egui editor needs the GUI development headers:
|
|
|
|
```bash
|
|
sudo apt install pkg-config libgl-dev libx11-dev libxcursor-dev libxcb1-dev \
|
|
libxcb-icccm4-dev libxcb-dri2-0-dev libx11-xcb-dev libxkbcommon-dev libxkbcommon-x11-dev
|
|
```
|
|
|
|
## Deploy
|
|
|
|
### FL Studio
|
|
|
|
Build with `--features vst3` first if you want the VST3 (see the licensing note below).
|
|
|
|
FL Studio scans `C:\Program Files\Common Files\VST3` by default, **ignores directory junctions**
|
|
(so a symlinked bundle is invisible to its scanner), and caches failed scans.
|
|
|
|
1. Copy the `.vst3` bundle to a folder FL scans (e.g. `C:\Program Files\Common Files\VST3`).
|
|
2. Copy the `.clap` bundle to a folder FL scans (e.g. `C:\Program Files\Common Files\CLAP`).
|
|
3. In FL Studio: **Options → Manage plugins → tick "Rescan previously failed plugins" → Find installed plugins**, then search for your plugin name (set in `bundler.toml`).
|
|
|
|
### Linux
|
|
|
|
```bash
|
|
# CLAP
|
|
cp -r "target/bundled/Kolmekivi.clap" ~/.clap/
|
|
|
|
# VST3 (only exists if you built with --features vst3)
|
|
cp -r "target/bundled/Kolmekivi.vst3" ~/.vst3/
|
|
|
|
# Or globally:
|
|
# sudo cp -r "target/bundled/Kolmekivi.clap" /usr/lib/clap/
|
|
# sudo cp -r "target/bundled/Kolmekivi.vst3" /usr/lib/vst3/
|
|
```
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
Cargo.toml # Package deps + the opt-in `vst3` feature — NIH-plug pinned to codename-206's rev
|
|
bundler.toml # Bundle name for `cargo xtask bundle`
|
|
src/lib.rs # Plugin — params, stereo delay DSP, and egui editor
|
|
xtask/ # Bundler xtask (cargo xtask bundle)
|
|
.cargo/config.toml # xtask alias
|
|
tools/ # Branding toolkit — see Renaming
|
|
.gitattributes # Pins *.sh to LF so Windows checkouts keep a valid shebang
|
|
.github/workflows/ # CI: branding check, both feature sets build, test, bundle
|
|
```
|
|
|
|
## CI
|
|
|
|
`.github/workflows/ci.yaml` gates pushes and PRs on the branding check, a build of both
|
|
feature sets, `cargo test`, and a bundle — enough to catch a rename that only half-landed,
|
|
a `cfg(feature = "vst3")` gate that stopped compiling, or a `bundler.toml` that no longer
|
|
matches the crate name.
|
|
|
|
It targets `runs-on: rust-audio`, an **org-scoped** runner label. A plugin cloned into a
|
|
different org will not see that runner and its jobs will queue indefinitely rather than fail
|
|
— register a runner advertising the label for that org, or change `runs-on`.
|
|
|
|
Deliberately not covered: plugin performance. Realtime cost can only be measured meaningfully
|
|
against a real audio deadline, and `Plugin::process()` cannot be called from a test at all
|
|
(`ProcessContext` requires a `Transport`, whose constructor and fields are `pub(crate)` to
|
|
nih-plug). Benchmark your DSP types directly if you need it.
|
|
|
|
## License
|
|
|
|
**GPL-3.0-or-later.** See `LICENSE` for the terms and `NOTICE` for third-party attribution.
|
|
|
|
Plugins cloned from this template inherit GPL-3.0-or-later, because the template's own code
|
|
is under it. If you need a permissive plugin, this is the wrong starting point — write the
|
|
skeleton yourself against NIH-plug directly, which is ISC.
|
|
|
|
Parts of `src/lib.rs` derive from Robbert van der Helm's NIH-plug cookiecutter template and
|
|
`gain` example, both ISC. ISC is GPL-compatible, so that notice is retained in `NOTICE`
|
|
rather than superseded.
|
|
|
|
## VST3 and Steinberg
|
|
|
|
`vst3-sys`, which `nih_export_vst3!()` needs, is GPLv3-or-later — chosen by its own authors,
|
|
who describe their port as a derivative of Steinberg's SDK that "was not made in isolation."
|
|
That obligation is what makes a distributed VST3 build GPL-licensed, and it holds regardless
|
|
of any question about Steinberg's own rights. Being GPL-3.0-or-later already, this template
|
|
satisfies it.
|
|
|
|
No Steinberg SDK source is vendored or redistributed here, so there is nothing to accept at
|
|
build time. Separately from copyright, **"VST" is a trademark of Steinberg Media Technologies
|
|
GmbH**; describing a distributed product as a VST plugin is governed by their trademark terms.
|
|
If you intend to distribute commercially under that name, that is the part worth legal advice.
|
|
|
|
CLAP carries none of this — no GPL dependency and no trademark encumbrance.
|