Skip to content

Xilu015 Stem Verify

src.xil_pipeline.XILU015_stem_verify

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

main() -> None

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)