Latest commit

History

571 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

bats-ai

Setup

  1. Install VS Code with dev container support.
  2. Open the project in VS Code, then run Dev Containers: Reopen in Container from the Command Palette (Ctrl+Shift+P).
  3. Once the container is ready, open a terminal and run:
    ./manage.py migrate
    ./manage.py createsuperuser
    ./manage.py loaddata species

Run

Open the Run and Debug panel (Ctrl+Shift+D) and select a launch configuration:

  • Django: Server - Starts the development server at http://localhost:8000/
  • Django: Server (eager Celery) - Same, but Celery tasks run synchronously in the web process (useful for debugging task code without a worker)
  • Celery: Worker - Starts only the Celery worker
  • Django: Management Command - Pick and run any management command
  • Vite: Dev Server - Starts the frontend development server at http://localhost:8080/
  • Django + Celery + Vite - Starts the server, a Celery worker, and the frontend

Test

Run the full test suite from a terminal: tox

Auto-format code: tox -e format

Run and debug individual tests from the Testing panel (Ctrl+Shift+;).

Rebuild

After changes to the Dockerfile, Docker Compose files, or devcontainer.json, run Dev Containers: Rebuild Container from the Command Palette (Ctrl+Shift+P).

For dependency changes in pyproject.toml, just run uv sync --all-extras --all-groups.

Dev Tool Endpoints

  1. Main Site Interface http://localhost:8080/
  2. Site Administration http://localhost:8000/admin/
  3. Swagger API (These are default swagger endpoints using Django-REST) http://localhost:8000/api/docs/swagger/
  4. Django Ninja API http://localhost:8000/api/v1/docs#/
  5. MinIO (S3 local management) http://localhost:9001/browser Username: 'minioAccessKey' Password: 'minioSecretKey'

Importing Recordings

The importRecordings management command allows you to bulk import WAV files from a directory. It will:

  • Recursively search for all .wav and .WAV files in the specified directory
  • Extract GUANO metadata from each file (with filename fallback if metadata is missing)
  • Create Recording objects with the extracted metadata
  • Generate spectrograms synchronously for each recording
  • Log progress to the terminal

Usage

Basic usage with Docker Compose (with bind mount):

./manage.py importRecordings /data

With options:

./manage.py importRecordings /data \
--owner username \
--public \
--limit 10

Options:

  • directory (required): Path to directory containing WAV files
  • --owner USERNAME: Username of the owner for the recordings (defaults to first superuser)
  • --public: Make imported recordings public
  • --limit N: Limit the number of WAV files to import (useful for testing)

Code Formatting

It's recommended that you use pre-commit to provide additional linting on any commit you make. See the installation instructions for your OS/platform to install.

After you have the software installed, run pre-commit install on the command line. Now every time you commit to this project's code base the linter procedures will automatically run over the changed files.

To install the linting Python dependencies, run:

pip install -r pre-commit

To run pre-commit on files preemptively from the command line use:

 git add .
pre-commit run
# or
pre-commit run --all-files

See .pre-commit-config.yaml for a list of configured linters and fixers.

To add pre-commit as a Git hook, run the following:

pre-commit install

This will run the pre-commit update prior to finalizing a local commit. This is preferred because once the commit is created locally, you will need to rebase or otherwise rewrite the commit to make adjustments if done after the fact.

Lastly, the GitLab CI/CD infrastructure runs the same pre-commit configuration on all pipelines for new MRs. The automated checks in GitLab are optional, but it is highly recommended to perform these checks locally prior to pushing new commits.

Spectrogram contours

Spectrogram processing tasks honor DJANGO_BATAI_SAVE_SPECTROGRAM_CONTOURS environment variable. Set to False by default so workers skip contour extraction (less DB storage space); set to True if you need contours in the UI (UI for contours currently disabled due to performance)

Original sample-rate spectrograms

By default (DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=true), BatBot's .origsr.jpg outputs are stored as the uncompressed and compressed spectrogram images (and related masks/waveplots). Set DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=false to use resampled images instead.

Species Suggestions by Range

The suggested species for a given location are determined by spatial data stored in /bats_ai/core/data/species-range.geojson. As part of the default migrations this data is ingested into the SpeciesRange database and used for determining suggested species based on a Recording (internal GRTS_Cell_ID and sample_frame_id). The if the same species is found multiple times in the geojson the last geometry will be used. In the future if species-ranges change the managment command of ./manage.py load_species_geojson [optional Geojson Path] can be used to reload the default species-range.geojson if no path is provided or a new one and will update/replace any previous data.

About

Bat Detection and Classification using AI and Acoustics

Resources

Stars

10 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

571 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

bats-ai

Setup

  1. Install VS Code with dev container support.
  2. Open the project in VS Code, then run Dev Containers: Reopen in Container from the Command Palette (Ctrl+Shift+P).
  3. Once the container is ready, open a terminal and run:
    ./manage.py migrate
    ./manage.py createsuperuser
    ./manage.py loaddata species

Run

Open the Run and Debug panel (Ctrl+Shift+D) and select a launch configuration:

  • Django: Server - Starts the development server at http://localhost:8000/
  • Django: Server (eager Celery) - Same, but Celery tasks run synchronously in the web process (useful for debugging task code without a worker)
  • Celery: Worker - Starts only the Celery worker
  • Django: Management Command - Pick and run any management command
  • Vite: Dev Server - Starts the frontend development server at http://localhost:8080/
  • Django + Celery + Vite - Starts the server, a Celery worker, and the frontend

Test

Run the full test suite from a terminal: tox

Auto-format code: tox -e format

Run and debug individual tests from the Testing panel (Ctrl+Shift+;).

Rebuild

After changes to the Dockerfile, Docker Compose files, or devcontainer.json, run Dev Containers: Rebuild Container from the Command Palette (Ctrl+Shift+P).

For dependency changes in pyproject.toml, just run uv sync --all-extras --all-groups.

Dev Tool Endpoints

  1. Main Site Interface http://localhost:8080/
  2. Site Administration http://localhost:8000/admin/
  3. Swagger API (These are default swagger endpoints using Django-REST) http://localhost:8000/api/docs/swagger/
  4. Django Ninja API http://localhost:8000/api/v1/docs#/
  5. MinIO (S3 local management) http://localhost:9001/browser Username: 'minioAccessKey' Password: 'minioSecretKey'

Importing Recordings

The importRecordings management command allows you to bulk import WAV files from a directory. It will:

  • Recursively search for all .wav and .WAV files in the specified directory
  • Extract GUANO metadata from each file (with filename fallback if metadata is missing)
  • Create Recording objects with the extracted metadata
  • Generate spectrograms synchronously for each recording
  • Log progress to the terminal

Usage

Basic usage with Docker Compose (with bind mount):

./manage.py importRecordings /data

With options:

./manage.py importRecordings /data \
--owner username \
--public \
--limit 10

Options:

  • directory (required): Path to directory containing WAV files
  • --owner USERNAME: Username of the owner for the recordings (defaults to first superuser)
  • --public: Make imported recordings public
  • --limit N: Limit the number of WAV files to import (useful for testing)

Code Formatting

It's recommended that you use pre-commit to provide additional linting on any commit you make. See the installation instructions for your OS/platform to install.

After you have the software installed, run pre-commit install on the command line. Now every time you commit to this project's code base the linter procedures will automatically run over the changed files.

To install the linting Python dependencies, run:

pip install -r pre-commit

To run pre-commit on files preemptively from the command line use:

 git add .
pre-commit run
# or
pre-commit run --all-files

See .pre-commit-config.yaml for a list of configured linters and fixers.

To add pre-commit as a Git hook, run the following:

pre-commit install

This will run the pre-commit update prior to finalizing a local commit. This is preferred because once the commit is created locally, you will need to rebase or otherwise rewrite the commit to make adjustments if done after the fact.

Lastly, the GitLab CI/CD infrastructure runs the same pre-commit configuration on all pipelines for new MRs. The automated checks in GitLab are optional, but it is highly recommended to perform these checks locally prior to pushing new commits.

Spectrogram contours

Spectrogram processing tasks honor DJANGO_BATAI_SAVE_SPECTROGRAM_CONTOURS environment variable. Set to False by default so workers skip contour extraction (less DB storage space); set to True if you need contours in the UI (UI for contours currently disabled due to performance)

Original sample-rate spectrograms

By default (DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=true), BatBot's .origsr.jpg outputs are stored as the uncompressed and compressed spectrogram images (and related masks/waveplots). Set DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=false to use resampled images instead.

Species Suggestions by Range

The suggested species for a given location are determined by spatial data stored in /bats_ai/core/data/species-range.geojson. As part of the default migrations this data is ingested into the SpeciesRange database and used for determining suggested species based on a Recording (internal GRTS_Cell_ID and sample_frame_id). The if the same species is found multiple times in the geojson the last geometry will be used. In the future if species-ranges change the managment command of ./manage.py load_species_geojson [optional Geojson Path] can be used to reload the default species-range.geojson if no path is provided or a new one and will update/replace any previous data.

About

Bat Detection and Classification using AI and Acoustics

Resources

Stars

10 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

571 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

