1dc7721f7a
CI / Build (push) Successful in 32s
The Cargo homepage feeds Plugin::URL, which hosts can show to users, so a LAN-only Gitea address was the wrong value there. wiki.novoyuuparosk.org is still a placeholder, but a reachable one. The Gitea URL is deliberately not added to STALE even though it was retired as the homepage: it remains the correct clone URL and appears in the README as one. A value can be retired from one role while staying current in another, and STALE is about spellings nobody should use rather than values that moved fields. The checker flagged it and this is the resolution, matching how codename-206 exempts its own repo name. Also finishes turning the template's README into this plugin's. The scaffold left a Quick Start telling the reader to clone the template, and a `sh check-branding.sh` path that has since moved under tools/. The full branding rationale stays in the template; this repo keeps a pointer and the facts specific to it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WHt4DykxXaQnyaJfyS8KCn
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://192.168.2.199:3005/musiikki/nih-plug-template);
|
|
the DSP is not written yet, the plugin currently passes audio through an example gain stage.
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
git clone http://192.168.2.199: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 skeleton — params, DSP, and egui editor, with one example gain param
|
|
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.
|