bioaccx
BIOAcoustic Custom Classifier eXchange — a Python CLI tool for training and sharing custom bioacoustic classifiers on top of pre-trained foundation models such as BirdNET and Perch.
The core idea is a clean separation between the backbone and the classifier head:
- The backbone (foundation model) is a large, general-purpose audio encoder shared by the community.
- The head is a small, task-specific classifier trained on your labeled data — just a few kilobytes.
This separation enables two complementary workflows:
Share lightweight heads. Because the head is tiny compared to the backbone, you can publish and distribute your custom classifier without bundling the full model. Anyone who already has the same backbone can load your head and run inference immediately.
Deploy as a single file. When you need a self-contained model — for edge devices, cloud APIs, or third-party tools — bioaccx can merge the backbone and head into one ONNX or TFLite file with a single audio input and class-score output.
Skip re-embedding when you already have embeddings. If you or your team have already run the backbone and saved the resulting embedding vectors, you can point bioaccx at that cache and train or evaluate the head directly — no audio processing, no GPU time, no waiting.
Build datasets from multiple sources in one config. bioaccx can assemble training data from local recordings, iNaturalist observations, Xeno-canto recordings, and Arbimon projects — all mixed in a single table or combined with a local directory. Remote audio is downloaded and cached automatically, so subsequent runs skip the network entirely.
bioaccx handles the full pipeline from raw audio to exported model, driven by a single config file.
How it works
Audio files → Foundation model (backbone) → Embeddings
↓
Keras or sklearn classifier head
↓
┌────────────────────────────────────────┐
│ backbone + head merged │ head only │
│ (single-file deploy) │ (shareable) │
└────────────────────────────────────────┘
- Foundation model — a backbone version of a bioacoustic model extracts rich feature vectors from raw audio windows. Supported formats: ONNX, TFLite, TF SavedModel (protobuf).
- Classifier head — a small Keras MLP or sklearn LogisticRegression is trained on top of those embeddings using your labeled data.
- Export — choose between:
- Full model (
output_type: full): merges backbone + head into a single ONNX or TFLite graph. Drop-in inference with no external dependencies. - Head only (
output_type: head): exports just the classifier. Tiny file, easy to share; requires the backbone at inference time. - Both (
output_type: both): produces both variants.
- Full model (
Installation
No Python needed. The installer sets everything up and adds a bioaccx shortcut that opens the browser GUI. Run it again to upgrade.
Windows — open PowerShell and paste:
powershell -ExecutionPolicy ByPass -c "irm https://github.com/biodiversica/bioaccx/releases/latest/download/install.ps1 | iex"
macOS (Apple Silicon) and Linux — open a terminal and paste:
curl -LsSf https://github.com/biodiversica/bioaccx/releases/latest/download/install.sh | sh
With uv or pip. bioaccx runs models through ONNX Runtime, and there is no
default one — pick cpu or gpu when you install. A plain bioaccx resolves
and installs happily, then fails the moment it tries to run a model, so the
extra is not optional in practice.
uv tool install --python 3.12 "bioaccx[cpu]" # CPU inference
uv tool install --python 3.12 "bioaccx[gpu]" # CUDA 12
uv tool install --python 3.12 "bioaccx[cpu,gui,umap]" # with the browser GUI and UMAP plots
uv add "bioaccx[cpu]" # or as a project dependency
Extras go inside the brackets — uv tool install has no --extra flag — and
the whole argument needs quoting so the shell does not glob them. --python
keeps uv off a Python newer than TensorFlow supports.
See Installation for what the installer does, the extras table, supported systems, working on bioaccx itself, GPU acceleration with CUDA, and how much disk this needs.
Quick start
# 0. Browse available foundation models and their registry IDs
bioaccx registry
# 1. Copy and edit the example config
cp example_config.yaml my_config.yaml
# 2. Validate config without running training
bioaccx validate my_config.yaml
# 3. Export the dataset as chunked WAV files (no model needed)
bioaccx dataset my_config.yaml
# 4. Compute the embedding database + UMAP (no training)
bioaccx embeddings my_config.yaml
# 5. Train and export
bioaccx train my_config.yaml
bioaccx merge and bioaccx extract-head do the same jobs without training —
see Merging, extracting and converting heads.
The browser GUI
bioaccx gui opens a config editor in a browser. It writes the same YAML files
every other command reads — the terminal stays the way runs are started.
uv tool install "bioaccx[cpu,gui]" # the GUI needs the [gui] extra
bioaccx gui # start from a template
bioaccx gui my_config.yaml # open an existing config
bioaccx gui --lang pt-BR # open it in Portuguese
The form is generated from the config dataclasses, so it offers exactly the keys this version understands, with their real defaults and help text; the file it writes is shown beside it as you type, and your comments survive the round-trip. The run tab starts a command on that config and streams its log into the page; the analysis tab reads what past runs wrote — metrics, the UMAP map with the audio behind each point, and two runs side by side.
See The browser GUI for all of it, including interface languages and serving the editor to another machine.
Configuration
Everything a run does is described by one YAML file:
example_config.yaml is a working starting point,
Configuration explains it section by section, and
Config reference lists every key with its default.
Documentation
The full documentation lives in docs/en/. This page covers what
bioaccx is, how to install it, and how to get a first run out of it.
| Page | What is in it |
|---|---|
| Installation | Install paths, the extras table, GPU acceleration, disk space |
| Quick start | The commands of a first run, in order |
| The browser GUI | bioaccx gui — config editor, results explorer, interface languages |
| Configuration | The config file section by section, with worked examples |
| Config reference | Every config key, its default and its help text |
| Datasets | Label layouts, train/test split, appending, combining sources |
| Remote sound sources | iNaturalist, Xeno-canto and Arbimon rows in one table |
| Augmentation and windowing | Noise augmentation, random shift, windows and overlap |
| Embeddings, cache and UMAP | The embedding store, bioaccx embeddings, UMAP and KMeans/NMI |
| Outputs | Directory structure, metadata, precision, excluding labels |
| Merging, extracting and converting heads | merge, extract-head, convert-head |
| Foundation model registry | Registry IDs, supported models, adding a new one |
| Python API | Using bioaccx as a library |
| CLI reference | Every command and option |
The config and CLI references are generated from the code by
tools/gen_docs.py, so they cannot drift behind it — see
docs/README.md.
License
Metadata
Release files for bioaccx 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| bioaccx-0.1.0.tar.gz | 493.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bioaccx-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 715.5 kB
Release files / bioaccx-0.1.0.tar.gz
| Download URL | bioaccx-0.1.0.tar.gz |
|---|---|
| Size | 493.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1e639eb8fcc170b7345c574606312dd9be2693dcf70f755ccfb4db785d4544f4
|
|
BLAKE2b-256 checksum How to use checksums |
e651737f1243c906a0cee8ba086d958990cc48584f7dbf1af279448ecc01f2b7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / bioaccx-0.1.0-py3-none-any.whl
| Download URL | bioaccx-0.1.0-py3-none-any.whl |
|---|---|
| Size | 222.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4373f5ee664ffa2a1937bfdb60cd071126be75b49e1fdc41e1d4d04554c4da93
|
|
BLAKE2b-256 checksum How to use checksums |
932dc81377349c73a2fde7a827904435c0c3ebc8a488f773ccee200e670bc7ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for bioaccx 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.