bats-ai

Setup

  1. Install VS Code with dev container support.
  2. Open the project in VS Code, then run Dev Containers: Reopen in Container from the Command Palette (Ctrl+Shift+P).
  3. Once the container is ready, open a terminal and run:
    ./manage.py migrate
    ./manage.py createsuperuser
    ./manage.py loaddata species

Run

Open the Run and Debug panel (Ctrl+Shift+D) and select a launch configuration:

  • Django: Server - Starts the development server at http://localhost:8000/
  • Django: Server (eager Celery) - Same, but Celery tasks run synchronously in the web process (useful for debugging task code without a worker)
  • Celery: Worker - Starts only the Celery worker
  • Django: Management Command - Pick and run any management command
  • Vite: Dev Server - Starts the frontend development server at http://localhost:8080/
  • Django + Celery + Vite - Starts the server, a Celery worker, and the frontend

Test

Run the full test suite from a terminal: tox

Auto-format code: tox -e format

Run and debug individual tests from the Testing panel (Ctrl+Shift+;).

Rebuild

After changes to the Dockerfile, Docker Compose files, or devcontainer.json, run Dev Containers: Rebuild Container from the Command Palette (Ctrl+Shift+P).

For dependency changes in pyproject.toml, just run uv sync --all-extras --all-groups.

Dev Tool Endpoints

  1. Main Site Interface http://localhost:8080/
  2. Site Administration http://localhost:8000/admin/
  3. Swagger API (These are default swagger endpoints using Django-REST) http://localhost:8000/api/docs/swagger/
  4. Django Ninja API http://localhost:8000/api/v1/docs#/
  5. MinIO (S3 local management) http://localhost:9001/browser Username: 'minioAccessKey' Password: 'minioSecretKey'

Importing Recordings

The importRecordings management command allows you to bulk import WAV files from a directory. It will:

  • Recursively search for all .wav and .WAV files in the specified directory
  • Extract GUANO metadata from each file (with filename fallback if metadata is missing)
  • Create Recording objects with the extracted metadata
  • Generate spectrograms synchronously for each recording
  • Log progress to the terminal

Usage

Basic usage with Docker Compose (with bind mount):

./manage.py importRecordings /data

With options:

./manage.py importRecordings /data \
--owner username \
--public \
--limit 10

Options:

  • directory (required): Path to directory containing WAV files
  • --owner USERNAME: Username of the owner for the recordings (defaults to first superuser)
  • --public: Make imported recordings public
  • --limit N: Limit the number of WAV files to import (useful for testing)

Code Formatting

It's recommended that you use pre-commit to provide additional linting on any commit you make. See the installation instructions for your OS/platform to install.

After you have the software installed, run pre-commit install on the command line. Now every time you commit to this project's code base the linter procedures will automatically run over the changed files.

To install the linting Python dependencies, run:

pip install -r pre-commit

To run pre-commit on files preemptively from the command line use:

 git add .
pre-commit run
# or
pre-commit run --all-files

See .pre-commit-config.yaml for a list of configured linters and fixers.

To add pre-commit as a Git hook, run the following:

pre-commit install

This will run the pre-commit update prior to finalizing a local commit. This is preferred because once the commit is created locally, you will need to rebase or otherwise rewrite the commit to make adjustments if done after the fact.

Lastly, the GitLab CI/CD infrastructure runs the same pre-commit configuration on all pipelines for new MRs. The automated checks in GitLab are optional, but it is highly recommended to perform these checks locally prior to pushing new commits.

Spectrogram contours

Spectrogram processing tasks honor DJANGO_BATAI_SAVE_SPECTROGRAM_CONTOURS environment variable. Set to False by default so workers skip contour extraction (less DB storage space); set to True if you need contours in the UI (UI for contours currently disabled due to performance)

Original sample-rate spectrograms

By default (DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=true), BatBot's .origsr.jpg outputs are stored as the uncompressed and compressed spectrogram images (and related masks/waveplots). Set DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=false to use resampled images instead.

Species Suggestions by Range

The suggested species for a given location are determined by spatial data stored in /bats_ai/core/data/species-range.geojson. As part of the default migrations this data is ingested into the SpeciesRange database and used for determining suggested species based on a Recording (internal GRTS_Cell_ID and sample_frame_id). The if the same species is found multiple times in the geojson the last geometry will be used. In the future if species-ranges change the managment command of ./manage.py load_species_geojson [optional Geojson Path] can be used to reload the default species-range.geojson if no path is provided or a new one and will update/replace any previous data.

About

Bat Detection and Classification using AI and Acoustics

Resources

Stars

10 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

571 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

bats-ai

