Spaces:
No application file
No application file
| """Command-line interface for StemSplitter.""" | |
| from __future__ import annotations | |
| import sys | |
| from dataclasses import replace | |
| from pathlib import Path | |
| import click | |
| from stemsplitter.config import get_settings | |
| from stemsplitter.separator import OutputFormat, StemMode, StemSplitter | |
| def main( | |
| input_file: str, | |
| mode: str, | |
| output_format: str | None, | |
| output_dir: str | None, | |
| model: str | None, | |
| ) -> None: | |
| """Separate audio stems from INPUT_FILE. | |
| Splits an audio file into vocal and instrumental stems (2-stem mode) | |
| or into vocals, drums, bass, and other (4-stem mode). | |
| \b | |
| Examples: | |
| stemsplitter song.mp3 | |
| stemsplitter song.wav -m 4stem -f FLAC | |
| stemsplitter song.flac -m 2stem -f MP3 -o ./stems/ | |
| """ | |
| settings = get_settings() | |
| if output_dir: | |
| settings = replace(settings, output_dir=output_dir) | |
| Path(settings.output_dir).mkdir(parents=True, exist_ok=True) | |
| splitter = StemSplitter(settings=settings) | |
| stem_mode = StemMode(mode) | |
| fmt = OutputFormat(output_format.upper()) if output_format else None | |
| click.echo( | |
| f"Processing: {input_file}\n" | |
| f"Mode: {stem_mode.value} | " | |
| f"Format: {(fmt or OutputFormat(settings.output_format)).value}" | |
| ) | |
| try: | |
| result = splitter.separate( | |
| input_path=input_file, | |
| mode=stem_mode, | |
| output_format=fmt, | |
| model_override=model, | |
| ) | |
| except FileNotFoundError as exc: | |
| click.secho(str(exc), fg="red", err=True) | |
| sys.exit(1) | |
| except RuntimeError as exc: | |
| click.secho(f"Separation failed: {exc}", fg="red", err=True) | |
| sys.exit(1) | |
| click.secho("Separation complete!", fg="green") | |
| for f in result.output_files: | |
| click.echo(f" -> {f}") | |