feat: expand VST3 registry to 52 plugins and remove unrecognized tokens

- Add 42 new VST3 plugins to registry (FabFilter, Ozone 12, Diva, Pigments,
  Electra, Kontakt 7, Gullfoss, Trackspacer, ShaperBox, VC series, Arcade)
- Remove RENDER_CFG, PROJBAY, WAK tokens that caused REAPER warnings
- GUIDs sourced from REAPER scan file (reaper-vstplugins64.ini)
- New plugins have empty preset data (to be extracted incrementally)
- 72 tests passing
This commit is contained in:
renato97
2026-05-03 14:22:18 -03:00
parent 53741b48b6
commit d5c2490a05
2 changed files with 286 additions and 8 deletions

View File

@@ -405,6 +405,232 @@ class RPPBuilder:
"ValhallaDelay.vst3",
"1674641571{565354644C617976616C68616C6C6164}",
),
# -------------------------------------------------------------------------
# NEW VST3 PLUGINS (from REAPER scan file - preset data deferred)
# -------------------------------------------------------------------------
# FabFilter plugins
"FabFilter Micro": (
"VST3: Micro (FabFilter)",
"FabFilter Micro.vst3",
"1543484030{751AFC3415434CBCAA73672A109BE0FF}",
),
"FabFilter One": (
"VST3: One (FabFilter)",
"FabFilter One.vst3",
"504970876{9240FC4010CD45A0B7DACECADDC2E97A}",
),
"FabFilter Pro-DS": (
"VST3: Pro-DS (FabFilter)",
"FabFilter Pro-DS.vst3",
"838599213{59E324D08EE811E1B8578101BBE59B18}",
),
"FabFilter Pro-G": (
"VST3: Pro-G (FabFilter)",
"FabFilter Pro-G.vst3",
"2024995055{9D1DCCF7918A436FA3CDD7115D8B193B}",
),
"FabFilter Pro-MB": (
"VST3: Pro-MB (FabFilter)",
"FabFilter Pro-MB.vst3",
"1847376412{C3B68142C79846F282B73CABDF139076}",
),
"FabFilter Pro-R": (
"VST3: Pro-R (FabFilter)",
"FabFilter Pro-R.vst3",
"274244728{036EB5302A5911E2A28170076288709B}",
),
"FabFilter Simplon": (
"VST3: Simplon (FabFilter)",
"FabFilter Simplon.vst3",
"1075354568{3317F47055E847E4896B59C21B843FAE}",
),
"FabFilter Twin 3": (
"VST3: Twin 3 (FabFilter)",
"FabFilter Twin 3.vst3",
"1801327882{91AF218E111A44CBABFEF7CB065FF157}",
),
"FabFilter Volcano 3": (
"VST3: Volcano 3 (FabFilter)",
"FabFilter Volcano 3.vst3",
"1102276553{299B276CE27B4F5195968A0F8600E9D1}",
),
# iZotope Ozone 12 plugins
"Ozone 12": (
"VST3: Ozone 12 (iZotope)",
"Ozone 12.vst3",
"2011378056{5653545A424F5A4F7A6F6E6500000000}",
),
"Ozone 12 Bass Control": (
"VST3: Ozone 12 Bass Control (iZotope)",
"Ozone 12 Bass Control.vst3",
"1402153043{5653545A4242414F7A6F6E652050726F}",
),
"Ozone 12 Clarity": (
"VST3: Ozone 12 Clarity (iZotope)",
"Ozone 12 Clarity.vst3",
"846110089{5653545A42434C4F7A6F6E652050726F}",
),
"Ozone 12 Dynamic EQ": (
"VST3: Ozone 12 Dynamic EQ (iZotope)",
"Ozone 12 Dynamic EQ.vst3",
"347441801{5653545A42595A4F7A6F6E652050726F}",
),
"Ozone 12 Dynamics": (
"VST3: Ozone 12 Dynamics (iZotope)",
"Ozone 12 Dynamics.vst3",
"231096592{5653545A42445A4F7A6F6E652050726F}",
),
"Ozone 12 Equalizer": (
"VST3: Ozone 12 Equalizer (iZotope)",
"Ozone 12 Equalizer.vst3",
"1964203799{5653545A425A554F7A6F6E652050726F}",
),
"Ozone 12 Exciter": (
"VST3: Ozone 12 Exciter (iZotope)",
"Ozone 12 Exciter.vst3",
"1784259468{5653545A425A584F7A6F6E652050726F}",
),
"Ozone 12 Imager": (
"VST3: Ozone 12 Imager (iZotope)",
"Ozone 12 Imager.vst3",
"1617021689{5653545A42495A4F7A6F6E652050726F}",
),
"Ozone 12 Impact": (
"VST3: Ozone 12 Impact (iZotope)",
"Ozone 12 Impact.vst3",
"835350450{5653545A424F494F7A6F6E652050726F}",
),
"Ozone 12 Low End Focus": (
"VST3: Ozone 12 Low End Focus (iZotope)",
"Ozone 12 Low End Focus.vst3",
"519261512{5653545A425A4C4F7A6F6E652050726F}",
),
"Ozone 12 Master Rebalance": (
"VST3: Ozone 12 Master Rebalance (iZotope)",
"Ozone 12 Master Rebalance.vst3",
"712417082{5653545A425A524F7A6F6E652050726F}",
),
"Ozone 12 Match EQ": (
"VST3: Ozone 12 Match EQ (iZotope)",
"Ozone 12 Match EQ.vst3",
"1595365340{5653545A425A484F7A6F6E652050726F}",
),
"Ozone 12 Maximizer": (
"VST3: Ozone 12 Maximizer (iZotope)",
"Ozone 12 Maximizer.vst3",
"1653851247{5653545A425A4D4F7A6F6E652050726F}",
),
"Ozone 12 Spectral Shaper": (
"VST3: Ozone 12 Spectral Shaper (iZotope)",
"Ozone 12 Spectral Shaper.vst3",
"1613677953{5653545A425A534F7A6F6E652050726F}",
),
"Ozone 12 Stabilizer": (
"VST3: Ozone 12 Stabilizer (iZotope)",
"Ozone 12 Stabilizer.vst3",
"272530596{5653545A424F534F7A6F6E652050726F}",
),
"Ozone 12 Stem EQ": (
"VST3: Ozone 12 Stem EQ (iZotope)",
"Ozone 12 Stem EQ.vst3",
"38139238{5653545A4253514F7A6F6E652050726F}",
),
"Ozone 12 Unlimiter": (
"VST3: Ozone 12 Unlimiter (iZotope)",
"Ozone 12 Unlimiter.vst3",
"725525931{5653545A42554C4F7A6F6E652050726F}",
),
"Ozone 12 Vintage Compressor": (
"VST3: Ozone 12 Vintage Compressor (iZotope)",
"Ozone 12 Vintage Compressor.vst3",
"125819473{5653545A425A434F7A6F6E652050726F}",
),
"Ozone 12 Vintage EQ": (
"VST3: Ozone 12 Vintage EQ (iZotope)",
"Ozone 12 Vintage EQ.vst3",
"329291579{5653545A425A514F7A6F6E652050726F}",
),
"Ozone 12 Vintage Limiter": (
"VST3: Ozone 12 Vintage Limiter (iZotope)",
"Ozone 12 Vintage Limiter.vst3",
"299732006{5653545A425A564F7A6F6E652050726F}",
),
"Ozone 12 Vintage Tape": (
"VST3: Ozone 12 Vintage Tape (iZotope)",
"Ozone 12 Vintage Tape.vst3",
"1779260560{5653545A425A544F7A6F6E652050726F}",
),
# Other plugins
"Arcade": (
"VST3: Arcade (Output)",
"Arcade.vst3",
"786184450{56535441524344617263616465000000}",
),
"Diva": (
"VST3: Diva (u-he)",
"Diva(x64).vst3",
"1702226742{D39D5B69D6AF42FA1234567844695661}",
),
"Kontakt 7": (
"VST3: Kontakt 7 (Native Instruments)",
"Kontakt 7.vst3",
"1219583956{5653544E694B376B6F6E74616B742037}",
),
"VC 160": (
"VST3: VC 160 (Native Instruments)",
"VC 160.vst3",
"1957567173{5653544E692432766320313630000000}",
),
"VC 2A": (
"VST3: VC 2A (Native Instruments)",
"VC 2A.vst3",
"1778970420{5653544E692433766320326100000000}",
),
"VC 76": (
"VST3: VC 76 (Native Instruments)",
"VC 76.vst3",
"851135877{5653544E692434766320373600000000}",
),
"Pigments": (
"VST3: Pigments (Arturia)",
"Pigments.vst3",
"1254795619{41727475415649534B61743150726F63}",
),
"ShaperBox 3": (
"VST3: ShaperBox 3 (Cableguys)",
"ShaperBox 3.vst3",
"841703268{ABCDEF019182FAEB4361626C43474C33}",
),
"Gullfoss": (
"VST3: Gullfoss (Soundtheory)",
"Gullfoss.vst3",
"1717040701{F2AEE70D00DE4F4E536E6454474C4653}",
),
"Gullfoss Live": (
"VST3: Gullfoss Live (Soundtheory)",
"Gullfoss Live.vst3",
"1196934512{F2AEE70D00DE4F4E536E6454474C466C}",
),
"Gullfoss Master": (
"VST3: Gullfoss Master (Soundtheory)",
"Gullfoss Master.vst3",
"1213712131{F2AEE70D00DE4F4E536E6454474C466D}",
),
"FX-Omnisphere": (
"VST3: FX-Omnisphere (Spectrasonics)",
"FX-Omnisphere.vst3",
"970778525{84E832219255298796FAE6663C935655}",
),
"Electra": (
"VST3: Electra (Tone2)",
"Electra.vst3",
"111466784{ABCDEF019182FAEB544F4E325433454C}",
),
"Trackspacer 2.5": (
"VST3: Trackspacer 2.5 (Wavesfactory)",
"Trackspacer25.vst3",
"1585859288{565354546B3235747261636B73706163}",
),
}
# VST3 preset data — base64-encoded state blocks for each plugin.
@@ -656,7 +882,7 @@ class RPPBuilder:
"UGFyYW1ldGVycz48L1ByZXNldD48L1NvbmdQcmVzZXQ+PC9DeXRvbWljPgAAAAAAAAAAAAAAAAAAAAAASlVDRVByaXZhdGVEYXRhAAAAAAAAAAA=",
"AAAAAAAA",
],
"Valhalla Delay": [
"Valhalla Delay": [
"owDRY+5e7f4CAAAAAQAAAAAAAAACAAAAAAAAAAIAAAABAAAAAAAAAAIAAAAAAAAAVQQAAAEAAAD//wAA",
"RQQAAAEAAABWc3RXAAAACAAAAAEAAAAAQ2NuSwAABC1GQkNoAAAAAmRMYXkAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADlVZDMiFQAwAA",
@@ -666,12 +892,59 @@ class RPPBuilder:
"ZWxheVNwcmVhZD0iMC41IiBEZWxheVNwYWNpbmc9IjAuNSIgRGVsYXlSYXRpbz0iMC42MTQxNDE0MDQ2Mjg3NTM3IiBSZXBlYXRzU3dlbGQ9IjEuMCIgVGFwQj0iMS4w",
"IiBUYXBDPSIxLjAiIFRhcEQ9IjEuMCIgRmVlZGJhY2s9IjAuMzQ5OTk5OTk0MDM5NTM1NSIgV2lkdGg9IjEuMCIgRHJpdmVJbj0iMC4wIiBBZ2U9IjAuNSIgRGlmZnVz",
"aW9uPSIwLjAiIERpZmZTaXplPSIxLjAiIExvd0N1dD0iMC4wIiBIaWdoQ3V0PSIxLjAiIE1vZFJhdGU9IjAuMjczODM0MTA5MzA2MzM1NCIgTW9kRGVwdGg9IjAuNSIg",
"V293cz0iMC41IiBGbHV0dGVyPSIwLjUiIEZyZXFTaGlmdD0iMC41IiBGcmVxRGV0dW5lPSIwLjU3OTk5OTk4MzMxMDY5OTUiIFBpdGNoU2hpZnQ9IjAuNSIgUGl0Y2gk",
"V293cz0iMC41IiBGbHV0dGVyPSIwLjUiIEZyZXFTaGlmdD0iMC41IiBGcmVxRGV0dW5lPSIwLjU3OTk5OTk4MzMxMDY5OTUiIFBpdGNoU2hpZnQ9IjAuNSIgUGl0Y2hk",
"RGV0dW5lPSIwLjUiIE1vZGU9IjAuMDQxNjY2Njc3OTA4NDMwMSIgRXJhPSIwLjMzMzMzMzMzNDMyNjc0NDA4IiBEdWNraW5nPSIwLjAiIFJlc2VydmVkMj0iMC4wIiBS",
"ZXNlcnZlZDM9IjAuMCIgUmVzZXJ2ZWQ0PSIwLjAiIG1peExvY2s9IjAiIHVpV2lkdGg9Ijk0NSIgdWlIZWlnaHQ9IjQzNSIvPgAAAAAAAAAAABKVUNFUHJpdmF0ZURh",
"dGEAAQFCeXBhc3MAAQEDAB0AAAAAAAAASlVDRVByaXZhdGVEYXRhAAAAAAAAAAA=",
"AAAAAAAA",
],
# -------------------------------------------------------------------------
# NEW VST3 PLUGINS (preset data deferred - add incrementally as needed)
# -------------------------------------------------------------------------
"FabFilter Micro": [],
"FabFilter One": [],
"FabFilter Pro-DS": [],
"FabFilter Pro-G": [],
"FabFilter Pro-MB": [],
"FabFilter Pro-R": [],
"FabFilter Simplon": [],
"FabFilter Twin 3": [],
"FabFilter Volcano 3": [],
"Ozone 12": [],
"Ozone 12 Bass Control": [],
"Ozone 12 Clarity": [],
"Ozone 12 Dynamic EQ": [],
"Ozone 12 Dynamics": [],
"Ozone 12 Equalizer": [],
"Ozone 12 Exciter": [],
"Ozone 12 Imager": [],
"Ozone 12 Impact": [],
"Ozone 12 Low End Focus": [],
"Ozone 12 Master Rebalance": [],
"Ozone 12 Match EQ": [],
"Ozone 12 Maximizer": [],
"Ozone 12 Spectral Shaper": [],
"Ozone 12 Stabilizer": [],
"Ozone 12 Stem EQ": [],
"Ozone 12 Unlimiter": [],
"Ozone 12 Vintage Compressor": [],
"Ozone 12 Vintage EQ": [],
"Ozone 12 Vintage Limiter": [],
"Ozone 12 Vintage Tape": [],
"Arcade": [],
"Diva": [],
"Kontakt 7": [],
"VC 160": [],
"VC 2A": [],
"VC 76": [],
"Pigments": [],
"ShaperBox 3": [],
"Gullfoss": [],
"Gullfoss Live": [],
"Gullfoss Master": [],
"FX-Omnisphere": [],
"Electra": [],
"Trackspacer 2.5": [],
}
def _build_plugin(self, plugin: PluginDef) -> Element:

