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 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, optionalaudiosr, 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
- docs/ARCHITECTURE.md: package layers, backend contract, and weight-management boundaries.
- ROADMAP.md: current status and next implementation work.
- docs/RELEASE.md: release checklist and publishing notes.
- tests/README.md: default and optional test strategy.
- examples/: Python examples and sample JSON artifacts.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be12784ec3058ec3eed6ab5773f26f40f2f443dc4e3885b945d838e266b6eb5b
|
|
| MD5 |
1f29402cdf35c57df92bf1e2114e7d30
|
|
| BLAKE2b-256 |
88330c5351c2bb1ab2058c66f16af3e6c7461d09799ff697aab846c95fc3fa0d
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
audio_super_resolution-0.1.0.tar.gz -
Subject digest:
be12784ec3058ec3eed6ab5773f26f40f2f443dc4e3885b945d838e266b6eb5b - Sigstore transparency entry: 1813108107
- Sigstore integration time:
-
Permalink:
Tinnci/python-audio-super-resolution@71902068542ed6b9549ea6b7217f52d87692899f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Tinnci
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@71902068542ed6b9549ea6b7217f52d87692899f -
Trigger Event:
release
-
Statement type:
File details
Details for the file audio_super_resolution-0.1.0-py3-none-any.whl.
File metadata
- Download URL: audio_super_resolution-0.1.0-py3-none-any.whl
- Upload date:
- Size: 39.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f66a928009cc1e9337827f71adf0fc8cd01559862fa8c9fe2d98c13afdf7edcd
|
|
| MD5 |
ba1b22111cc576a0193e3efaa057308b
|
|
| BLAKE2b-256 |
84794b7bbae6ff91f4c9b9d291975a3964b7869f08e0620fd0b0f6602f24fe19
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
audio_super_resolution-0.1.0-py3-none-any.whl -
Subject digest:
f66a928009cc1e9337827f71adf0fc8cd01559862fa8c9fe2d98c13afdf7edcd - Sigstore transparency entry: 1813108510
- Sigstore integration time:
-
Permalink:
Tinnci/python-audio-super-resolution@71902068542ed6b9549ea6b7217f52d87692899f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Tinnci
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@71902068542ed6b9549ea6b7217f52d87692899f -
Trigger Event:
release
-
Statement type: