Skip to main content

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

Reason this release was yanked:

Incompatibility with the claimed Python 3.10.

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.0.tar.gz (70.5 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.0-py3-none-any.whl (39.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: audio_super_resolution-0.1.0.tar.gz
  • Upload date:
  • Size: 70.5 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.0.tar.gz
Algorithm Hash digest
SHA256 be12784ec3058ec3eed6ab5773f26f40f2f443dc4e3885b945d838e266b6eb5b
MD5 1f29402cdf35c57df92bf1e2114e7d30
BLAKE2b-256 88330c5351c2bb1ab2058c66f16af3e6c7461d09799ff697aab846c95fc3fa0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for audio_super_resolution-0.1.0.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.0-py3-none-any.whl.

File metadata

File hashes

Hashes for audio_super_resolution-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f66a928009cc1e9337827f71adf0fc8cd01559862fa8c9fe2d98c13afdf7edcd
MD5 ba1b22111cc576a0193e3efaa057308b
BLAKE2b-256 84794b7bbae6ff91f4c9b9d291975a3964b7869f08e0620fd0b0f6602f24fe19

See more details on using hashes here.

Provenance

The following attestation bundles were made for audio_super_resolution-0.1.0-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