Skip to content

Releases: nomadkaraoke/python-audio-separator

v0.44.2

18 May 23:24
fca0cf7

Choose a tag to compare

fix(remote): unblock audio-separator-remote for typical files (#288)

* fix(remote): unblock audio-separator-remote for typical files

Two independent issues prevented `audio-separator-remote` from working
end-to-end against the GCP Cloud Run deployment:

1. **CLI hits Cloud Run's 32 MiB request body limit on real audio files.**
   The underlying AudioSeparatorAPIClient already supports a `gcs_uri`
   mode where the server fetches from GCS (used by karaoke-gen), but the
   CLI only exposed the multipart upload path. Now the CLI detects files
   >30 MiB and auto-uploads to GCS, passes `gcs_uri` to the API, and
   cleans up the GCS object in a `finally` block (the bucket's 1-day
   lifecycle is the safety net). Bucket configurable via `--gcs-bucket`
   or `AUDIO_SEPARATOR_GCS_INPUT_BUCKET`; defaults to the existing
   `nomadkaraoke-audio-separator-outputs` (separator SA already has
   objectAdmin, no infra change needed). `google-cloud-storage` is
   lazy-imported with a clear install hint if missing.

2. **Cloud Run server silently runs in CPU mode, not GPU.** The image
   relied on `pip install ".[gpu]"` for GPU support, which only swaps in
   `onnxruntime-gpu` — the `torch>=2.3` constraint pulls PyPI's default
   CPU-only PyTorch wheel. Result: `torch.cuda.is_available()` returns
   False, Separator falls back to CPU, jobs run ~10x slower (50 min
   instead of 5 min for the vocal_balanced preset). karaoke-gen's
   audio-separation-job image already documents this gotcha in
   `Dockerfile.gpu-base:100-106`; mirroring that pattern here:
   install `torch==2.6.0+cu126` from the cu126 index first so
   audio-separator[gpu] sees torch as already satisfied.

Tests: 7 new unit tests covering GCS upload helpers (blob path format,
URI parsing, error handling), bucket resolution priority (--flag > env >
default), and the integration into handle_separate_command (large/small
file, cleanup on failure, upload failure).

Bumps version to 0.44.2.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* test: pass gcs_bucket to handle_separate_command in integration test

Missed this call site when updating the function signature. Unit tests
in tests/unit/test_remote_cli.py were updated, but integration test
test_cli_separate_command_integration still passed only 3 args.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.44.1

25 Mar 21:45
5a801f8

Choose a tag to compare

fix: send multipart encoding when using gcs_uri (fixes 400 error) (#278)

FastAPI requires multipart/form-data for endpoints with File()/Form()
parameters. When gcs_uri is used without a file upload, requests
defaulted to x-www-form-urlencoded, causing a 400 Bad Request.

Fix: send a dummy empty file field to force multipart encoding.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

v0.44.0

25 Mar 17:53
1ea0e5b

Choose a tag to compare

feat: add GCS URI support to /separate endpoint (#277)

Allow callers to pass a gcs_uri (gs://bucket/path) instead of uploading
the audio file as a multipart POST body. This avoids Cloud Run's 32MB
request body limit for large FLAC files.

- Server: new gcs_uri parameter on /separate, downloads from GCS directly
- Client: separate_audio() and separate_audio_and_wait() accept gcs_uri
- Backward compatible: file upload still works when gcs_uri is not set
- Version bump to 0.44.0

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

v0.43.1

23 Mar 16:16
153b2e4

Choose a tag to compare

fix: ensemble separation ignores custom_output_names, misclassifies s…

v0.43.0

23 Mar 02:47
288e322

Choose a tag to compare

chore: bump version to 0.43.0 (#274)

* chore: bump version to 0.43.0

New features in this release:
- Cloud Run GPU deployment support (deploy_cloudrun.py, Dockerfile.cloudrun)
- Ensemble preset support in API client (-p/--preset flag in CLI)
- Preset parameter in separate_audio() and separate_audio_and_wait()
- Stem marker stripping for chained separations

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Trigger CI: runners restarted, idle check paused

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

v0.42.1

17 Mar 02:36
3f58f95

Choose a tag to compare

chore: bump version to 0.42.1 (#271)

Patch release for:
- Fix chunk overwrite when using custom_output_names with chunk_duration (#259, #270)
- Clarify demucs segment_size "Default" documentation (#264, #270)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

v0.42.0

16 Mar 23:15
adc5539

Choose a tag to compare

feat: multi-model ensemble separation with 9 community-curated preset…

v0.41.1

24 Jan 07:45
8b193be

Choose a tag to compare

fix: RFC 5987 encoding for Unicode filenames in Content-Disposition h…

v0.41.0

16 Jan 02:55
76141c8

Choose a tag to compare

Update pyproject.toml

v0.40.0

30 Nov 00:08
69cb8f9

Choose a tag to compare

Preserve bit depth of input audio (don't down sample everything to 16…