Scan a folder of MP3 stem files and produce a JSON report with file attributes and transcribed text.
Reads all *.mp3 files in a stems directory and outputs a structured JSON report containing
file metadata (seq, scene, speaker, size, duration, bitrate, sha256) and optionally a
Faster-Whisper transcription of each file's audio content.
Whisper transcription requires venv-whisper to be set up (see whisper_worker.py).
Use --no-transcribe to produce a metadata-only report without the whisper dependency.
Usage::
xil-stem-verify --episode S01E01
xil-stem-verify --show the413 --episode S01E01 --no-transcribe
xil-stem-verify --show the413 --episode S01E01 --model small --language en
xil-stem-verify --stems-dir /path/to/stems --output /tmp/report.json --no-transcribe
logger
module-attribute
logger = get_logger(__name__)
get_parser
get_parser() -> argparse.ArgumentParser
Source code in src/xil_pipeline/XILU015_stem_verify.py
| def get_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(
prog="xil-stem-verify",
description="Scan a stems folder and produce a JSON report with file attributes and Whisper transcriptions.",
)
parser.add_argument("--show", "-s", default=None, metavar="SLUG",
help="Show slug (default: resolved from project.json or XIL_PROJECTROOT)")
parser.add_argument("--episode", "-e", default=None, metavar="TAG",
help="Episode tag, e.g. S01E01 (required unless --stems-dir is set)")
parser.add_argument("--stems-dir", default=None, metavar="DIR",
help="Override stems directory (default: <workspace>/stems/<slug>/<episode>/)")
parser.add_argument("--output", "-o", default=None, metavar="FILE",
help="Output JSON path (default: <workspace>/parsed/<slug>/stem_verify_<episode>.json)")
parser.add_argument("--whisper-python", default=None, metavar="PATH",
help="Path to venv-whisper Python executable (auto-detected if omitted)")
parser.add_argument("--model", default="large-v3-turbo", metavar="SIZE",
help="Whisper model size: tiny|base|small|medium|large-v3|large-v3-turbo (default: large-v3-turbo)")
parser.add_argument("--language", default="en", metavar="LANG",
help="Language hint for Whisper. Use 'auto' for automatic detection (default: en)")
parser.add_argument("--beam-size", type=int, default=5, metavar="N",
help="Whisper beam size (default: 5)")
parser.add_argument("--device", default="cuda", choices=["cuda", "cpu"],
help="Compute device for Whisper (default: cuda)")
parser.add_argument("--no-transcribe", action="store_true",
help="Skip Whisper transcription; output file attributes only")
return parser
|
main
CLI entry point for MP3 stem attribute extraction and Whisper transcription.
Source code in src/xil_pipeline/XILU015_stem_verify.py
| def main() -> None:
"""CLI entry point for MP3 stem attribute extraction and Whisper transcription."""
configure_logging()
args = get_parser().parse_args()
with run_banner():
_run(args)
|