fix: real preset data for all VST2/VST3 plugins, template system with ground-truth registry
- Extracted preset data from all_plugins_v2.rpp for 14 previously broken plugins - Fixed PLUGIN_REGISTRY entries: Kontakt 7, Gullfoss, ValhallaDelay, VC 160/76, The Glue - Template parser falls back to PLUGIN_PRESETS when source RPP has fake data - Substitute Transient Master (not installed) with FabFilter Pro-C 2 - All 25 plugins now load correctly in REAPER - Added template generator scripts and ground truth references - Cleaned up temp/debug files from output/
This commit is contained in:
118
scripts/generate_from_template.py
Normal file
118
scripts/generate_from_template.py
Normal file
@@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env python
|
||||
"""Generate fixed .rpp files from example RPP templates.
|
||||
|
||||
Extracts track/FX chain structures from the example .rpp files,
|
||||
fixes GUIDs using real values from reaper-vstplugins64.ini,
|
||||
strips invalid PARAM lines, and generates working .rpp files.
|
||||
|
||||
Usage:
|
||||
python scripts/generate_from_template.py --all
|
||||
python scripts/generate_from_template.py --template TU_DIABLO --output output/tu_diablo_fixed.rpp
|
||||
python scripts/generate_from_template.py --template DEL_LUNE --output output/del_lune_fixed.rpp
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Ensure project root on path
|
||||
_ROOT = Path(__file__).parent.parent
|
||||
sys.path.insert(0, str(_ROOT))
|
||||
|
||||
from src.composer.templates import extract_template, generate_rpp
|
||||
|
||||
|
||||
TEMPLATES: dict[str, dict] = {
|
||||
"TU_DIABLO": {
|
||||
"source": "ejemplos/TU_DIABLO_ITHAN_NY.rpp",
|
||||
"output": "output/tu_diablo_fixed.rpp",
|
||||
"description": "TU_DIABLO_ITHAN_NY.rpp — 99 BPM E minor, Drill chileno",
|
||||
},
|
||||
"DEL_LUNE": {
|
||||
"source": "ejemplos/DEL_LUNE_AL_FINDE_ITHAN_NY_JULIANNO_SOSA.rpp",
|
||||
"output": "output/del_lune_fixed.rpp",
|
||||
"description": "DEL_LUNE_AL_FINDE_*.rpp — 100 BPM B major, Reggaeton moderno",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Generate fixed .rpp files from example templates."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--all",
|
||||
action="store_true",
|
||||
help="Generate all templates (TU_DIABLO and DEL_LUNE)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--template",
|
||||
choices=list(TEMPLATES.keys()),
|
||||
help="Specific template to generate",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--output",
|
||||
help="Override output path",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--list",
|
||||
action="store_true",
|
||||
help="List available templates",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.list:
|
||||
print("Available templates:")
|
||||
for key, info in TEMPLATES.items():
|
||||
print(f" {key}: {info['description']}")
|
||||
print(f" Source: {info['source']}")
|
||||
print(f" Output: {info['output']}")
|
||||
return
|
||||
|
||||
templates_to_run = []
|
||||
if args.all:
|
||||
templates_to_run = list(TEMPLATES.keys())
|
||||
elif args.template:
|
||||
templates_to_run = [args.template]
|
||||
else:
|
||||
# Default: generate all
|
||||
templates_to_run = list(TEMPLATES.keys())
|
||||
|
||||
for key in templates_to_run:
|
||||
info = TEMPLATES[key]
|
||||
source_path = _ROOT / info["source"]
|
||||
output_path = Path(args.output) if args.output else _ROOT / info["output"]
|
||||
|
||||
print(f"\n[{key}]")
|
||||
print(f" Source: {source_path}")
|
||||
print(f" Output: {output_path}")
|
||||
|
||||
if not source_path.exists():
|
||||
print(f" ERROR: Source file not found: {source_path}", file=sys.stderr)
|
||||
continue
|
||||
|
||||
try:
|
||||
# Extract template from source RPP
|
||||
print(f" Extracting template...")
|
||||
template = extract_template(source_path)
|
||||
print(f" Tracks found: {len(template.tracks)}")
|
||||
for track in template.tracks:
|
||||
print(f" - {track.name}: {len(track.plugins)} plugins")
|
||||
for plugin in track.plugins:
|
||||
print(f" {plugin.name} ({plugin.path})")
|
||||
|
||||
# Generate fixed RPP
|
||||
print(f" Generating RPP...")
|
||||
generate_rpp(template, output_path)
|
||||
print(f" SUCCESS: {output_path}")
|
||||
|
||||
except Exception as e:
|
||||
print(f" ERROR: {e}", file=sys.stderr)
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user