#!/usr/bin/env python3 """ Verify pre-generated SVC example WAVs under example/outputs/. Usage (from space/): python scripts/verify_example_outputs.py python scripts/verify_example_outputs.py --min-size-kb 10 Exit 0 if all expected files exist and are readable audio; else exit 1. """ import argparse import sys from pathlib import Path import soundfile as sf ROOT = Path(__file__).resolve().parent.parent OUTPUT_DIR = ROOT / "example" / "outputs" # Must match PREGENERATED_MAP values in webui_svc.py (unique basenames) EXPECTED_WAVS = [ "zh_prompt_zh_target.wav", "en_prompt_en_target.wav", "sunyanzi_im_yours.wav", "sunyanzi_legend.wav", "sunyanzi_kowarekakeru.wav", "sunyanzi_fujisan.wav", ] def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--min-size-kb", type=int, default=8, help="Minimum file size (KB)") args = parser.parse_args() min_bytes = args.min_size_kb * 1024 missing = [] bad = [] for name in EXPECTED_WAVS: path = OUTPUT_DIR / name if not path.is_file(): missing.append(name) continue if path.stat().st_size < min_bytes: bad.append(f"{name} (too small: {path.stat().st_size} B)") continue try: info = sf.info(str(path)) if info.frames <= 0 or info.samplerate <= 0: bad.append(f"{name} (invalid audio)") except Exception as e: bad.append(f"{name} (soundfile: {e})") if missing: print("Missing:", file=sys.stderr) for m in missing: print(f" - {m}", file=sys.stderr) if bad: print("Invalid:", file=sys.stderr) for b in bad: print(f" - {b}", file=sys.stderr) if missing or bad: print(f"\nExpected directory: {OUTPUT_DIR}", file=sys.stderr) print("Run: cd space && . .venv/bin/activate && python -u scripts/generate_example_outputs.py --device cpu", file=sys.stderr) return 1 print(f"OK: all {len(EXPECTED_WAVS)} files verified under {OUTPUT_DIR}") return 0 if __name__ == "__main__": sys.exit(main())