ChirpKit successfully downloads BirdNET models to ~/.chirpkit/models/birdnet/, but BirdNET-Analyzer was not configured to use these downloaded models. Instead, it tried to use models from the BirdNET-Analyzer package directory, which may not exist.
Updated src/chirpkit/transfer_learning/birdnet_embeddings.py lines 84-115 to configure BirdNET-Analyzer to use ChirpKit's downloaded models.
def _init_with_analyzer(self):
"""Initialize using full BirdNET-Analyzer"""
# Only checks if BIRDNET_MODEL_PATH exists
if hasattr(birdnet_cfg, 'BIRDNET_MODEL_PATH'):
birdnet_cfg.MODEL_PATH = birdnet_cfg.BIRDNET_MODEL_PATH
if hasattr(birdnet_cfg, 'BIRDNET_LABELS_FILE'):
birdnet_cfg.LABELS_FILE = birdnet_cfg.BIRDNET_LABELS_FILE
# ... rest of config ...
birdnet_model.load_model(class_output=False)Problem: Never checks ChirpKit's ~/.chirpkit/models/birdnet/ directory!
def _init_with_analyzer(self):
"""Initialize using full BirdNET-Analyzer"""
# Point to ChirpKit's downloaded models in ~/.chirpkit/models/birdnet/
chirpkit_model_dir = Path.home() / '.chirpkit' / 'models' / 'birdnet'
if chirpkit_model_dir.exists():
# Use ChirpKit's downloaded models
birdnet_cfg.MODEL_PATH = str(chirpkit_model_dir / 'BirdNET_GLOBAL_6K_V2.4_Model_FP16.tflite')
birdnet_cfg.LABELS_FILE = str(chirpkit_model_dir / 'BirdNET_GLOBAL_6K_V2.4_Labels.txt')
print(f"✅ Using ChirpKit downloaded models from: {chirpkit_model_dir}")
elif hasattr(birdnet_cfg, 'BIRDNET_MODEL_PATH'):
# Fallback to GitHub version paths
birdnet_cfg.MODEL_PATH = birdnet_cfg.BIRDNET_MODEL_PATH
birdnet_cfg.LABELS_FILE = birdnet_cfg.BIRDNET_LABELS_FILE
print("✅ Using BirdNET-Analyzer package models")
else:
raise RuntimeError(
"BirdNET models not found. Please run:\n"
" from chirpkit.model_downloader import ModelDownloader\n"
" ModelDownloader.download_model('birdnet')"
)
# ... rest of config ...
birdnet_model.load_model(class_output=False)- Priority 1: Check ChirpKit's downloaded models directory (
~/.chirpkit/models/birdnet/) - Priority 2: Fallback to BirdNET-Analyzer package paths (for development)
- Priority 3: Raise clear error if models not found
$ python -c "from src.chirpkit.transfer_learning.birdnet_embeddings import BirdNETEmbeddingExtractor; BirdNETEmbeddingExtractor()"
# Would fail looking for models in BirdNET-Analyzer package directory
ValueError: Could not open '/path/to/birdnet_analyzer/checkpoints/V2.4/BirdNET_GLOBAL_6K_V2.4_Model_FP32.tflite'$ python -c "from src.chirpkit.transfer_learning.birdnet_embeddings import BirdNETEmbeddingExtractor; BirdNETEmbeddingExtractor()"
✅ Using BirdNET-Analyzer (GitHub version with model files)
🔧 Initializing BirdNET embedding extractor...
✅ Using ChirpKit downloaded models from: /Users/user/.chirpkit/models/birdnet
📦 Loading BirdNET model from: /Users/user/.chirpkit/models/birdnet/BirdNET_GLOBAL_6K_V2.4_Model_FP16.tflite
✅ BirdNET embedding extractor ready!
Embedding dim: 1024- ❌ Downloaded models not used
- ❌ BirdNET-Analyzer looks in wrong location
- ❌ Fails with ValueError
- ✅ Uses ChirpKit's downloaded models
- ✅ Works with ModelDownloader workflow
- ✅ Clear error messages if models missing
This fix ensures that after running:
from chirpkit.model_downloader import ModelDownloader
ModelDownloader.download_all_models()The downloaded models in ~/.chirpkit/models/birdnet/ will be properly used by BirdNET-Analyzer.
Fixed: November 6, 2025 Status: ✅ COMPLETE - Tested and working