Setup

  1. Install VS Code with dev container support.
  2. Open the project in VS Code, then run Dev Containers: Reopen in Container from the Command Palette (Ctrl+Shift+P).
  3. Once the container is ready, open a terminal and run:
    ./manage.py migrate
    ./manage.py createsuperuser
    ./manage.py loaddata species

Run

Open the Run and Debug panel (Ctrl+Shift+D) and select a launch configuration:

  • Django: Server - Starts the development server at http://localhost:8000/
  • Django: Server (eager Celery) - Same, but Celery tasks run synchronously in the web process (useful for debugging task code without a worker)
  • Celery: Worker - Starts only the Celery worker
  • Django: Management Command - Pick and run any management command
  • Vite: Dev Server - Starts the frontend development server at http://localhost:8080/
  • Django + Celery + Vite - Starts the server, a Celery worker, and the frontend

Test

Run the full test suite from a terminal: tox

Auto-format code: tox -e format

Run and debug individual tests from the Testing panel (Ctrl+Shift+;).

Rebuild

After changes to the Dockerfile, Docker Compose files, or devcontainer.json, run Dev Containers: Rebuild Container from the Command Palette (Ctrl+Shift+P).

For dependency changes in pyproject.toml, just run uv sync --all-extras --all-groups.

Dev Tool Endpoints

  1. Main Site Interface http://localhost:8080/
  2. Site Administration http://localhost:8000/admin/
  3. Swagger API (These are default swagger endpoints using Django-REST) http://localhost:8000/api/docs/swagger/
  4. Django Ninja API http://localhost:8000/api/v1/docs#/
  5. MinIO (S3 local management) http://localhost:9001/browser Username: 'minioAccessKey' Password: 'minioSecretKey'

Importing Recordings

The importRecordings management command allows you to bulk import WAV files from a directory. It will:

  • Recursively search for all .wav and .WAV files in the specified directory
  • Extract GUANO metadata from each file (with filename fallback if metadata is missing)
  • Create Recording objects with the extracted metadata
  • Generate spectrograms synchronously for each recording
  • Log progress to the terminal

Usage

Basic usage with Docker Compose (with bind mount):

./manage.py importRecordings /data

With options:

./manage.py importRecordings /data \
--owner username \
--public \
--limit 10

Options:

  • directory (required): Path to directory containing WAV files
  • --owner USERNAME: Username of the owner for the recordings (defaults to first superuser)
  • --public: Make imported recordings public
  • --limit N: Limit the number of WAV files to import (useful for testing)

Code Formatting

It's recommended that you use pre-commit to provide additional linting on any commit you make. See the installation instructions for your OS/platform to install.

After you have the software installed, run pre-commit install on the command line. Now every time you commit to this project's code base the linter procedures will automatically run over the changed files.

To install the linting Python dependencies, run:

pip install -r pre-commit

To run pre-commit on files preemptively from the command line use:

 git add .
pre-commit run
# or
pre-commit run --all-files

See .pre-commit-config.yaml for a list of configured linters and fixers.

To add pre-commit as a Git hook, run the following:

pre-commit install

This will run the pre-commit update prior to finalizing a local commit. This is preferred because once the commit is created locally, you will need to rebase or otherwise rewrite the commit to make adjustments if done after the fact.

Lastly, the GitLab CI/CD infrastructure runs the same pre-commit configuration on all pipelines for new MRs. The automated checks in GitLab are optional, but it is highly recommended to perform these checks locally prior to pushing new commits.

Spectrogram contours

Spectrogram processing tasks honor DJANGO_BATAI_SAVE_SPECTROGRAM_CONTOURS environment variable. Set to False by default so workers skip contour extraction (less DB storage space); set to True if you need contours in the UI (UI for contours currently disabled due to performance)

Original sample-rate spectrograms

By default (DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=true), BatBot's .origsr.jpg outputs are stored as the uncompressed and compressed spectrogram images (and related masks/waveplots). Set DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=false to use resampled images instead.

Species Suggestions by Range

The suggested species for a given location are determined by spatial data stored in /bats_ai/core/data/species-range.geojson. As part of the default migrations this data is ingested into the SpeciesRange database and used for determining suggested species based on a Recording (internal GRTS_Cell_ID and sample_frame_id). The if the same species is found multiple times in the geojson the last geometry will be used. In the future if species-ranges change the managment command of ./manage.py load_species_geojson [optional Geojson Path] can be used to reload the default species-range.geojson if no path is provided or a new one and will update/replace any previous data.

About

Bat Detection and Classification using AI and Acoustics

Resources

Stars

10 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

571 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

bats-ai

