English | 简体中文
Automatic pan and level balancing across a multi-singer vocal arrangement, as a pair of VST3 plugins.
SCVB is an open-source plugin project led by Synchain — source and documentation are fully public, and you are welcome to use, modify, and redistribute it under the terms of the GPL-3.0-or-later. If it saves you some time, come have a look at what else we make at synchain.ca; and if you like working with it, telling a friend or a colleague about Synchain is the best support we could ask for.
Status: pre-release (rc). Pre-release builds are on the Releases page. Features and the interface may still change before the first stable release; known limitations are listed in KNOWN_ISSUES.
Mixing engineers routinely spend hours drawing volume and pan automation across dozens of tracks of lead and backing vocals from different singers: keeping the voices from crowding the same spot in the stereo image, or making sure passages from different singers sit at a consistent perceived loudness. It is time-consuming and demanding work, mostly tedious and highly repetitive — and a meaningful way to aggravate the repetitive strain injuries that come with the job.
SCVB exists to solve exactly that and give you those hours back: it captures every vocal track, analyses them together, and gives each one a pan curve and a level curve, so the parts sit apart from one another instead of competing for the same spot, and so loudness stays close to consistent from passage to passage.
Two plugins, one system. SCVB Input sits on each vocal track and captures it; SCVB Output sits on the vocal bus, where it analyses, balances, sums, and replaces the bus input. A third, optional plugin, SCVB Monitor, is a read-only window for watching a whole group's pan and level movement. The interface is described tab by tab in the User Guide.
Illustrative screens with demo data.
Not sold on what the engine came up with, or want it arranged differently? No problem. Much like the workflow around Waves' Vocal Rider — print first, then tune by hand — you can use the automation-write feature to print the engine's analysis into your host as automation, then fine-tune from there by hand — starting from a finished pass rather than a blank one should still save you a lot of time.
Up to 15 vocal tracks per group, 8 independent groups (A–H), 2 version slots. The automation parameter surface is frozen at 123 declared (124 host-visible); everything else lives in state.
Windows
- Windows 10 1809+ or Windows 11, x64
- A VST3 host
- WebView2 Evergreen Runtime, for the editor UI (usually already present on Windows)
macOS (beta)
- A Mac with Apple Silicon (M1 or later), macOS 11 Big Sur or later. Intel Macs are not supported
- The host must run natively on Apple Silicon: the plugins contain arm64 code only, so a host running under Rosetta does not list them
- A VST3 or Audio Unit host. GarageBand is not supported. Logic Pro loads Audio Units only
- The editor UI uses the system WebKit (Safari 15.4 or later); with a system Safari older than 26.4 the plugin window's zoom stays at 100%
- The macOS build is a beta and is not code-signed or notarized: after copying the plugins you have to clear the quarantine flag with
xattr(see Install)
Transcribed from docs/DAW_COMPATIBILITY.md §4, which stays the source of truth for this table. Tier 1 = fully supported, Tier 2 = supported with limitations (with a workaround you can apply yourself), Tier 3 = untested or not supported.
| DAW | Version | Support tier | Status and known limits |
|---|---|---|---|
| Cubase | 14 / 15 | Tier 1 (primary test host) | Routing (realtime / offline), project save and reopen, and automation write verified on real hardware with the finished plugins (Cubase 15 Pro); routing also verified on Cubase 14 during the routing spike; automation hides in the Ins hidden lane; Input must sit in the last slot of the pre-fader section |
| REAPER | 7 | Tier 2 (partly verified) | Routing (realtime / offline) verified during the routing spike only; the finished plugins and automation write have not been tested in REAPER; may not write automation with the GUI closed (needs "process all notifications"; the plugin UI reminds you to keep the window open); one project per machine |
| Ableton Live | 12 | Tier 3 (untested) | Not yet tested on real hardware. Known from the design: 128-parameter ceiling (124 used here, 4 spare); Re-Enable Automation has to be clicked (the plugin UI reminds you when writing ends); deactivating the Output device gives about 5.5 s of silence before the vocals fall back to passthrough |
| Studio One | 6 | Tier 3 (untested) | Not yet tested on real hardware. Known from the design: automation mode must be set to Write/Latch inside the plugin window; Dropout Protection changes the block size |
| LUNA (macOS, Apple Silicon) | — | Tier 3 (beta, pending verification) | Not yet tested on real hardware; a hands-on acceptance run is planned before the first macOS beta. Expected from the design (not tested): use Latch, LUNA has no Write; the Output cannot sit on a Folder track; the Input cannot go in a Record FX slot; with an Apollo, use Core Audio mode or switch ARM off; hard-disabling the Output with Power gives about 5.5 s of silence (KI-6) |
| Logic Pro (macOS, Apple Silicon) | — | Tier 3 (beta / not tested in Logic) | Not tested in Logic. Audio Unit only (Logic does not load VST3). Expected from the design (not tested): print the whole song with Latch; a partial range may be overwritten with a flat line; create the Aux track first; bypassing the Output stops balancing; freeze with Source Only. GarageBand is not supported |
Untested hosts may well work — the plugins are standard VST3 / Audio Unit — but nobody has confirmed it on a real machine yet. Tiers move up only after a real-hardware test. FL Studio is not in the v1 support matrix. The macOS rows are beta: nothing on macOS has been verified in a DAW yet.
Pre-release (rc) builds, and later the stable releases, are published on this repository's Releases page; you can also build from source yourself (below).
- From the Releases page, download
SCVB-v<version>-win64.zipand the matching.sha256; - verify the zip against the
.sha256. The authoritative checksum is the SHA-256 in the GitHub Release notes (produced by CI at build time); the two should match — if they do not, do not install it, and tell us; - SCVB is not code-signed. Your browser or Windows may warn that the file comes from an unknown publisher; before unzipping, right-click the zip → Properties → tick Unblock → OK. The User Guide has the step-by-step version;
- unzip, and copy
SCVB Input.vst3,SCVB Output.vst3, and (optionally)SCVB Monitor.vst3— the whole bundle folder in each case — intoC:\Program Files\Common Files\VST3\; - rescan plugins in your DAW.
The macOS beta zip is uploaded to the Release only after it has passed hands-on acceptance on a real Mac (LUNA); until then the Releases page has only the Windows package.
The macOS zip is SCVB-v<version>-macos-arm64.zip (plus a .sha256). It holds VST3 and Audio Unit (.component) bundles of all three plugins, and an INSTALL.txt that is the authoritative version of the steps below. The build is not code-signed or notarized, so the steps include clearing the quarantine flag. In Terminal:
cd ~/Downloads
shasum -a 256 -c SCVB-v<version>-macos-arm64.zip.sha256
ditto -x -k SCVB-v<version>-macos-arm64.zip SCVB-v<version>-macos-arm64 && cd SCVB-v<version>-macos-arm64
for b in SCVB\ *.vst3; do ditto "$b" ~/Library/Audio/Plug-Ins/VST3/"$b"; done
for b in SCVB\ *.component; do ditto "$b" ~/Library/Audio/Plug-Ins/Components/"$b"; done
xattr -dr com.apple.quarantine ~/Library/Audio/Plug-Ins/VST3/SCVB\ *.vst3
xattr -dr com.apple.quarantine ~/Library/Audio/Plug-Ins/Components/SCVB\ *.component
killall -9 AudioComponentRegistrar
shasum must print OK. Updating? Delete the old SCVB *.vst3 and SCVB *.component bundles first (INSTALL.txt has the exact rm lines). killall printing "No matching processes" is harmless. Then rescan plugins in your host. In LUNA, Audio Units are on by default: open the Plug-In Manager and run Scan New (or Rescan All); the three SCVB Audio Units must show as "scanned", not "rejected". VST3 is off by default in LUNA on macOS and has to be enabled in the Plug-In Manager first. Use ditto, not cp -r, to copy the bundles.
Install both Input and Output. Those two are a pair and share one version number. When you upgrade, upgrade every SCVB plugin together: if the two sides speak different versions of the shared-memory protocol they refuse to connect, on purpose; and even when they do connect, mixing versions is not supported (with a new Output and an old Input, an offline render can sum the vocals twice).
SCVB Monitor is optional. It is a read-only side window for watching pan movement and distribution across a whole group. It passes audio through untouched, exposes no automation parameters at all, and only ever reads the shared data — it never claims a slot and never writes to any shared segment, so adding or removing it cannot change what Input and Output do.
Create a stereo vocal bus and route every vocal track into it. Put an SCVB Input in the last slot of each vocal track's plugin chain and an SCVB Output in the first slot of the bus. Give each Input a channel id, then capture, analyse, and turn on the output. The User Guide walks through it in five minutes.
Before you start, read these. Breaking any one of them does not make the result worse — it breaks it:
⚠️ Must read: SCVB's nine usage rules. Breaking any one of them causes silence, wrong panning, or failed analysis.
- Vocal tracks must keep their original DAW routing, pointing at the bus that hosts SCVB Output. Do not re-route a vocal track straight to the master output, and do not bypass the bus. (ADR-002)
- SCVB Input must sit in the last slot of the vocal track's plugin chain; SCVB Output must sit in the first slot of the bus. Any other position breaks the processing-order assumption SCVB relies on; for what each host calls that slot, see
https://github.com/synchain-oss/scvb/blob/prod/docs/DAW_COMPATIBILITY.md. (ADR-002 / J45)- Input mutes its downstream output only while a healthy SCVB Output is detected — this is by design, not a bug. That mute path is what preserves the "vocal tracks first, bus second" ordering in the DAW's dependency graph, and it still holds under offline rendering and REAPER's anticipative multithreading. When no healthy Output is detected (not installed, not connected, peer has quit), Input falls back to passthrough automatically, over an 80 ms ramp with a 5-second hysteresis debounce (the hysteresis applies only to the "mute → passthrough" direction; "passthrough → mute" ramps over 80 ms as soon as health is confirmed), so installing only one of the two plugins will never leave you with a dead track. (ADR-002 / J12 + J32)
- Host pan must stay centred on both the vocal tracks and the bus. SCVB pans internally with an equal-power law, independently of the host's pan law; an off-centre host pan stacks on top of it and produces a wrong stereo image. (ADR-010)
- Each channel id is unique within one group, and a given vocal track may belong to only one group. When two Inputs in the same group claim the same channel, the late arrival shows a "channel conflict" warning and stays inactive; the same channel number in a different group is a separate, unrelated path. (ADR-002 / J66)
- Only one Output instance can be active in a group at any one time. A second instance in the same group drops into read-only observer mode and shows a warning; the eight groups (A–H) are independent bus domains and do not affect one another. (ADR-002 / J66)
- Every track takes part in automatic pan by default; if a stereo track should keep its existing stereo width and position, switch off "participate in auto pan" for that track on the Tracks page. Mono sources are placed with equal-power pan; stereo sources use a dual-pan + width model (pan = centre of the arc, width = spread), and once participation is switched off the stereo width you already have is preserved rather than overwritten by automatic assignment. (ADR-003 / J57 + J83)
- SCVB Output reports no additional latency to the DAW. Alignment is done by timeline addressing; do not try to "correct" it with PDC (plugin delay compensation). (ADR-002)
- Do not carry on exporting while a "timeline gap / overlap" warning is showing. Work through the common-pitfalls list in
https://github.com/synchain-oss/scvb/blob/prod/docs/DAW_COMPATIBILITY.mdto check your routing first: for as long as the warning count refuses to fall back to zero, some track's audio is not being picked up correctly.
⚠️ Do not render a vocal track that has SCVB Input on it by itself. Once Input is connected to SCVB Output, Render in Place, Freeze or a single-track export of one vocal track gives you a silent file; if you choose to replace the original audio, the original is replaced with silence. Export the vocal bus as a whole; if you really need a single-track file, bypass or remove that track's SCVB Input before rendering. Details in the User Guide, "Exporting and rendering".
SCVB does not use the network: no update check, no usage statistics, no account. The only web pages it opens are the documentation and WebView2 download links, in your default browser, when you click them. On Windows it stores a few cross-project preferences under %APPDATA%\Synchain\SCVB and the interface's browser cache under %LOCALAPPDATA%\Synchain\SCVB; everything else is saved in your project, apart from files you export yourself. On macOS (beta) the cross-project preferences are under ~/Library/Application Support/Synchain/SCVB, the plugins keep a small lock folder for their shared memory in ~/Library/Application Support/Synchain/SCVB/ipc, and each plugin writes a diagnostic log (rotated at about 1 MB) to ~/Library/Logs/Synchain/SCVB/ (input.log, output.log, monitor.log); nothing is sent anywhere, and the log lines can contain your user name, so look them over before you share one. The full list is in the User Guide, "Privacy and files on disk".
git clone https://github.com/synchain-oss/scvb.git
cd scvb
pwsh scripts/build.ps1 -JucePath C:\path\to\JUCESee CLAUDE.md §6 for the full toolchain list, and run pwsh scripts/gates.ps1 for the local quality gates.
macOS (Apple Silicon): see docs/build-macos.md for building, testing and packaging locally (in Chinese); the steps CI uses are in .github/workflows/build-macos.yml, and scripts/package-macos.sh builds the zip from the result.
These are accepted v1 limitations; the matching entries in KNOWN_ISSUES describe what you will see, why, and how to work around it.
- Do not render a vocal track with SCVB Input on it by itself: rendering one vocal track in place (Render in Place), freezing it (Freeze) or exporting it alone gives you a silent file, and choosing "replace the original audio" swaps your source recording for that silence. Export the vocal bus as a whole (KI-4).
- The DAW's mute, solo and faders have no effect on SCVB's output: to take a track out of SCVB's output, turn off that track's "ON" switch on the Output's Tracks page (KI-8).
- One project using SCVB open at a time on the same computer; if you really need two open, give them different groups (KI-5).
- When the host stops calling the Output (a deactivated device in Ableton Live, FL Studio's smart disable, and similar), the vocals go silent for about 5.5 seconds and then play as the raw, unbalanced image until the host calls the Output again; the tracks then rejoin one at a time, so a track not yet reached stays silent for a moment (KI-6).
- Balance estimates are off in unison / doubled passages: when several tracks sing the same line with very similar sound, they usually add up louder than the analysis expects (KI-9).
- SCVB Output reports no latency to the DAW; alignment is done by timeline addressing, so do not try to "fix" it with latency compensation (PDC) (hard rule 8).
- Input only adjusts its own track's level, never its pan; panning is handled entirely by the Output.
- Every track takes part in automatic pan by default, stereo tracks included; to keep a stereo track's own image, switch off "participate in auto pan" for that track on the Output's Tracks page (hard rule 7).
- User Guide — installation, workflow, troubleshooting, FAQ
- Known issues — accepted v1 limitations
- Release process — versioning, tags, release notes
- Contracts and architecture live in
docs/:PARAMETERS.md,IPC_CONTRACT.md,STATE_SCHEMA.md,SCVB_CONTRACT.md - Host-by-host notes live in docs/DAW_COMPATIBILITY.md
- Read-only copies of the constitution documents are in
docs/constitution/
See CONTRIBUTING.md and the Code of Conduct. Every commit must be signed off (git commit -s). Security reports go through SECURITY.md, not public issues.
The nine hard rules have a single source of truth: the ## 硬约束 section of docs/USER_GUIDE.zh-CN.md, with translations in docs/hard-rules.i18n.json. Chinese is the semantic authority. Never edit the rules anywhere else — change the source, run node scripts/gen-hard-rules.mjs, and let the other six copies follow.
The source code in this repository is GPL-3.0-or-later. The released .vst3 binaries also contain GPLv3-only and AGPLv3 components, so they are distributed under GPLv3 as a whole (details in THIRD-PARTY-NOTICES.md). Third-party components built into the plugins (JUCE, the VST3 SDK, the libraries JUCE compiles in, the WebView2 loader, fonts) and their licences are listed in THIRD-PARTY-NOTICES.md; full licence texts are in LICENSES/.
- synchain-oss/synchain-bridge — VST3 plugin bridging DAW audio into the browser
- synchain-oss/synchain-cli —
@synchain/clicommand-line client - synchain.ca — project website





