|
Interactive demo and a full labeling app (BirdNET detection & annotation). Try them in your browser: |
DAW-like audio player (waveform + spectrogram + transport controls) as a standalone library — built for bioacoustic analysis, annotation, and embedding.
- Highlights
- Labeling app
- Install
- Quickstart
- Documentation
- Demos
- Python wrapper
- Development
- Contributing
- Citation
- License
- Fast, accurate spectrograms — computed in Rust/WebAssembly and rendered on the GPU; presets, colour schemes, auto contrast, PCEN, log frequency
- Synced waveform + spectrogram with smooth zoom, scroll and playhead follow — also for long recordings
- Label annotation — draw, move, resize, undo/redo; snap to call boxes a call from a single click; zoom box and edit loupe for precise edges
- BirdNET suggestions — accept or discard detections in one click
- Xeno-canto integration — import recordings and their annotation sets, compare with reference calls, upload your labels as Annota-JSON sets
- Projects — stored in the browser or in a local folder (File System Access API), Raven export
- Bat recordings — time expansion, heterodyne, frequency division and pitch shift
- Embeddable — npm package (ESM / IIFE) and a Python wrapper for Jupyter, Streamlit and Gradio
The labeling app runs entirely in the browser — no install, no server.
Overview — load a recording, zoom and play![]() |
Labeling — draw and name labels![]() |
Snap to call — one click boxes the call![]() |
Zoom box & loupe — precise box edges![]() |
Display — presets, colour schemes, contrast![]() |
SignaVis Lite — the same app as a small desktop program for Windows, macOS and Linux (project folders, offline use, self-update). Download the latest release · install notes (the installers are not code-signed yet).
npm i signavisNote: signavis expects wavesurfer.js as a peer dependency (v7). Install it with:
npm i wavesurfer.js@^7Or include wavesurfer.js from a CDN in the browser:
<script src="https://unpkg.com/wavesurfer.js@7"></script>Or for Python:
pip install signavisSee PyPI and the python-wrapper/README.md for full Python usage.
import { BirdNETPlayer } from 'signavis'
import 'signavis/style'
const player = new BirdNETPlayer(document.getElementById('player'))
await player.readyFull documentation lives on the docs site:
- Player Options — all constructor options
- Integration Examples — ESM, React, Vue, Svelte, CDN/IIFE, Streamlit, Jupyter
- Labeling App — shortcuts, species format, Xeno-canto format
- Python Integration
- Deployment & Migration
- Live Demo (GitHub Pages) — component storybook with configurable stories
- Labeling App — full-featured annotation tool with BirdNET detection, Xeno-canto integration, label management and spectrogram settings (
demo/labeling-app.html) - Google Colab Demo Notebook
- Streamlit:
streamlit run python-wrapper/demo_streamlit.py - Gradio:
pip install gradio && python python-wrapper/demo_gradio.py
The Python wrapper allows embedding the player in Streamlit, Jupyter, and Gradio.
pip install signavisSee python-wrapper/README.md for full usage, options, and advanced features, and PyPI for the published package.
npm ci
npm run dev # Vite dev server, labeling app at /demo/labeling-app.html
npm run typecheck
npm test
npm run build # library + types into dist/ and types/See DEVELOPER.md for the full setup, git hooks, release and desktop (Tauri) build instructions.
See CONTRIBUTING.md. Issues and PRs welcome on GitHub.
If you use SignaVis in your research, please cite it — see CITATION.cff for machine-readable metadata (also shown via the "Cite this repository" button on GitHub), or use:
@software{signavis,
author = {Behrisch, Jairus},
title = {SignaVis: Interactive waveform + spectrogram audio player for bioacoustic analysis and annotation},
url = {https://github.com/LimitlessGreen/SignaVis},
license = {AGPL-3.0-only}
}A DOI via Zenodo is minted automatically for each GitHub release; see the DOI badge at the top of this README for the latest version.
GNU AGPL-3.0