Setup

  1. Install VS Code with dev container support.
  2. Open the project in VS Code, then run Dev Containers: Reopen in Container from the Command Palette (Ctrl+Shift+P).
  3. Once the container is ready, open a terminal and run:
    ./manage.py migrate
    ./manage.py createsuperuser
    ./manage.py loaddata species

Run

Open the Run and Debug panel (Ctrl+Shift+D) and select a launch configuration:

  • Django: Server - Starts the development server at http://localhost:8000/
  • Django: Server (eager Celery) - Same, but Celery tasks run synchronously in the web process (useful for debugging task code without a worker)
  • Celery: Worker - Starts only the Celery worker
  • Django: Management Command - Pick and run any management command
  • Vite: Dev Server - Starts the frontend development server at http://localhost:8080/
  • Django + Celery + Vite - Starts the server, a Celery worker, and the frontend

Test

Run the full test suite from a terminal: tox

Auto-format code: tox -e format

Run and debug individual tests from the Testing panel (Ctrl+Shift+;).

Rebuild

After changes to the Dockerfile, Docker Compose files, or devcontainer.json, run Dev Containers: Rebuild Container from the Command Palette (Ctrl+Shift+P).

For dependency changes in pyproject.toml, just run uv sync --all-extras --all-groups.

Dev Tool Endpoints

  1. Main Site Interface http://localhost:8080/
  2. Site Administration http://localhost:8000/admin/
  3. Swagger API (These are default swagger endpoints using Django-REST) http://localhost:8000/api/docs/swagger/
  4. Django Ninja API http://localhost:8000/api/v1/docs#/
  5. MinIO (S3 local management) http://localhost:9001/browser Username: 'minioAccessKey' Password: 'minioSecretKey'

Importing Recordings

The importRecordings management command allows you to bulk import WAV files from a directory. It will:

  • Recursively search for all .wav and .WAV files in the specified directory
  • Extract GUANO metadata from each file (with filename fallback if metadata is missing)
  • Create Recording objects with the extracted metadata
  • Generate spectrograms synchronously for each recording
  • Log progress to the terminal

Usage

Basic usage with Docker Compose (with bind mount):

./manage.py importRecordings /data

With options:

./manage.py importRecordings /data \
--owner username \
--public \
--limit 10

Options:

  • directory (required): Path to directory containing WAV files
  • --owner USERNAME: Username of the owner for the recordings (defaults to first superuser)
  • --public: Make imported recordings public
  • --limit N: Limit the number of WAV files to import (useful for testing)

Code Formatting

It's recommended that you use pre-commit to provide additional linting on any commit you make. See the installation instructions for your OS/platform to install.

After you have the software installed, run pre-commit install on the command line. Now every time you commit to this project's code base the linter procedures will automatically run over the changed files.

To install the linting Python dependencies, run:

pip install -r pre-commit

To run pre-commit on files preemptively from the command line use:

 git add .
pre-commit run
# or
pre-commit run --all-files

See .pre-commit-config.yaml for a list of configured linters and fixers.

To add pre-commit as a Git hook, run the following:

pre-commit install

This will run the pre-commit update prior to finalizing a local commit. This is preferred because once the commit is created locally, you will need to rebase or otherwise rewrite the commit to make adjustments if done after the fact.

Lastly, the GitLab CI/CD infrastructure runs the same pre-commit configuration on all pipelines for new MRs. The automated checks in GitLab are optional, but it is highly recommended to perform these checks locally prior to pushing new commits.

Spectrogram contours

Spectrogram processing tasks honor DJANGO_BATAI_SAVE_SPECTROGRAM_CONTOURS environment variable. Set to False by default so workers skip contour extraction (less DB storage space); set to True if you need contours in the UI (UI for contours currently disabled due to performance)

Original sample-rate spectrograms

By default (DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=true), BatBot's .origsr.jpg outputs are stored as the uncompressed and compressed spectrogram images (and related masks/waveplots). Set DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=false to use resampled images instead.

Species Suggestions by Range

The suggested species for a given location are determined by spatial data stored in /bats_ai/core/data/species-range.geojson. As part of the default migrations this data is ingested into the SpeciesRange database and used for determining suggested species based on a Recording (internal GRTS_Cell_ID and sample_frame_id). The if the same species is found multiple times in the geojson the last geometry will be used. In the future if species-ranges change the managment command of ./manage.py load_species_geojson [optional Geojson Path] can be used to reload the default species-range.geojson if no path is provided or a new one and will update/replace any previous data.

About

Bat Detection and Classification using AI and Acoustics

Resources

Stars

10 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

571 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

bats-ai

