From 7448c97e209c4b16f4085ee70daf0906b406f40a Mon Sep 17 00:00:00 2001 From: Brad Anderson Date: Sat, 25 Jul 2026 19:05:10 -0700 Subject: [PATCH] chore: scaffold karaoke-maker package --- .gitignore | 6 ++++++ pyproject.toml | 38 +++++++++++++++++++++++++++++++++++ src/karaoke_maker/__init__.py | 0 src/karaoke_maker/cli.py | 16 +++++++++++++++ tests/test_cli.py | 5 +++++ 5 files changed, 65 insertions(+) create mode 100644 .gitignore create mode 100644 pyproject.toml create mode 100644 src/karaoke_maker/__init__.py create mode 100644 src/karaoke_maker/cli.py create mode 100644 tests/test_cli.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0e63125 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +__pycache__/ +*.egg-info/ +.venv/ +work/ +output/ +.pytest_cache/ diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..e626b0f --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,38 @@ +[project] +name = "karaoke-maker" +version = "0.1.0" +description = "Generate UltraStar/Melody Mania karaoke songs from a video and reference lyrics" +requires-python = ">=3.11" +dependencies = [ + "yt-dlp", + "demucs", + "torch", + "torchaudio", + "torchcrepe", + "librosa", + "soundfile", + "numpy", + "pyphen", + "num2words", + "httpx", + "fastapi", + "uvicorn", + "python-multipart", + "pillow", +] + +[project.optional-dependencies] +dev = ["pytest"] + +[project.scripts] +karaoke-maker = "karaoke_maker.cli:main" + +[build-system] +requires = ["setuptools>=68"] +build-backend = "setuptools.build_meta" + +[tool.setuptools.packages.find] +where = ["src"] + +[tool.pytest.ini_options] +testpaths = ["tests"] diff --git a/src/karaoke_maker/__init__.py b/src/karaoke_maker/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/karaoke_maker/cli.py b/src/karaoke_maker/cli.py new file mode 100644 index 0000000..bfff846 --- /dev/null +++ b/src/karaoke_maker/cli.py @@ -0,0 +1,16 @@ +import argparse +from importlib.metadata import version + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser(prog="karaoke-maker") + parser.add_argument("--version", action="store_true") + parser.add_subparsers(dest="command") + return parser + +def main(argv: list[str] | None = None) -> int: + args = build_parser().parse_args(argv) + if args.version: + print(f"karaoke-maker {version('karaoke-maker')}") + return 0 + build_parser().print_help() + return 0 diff --git a/tests/test_cli.py b/tests/test_cli.py new file mode 100644 index 0000000..3207e42 --- /dev/null +++ b/tests/test_cli.py @@ -0,0 +1,5 @@ +from karaoke_maker.cli import main + +def test_version(capsys): + assert main(["--version"]) == 0 + assert "karaoke-maker" in capsys.readouterr().out