English · 한국어
A collection of userscripts for Synthesizer V Studio 2.
A side panel that keeps the editor centered on whatever is currently playing.
- Follow Playback State — check this to follow playback started from Synthesizer V's transport or keyboard shortcuts, including loop playback. Following stops when playback pauses or stops and resumes on the next play. Uncheck to return to the panel's Play/Pause controls; changing the checkbox never starts or pauses audio. Off by default.
- Scroll following — horizontal (time) and vertical (pitch) auto-scroll. Vertical scroll moves smoothly toward the median pitch of the notes around the playhead (1 before, 5 ahead), and you can adjust how long that movement takes (duration, in ms).
- Track focusing — automatically switches the current track/group to whatever plays under the playhead. Choose which tracks to consider, or toggle the whole feature off.
- Playhead position — a slider for where the playhead sits in the viewport while playing. Ranges from 0.05 to 0.95, where value × 100% is the horizontal position from the left (e.g. 0.25 → 25%).
A side panel for applying a delta to parameter curves over the selected notes.
- Choose a base parameter, including Tone Shift, Mouth Opening, and Rap Intonation.
- Choose a base parameter or a specific Vocal Mode entry directly from the Target dropdown. Vocal mode entries are read from the selected group's defined vocal modes, falling back to the current group when no group is selected.
- Use Define Preset... to create a preset. In the dialog, set a preset name and move the sliders for every target the preset should control; zero-valued sliders are ignored.
- Presets are saved per voicebank (
database.name) and shared across projects, tracks, and groups using that voicebank. Identification uses the last saved SVP, with group overrides taking precedence over the track's voicebank. Save after changing a voicebank or adding groups. If the voicebank cannot be identified, preset editing is disabled; no group-specific or shared fallback store is used. - Existing group presets are imported into the matching voicebank store when their saved project is opened. Original files are preserved, and previously imported presets are not imported again after deletion. Legacy presets whose voicebank cannot be identified remain in their original files.
- Use Extract Preset... to create a preset from the current selection. The script samples enabled parameter and vocal mode values across the selected notes' quantized range, uses the median value for each detected target, and shows only detected targets in the preset dialog.
- Selecting a saved preset changes the Delta slider to percent mode. Applying a preset uses
entry amount * delta percent, so a0.5Tension entry with Delta50%applies0.25. - Adjust the delta with a slider, then apply it to the selected notes' time ranges.
- If no notes are selected, the script shows a warning dialog instead of editing the project.
A minimal example script, handy as a template for new scripts.
-
On the Releases page, download the
.jsor.luafile(s) you want from the latest release (or any specific version). -
Drop them into the Synthesizer V Studio 2 scripts folder:
OS Path macOS ~/Library/Application Support/Dreamtonics/Synthesizer V Studio 2/scriptsWindows %APPDATA%\Dreamtonics\Synthesizer V Studio 2\scripts -
Restart Studio 2 (or reopen the Scripts menu). The script appears under its menu entry.
Tip: you can also open the scripts folder directly from the editor's Scripts menu.
Stack: TypeScript · esbuild (JS bundling) + SWC (ES5 downleveling) · typescript-to-lua (Lua bundling) · Biome (lint/format) · semantic-release · pnpm.
Studio 2 JavaScript scripts are ES5-only — no arrow function, class, or
let/constsyntax. The JS build bundles each JS entry with esbuild and downlevels it with SWC. Parameter Control is distributed only as a Lua 5.4 bundle through typescript-to-lua.
pnpm install
pnpm build # build JS scripts and the Lua-only Parameter Control bundle into dist/| Command | Description |
|---|---|
pnpm build |
Build JS scripts and the Lua-only parameter-control.lua into dist/. |
pnpm build:js |
Type-check, bundle, and downlevel JavaScript script entries to dist/*.js; src/parameter-control.ts is intentionally excluded because Parameter Control is distributed only as Lua. |
pnpm build:lua |
Compile src/parameter-control.ts to dist/parameter-control.lua. |
pnpm typecheck |
Type-check only (tsc --noEmit). |
pnpm test |
Build JavaScript and test playback and Parameter Control with a simulated Synthesizer V host. |
pnpm test:lua |
Build and test Parameter Control in Lua 5.4 (requires lua on PATH). |
pnpm lint |
Lint with Biome. |
pnpm check |
Biome lint + format check. |
pnpm format |
Format the codebase with Biome. |
Most top-level src/*.ts files are JavaScript entry points; src/parameter-control.ts is a Lua-only entry compiled by build:lua. Shared code lives under src/common and src/ui and is imported via the @/ alias, then inlined into each bundle at build time.
- Always open a pull request targeting
dev— don't push straight todevormain. - Use Conventional Commits — releases are fully automated with semantic-release:
feat:bumps the minor version;fix:,perf:, andrefactor:bump the patch version.- Merging to
devpublishes a prerelease (x.y.z-dev.N); merging tomainpublishes a stable release. - Each release creates or updates
CHANGELOG.mdand commits it together with the package version. Entries start with the first release after changelog support is enabled; earlier releases remain available on GitHub. - Each GitHub release attaches the built
dist/*.jsfiles and Lua bundles such asdist/parameter-control.luaas individual downloadable assets.