Setup

  1. Install VS Code with dev container support.
  2. Open the project in VS Code, then run Dev Containers: Reopen in Container from the Command Palette (Ctrl+Shift+P).
  3. Once the container is ready, open a terminal and run:
    ./manage.py migrate
    ./manage.py createsuperuser
    ./manage.py loaddata species

Run

Open the Run and Debug panel (Ctrl+Shift+D) and select a launch configuration:

  • Django: Server - Starts the development server at http://localhost:8000/
  • Django: Server (eager Celery) - Same, but Celery tasks run synchronously in the web process (useful for debugging task code without a worker)
  • Celery: Worker - Starts only the Celery worker
  • Django: Management Command - Pick and run any management command
  • Vite: Dev Server - Starts the frontend development server at http://localhost:8080/
  • Django + Celery + Vite - Starts the server, a Celery worker, and the frontend

Test

Run the full test suite from a terminal: tox

Auto-format code: tox -e format

Run and debug individual tests from the Testing panel (Ctrl+Shift+;).

Rebuild

After changes to the Dockerfile, Docker Compose files, or devcontainer.json, run Dev Containers: Rebuild Container from the Command Palette (Ctrl+Shift+P).

For dependency changes in pyproject.toml, just run uv sync --all-extras --all-groups.

Dev Tool Endpoints

  1. Main Site Interface http://localhost:8080/
  2. Site Administration http://localhost:8000/admin/
  3. Swagger API (These are default swagger endpoints using Django-REST) http://localhost:8000/api/docs/swagger/
  4. Django Ninja API http://localhost:8000/api/v1/docs#/
  5. MinIO (S3 local management) http://localhost:9001/browser Username: 'minioAccessKey' Password: 'minioSecretKey'

Importing Recordings

The importRecordings management command allows you to bulk import WAV files from a directory. It will:

  • Recursively search for all .wav and .WAV files in the specified directory
  • Extract GUANO metadata from each file (with filename fallback if metadata is missing)
  • Create Recording objects with the extracted metadata
  • Generate spectrograms synchronously for each recording
  • Log progress to the terminal

Usage

Basic usage with Docker Compose (with bind mount):

./manage.py importRecordings /data

With options:

./manage.py importRecordings /data \
--owner username \
--public \
--limit 10

Options:

  • directory (required): Path to directory containing WAV files
  • --owner USERNAME: Username of the owner for the recordings (defaults to first superuser)
  • --public: Make imported recordings public
  • --limit N: Limit the number of WAV files to import (useful for testing)

Code Formatting

It's recommended that you use pre-commit to provide additional linting on any commit you make. See the installation instructions for your OS/platform to install.

After you have the software installed, run pre-commit install on the command line. Now every time you commit to this project's code base the linter procedures will automatically run over the changed files.

To install the linting Python dependencies, run:

pip install -r pre-commit

To run pre-commit on files preemptively from the command line use:

 git add .
pre-commit run
# or
pre-commit run --all-files

See .pre-commit-config.yaml for a list of configured linters and fixers.

To add pre-commit as a Git hook, run the following:

pre-commit install

This will run the pre-commit update prior to finalizing a local commit. This is preferred because once the commit is created locally, you will need to rebase or otherwise rewrite the commit to make adjustments if done after the fact.

Lastly, the GitLab CI/CD infrastructure runs the same pre-commit configuration on all pipelines for new MRs. The automated checks in GitLab are optional, but it is highly recommended to perform these checks locally prior to pushing new commits.

Spectrogram contours

Spectrogram processing tasks honor DJANGO_BATAI_SAVE_SPECTROGRAM_CONTOURS environment variable. Set to False by default so workers skip contour extraction (less DB storage space); set to True if you need contours in the UI (UI for contours currently disabled due to performance)

Original sample-rate spectrograms

By default (DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=true), BatBot's .origsr.jpg outputs are stored as the uncompressed and compressed spectrogram images (and related masks/waveplots). Set DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=false to use resampled images instead.

Species Suggestions by Range

The suggested species for a given location are determined by spatial data stored in /bats_ai/core/data/species-range.geojson. As part of the default migrations this data is ingested into the SpeciesRange database and used for determining suggested species based on a Recording (internal GRTS_Cell_ID and sample_frame_id). The if the same species is found multiple times in the geojson the last geometry will be used. In the future if species-ranges change the managment command of ./manage.py load_species_geojson [optional Geojson Path] can be used to reload the default species-range.geojson if no path is provided or a new one and will update/replace any previous data.

About

Bat Detection and Classification using AI and Acoustics

Resources

Stars

10 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

571 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

bats-ai

