feat(plugins): qualify host VST3 chains and refresh the DAW gallery (phase 89)

This commit is contained in:
Johannes Findeisen 2026-11-06 01:50:25 +01:00
commit 26ace28bb5
73 changed files with 344 additions and 18 deletions

View file

@ -1,4 +1,4 @@
# Project format v16 (reads v1–v15)
# Project format v17 (reads v1–v17)
Phases 5–31 use a bounded text format implemented in C99 without a parser library.
The extension is `.xtc`. File operations run exclusively on the control thread.
@ -426,3 +426,39 @@ followed by `MARKER tick hex_name` records. Count is 0..128; ticks must be stric
increasing and at most MAX_TICK. Names use the existing bounded UTF-8 hex encoding.
Versions 1–15 migrate to an empty marker list. Older builds reject version 16.
Markers are copied by snapshots and history; the tick is their stable key.
## Version 17: per-track insert chains
After MARKERS/MARKER and before END, the writer emits a chain for every track,
in dense track order. Earlier versions migrate to empty chains with unity gain.
Floats use the existing eight-digit IEEE binary32 hex encoding; strings use the
existing bounded UTF-8/byte hex encoding, with `-` for an empty identity.
```text
CHAINS track_count
CHAIN track_id slot_count output_gain_bits
INSERT enabled wet_bits format descriptor_index unique_id inputs tempo hex_label
MODULE hex_absolute_binary_path
IDENTITY hex_stable_identifier_or_dash
CONTROLS control_count
CONTROL port value_bits
PARAMETERS point_count
PARAM tick port step value_bits
```
Each CHAIN has exactly slot_count INSERT blocks. CONTROLS/PARAMETERS determine
the subsequent CONTROL/PARAM record counts, including zero. Slots are ordered,
at most eight, and accept mono non-instrument effects only. Enabled is 0/1,
wet is finite 0–1, output gain finite 0–4; inputs must be 1. The format values
are LADSPA=0, CLAP=1, VST2=2, VST3=3 and Internal=4. Existing plugin specification
validation applies, including descriptor/identity/port/automation bounds and
20,000–300,000 milli-BPM. Bus chains must be empty. No sample reference is
permitted on an effect. Duplicate, missing, reordered or excessive chain
records, malformed strings and nonfinite values reject the whole load.
Loading and dependency inspection only validate metadata; no plugin module
is opened. Enabled plugins are verified when a render plan is prepared. Chain
preset files reuse this schema with exactly one non-bus track and no clips or
instrument. Track insert APIs are declared in `xtc_plugin.h`; see
[TRACK_INSERTS.md](TRACK_INSERTS.md) for playback restrictions and workflows.