User Guide
Everything you need to know about using CollarID to track and manage your wildlife devices.
SD Card Viewer
The SD Card Viewer opens a CollarID SD card directly in your browser — no upload, no install. It parses METADATA.CSV for the timeseries sensor logs and stitches the audio and accelerometer .wav files into playable, downloadable, time-aligned recordings. Unlike the rest of the dashboard, this page is publicly accessible and works offline once it has loaded.
Opening an SD card
Two paths in, depending on your browser:
- Open SD card folder (Chrome, Edge, Brave) — pick the SD card mount; the browser reads files in place, on demand, without copying anything. This is the recommended path. The directory handle is remembered between page reloads so you can quickly reopen the same card with the "Reopen" button at the top.
- Pick METADATA.CSV (any browser, including Safari and Firefox) — drop or pick just the one CSV for the lightweight sensor-only view. Audio and accelerometer recordings need the full folder access.
Summary cards
Once a card is loaded, eight to ten cards across the top summarize what was recorded: GPS fixes, light, magnetometer, environmental, battery, particulate, activity (step count), status events, plus total hours of audio and accelerometer when the folder access path is used.
Find recordings with sound (first-pass scan)
Most collar audio is just silence — the animal asleep, no vocalizations, no distinct events. When you open an SD card folder, a prominent blue banner appears above the recordings list with a single button: 🔍 Scan all N recordings. Click it and the viewer runs a fast, local scan over every audio recording on the card and tags each one as silent or as having sustained sound. Recordings with no sound get a 🔇 silent badge; ones with biological calls, vocalizations, or other distinct events get 🎵 active or ⚡ event, plus a thin timeline strip underneath showing where in the recording the sound is so you can scrub straight to it.
The scan runs in parallel on as many CPU cores as your laptop has (capped at 8), so a card with hundreds of recordings finishes in a couple of minutes. Your tab stays responsive while it runs — click the button to cancel mid-scan, and previously-scanned recordings are saved as you go. The button collapses to a green status strip when complete (e.g., "✓ 47 recordings scanned — 12 have sustained sound") with a small ↻ Re-scan option if you ever want to re-run.
Results are remembered per SD-card folder, so reopening the same card later restores all badges instantly — no need to scan again.
This is a first-pass filter, not a classifier — it tells you which recordings have something worth listening to, not what. The semantic-classification layer is the next step (see Categorize sounds).
How the scan flags a frame — DSP details
A 1024-sample window slides over the PCM and computes three features per frame: short-time RMS energy, spectral flux (frame-to-frame change in spectrum shape), and spectral entropy (whether the energy is concentrated at a few frequencies or spread broadly). A frame is flagged when its RMS rises ~10 dB above the recording's quiet baseline and its spectral entropy is low — i.e. structured, tonal, or transient content. Wind, friction, and other broadband noise have high entropy and get suppressed even when loud. A recording is marked as having sound when at least one continuous run of active frames lasts a full second; longer or denser activity bumps it to event.
Categorize sounds (Stage 2 — YAMNet classifier)
Once Stage 1 has flagged the recordings with sound, a second blue banner offers 🔬 Categorize sounds. Click it and the viewer runs Google's YAMNet audio classifier (521 sound categories — birds, mammals, insects, rain, wind, vehicles, speech, music, etc.) over every active recording locally on your machine. The model weights (~17 MB) download from a CDN the first time and cache in your browser; audio itself never leaves the page. TensorFlow.js automatically picks WebGPU when available (Chrome / Edge / Brave on modern hardware) and falls back to WebGL or CPU.
Each classified recording grows a row of category badges below its timestamp:
- 🐾 Biological — bird, mammal, insect, amphibian vocalizations.
- 🌧 Natural — wind, rain, water, thunder, fire.
- 🚗 Anthropogenic — vehicles, machinery, speech, music, gunshots.
- 🔇 Silent — surfaced as a muted context badge when the recording is dominantly silent (Stage 2 still shows what was happening during the brief non-silent fraction).
- ❓ Other — labels that don't fit the four buckets above.
Up to 5 non-silence labels appear per recording, ranked by a combined score (mean over non-silent frames, or single-frame peak — whichever is higher). When a class peaks much higher than its mean, the badge shows the peak number with an up-arrow (e.g. 🐾 Howl ↑ 80%) so brief events like a several-second howl in a mostly-quiet recording still surface. The badge tooltip lists the sustained mean, the peak score, and the local times where each interval fired.
Click any badge to seek the audio player to that class's strongest interval. Translucent category-colored rectangles appear on the activity strip showing every time-range where the class fired (peak-stitched with a 2-frame gap bridge so a momentary dip doesn't split one event). Click again to clear.
Heart-sound false positives are filtered — why
YAMNet's "Heart sounds, heartbeat" and "Heart murmur" classes were trained on stethoscope audio and reliably fire on mechanical impulse noise from the collar housing (taps, ring-rub, mount creak). An animal's actual heartbeat can't reach the mic through the housing, so any such hit is guaranteed to be a false positive. Those classes are excluded from the candidate list, category scoring, and CSV exports.
Post-process & store in folder
Once a folder is open via Open SD card folder (the File System Access path — Chrome, Edge, Brave), a prominent 🗂️ Post-process & store in folder button appears above the recordings list. Click it and the viewer requests write permission on the folder you opened (one-time prompt), then writes a complete ecology-ready derivation of the card into a post_process/ subdirectory. Re-runnable; each file is written atomically (.tmp sibling + rename) so a crash mid-write never corrupts the previous output.
Files written into post_process/
- README.md — generated each run; lists every other file, units, source card name, deployment timezone, generation timestamp, and per-section counts. Read this first.
- gps.csv — every GPS fix with epoch_utc, datetime_utc_iso, datetime_local_iso, tz, lat, lon, alt_m, h_acc_m, fix_type, fix_time_s. General-purpose tabular GPS.
- gps.gpx — same fixes in GPX 1.1 format (the universal interchange format for wildlife movement data — works with QGIS, ArcGIS, Garmin, R's move and sf packages, and Movebank's upload pipeline).
- gps_movebank.csv — Movebank-compatible CSV using Movebank's canonical column names (timestamp, location-lat, location-long, height-above-mean-sea-level, gps:fix-type-raw, gps:hdop, individual-local-identifier). Imports directly into a Movebank study without renaming. The individual-local-identifier defaults to the source card name — rename in your study if you have a per-animal ID scheme.
- environmental.csv — long-format sensor log with one row per reading. Columns: epoch_utc, datetime_utc_iso, datetime_local_iso, sensor, variable, value, unit. Covers light (clear count + lux), magnetometer (µT), the BME688 environment sensor (temperature in °C, humidity in % RH, pressure in Pa, gas sensor resistance in Ω), battery (V), particulate (µg/m³), and step counts. Pivot to wide in pandas with df.pivot_table(index='epoch_utc', columns=['sensor','variable'], values='value').
- status.csv — firmware status / event log with category + message.
- accel_metrics.csv — per-second VeDBA, ODBA, pitch, and roll computed from raw accelerometer WAVs across every accel session on the card. VeDBA / ODBA reported in G (1 G = 9.81 m/s²) using the accelerometer range from CONFIG.CSV. Pitch & roll in degrees from the gravity component of each axis.
- microphone_index.csv — one row per audio recording, joined with whatever Stage 1 and Stage 2 results have been computed in the browser. Includes severity, category, top non-silence class + peak score, and the detector versions used. Treat this as the index of "what's interesting in each recording."
Portable analysis cache
The post-process pipeline also mirrors your scan results to a post_process/cache/ subdirectory. When the same folder is opened on a different computer or browser, the viewer restores the analysis silently — so a colleague who plugs in the card after you doesn't have to re-run Stage 2, and any spectrogram you've already rendered shows up instantly.
Cache file layout & versioning — for developers
Inside cache/:
- manifest.json — schema version, generation timestamp, source card name, deployment timezone, detector versions, and per-section counts.
- stage1.json + stage1_timelines/<file>.bin — Stage 1 activity summaries plus uint8-quantized per-frame timelines (~180 KB per hour; divide each byte by 255 to recover the [0, 1] Float32 value).
- stage2.json — YAMNet results keyed by audio path.
- spectrograms/<file>.png — PNG copies of any rendered spectrograms. Lossless, so an import on a different machine matches pixel-for-pixel.
Each entry carries detectorVersion / renderVersion fields. Stale cache entries from older detectors are ignored automatically and a fresh scan is requested. Local IndexedDB results always win over folder-cache rows. Re-running post-process rewrites everything in cache/ atomically.
Export analysis (CSV)
Above the recordings list, the ↓ Export analysis ▾ dropdown produces three CSVs — each row links back to its source WAV path and carries both UTC and deployment-local timestamps, ready to drop into pandas, R, or QGIS without timezone math:
- Activity (Stage 1) CSV — one row per recording with severity, active fraction, longest sustained run, impulse-rejection count, and the analysis timestamp.
- Classifier summary (Stage 2) CSV — one row per recording with the overall category, non-silence fraction, and the top-5 detected labels (each with mean + peak score + category).
- Classifier intervals (Stage 2) CSV — one row per detected event. Each row is class × time range with start / end / peak in both recording-relative seconds and absolute ISO datetimes. Sorted chronologically so the file reads like a detection journal.
Recordings panel
Audio and accelerometer files are grouped into sessions: any files that share the same RTC second in their filename (the firmware's intra-second collision suffix _1, _2) are treated as one logical recording and stitched back together on playback / download.
- Day groups. Sessions are bucketed by their local-timezone date (the timezone is inferred from your first GPS fix). Each day starts collapsed; click the row to expand. Use Expand all / Collapse all when scanning months of data.
- Fragment badges. Multi-file sessions get a colored N parts · cause badge, with the cause inferred from the status log within ±10 s of the session start: red = fault, blue = boot, yellow = schedule, purple = other, grey = unknown. Hover the badge for the raw matching log lines.
- Unsynced data. Recordings whose RTC timestamp predates 2026 are routed into a separate Unsynced data group at the bottom — these were written before the GPS got a first fix and have unreliable wall-clock times. The audio and accel inside is still valid; only the timestamps are not.
Audio playback & downloads
Each audio session has five buttons:
▶ Play
In-browser playback through Web Audio with a +27 dB boost and soft limiter. Firmware mic recordings are quiet on purpose (large electrical headroom for biological events); the boost is roughly 22× louder so faint sounds are audible without loud peaks clipping into a wall.
🏃 Activity
Toggles an inline panel showing what the accelerometer was recording during this exact audio session — VeDBA & ODBA in one chart, pitch & roll in another, aligned to the mic timeline. Useful when listening to a recording: you can see whether the animal was at rest, walking, or in a particular posture during a sound of interest. Greyed out when no accel recording overlaps the audio session.
↓ WAV
The raw stitched firmware audio, unmodified. Use this for any analysis pipeline that applies its own gain or expects unmodified PCM.
↓ Boosted WAV
Same audio, but with the +27 dB gain and limiter baked in so the level matches the in-browser player when you open the file in Audacity, Raven, ffmpeg, or any other tool. Filename gets a _+27dB.wav suffix.
📦 Synced bundle
See the next section. Greyed out when no accelerometer recording overlaps the audio session.
Synced bundle (audio + accelerometer + GPS)
The collar's microphone runs on a schedule; the accelerometer is recording continuously. The Synced bundle button on an audio row pulls in every accelerometer file that overlaps that audio session (often more than one, since a single audio recording can straddle the boundary between two accel files) and assembles a single ZIP with everything time-aligned to the microphone:
- recording_synced.wav — a 4-channel WAV at the audio sample rate. Channel 1 is the microphone audio, unchanged. Channels 2, 3, 4 are the accelerometer X, Y, Z, sample-and-held from their native rate (typically 25 Hz) up to the audio rate. Opens directly in Audacity, Raven Pro, Praat, or any DAW — microphone waveform on top, three accel axes below it, aligned in time.
- session.json — machine-readable manifest: start epochs, durations, sample rates, SD card paths, the configured accelerometer G-range (read from CONFIG.CSV), the accel-minus-mic start offset, and how many audio samples ended up without accelerometer coverage.
- gps.csv — any GPS fixes from METADATA.CSV within ±5 minutes of the audio session, so you can interpolate the collar's likely position during the recording.
- README.txt — a human-readable summary of the above, plus all the caveats below.
Alignment caveats & accelerometer units — upsampling, phase, gaps, G-range
Sample-and-hold. Each accel sample is repeated until the next one arrives — original measurements are preserved exactly at native sample times. Treat any content above (accel rate / 2) Hz on channels 2-4 as a stair-step artifact, not motion.
Phase shift. The mic is the time reference. A small phase shift between mic and accelerometer may exist because they're captured by separate subsystems — coarse alignment is reliable, sample-precise alignment is not guaranteed.
Gaps. When the firmware closes one accel file and opens the next, channels 2-4 are zero-filled for those samples; the audio channel is never altered. The exact zero-filled sample count is in session.json and the README.
Units. When CONFIG.CSV is present, the BMA400's configured G-range (±2 / ±4 / ±8 G) ships in the bundle so you can convert int16 → G with G = int16 × (range / 32767). Without CONFIG.CSV the bundle says so and leaves the conversion to you.
Accelerometer preview
On the Accelerometer tab, each session has a 📊 Preview button. It computes two charts on demand from the stitched PCM, using the standard ecology metrics for dynamic body acceleration:
- Activity — VeDBA & ODBA, two traces on one chart, computed
after gravity has been estimated and removed:
- Per-axis gravity is estimated as a centered 2-second running mean of each raw axis (the slow, postural component). Subtracting it from the raw sample gives the dynamic acceleration on each axis d_x, d_y, d_z.
- VeDBA (Vectorial Dynamic Body Acceleration) = mean(√(d_x² + d_y² + d_z²)) over the chart's sample window. Orientation-robust; the modern de facto standard (Gleiss et al. 2011).
- ODBA (Overall Dynamic Body Acceleration) = mean(|d_x| + |d_y| + |d_z|) over the same window. The long-standing index from Wilson et al. 2006 — included alongside VeDBA for compatibility with the older energy-expenditure literature.
- Posture — pitch and roll in degrees derived from the per-window mean of the gravity vector. Scale-invariant, so it works even without CONFIG.CSV. Useful for distinguishing lying-on-side / standing / head-down (eating) even when the animal isn't moving much.
GPS exports
The ↓ Download GPS menu on the GPS Track section offers five formats:
CSV
All columns — epoch, datetime, lat, lon, altitude, accuracy, fix type, fix time. Compatible with Excel, pandas, R, anything.
GPX
XML track format. Opens in Google Earth, Garmin BaseCamp, QGIS, Strava, every hiking app. Best for general GPS sharing.
KMZ
Zipped KML. Open directly in Google Earth to visualize the track on satellite imagery — no other software needed.
GeoJSON
Modern GIS standard. Loads in one line in QGIS, ArcGIS, GeoPandas, sf (R).
Movebank CSV
Pre-formatted with Movebank's column names (timestamp, location-long, location-lat, etc.) for direct upload to movebank.org studies. Rename the individual-local-identifier column to your animal ID before uploading.
Periodic clicks in the microphone audio
Recordings may contain faint, regularly-spaced ticks (single-sample spikes in Audacity). These are not biological events — they come from the SD card's write activity tugging on the mic preamp's power rail, so they appear only when the device is actively writing.
How to remove them
If downstream analysis is sensitive to impulse noise, a simple amplitude threshold or short-window median filter (1–3 sample width) in Audacity, Raven, or a small Python/R script removes them cleanly without affecting acoustic content.
Analytics
The Analytics page is a deployment-level lens on the same SD card. Where the SD Card Viewer shows recordings one row at a time, Analytics plots every recording on a map (interpolated to the GPS track at each recording's midpoint). It reads the same Stage 1 / Stage 2 results out of your browser's IndexedDB, so any scan you've already run in the SD Card Viewer carries over here automatically — and vice versa.
Map & markers
Each audio recording is plotted as a circle at its midpoint location. Markers are colored by what the recording contains rather than by raw activity:
- 🐾 Biological — green
- 🌧 Natural — blue
- 🚗 Anthropogenic — red
- 🔇 Silent — grey
- ❓ Other — purple
- ⏳ Not classified yet — amber (Stage 1 saw activity, Stage 2 hasn't run)
- · Not scanned — dark slate (no scan run yet)
Marker size encodes recording duration; a red halo highlights statistical anomalies (recordings whose Stage 1 activity is unusually high for that hour of day, modified z-score > 3.5 with median + MAD).
Filters (floating legend)
The legend pinned to the top-right of the map is interactive:
- Filter by category. Checkboxes toggle each category on/off with live event counts per bucket. "All cats" / "No cats" reset everything.
- GPS layers. The Movement track polyline is off by default — when the collar is stationary, GPS noise turns it into a tangle. Toggle it on if useful, and pick a Min segment threshold (off / 5 / 10 / 25 / 50 / 100 m) to subsample sub-noise-floor jumps out of the line. GPS fix points shows each individual fix as a small dot.
Above the map, a class filter input narrows the map AND the diurnal chart to recordings/events whose top-5 contains a matching YAMNet label. Useful for questions like "where on the deployment did 'howl' fire?"
Scope & scans
A scope dropdown (Newest day / Last 7 days / Last 30 days / All) drives both Stage 1 and Stage 2 scans so long deployments don't have to scan every recording on every visit. Two banners appear in sequence:
- 🔍 Scan recordings — runs Stage 1 (activity detection) over the scoped slice. Same fast local DSP as the SD Card Viewer; results land in IndexedDB.
- 🔬 Categorize sounds — runs Stage 2 (YAMNet) on the active recordings in scope. Same model and resource-intensity caveat as the viewer (capable GPU strongly recommended). Live-updates marker colors, category counts, the diurnal chart, and any open side panel as each result lands.
Side panel
Clicking a marker slides in a panel from the right showing the recording's local time, Stage 1 activity numbers + anomaly flag, the recording's top-5 detected sounds with peak indicators + per-class hit bars + peak-time chips, GPS coordinates, and in-page audio playback (with the same +27 dB boost as the SD Card Viewer). A link jumps to the same recording in the SD Card Viewer for the full feature set (synced bundle, accelerometer overlays, etc.).
Diurnal pattern
Below the map, a "Diurnal pattern" panel plots when during the local day each category fired. One row per category, 24 hourly bars, height scaled across the whole chart so the rows are directly comparable. Counts come from peak-stitched Stage 2 intervals, so a single howl event counts once — not once per audio frame. Honours the scope, category filter, and class filter, so you can drill from "all activity" down to "howls in the last 7 days" and see the time-of-day distribution.
Spectrogram (side panel)
Below the inline audio player in the side panel, a 📊 Show spectrogram button computes a frequency-vs-time spectrogram for the selected recording. The X axis is time, the Y axis is log-scaled frequency from 100 Hz to 8 kHz (the firmware mic's full bandwidth), and color encodes magnitude on a viridis ramp — dark = quiet, yellow = loud. Click anywhere on the spectrogram to seek the player to that time. An amber playhead line tracks playback in real time. Same +27 dB boost as playback so what you see matches what you hear. Computed on demand because STFT over an hour-long recording is real work — expect a few seconds of progress before the canvas paints.
Top detection events
Below the diurnal chart, a table lists the strongest Stage 2 detection events across the whole deployment — sorted by peak confidence, capped at 30 rows. Each row shows the local time, category, class, peak percent, and event duration. Click any row to fly the map to that recording and open its side panel. Honours the scope, category filter, and class filter — narrow to "Last 7 days" + "biological" and you get the strongest 30 biological detections from the recent week.
Anomalies (sortable list)
Recordings whose Stage 1 activity is unusually high for that hour of day (modified z-score ≥ 3.5 using median + MAD) now show up as a sortable table. Each row carries the local time, severity, z-score, baseline-multiple, and the hour bin. The sort dropdown lets you re-rank by strongest first, largest multiple of baseline, newest first, or oldest first. Clicking a row opens the side panel for that marker and recenters the map on it.
Activity heatmap (map layer)
For deployments with hundreds of recordings stacking on the same location, individual markers can become hard to read. The GPS layers section of the floating legend has an Activity heatmap toggle that overlays a density layer weighted by Stage 1 activity — transparent → blue → amber → red as activity concentration rises. Off by default; turn it on when you want a deployment-wide density view.
Export (CSV with GPS)
The same three CSVs available in the SD Card Viewer are reachable from the ↓ Export ▾ dropdown — with one addition: every row carries interpolated lat / lon at the recording's midpoint (or, for interval rows, at each event's peak time). The intervals CSV drops straight into QGIS as point geometry, with one feature per detected sound event.
Live Map
The map is the main interface for monitoring your devices in real time. Devices appear as colored dots that update via a live WebSocket connection.
Device Markers
- Green = seen in the last 60 seconds
- Amber = seen in the last 5 minutes
- Red = not seen for more than 5 minutes
Click a marker to open its popup with GPS coordinates, signal info, weather, and quick links to history, notes, alerts, and more.
Sidebar
The left panel lists all your devices with battery levels, coordinates, signal strength, and quick-access buttons:
- stats — Dashboard with daily fix count, distance traveled, and uptime
- config — View the device's ChirpStack LoRaWAN configuration (DevEUI, keys, region)
- cmds — Send raw hex downlink commands to the device
- history — Open the telemetry history table and track visualization
- notes — Add and view field notes for the device
Click the pencil icon next to a device name to rename it. Click the emoji to set a custom avatar.
Map Controls
Map Style
Cycle between Dark, Satellite, and Terrain (OpenTopoMap) views using the style button in the top-right corner of the map.
Heatmap
Toggle a density heatmap overlay showing where your devices have been concentrated.
Distance Measurement
Click the ruler tool, then click points on the map to measure distances between locations. Double-click to finish.
Marker Clustering
When zoomed out, nearby devices are automatically grouped into clusters showing the count. Click a cluster to zoom in.
Refresh Interval
Use the dropdown next to the connection status indicator to control how often the sidebar and marker colors refresh: 5s, 15s (default), 30s, 60s, or Off. Device data still arrives in real time via WebSocket regardless of this setting.
Tags & Filtering
Organize devices by adding tags (e.g., "herd-A", "north-field"). Tags are stored locally in your browser.
- Click the + button on a device card to add a tag
- Click an existing tag to remove it
- Use the tag filter bar at the top of the sidebar to show only devices matching a specific tag
- Tag filtering also applies to map markers and clusters — non-matching devices are hidden on the map
History & Tracks
Click history on any device to open the telemetry table. Use the time range presets (24h, 3d, 7d, 30d, All) or set a custom date range.
- Show Track — Draws the device's GPS path on the map. Night segments are colored indigo, daytime segments are blue.
- Home Range — Choose between Convex Hull (simple bounding polygon) or KDE (kernel density estimation with 50%/75%/95% contours).
- Clear HR — Removes the home range visualization from the map.
- CSV — Export the current history data as a CSV file (client-side).
- GPX — Export GPS track points as a GPX file (server-side, suitable for GIS software).
Toggle subsystem columns (GPS, Environment, LoRa, Activity, etc.) using the row of buttons above the table.
Geofences
Define geographic boundaries and get notified when devices cross them.
- Open the Geofences panel at the bottom of the sidebar
- Click + New to start drawing — click on the map to add points, double-click to close the polygon
- Name your geofence (e.g., "North Pasture") and save
- When a device enters or exits a geofence, you receive:
- A real-time banner notification on the map
- An email alert (if enabled in Account Settings)
- A webhook POST (if configured)
- Click a geofence on the map to edit or delete it
- Geofence updates are automatically synced to your devices via LoRaWAN downlink
Alerts
Set up alerts for individual devices to monitor battery levels and connectivity:
- Click a device marker on the map, then click Alerts in the popup
- Battery Low — Set a percentage threshold (e.g., 20%). You'll be notified when the device drops below it (max once per hour).
- Offline — Set a duration threshold. You'll be notified if the device hasn't reported in.
Alerts are delivered via WebSocket (in-app), email, and webhook — depending on your Account Settings.
Field Notes
Attach text notes to any device for field observations, maintenance logs, or other records.
- Click notes on a device card in the sidebar, or click Notes in the marker popup
- Notes include a timestamp and are stored on the server
- Delete individual notes with the trash button
Webhook Notifications
Receive real-time JSON POST notifications to an external URL (Slack, Discord, custom server, etc.).
- Open Account Settings (the key icon at the bottom of the sidebar)
- Enter your webhook URL in the Webhook URL field
- All geofence and battery alerts will be POSTed as JSON
- Slack-compatible: the payload includes a
textfield for automatic rendering
Example payload:
{
"type": "geofence_alert",
"event": "ENTERED",
"device_uid": "0x0024000D",
"display_name": "Bella",
"fence_name": "North Pasture",
"message": "Bella entered geofence 'North Pasture'",
"text": "Bella entered geofence 'North Pasture'"
}
Data Export
Per-Device Export
- CSV — Exports all visible telemetry columns from the history table. Generated client-side.
- GPX — Exports GPS track points in standard GPX format. Generated server-side for the selected time range.
Both are available from the history panel toolbar when viewing a device's history.
Bulk Export
Export data for all your devices at once from the Cloud Data page:
- ZIP of CSVs — Downloads a ZIP file containing one CSV per device with all telemetry data.
- GeoJSON — Downloads a single GeoJSON FeatureCollection with all device points, suitable for GIS tools like QGIS.
Notes Download
In the Notes modal for any device, click the download button to save all notes as a .txt file.
Keyboard Shortcuts
Use these shortcuts on the Live Map page for faster navigation:
- Esc — Close the topmost modal or overlay
- / — Focus the device search box in the sidebar
- N — Select the next device in the list
- P — Select the previous device in the list
Shortcuts are disabled when typing in input fields or text areas.
Organizations
Organizations let multiple users share devices and geofences. When your account belongs to an org:
- You see all devices assigned to your organization, in addition to your own
- Geofences created by any org member are visible to all members
- Real-time WebSocket updates include org-shared devices automatically
Organization membership and device assignments are managed by your admin in the Admin Panel under the Orgs tab.
Mobile
On mobile devices, the sidebar appears as a bottom sheet that you can swipe up and down:
- A drag handle is visible at the bottom of the screen — tap or swipe up to open the device list
- Swipe down to minimize it back to the handle
- The map remains fully interactive underneath
Model credits & licenses
The audio analysis pipeline on this site uses two third-party machine-learning models. Both run entirely in your browser; audio never leaves your machine. Please respect the licenses below if you redistribute or build on this work.
Stage 2 — YAMNet (sound categorization)
YAMNet is a 521-class audio event classifier trained on AudioSet by Manoj Plakal and Dan Ellis at Google Research. Released under the Apache License 2.0.
- Paper / repo: tensorflow/models · research/audioset/yamnet
- Model card: Kaggle · google/yamnet
- License: Apache 2.0 — permissive; commercial use allowed.
Account Settings
Click the key icon at the bottom of the sidebar to manage your account:
- Change password — Requires your current password
- Email address — Used for alert notifications
- Email alerts — Toggle email delivery for geofence enter/exit events
- Webhook URL — Set a URL to receive JSON alert notifications