View File

@@ -416,8 +416,12 @@ class TestVST3PresetData:
finally:
Path(tmp_path).unlink(missing_ok=True)
def test_all_registry_plugins_have_preset_data(self):
"""All 10 VST3 plugins in VST3_REGISTRY have preset data."""
def test_registry_plugins_with_preset_data_are_in_output(self):
"""VST3 plugins with non-empty preset data include that data in output.
New plugins added with empty preset lists ([]) are handled gracefully —
vst3_element() only appends preset lines when preset_data is truthy.
"""
meta = SongMeta(bpm=95, key="Am", title="VST3 Preset Test")
# Use actual filenames from registry so _build_plugin recognizes them as VST3
plugins = [
@@ -436,10 +440,11 @@ class TestVST3PresetData:
try:
builder.write(tmp_path)
content = Path(tmp_path).read_text(encoding="utf-8")
# Check that plugins WITH preset data have that data in output
for name, preset_lines in RPPBuilder.VST3_PRESETS.items():
assert len(preset_lines) > 0, f"{name} has no preset lines"
# Check first preset line — most distinctive, no collision risk
first_line = preset_lines[0]
assert first_line in content, f"{name} preset line not found in output"
if len(preset_lines) > 0:
# Check first preset line — most distinctive, no collision risk
first_line = preset_lines[0]
assert first_line in content, f"{name} preset line not found in output"
finally:
Path(tmp_path).unlink(missing_ok=True)