Setup

  1. Install VS Code with dev container support.
  2. Open the project in VS Code, then run Dev Containers: Reopen in Container from the Command Palette (Ctrl+Shift+P).
  3. Once the container is ready, open a terminal and run:
    ./manage.py migrate
    ./manage.py createsuperuser
    ./manage.py loaddata species

Run

Open the Run and Debug panel (Ctrl+Shift+D) and select a launch configuration:

  • Django: Server - Starts the development server at http://localhost:8000/
  • Django: Server (eager Celery) - Same, but Celery tasks run synchronously in the web process (useful for debugging task code without a worker)
  • Celery: Worker - Starts only the Celery worker
  • Django: Management Command - Pick and run any management command
  • Vite: Dev Server - Starts the frontend development server at http://localhost:8080/
  • Django + Celery + Vite - Starts the server, a Celery worker, and the frontend

Test

Run the full test suite from a terminal: tox

Auto-format code: tox -e format

Run and debug individual tests from the Testing panel (Ctrl+Shift+;).

Rebuild

After changes to the Dockerfile, Docker Compose files, or devcontainer.json, run Dev Containers: Rebuild Container from the Command Palette (Ctrl+Shift+P).

For dependency changes in pyproject.toml, just run uv sync --all-extras --all-groups.

Dev Tool Endpoints

  1. Main Site Interface http://localhost:8080/
  2. Site Administration http://localhost:8000/admin/
  3. Swagger API (These are default swagger endpoints using Django-REST) http://localhost:8000/api/docs/swagger/
  4. Django Ninja API http://localhost:8000/api/v1/docs#/
  5. MinIO (S3 local management) http://localhost:9001/browser Username: 'minioAccessKey' Password: 'minioSecretKey'

Importing Recordings

The importRecordings management command allows you to bulk import WAV files from a directory. It will:

  • Recursively search for all .wav and .WAV files in the specified directory
  • Extract GUANO metadata from each file (with filename fallback if metadata is missing)
  • Create Recording objects with the extracted metadata
  • Generate spectrograms synchronously for each recording
  • Log progress to the terminal

Usage

Basic usage with Docker Compose (with bind mount):

./manage.py importRecordings /data

With options:

./manage.py importRecordings /data \
--owner username \
--public \
--limit 10

Options:

  • directory (required): Path to directory containing WAV files
  • --owner USERNAME: Username of the owner for the recordings (defaults to first superuser)
  • --public: Make imported recordings public
  • --limit N: Limit the number of WAV files to import (useful for testing)

Code Formatting

It's recommended that you use pre-commit to provide additional linting on any commit you make. See the installation instructions for your OS/platform to install.

After you have the software installed, run pre-commit install on the command line. Now every time you commit to this project's code base the linter procedures will automatically run over the changed files.

To install the linting Python dependencies, run:

pip install -r pre-commit

To run pre-commit on files preemptively from the command line use:

 git add .
pre-commit run
# or
pre-commit run --all-files

See .pre-commit-config.yaml for a list of configured linters and fixers.

To add pre-commit as a Git hook, run the following:

pre-commit install

This will run the pre-commit update prior to finalizing a local commit. This is preferred because once the commit is created locally, you will need to rebase or otherwise rewrite the commit to make adjustments if done after the fact.

Lastly, the GitLab CI/CD infrastructure runs the same pre-commit configuration on all pipelines for new MRs. The automated checks in GitLab are optional, but it is highly recommended to perform these checks locally prior to pushing new commits.

Spectrogram contours

Spectrogram processing tasks honor DJANGO_BATAI_SAVE_SPECTROGRAM_CONTOURS environment variable. Set to False by default so workers skip contour extraction (less DB storage space); set to True if you need contours in the UI (UI for contours currently disabled due to performance)

Original sample-rate spectrograms

By default (DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=true), BatBot's .origsr.jpg outputs are stored as the uncompressed and compressed spectrogram images (and related masks/waveplots). Set DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=false to use resampled images instead.

Species Suggestions by Range

The suggested species for a given location are determined by spatial data stored in /bats_ai/core/data/species-range.geojson. As part of the default migrations this data is ingested into the SpeciesRange database and used for determining suggested species based on a Recording (internal GRTS_Cell_ID and sample_frame_id). The if the same species is found multiple times in the geojson the last geometry will be used. In the future if species-ranges change the managment command of ./manage.py load_species_geojson [optional Geojson Path] can be used to reload the default species-range.geojson if no path is provided or a new one and will update/replace any previous data.

About

Bat Detection and Classification using AI and Acoustics

Resources

Stars

10 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

571 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

bats-ai

