diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..010fa14 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Vendored deps / envs +ace-step/ +basic-pitch-env/ +.cache/ +*.venv/ +__pycache__/ +*.pyc + +# User data +input/ +output/ + +# Editor +.vscode/ +.idea/ +*.swp diff --git a/batch_generate.py b/batch_generate.py new file mode 100644 index 0000000..3236dd5 --- /dev/null +++ b/batch_generate.py @@ -0,0 +1,59 @@ +"""Batch generation script — 100 outputs across instruments and parameter permutations.""" + +import subprocess +import sys +import itertools +import random + +import os +BASE = os.path.dirname(os.path.abspath(__file__)) +PYTHON = os.path.join(BASE, "ace-step", ".venv", "Scripts", "python.exe") +SCRIPT = os.path.join(BASE, "hum2inst.py") +INPUT = os.path.join(BASE, "input", "bum bum bum [2026-04-10 230403].wav") +OUTPUT = os.path.join(BASE, "output", "batch-bumbum") + +instruments = ["piano", "guitar", "saxophone", "violin", "flute", + "cello", "trumpet", "organ", "marimba", "harmonica"] + +# Parameter combos: (strength, guidance) +param_combos = [ + (0.2, 5.0), + (0.3, 5.0), # our best default + (0.4, 5.0), + (0.3, 7.0), + (0.3, 3.0), +] + +# 10 instruments x 5 param combos x 2 takes = 100 outputs +takes_per_combo = 2 + +count = 0 +total = len(instruments) * len(param_combos) * takes_per_combo +print(f"Generating {total} outputs...") + +for instrument in instruments: + for strength, guidance in param_combos: + seeds = [random.randint(0, 2**31 - 1) for _ in range(takes_per_combo)] + for seed in seeds: + count += 1 + print(f"\n[{count}/{total}] {instrument} str={strength} guide={guidance} seed={seed}") + cmd = [ + PYTHON, SCRIPT, INPUT, + "--instrument", instrument, + "--output", OUTPUT, + "--strength", str(strength), + "--noise-strength", "0.0", + "--guidance", str(guidance), + "--seed", str(seed), + ] + result = subprocess.run(cmd, capture_output=True, text=True) + # Print just the output/log lines + for line in result.stdout.splitlines(): + if "Output saved" in line or "Run log" in line: + print(f" {line.strip()}") + if result.returncode != 0: + err_lines = [l for l in result.stderr.splitlines() if "ERROR" in l] + for l in err_lines: + print(f" FAILED: {l.strip()}") + +print(f"\nDone! {count} outputs in {OUTPUT}/")