Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
8bf2550
linked analysis
Boof2015 Aug 22, 2026
b5bb850
prism bridge daw server
Boof2015 Aug 22, 2026
0def796
multichannel matrix
Boof2015 Sep 6, 2026
ae5a861
new waterfall scope
Boof2015 Sep 11, 2026
31edf75
tidal support
Boof2015 Sep 11, 2026
18bda05
waterfall vst
Boof2015 Sep 11, 2026
074a279
32bit wav support
Boof2015 Sep 11, 2026
49dc72f
reference curve
Boof2015 Sep 11, 2026
4460ec8
windows AppBar support
Boof2015 Sep 11, 2026
aef2c8f
multichannel matrix channel activity indicator
Boof2015 Sep 14, 2026
b0441bc
now playing checks when settings screen is open
Boof2015 Sep 15, 2026
be7f6ba
more seamless bridge UX
Boof2015 Sep 15, 2026
fba1a4b
CLAP support
Boof2015 Sep 15, 2026
f7ba030
revamp settings
Boof2015 Sep 15, 2026
952b1c0
fix macos preinitialization startup visual bug
Boof2015 Sep 15, 2026
d3a900a
fix tui compile error on windows
Boof2015 Sep 16, 2026
e9b28d9
fix windows plugin compile error
Boof2015 Sep 16, 2026
166e0f0
polish profile popups
Boof2015 Sep 16, 2026
9160121
update scripts
Boof2015 Sep 16, 2026
7c75ae2
linux fixes
Boof2015 Sep 16, 2026
42c67d0
fix plugin issues with certain linux DAWs
Boof2015 Sep 16, 2026
2a2d01d
optimize vectorscope
Boof2015 Sep 16, 2026
deaff47
add latency measurements and methodology
Boof2015 Sep 17, 2026
68c8458
multichannel routing for windows and linux
Boof2015 Sep 17, 2026
0538962
update build scripts for windows
Boof2015 Sep 17, 2026
646dad2
update themes for vectorscope wedges
Boof2015 Sep 17, 2026
28e5909
version bump
Boof2015 Sep 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*.sh text eol=lf
resources/installer/macos-scripts/* text eol=lf
93 changes: 75 additions & 18 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ jobs:
ninja-build \
pkg-config \
python3 \
libpulse-dev
libpulse-dev \
pulseaudio \
pulseaudio-utils

- name: Install dependencies
env:
Expand All @@ -80,6 +82,9 @@ jobs:
- name: Test
run: npm test

- name: Test isolated Linux multichannel capture
run: npm run test:linux-capture

- name: Build and test Prism TUI
run: npm run test:tui

Expand All @@ -97,7 +102,8 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-2022]
# Keep the Linux plugin ABI baseline stable for older DAW runtimes.
os: [ubuntu-24.04, macos-latest, windows-2022]

steps:
- uses: actions/checkout@v6
Expand Down Expand Up @@ -169,6 +175,8 @@ jobs:
libxrandr-dev \
libxrender-dev \
libwebkit2gtk-4.1-dev \
xvfb \
xauth \
libglu1-mesa-dev \
mesa-common-dev

Expand All @@ -187,6 +195,9 @@ jobs:
- name: Test native spectrum and capture exports
run: npm run test:spectrum-native

- name: Test native channel routing and PCM formats
run: npm run test:capture-channel-selection-native

- name: Test native spectrogram accuracy
run: npm run test:spectrogram-native

Expand Down Expand Up @@ -232,27 +243,30 @@ jobs:
cmake -B plugin/build -S plugin -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DJUCE_PATH="$GITHUB_WORKSPACE/.ci-cache/juce/JUCE-${PRISM_JUCE_VERSION}" \
-DPRISM_PLUGIN_FORMATS="AU;VST3" \
-DPRISM_PLUGIN_FORMATS="AU;VST3;CLAP" \
-DPRISM_COPY_PLUGIN_AFTER_BUILD=OFF \
-DCMAKE_C_COMPILER_LAUNCHER=sccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache
node scripts/check-plugin-formats.mjs

- name: Configure JUCE plugins (Linux)
if: runner.os == 'Linux'
run: |
cmake -B plugin/build -S plugin -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DJUCE_PATH="$GITHUB_WORKSPACE/.ci-cache/juce/JUCE-${PRISM_JUCE_VERSION}" \
-DPRISM_PLUGIN_FORMATS=VST3 \
-DPRISM_PLUGIN_FORMATS="VST3;CLAP" \
-DPRISM_COPY_PLUGIN_AFTER_BUILD=OFF
node scripts/check-plugin-formats.mjs

- name: Configure JUCE plugins (Windows)
if: runner.os == 'Windows'
shell: cmd
run: |
for /f "usebackq tokens=*" %%i in (`vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do set VSINSTALL=%%i
call "%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat"
cmake -B plugin/build -S plugin -G Ninja -DCMAKE_BUILD_TYPE=Release -DJUCE_PATH="%GITHUB_WORKSPACE%\.ci-cache\juce\JUCE-%PRISM_JUCE_VERSION%" -DPRISM_PLUGIN_FORMATS=VST3 -DPRISM_COPY_PLUGIN_AFTER_BUILD=OFF -DJUCE_WEBVIEW2_PACKAGE_LOCATION="%JUCE_WEBVIEW2_PACKAGE_LOCATION%" -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
cmake -B plugin/build -S plugin -G Ninja -DCMAKE_BUILD_TYPE=Release -DJUCE_PATH="%GITHUB_WORKSPACE%\.ci-cache\juce\JUCE-%PRISM_JUCE_VERSION%" -DPRISM_PLUGIN_FORMATS="VST3;CLAP" -DPRISM_COPY_PLUGIN_AFTER_BUILD=OFF -DJUCE_WEBVIEW2_PACKAGE_LOCATION="%JUCE_WEBVIEW2_PACKAGE_LOCATION%" -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
node scripts/check-plugin-formats.mjs

- name: Build JUCE plugins (macOS)
if: runner.os == 'macOS'
Expand All @@ -262,30 +276,73 @@ jobs:
if: runner.os == 'Linux'
run: cmake --build plugin/build --target PrismInstallerPlugins --parallel 4

- name: Test Linux browser helper isolation
if: runner.os == 'Linux'
run: |
cmake --build plugin/build --target PrismLinuxWebViewHelperProbe --parallel 4
ctest --test-dir plugin/build --output-on-failure -R '^PrismLinuxWebViewHelperTests$'

- name: Build JUCE plugins (Windows)
if: runner.os == 'Windows'
shell: cmd
run: |
for /f "usebackq tokens=*" %%i in (`vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do set VSINSTALL=%%i
call "%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat"
cmake --build plugin/build --target PrismInstallerPlugins --config Release --parallel 4
cmake --build plugin/build --target PrismReferenceTests PrismBridgeTests PrismWaterfallTests --config Release --parallel 4
ctest --test-dir plugin/build -C Release --output-on-failure -R "Prism(Reference|BridgeProcessor|Waterfall)Tests"

- name: Stage plugins for Windows installer
if: runner.os == 'Windows'
- name: Test Prism Reference, Bridge, and Waterfall plugins
if: runner.os != 'Windows'
run: |
cmake --build plugin/build --target PrismReferenceTests PrismBridgeTests PrismWaterfallTests --config Release --parallel 4
ctest --test-dir plugin/build -C Release --output-on-failure -R "Prism(Reference|BridgeProcessor|Waterfall)Tests"

- name: Stage plugins for installer
run: node scripts/build/stage-plugins.mjs

- name: Setup Rust for CLAP validation
uses: dtolnay/rust-toolchain@stable
with:
toolchain: '1.95.0'

- name: Cache CLAP validator
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
.ci-cache/clap-validator/target
key: ${{ runner.os }}-clap-validator-b2f1d9b-rust-1.95.0

- name: Build pinned CLAP validator
shell: bash
run: |
rm -rf plugin/dist-installer
mkdir -p plugin/dist-installer/VST3
for art in PrismSpectrum PrismOscilloscope PrismVUMeter PrismLUFSMeter PrismVectorscope PrismSpectrogram PrismWaveform; do
vst3_dir="plugin/build/${art}_artefacts/Release/VST3"
[ -d "$vst3_dir" ] && find "$vst3_dir" -maxdepth 1 -name "*.vst3" -exec cp -R {} plugin/dist-installer/VST3/ \;
done
vst3_count="$(find plugin/dist-installer/VST3 -maxdepth 1 -name "*.vst3" | wc -l | tr -d ' ')"
if [ "$vst3_count" -ne 7 ]; then
echo "ERROR: expected 7 VST3 plugins, found $vst3_count"
exit 1
git clone https://github.com/free-audio/clap-validator.git .ci-cache/clap-validator-source
git -C .ci-cache/clap-validator-source checkout b2f1d9b79b1d264a5747f46707d72b1aa40a02ef
cargo build --release --locked --package clap-validator --manifest-path .ci-cache/clap-validator-source/Cargo.toml --target-dir .ci-cache/clap-validator/target
echo "$GITHUB_WORKSPACE/.ci-cache/clap-validator/target/release" >> "$GITHUB_PATH"

- name: Validate all CLAP plugins
shell: bash
run: |
if [ "$RUNNER_OS" = "Linux" ]; then
xvfb-run -a node scripts/validate-clap.mjs
else
node scripts/validate-clap.mjs
fi

- name: Retain CLAP validation output
if: always()
uses: actions/upload-artifact@v4
with:
name: clap-validation-${{ runner.os }}
path: plugin/build/clap-validation/
if-no-files-found: ignore

- name: Test plugin staging and Unix installer hooks
run: node --test test/plugin-packaging.test.mjs

- name: Stage Prism TUI for Windows installer
if: runner.os == 'Windows'
run: npm run stage:tui
Expand All @@ -296,7 +353,7 @@ jobs:
env:
CSC_IDENTITY_AUTO_DISCOVERY: 'false'

- name: Smoke-test Windows installer PATH integration
- name: Smoke-test Windows installer plugins and PATH integration
if: runner.os == 'Windows'
shell: pwsh
run: ./scripts/test-windows-installer.ps1
Expand Down
112 changes: 70 additions & 42 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ jobs:
include:
- os: macos-latest
dist_cmd: dist:mac
- os: ubuntu-latest
# Keep the Linux plugin ABI baseline stable for older DAW runtimes.
- os: ubuntu-24.04
dist_cmd: dist:linux:packages
# Pinned to windows-2022 because windows-latest now ships VS 2026
# (internal version 18), which the @electron/node-gyp version in our
Expand Down Expand Up @@ -99,6 +100,8 @@ jobs:
libxrandr-dev \
libxrender-dev \
libwebkit2gtk-4.1-dev \
xvfb \
xauth \
libglu1-mesa-dev \
mesa-common-dev \
rpm
Expand All @@ -121,6 +124,9 @@ jobs:
- name: Test native spectrum and capture exports
run: npm run test:spectrum-native

- name: Test native channel routing and PCM formats
run: npm run test:capture-channel-selection-native

- name: Test native spectrogram accuracy
run: npm run test:spectrogram-native

Expand Down Expand Up @@ -153,19 +159,21 @@ jobs:
cmake -B plugin/build -S plugin -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DJUCE_PATH="$GITHUB_WORKSPACE/.ci-cache/juce/JUCE-${PRISM_JUCE_VERSION}" \
-DPRISM_PLUGIN_FORMATS="AU;VST3" \
-DPRISM_PLUGIN_FORMATS="AU;VST3;CLAP" \
-DPRISM_COPY_PLUGIN_AFTER_BUILD=OFF \
-DCMAKE_C_COMPILER_LAUNCHER=sccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache
node scripts/check-plugin-formats.mjs

- name: Configure JUCE plugins (Linux)
if: runner.os == 'Linux'
run: |
cmake -B plugin/build -S plugin -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DJUCE_PATH="$GITHUB_WORKSPACE/.ci-cache/juce/JUCE-${PRISM_JUCE_VERSION}" \
-DPRISM_PLUGIN_FORMATS=VST3 \
-DPRISM_PLUGIN_FORMATS="VST3;CLAP" \
-DPRISM_COPY_PLUGIN_AFTER_BUILD=OFF
node scripts/check-plugin-formats.mjs

# JUCE's NEEDS_WEBVIEW2 expects the Microsoft.Web.WebView2 NuGet package
# to already be installed locally; it doesn't fetch it itself. Install it
Expand Down Expand Up @@ -197,7 +205,8 @@ jobs:
run: |
for /f "usebackq tokens=*" %%i in (`vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do set VSINSTALL=%%i
call "%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat"
cmake -B plugin/build -S plugin -G Ninja -DCMAKE_BUILD_TYPE=Release -DJUCE_PATH="%GITHUB_WORKSPACE%\.ci-cache\juce\JUCE-%PRISM_JUCE_VERSION%" -DPRISM_PLUGIN_FORMATS=VST3 -DPRISM_COPY_PLUGIN_AFTER_BUILD=OFF -DJUCE_WEBVIEW2_PACKAGE_LOCATION="%JUCE_WEBVIEW2_PACKAGE_LOCATION%" -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
cmake -B plugin/build -S plugin -G Ninja -DCMAKE_BUILD_TYPE=Release -DJUCE_PATH="%GITHUB_WORKSPACE%\.ci-cache\juce\JUCE-%PRISM_JUCE_VERSION%" -DPRISM_PLUGIN_FORMATS="VST3;CLAP" -DPRISM_COPY_PLUGIN_AFTER_BUILD=OFF -DJUCE_WEBVIEW2_PACKAGE_LOCATION="%JUCE_WEBVIEW2_PACKAGE_LOCATION%" -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
node scripts/check-plugin-formats.mjs

- name: Build JUCE plugins (macOS)
if: runner.os == 'macOS'
Expand All @@ -207,60 +216,77 @@ jobs:
if: runner.os == 'Linux'
run: cmake --build plugin/build --target PrismInstallerPlugins --parallel 4

- name: Test Linux browser helper isolation
if: runner.os == 'Linux'
run: |
cmake --build plugin/build --target PrismLinuxWebViewHelperProbe --parallel 4
ctest --test-dir plugin/build --output-on-failure -R '^PrismLinuxWebViewHelperTests$'

- name: Build JUCE plugins (Windows)
if: runner.os == 'Windows'
shell: cmd
run: |
for /f "usebackq tokens=*" %%i in (`vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do set VSINSTALL=%%i
call "%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat"
cmake --build plugin/build --target PrismInstallerPlugins --config Release --parallel 4
cmake --build plugin/build --target PrismReferenceTests PrismBridgeTests PrismWaterfallTests --config Release --parallel 4
ctest --test-dir plugin/build -C Release --output-on-failure -R "Prism(Reference|BridgeProcessor|Waterfall)Tests"

- name: Test Prism Reference, Bridge, and Waterfall plugins
if: runner.os != 'Windows'
run: |
cmake --build plugin/build --target PrismReferenceTests PrismBridgeTests PrismWaterfallTests --config Release --parallel 4
ctest --test-dir plugin/build -C Release --output-on-failure -R "Prism(Reference|BridgeProcessor|Waterfall)Tests"

- name: Show sccache stats
if: runner.os != 'Linux'
run: sccache --show-stats

- name: Stage plugins for installer
run: node scripts/build/stage-plugins.mjs

- name: Setup Rust for CLAP validation
uses: dtolnay/rust-toolchain@stable
with:
toolchain: '1.95.0'

- name: Cache CLAP validator
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
.ci-cache/clap-validator/target
key: ${{ runner.os }}-clap-validator-b2f1d9b-rust-1.95.0

- name: Build pinned CLAP validator
shell: bash
run: |
git clone https://github.com/free-audio/clap-validator.git .ci-cache/clap-validator-source
git -C .ci-cache/clap-validator-source checkout b2f1d9b79b1d264a5747f46707d72b1aa40a02ef
cargo build --release --locked --package clap-validator --manifest-path .ci-cache/clap-validator-source/Cargo.toml --target-dir .ci-cache/clap-validator/target
echo "$GITHUB_WORKSPACE/.ci-cache/clap-validator/target/release" >> "$GITHUB_PATH"

- name: Validate all CLAP plugins
shell: bash
run: |
rm -rf plugin/dist-installer
mkdir -p plugin/dist-installer
mkdir -p plugin/dist-installer/VST3
[ "$RUNNER_OS" = "macOS" ] && mkdir -p plugin/dist-installer/AU
for art in PrismSpectrum PrismOscilloscope PrismVUMeter PrismLUFSMeter PrismVectorscope PrismSpectrogram PrismWaveform; do
vst3_dir="plugin/build/${art}_artefacts/Release/VST3"
[ -d "$vst3_dir" ] && find "$vst3_dir" -maxdepth 1 -name "*.vst3" -exec cp -R {} plugin/dist-installer/VST3/ \;
if [ "$RUNNER_OS" = "macOS" ]; then
au_dir="plugin/build/${art}_artefacts/Release/AU"
[ -d "$au_dir" ] && find "$au_dir" -maxdepth 1 -name "*.component" -exec cp -R {} plugin/dist-installer/AU/ \;
fi
done
echo "--- staged VST3 ---"
ls -la plugin/dist-installer/VST3
vst3_count="$(find plugin/dist-installer/VST3 -maxdepth 1 -name "*.vst3" | wc -l | tr -d ' ')"
if [ "$vst3_count" -ne 7 ]; then
echo "ERROR: expected 7 VST3 plugins, found $vst3_count"
exit 1
fi
if [ "$RUNNER_OS" = "Linux" ]; then
for vst3 in plugin/dist-installer/VST3/*.vst3; do
if [ ! -d "$vst3/Contents/x86_64-linux" ]; then
echo "ERROR: Linux VST3 bundle is missing Contents/x86_64-linux: $vst3"
exit 1
fi
done
cp resources/installer/linux/install-vst3.sh plugin/dist-installer/install-vst3.sh
chmod +x plugin/dist-installer/install-vst3.sh
fi
if [ "$RUNNER_OS" = "macOS" ]; then
echo "--- staged AU ---"
ls -la plugin/dist-installer/AU
au_count="$(find plugin/dist-installer/AU -maxdepth 1 -name "*.component" | wc -l | tr -d ' ')"
if [ "$au_count" -ne 7 ]; then
echo "ERROR: expected 7 AU plugins, found $au_count"
exit 1
fi
xvfb-run -a node scripts/validate-clap.mjs
else
node scripts/validate-clap.mjs
fi

- name: Retain CLAP validation output
if: always()
uses: actions/upload-artifact@v4
with:
name: clap-validation-${{ runner.os }}
path: plugin/build/clap-validation/
if-no-files-found: ignore

- name: Test plugin staging and Unix installer hooks
run: node --test test/plugin-packaging.test.mjs

- name: Stage Prism TUI for installer
run: npm run stage:tui

Expand All @@ -282,20 +308,22 @@ jobs:
if: runner.os != 'Linux'
run: npm run ${{ matrix.dist_cmd }}
env:
PRISM_PLUGINS_PREBUILT: '1'
CSC_IDENTITY_AUTO_DISCOVERY: 'false'

- name: Smoke-test Windows installer PATH integration
- name: Smoke-test Windows installer plugins and PATH integration
if: runner.os == 'Windows'
shell: pwsh
run: ./scripts/test-windows-installer.ps1

- name: Build Linux packages with VST3 plugins
- name: Build Linux packages with VST3 and CLAP plugins
if: runner.os == 'Linux'
shell: bash
run: |
rm -rf dist/linux-unpacked
npm run ${{ matrix.dist_cmd }}
env:
PRISM_PLUGINS_PREBUILT: '1'
CSC_IDENTITY_AUTO_DISCOVERY: 'false'

- name: Upload artifacts
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
node_modules/

# Build outputs
artifacts/linux-tests/
out/
dist/
native/build/
Expand Down Expand Up @@ -36,3 +37,6 @@ yarn-error.log*

# notes
untitled-1

# Local latency benchmark recordings, traces, and isolated settings
benchmark-results/
Loading