Skip to main content

Easy to use audio super-resolution and bandwidth extension from CLI or as a Python package.

Project description

Audio Super Resolution

PyPI version CI License: MIT

Audio Super Resolution is a Python CLI and library for audio super-resolution and bandwidth extension. It ships with a deterministic sinc-resample baseline, optional external AudioSR support, and managed metadata for self-contained model backends.

The baseline package stays lightweight: normal inference is offline, model downloads are explicit, and heavyweight model dependencies live behind optional extras.

Features

  • CLI and Python API for single files, directory batches, dry runs, and recursive path-preserving output.
  • Pluggable backend registry with sinc-resample, optional audiosr, and LavaSR-compatible managed weight metadata.
  • Shared inference config for device, precision, chunking, preprocessing, seeds, and model cache paths.
  • JSON run manifests, manifest comparison, and quality reports for regression workflows.
  • Explicit local weight resolution with multi-file manifests, size/SHA256 checks, and opt-in Hugging Face downloads.
  • Pixi tasks for repeatable test, lint, format, and build commands.

Installation

Install from GitHub:

pip install git+https://github.com/Tinnci/python-audio-super-resolution.git

For local development:

git clone https://github.com/Tinnci/python-audio-super-resolution.git
cd python-audio-super-resolution
pixi install

Optional extras:

Extra Purpose
audiosr External AudioSR wrapper. Use Python 3.10 because upstream dependencies are older.
download Hugging Face model weight downloads.
weights Optional safetensors loading helpers.
lavasr LavaSR-compatible runtime dependencies. Inference is not implemented yet.

Example:

pip install "audio-super-resolution[lavasr,download] @ git+https://github.com/Tinnci/python-audio-super-resolution.git"

CLI Quick Start

Enhance one file:

audio-super-res input.wav output.wav --target-sr 48000

If output.wav is omitted, the CLI writes next to the input as input-sr48000.wav.

Batch process a directory:

audio-super-res ./low-res-audio ./enhanced-audio --recursive --target-sr 48000

Preview or record a run:

audio-super-res ./low-res-audio ./enhanced-audio --recursive --dry-run --manifest plan.json
audio-super-res ./low-res-audio ./enhanced-audio --recursive --manifest run.json
audio-super-res --compare-manifests expected.json actual.json

List backends and models:

audio-super-res --list-backends
audio-super-res --list-models --list-format json

Run post-write quality checks:

audio-super-res input.wav output.wav --quality-report --fail-on-quality-issue
audio-super-res input.wav output.wav --quality-report-json quality.json

The shorter audiosr command is also available as an alias for audio-super-res.

Models And Weights

Current backend status:

Backend Status
sinc-resample Default deterministic baseline.
audiosr Optional external package backend; upstream package owns its checkpoint behavior.
lavasr-compat LavaSR v2 BWE download and verification are wired; self-contained inference is pending.

Managed downloads are explicit. Normal enhancement only uses local verified files unless --download-weights is set:

audio-super-res --backend lavasr-compat --download-weights --prepare-model-cache
audio-super-res --backend lavasr-compat --verify-weights

Use an existing manifest:

audio-super-res input.wav output.wav \
  --backend lavasr-compat \
  --target-sr 48000 \
  --weights-manifest C:\path\to\lavasr-v2-bwe\manifest.json

Run the optional external AudioSR backend:

audio-super-res input.wav output.wav \
  --backend audiosr \
  --target-sr 48000 \
  --model-name basic \
  --device auto

Python API

from audio_super_resolution import AudioSuperResolver

resolver = AudioSuperResolver(target_sr=48000)
result = resolver.enhance("input.wav", "output.wav")

print(result.output_path)
print(result.sample_rate)

Batch planning and manifests:

from audio_super_resolution import InferenceConfig, build_manifest, plan_enhancements

jobs = plan_enhancements("low-res-audio", "enhanced-audio", recursive=True)
manifest = build_manifest("dry-run", jobs, InferenceConfig(), backend="sinc-resample", target_sample_rate=48000)

Managed weights:

from audio_super_resolution import InferenceConfig, download_model_weights, resolve_model_weights, verify_model_weights

download_model_weights("lavasr-v2-bwe")
verified = verify_model_weights("lavasr-v2-bwe")
weights = resolve_model_weights("lavasr-v2-bwe", InferenceConfig(model_cache_dir=verified.root_dir.parent))
model_path = weights.path_for("enhancer_v2/pytorch_model.bin")

Development

pixi run test
pixi run lint
pixi run format
pixi run build

Run optional real AudioSR integration only when model inference and upstream checkpoint handling are intended:

set AUDIO_SUPER_RESOLUTION_RUN_AUDIOSR_INTEGRATION=1
pixi run pytest tests/test_audiosr_integration.py

Docker

docker build -t audio-super-resolution .
docker run --rm -v "%cd%":/workdir audio-super-resolution input.wav output.wav --target-sr 48000

On Unix-like shells, use -v "$PWD":/workdir.

Project Docs

Requirements

  • Python 3.10 or newer
  • Pixi for development
  • libsndfile-compatible audio files for the default reader/writer

License

This project is licensed under the MIT License. See LICENSE for details.

Credits

Inspired by the project structure and user experience of python-audio-separator.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

audio_super_resolution-0.1.1.tar.gz (70.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

audio_super_resolution-0.1.1-py3-none-any.whl (39.9 kB view details)

Uploaded Python 3

File details

Details for the file audio_super_resolution-0.1.1.tar.gz.

File metadata

  • Download URL: audio_super_resolution-0.1.1.tar.gz
  • Upload date:
  • Size: 70.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for audio_super_resolution-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7ccba1fc17e74d64af119ecf51d7d65b54ab67d98419d942936c4ddacd7092cd
MD5 24fd72f52d5b63b6ac2ad615f0887825
BLAKE2b-256 2f1a35bc24691f3e0654564bb07e98bd204dbd6a0ae19b1803a16ab04f20765b

See more details on using hashes here.

Provenance

The following attestation bundles were made for audio_super_resolution-0.1.1.tar.gz:

Publisher: release.yml on Tinnci/python-audio-super-resolution

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file audio_super_resolution-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for audio_super_resolution-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 865516ee8688402ac1cbc8017c51f9ec46bc27697b28c4cc155f7fa018462d41
MD5 88f72ec051733d6abce2d8c3ec7f27dd
BLAKE2b-256 a10c57189de1b27296930ea71aa00d8e583416db7d4fecb56a3eba3ca8030501

See more details on using hashes here.

Provenance

The following attestation bundles were made for audio_super_resolution-0.1.1-py3-none-any.whl:

Publisher: release.yml on Tinnci/python-audio-super-resolution

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page