nocturne-fieldrecordist
Combined BirdNET + Nocturne bioacoustic classification for wildlife field-recordist libraries.
- BirdNET ≈ 3,000 bird species (runs locally via
birdnetlib) - Nocturne ≈ 2,182 non-bird species — insects, amphibians, non-bird mammals, reptiles (Stratus Labs hosted API at
nocturne.runstratus.com) - Scan a directory → get a species-tagged SQLite catalog searchable by species, model, confidence
- Ships with a Reaper action that adds species markers to a selected media item
Built by Stratus Labs. Nocturne itself is Apache-2.0; BirdNET is licensed separately (see the BirdNET-Analyzer repo).
Install
pip install nocturne-fieldrecordist
This pulls in nocturne-client, birdnetlib, and tensorflow (BirdNET's runtime). Total install ~2 GB. First run of BirdNET downloads the model (~50 MB, cached).
Scan a library
nocturne-fr scan ~/recordings --db library.sqlite
Recurses into subdirectories; audio extensions: .wav .flac .mp3 .m4a .ogg .aif .aiff. Skips files already in the DB unless you pass --reprocess. Progress prints to stderr; a JSON summary lands on stdout.
Classify a single clip
nocturne-fr classify path/to/clip.wav
Prints a JSON list of detections from both models.
Query the catalog
# All Nocturne detections above 0.3 confidence, limit 50
nocturne-fr query --db library.sqlite --model nocturne --min-conf 0.3 --limit 50
# Everything matching "wren" (either BirdNET or Nocturne, any confidence)
nocturne-fr query --db library.sqlite --species wren
Python API
from nocturne_fieldrecordist import DualClassifier, scan_path
dc = DualClassifier(birdnet_min_conf=0.5, nocturne_min_conf=0.2, nocturne_top_k=5)
for det in dc.classify("recording.wav"):
print(det.source_model, det.species, det.confidence, det.start_time_s)
# Or scan a whole tree:
summary = scan_path("~/recordings", db_path="library.sqlite", dc=dc)
Reaper integration
Install the action from nocturne_fieldrecordist/reaper/nocturne_reaper.py:
- Set Reaper's ReaScript Python interpreter to the same env where you
pip installed this package (Preferences → Plug-ins → ReaScript). - Actions → Load ReaScript → select
nocturne_reaper.py. - Optional: bind a keyboard shortcut.
Select a media item, trigger the action, and get one Reaper marker per detection: [bir] Passer domesticus (0.87) or [noc] Neoconocephalus triops (0.42). BirdNET markers get one color, Nocturne another.
Tunables
--birdnet-min-conf(default 0.5) — BirdNET's author recommends ≥0.5.--nocturne-min-conf(default 0.15) — Nocturne v1's per-class-calibrated thresholds sit around 0.15-0.30 across the vocab.--top-k(default 3) — how many Nocturne predictions to keep per file.
Nocturne API auth
Anonymous is fine (rate-limited to 10 req/min per IP). For batch libraries pass a paid-tier key:
export NOCTURNE_KEY=ck_...
nocturne-fr scan ~/recordings --db library.sqlite --nocturne-key $NOCTURNE_KEY
Sign up at nocturne.runstratus.com/pricing.
SQLite schema
Two tables: recordings (one row per audio file) and detections (one row per model prediction). See schema.sql for indexes + full columns. The catalog file is portable — copy it, ship it to a Flask app, load it in DB Browser, whatever fits your workflow.
Metadata
Release files for nocturne-fieldrecordist 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 | Actions |
|---|---|---|---|---|
| nocturne_fieldrecordist-0.1.0.tar.gz | 11.4 kB | Without provenance | Details for nocturne_fieldrecordist-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| nocturne_fieldrecordist-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for nocturne_fieldrecordist-0.1.0-py3-none-any.whl |
Total release size: 23.9 kB
Release files / nocturne_fieldrecordist-0.1.0.tar.gz
| Download URL | nocturne_fieldrecordist-0.1.0.tar.gz |
|---|---|
| Size | 11.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8f0927e237a76a553faccc01c6397d7a17aac2c28e25badd591afb7633273187
|
|
BLAKE2b-256 checksum How to use checksums |
1f4efdda02df09efd448731114de9a0c320182515ad847d3cd3589dc99d6e774
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.5
|
Release files / nocturne_fieldrecordist-0.1.0-py3-none-any.whl
| Download URL | nocturne_fieldrecordist-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
17e284c26ae79b86c3b04cfd002c536a36dfa80e4672e4c31bfba1767ee8a11c
|
|
BLAKE2b-256 checksum How to use checksums |
4df7946bd13ba7c56d7f3f5c506132b406a6e47987b99721432369751ea3559d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.5
|
Security for nocturne-fieldrecordist 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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.