Setup

  1. Install VS Code with dev container support.
  2. Open the project in VS Code, then run Dev Containers: Reopen in Container from the Command Palette (Ctrl+Shift+P).
  3. Once the container is ready, open a terminal and run:
    ./manage.py migrate
    ./manage.py createsuperuser
    ./manage.py loaddata species

Run

Open the Run and Debug panel (Ctrl+Shift+D) and select a launch configuration:

  • Django: Server - Starts the development server at http://localhost:8000/
  • Django: Server (eager Celery) - Same, but Celery tasks run synchronously in the web process (useful for debugging task code without a worker)
  • Celery: Worker - Starts only the Celery worker
  • Django: Management Command - Pick and run any management command
  • Vite: Dev Server - Starts the frontend development server at http://localhost:8080/
  • Django + Celery + Vite - Starts the server, a Celery worker, and the frontend

Test

Run the full test suite from a terminal: tox

Auto-format code: tox -e format

Run and debug individual tests from the Testing panel (Ctrl+Shift+;).

Rebuild

After changes to the Dockerfile, Docker Compose files, or devcontainer.json, run Dev Containers: Rebuild Container from the Command Palette (Ctrl+Shift+P).

For dependency changes in pyproject.toml, just run uv sync --all-extras --all-groups.

Dev Tool Endpoints

  1. Main Site Interface http://localhost:8080/
  2. Site Administration http://localhost:8000/admin/
  3. Swagger API (These are default swagger endpoints using Django-REST) http://localhost:8000/api/docs/swagger/
  4. Django Ninja API http://localhost:8000/api/v1/docs#/
  5. MinIO (S3 local management) http://localhost:9001/browser Username: 'minioAccessKey' Password: 'minioSecretKey'

Importing Recordings

The importRecordings management command allows you to bulk import WAV files from a directory. It will:

  • Recursively search for all .wav and .WAV files in the specified directory
  • Extract GUANO metadata from each file (with filename fallback if metadata is missing)
  • Create Recording objects with the extracted metadata
  • Generate spectrograms synchronously for each recording
  • Log progress to the terminal

Usage

Basic usage with Docker Compose (with bind mount):

./manage.py importRecordings /data

With options:

./manage.py importRecordings /data \
--owner username \
--public \
--limit 10

Options:

  • directory (required): Path to directory containing WAV files
  • --owner USERNAME: Username of the owner for the recordings (defaults to first superuser)
  • --public: Make imported recordings public
  • --limit N: Limit the number of WAV files to import (useful for testing)

Code Formatting

It's recommended that you use pre-commit to provide additional linting on any commit you make. See the installation instructions for your OS/platform to install.

After you have the software installed, run pre-commit install on the command line. Now every time you commit to this project's code base the linter procedures will automatically run over the changed files.

To install the linting Python dependencies, run:

pip install -r pre-commit

To run pre-commit on files preemptively from the command line use:

 git add .
pre-commit run
# or
pre-commit run --all-files

See .pre-commit-config.yaml for a list of configured linters and fixers.

To add pre-commit as a Git hook, run the following:

pre-commit install

This will run the pre-commit update prior to finalizing a local commit. This is preferred because once the commit is created locally, you will need to rebase or otherwise rewrite the commit to make adjustments if done after the fact.

Lastly, the GitLab CI/CD infrastructure runs the same pre-commit configuration on all pipelines for new MRs. The automated checks in GitLab are optional, but it is highly recommended to perform these checks locally prior to pushing new commits.

Spectrogram contours

Spectrogram processing tasks honor DJANGO_BATAI_SAVE_SPECTROGRAM_CONTOURS environment variable. Set to False by default so workers skip contour extraction (less DB storage space); set to True if you need contours in the UI (UI for contours currently disabled due to performance)

Original sample-rate spectrograms

By default (DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=true), BatBot's .origsr.jpg outputs are stored as the uncompressed and compressed spectrogram images (and related masks/waveplots). Set DJANGO_BATAI_USE_ORIGINAL_SR_SPECTROGRAMS=false to use resampled images instead.

Species Suggestions by Range

The suggested species for a given location are determined by spatial data stored in /bats_ai/core/data/species-range.geojson. As part of the default migrations this data is ingested into the SpeciesRange database and used for determining suggested species based on a Recording (internal GRTS_Cell_ID and sample_frame_id). The if the same species is found multiple times in the geojson the last geometry will be used. In the future if species-ranges change the managment command of ./manage.py load_species_geojson [optional Geojson Path] can be used to reload the default species-range.geojson if no path is provided or a new one and will update/replace any previous data.

About

Bat Detection and Classification using AI and Acoustics

Resources

Stars

10 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages