Table of Contents

Q2 2026 Release Notes

April - June 2026


New Features

  • Camera Bulk Edit & Delete: Select multiple cameras using checkboxes (including select all), then bulk edit settings (active mode, credentials, recording mode, schedule, notifications, and cloud) or delete them in one operation. A confirmation dialogue lists all affected cameras before any destructive action

Camera bulk actions - select, edit, or delete multiple cameras at once

  • File Attachments in Notes: Notes editors now support file uploads via drag & drop, paste, or the attach button for images, documents (PDF, Word, Excel, PowerPoint, CSV), and videos (up to 100MB). Attachments display as thumbnails and can be clicked to view full-size. A new management page under Settings shows all uploaded attachments, which resource they belong to, and lets you filter by status (active or orphaned) and file type to find and delete unused files

  • One-Click Camera Activation: Network devices flagged as requiring activation now show an Activate button next to their IP on the Devices page. A single click sets a secure password and sensible defaults on the camera or recorder, ready to use straight away

  • Network Tab — Static IP Assignment: Cameras with a working native API and a TetherBox running 6.14 or newer get a Network section on the API tab. Auto-Assign picks the next free address on the private 192.168.88.x network in one click, or fill any of the IP, netmask, gateway and DNS fields manually. Once applied a confirmation dialogue explains it can take up to two minutes for the camera to reboot and reconnect. The Auto-Assign button greys out (with a tooltip explanation) for cameras already on a private static network

Improvements

  • Static IP Configuration Guide: New help article explaining how to configure a static IP address on a TetherBox using its offline interface. The Internet requirements article, emergency console login article, and FAQ all link to it as the single source of truth

  • Richer Event Classification (work in progress): Events are being reorganised around fifteen meaningful categories (motion, objects, movement, clothing, behaviours, vehicle, anpr, tampering, environmental, etc.) so you can filter for exactly what you care about. Cleaner notifications (no more stutters like "Motion Detected detected"), a help page that updates automatically whenever a new event type is added, and room for new detections like PPE checks, vehicle violations and demographics

  • Device Service Filtering: Filter devices by detected service (Web, SSH, Video, VNC, Other) or by specific open ports. Service badges appear next to device names showing available interfaces at a glance

  • Private/Randomised MAC Warning on Devices: The Devices page now shows an information note explaining that smartphones and laptops with randomised MAC addresses do not appear in the list, with steps for turning the feature off on iOS and Android so a specific device can be monitored

  • Redesigned Page Loading: Cleaner page load indicator with a subtle indeterminate progress bar and branded loading overlay. Fonts load with higher priority to reduce text reflow during navigation

  • Exports Page: Exports list rebuilt with the redesigned table format, including sortable columns, search, and column visibility controls

  • Redesigned Tables: All data tables rebuilt with resizable, reorderable, and hideable columns. Preferences remembered per table. Includes search bar, column visibility toggle, and CSV/Excel export. Formatted columns (CPU usage, storage size, time durations) now sort by underlying values. Name is always the second column and bold for quick identification. Clicking a row opens the detail modal. Related links (company, user, timeline) open in modals instead of navigating away

  • Camera Avatars: Camera name columns now show a model image (where available) or colourful letter avatar, matching the user and company avatar style. Hovering a model image shows a larger preview. Avatars now also appear on the TetherBox detail page's Cameras tab and the Health page's Cameras tabs

  • Health Devices with Packet Loss: Added a name column with the connection indicator so packet loss percentage is visible at a glance

  • TetherBox Devices Tab: Reordered columns so the device name appears before Monitored, matching the layout elsewhere

  • Notes Improvements: Links and attachment images in note previews (map callouts, event popovers) now open in a new tab or full-size preview instead of navigating away. Images constrained to fit the container. Callouts no longer wait for images to load before appearing

  • Timelines Index: Added brand column with link to brand detail

  • Recording Mode Hints: Improved formatting for Active mode and Recording mode tooltips with bold labels and line breaks

  • DMS Coordinate Support: Site coordinates can now be entered in degrees-minutes-seconds format (e.g. 73°42'14.5"W) and are automatically converted to decimal

  • Faster Events, Cameras and Recordings Pages: Removed hidden per-row database lookups that accumulated on long lists, so page loads stay snappy as accounts grow

  • New TetherX AI Help Article: Single page covering on-device video AI (people, vehicles, animals with searchable attributes such as clothing colour, vehicle colour, direction of travel) and audio AI (63 distinct sound types across emergency, alarms, intrusion, vehicles, voice, animals, and weather). Explains the AI capable TetherBox requirement and how cloud backup continues to work

  • New Camera API Tab Help Article: Documents the per-camera API tab, including ONVIF and native API status badges, the Refresh Capabilities button, the Reboot Camera button (uses the manufacturer's native API where available and falls back to ONVIF SystemReboot, so it works on virtually any modern IP camera and on supported NVRs/DVRs), and the per-stream profile listing

  • Refreshed Notifications Help Article: Updated screenshots to match the current interface, added a TetherX AI section to "Reducing False Notifications", and clarified that admins now click a user's name to open the unified profile page where every field is edited inline

  • Refreshed Health Report Help Article: Added the new colour-coded report screenshots inline with the Critical Issues, Suggestions, and Stale Recordings sections so each visual sits next to the matching content

  • Calipsa and DeepAlert Documentation Moved: The TetherX knowledgebase no longer documents Calipsa and DeepAlert ML integrations, since those are now maintained externally. Both integrations remain fully supported - contact support if you need them


Bug Fixes

  • API Reference Dark Mode: The API reference page is now readable in dark mode with a light background container for the Swagger UI
  • Modal Background Scroll: Opening a modal no longer allows the page behind to scroll
  • Tooltip and Popover Formatting: Fixed missing paragraph breaks in tooltip and popover content
  • Column Selector Dropdown: The column visibility dropdown no longer clips behind the table container
  • Event Player Stall After Scrubbing: Fixed the event player getting stuck with a permanent loading bar after scrubbing forward. The player now buffers all remaining recording segments instead of only two ahead
  • Events Display Mode: The "All" display mode now correctly shows events in all states (pending, hidden, closed) on initial page load, matching the selected filter
  • Recording Download for Cloud-Backed Recordings: Fixed Access Denied errors when downloading recordings that are only stored in the cloud
  • Event Filmstrip Thumbnails: Filmstrip thumbnails now load directly from cloud storage when available, fixing missing images for older recordings no longer on the device
  • ANPR Date Filter: The ANPR page no longer crashes when an invalid date is entered in the filter, falling back to the default range instead
  • Filter Defaults: Online and Active filters now default to showing all items rather than only online or active ones, making newly added offline or inactive items visible without changing the filter
  • Timelapse and Filmstrip Images: Fixed missing images on the timelapse tab and event filmstrip for cameras with no timelapse cloud backup, a longer backup interval than five seconds, or thumbnail-only backup. The page now loads images directly from the TetherBox in those cases instead of trying a cloud copy that does not exist
  • Missing TetherBoxes on Subscriptions Page: Fixed TetherBoxes with no renewal date being absent from the Subscriptions page counts. Activations now always set a renewal date, including for replacement units inheriting from older units that predate renewal dates
  • Table Pagination Page Count: Fixed an extra page button appearing on tables that load data from the server (such as the Health page) after switching to a larger rows-per-page size. The row counter and page buttons now stay in sync with the selected page size
  • Table Height After Reload: Tables that reload with fewer rows now shrink to fit the new content instead of staying stuck at the previous taller height
  • ANPR Pagination: Fixed the ANPR page showing "0 rows" and disabling all pagination buttons despite results being present. Prev/Next buttons now work correctly for large datasets where an exact row count is not available

Internal Changes

  • MongoDB Profiler (staff-only): New /mongo page captures a window of the mongod slow-query log (local or via SSH) and produces an actionable report — index drop-candidates, mirror pairs, plan instability, in-memory sorts, collection scans, shard-key candidates, and index-declaration drift comparing live indexes against the Mongoid model declarations so changes in code that leave stale indexes behind are caught automatically
  • Reduced N+1 Queries: Swept event, camera, recording, trigger, zone, item, and permission paths to use cached associations, eager loading, and foreign-key copies — measurably fewer MongoDB round-trips on high-traffic pages
  • Index Hygiene: Removed three redundant items indexes and added new composite indexes on item_anprs and devices to serve filtered queries without collection scans
  • Device.prune_private_macs_all / Device.prune_private_macs(timeline): Class methods (mirroring the clear_old_all / clear_old naming pattern) delete Device rows with privacy-randomised MACs (locally-administered bit set on byte 0 — Apple/Android/Windows/iOS rotating MACs). Skip any device with an attached Camera or Item record so niche camera hardware that sets the bit isn't accidentally pruned. TetherBox now refuses to create these rows in the first place; this is the cloud-side cleanup for accumulated ghosts.
  • Device.clear_old_all cleanup: Removed three p debug prints, dead if camera branch (camera was guaranteed nil at that point because next if camera ran above it), and the unnecessary pluck(:id) + Device.find(device_id) two-step. Method now iterates the cursor directly, counts destroyed rows, and prints a final summary.
  • Trigger pipeline split into per-category models: Trigger is now an STI parent with Trigger::Vmd, Trigger::AiAudio, Trigger::AiVideo, Trigger::Manual and Trigger::Serial subclasses. The single Triggers::Router / Triggers::AudioProcessor / Triggers::LegacyMotionShim chain is replaced by category-specific computer services under app/services/triggers/ai/ and a unified Triggers::EventProcessor that owns the open/previous Event invariants. New doc/event-flow.md documents the four invariants (≤1 open event per device, device-owned bounds, recordings as evidence, zero gaps) and the Event.attach_or_create API.
  • Detailed Trigger records — staff toggles: Two new opt-in switches gate per-occurrence Trigger documents while the new pipeline is being rolled out — a cluster-wide toggle on /settings (Detailed Trigger Records) and a per-TetherBox toggle on the TetherBox Show → Staff tab. Both must be on for a unit's triggers to be persisted; off by default so existing customers see only category icons with zero new database load.
  • Configurable recording segment duration: TetherBoxes can be moved from the legacy 60-second rolling buffer (≈65 s lag before recordings land in the cloud Event) to 5-second low-latency segments (≈5 s lag, eliminates orphaned/empty events at the cost of more Recording rows). Set via the new Event Flow card on the TetherBox Show → Staff tab.
  • ANPR index columns split into per-column partials: Each ANPR table column (vehicle image, plate image, plate metadata, vehicle details, confidence, event) is now a dedicated _column_*.html.erb partial under app/views/item/anpr/index/, replacing one large inline cell template. No user-visible change.

Statistics

Metric Value
Commits TBD
Lines added TBD
Lines removed TBD
Net change TBD