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

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 decimalFaster 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
/mongopage 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
itemsindexes and added new composite indexes onitem_anprsanddevicesto serve filtered queries without collection scans Device.prune_private_macs_all/Device.prune_private_macs(timeline): Class methods (mirroring theclear_old_all/clear_oldnaming 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 attachedCameraorItemrecord 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_allcleanup: Removed threepdebug prints, deadif camerabranch (camera was guaranteed nil at that point becausenext if cameraran above it), and the unnecessarypluck(: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:
Triggeris now an STI parent withTrigger::Vmd,Trigger::AiAudio,Trigger::AiVideo,Trigger::ManualandTrigger::Serialsubclasses. The singleTriggers::Router/Triggers::AudioProcessor/Triggers::LegacyMotionShimchain is replaced by category-specific computer services underapp/services/triggers/ai/and a unifiedTriggers::EventProcessorthat owns the open/previous Event invariants. Newdoc/event-flow.mddocuments the four invariants (≤1 open event per device, device-owned bounds, recordings as evidence, zero gaps) and theEvent.attach_or_createAPI. - 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.erbpartial underapp/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 |