Miguel Angel Nublaanddermotduffy 4fceade37c perf(grid): improve layout responsiveness and remove selection transitions (#2400)
This PR addresses performance issues in the media grid by disabling
resource-intensive CSS transitions and ensuring immediate layout
updates. Previously, the default `0.2s` transition duration for grid
reshuffling was causing browser overloads on devices with multiple live
video viewers, leading to stuttering and occasionally missing
short-lived video events.

## Changes

### 1. Disable Masonry Transitions
- Set `transitionDuration` to `0` in the Masonry configuration to
eliminate CSS-driven animations during layout.
- Set `stagger` to `0` to ensure all items move simultaneously and
instantly.
- Set `resize` to `false` in the Masonry config, as window resizing is
already efficiently handled by the controller's `ResizeObserver`.

### 2. Immediate Layout Updates
- Introduced a `_forceLayout()` method in `MediaGridController` that:
- Cancels any pending throttled layout calls to avoid redundant work.
- Triggers a browser reflow via `getBoundingClientRect()` to ensure all
element dimensions are synchronized before the next draw.
    - Forces an immediate Masonry layout.
- Integrated `_forceLayout()` into `selectCell()` and `unselectAll()` to
guarantee the grid updates at the exact moment a user interacts with it.

### 3. Test Alignment
- Updated `tests/components-lib/media-grid-controller.test.ts` to
reflect the changes.

## Performance Impact
By eliminating timed transitions, we significantly reduce the peak CPU
and GPU load during grid selection changes. This results in a much
snappier UI where video viewers snap into position instantly, preventing
the "shuttering" effect and ensuring that time-critical video playback
is not interrupted by heavy animation cycles.

---------

Co-authored-by: dermotduffy <dermot.duffy@gmail.com>
2026-03-08 20:35:52 -07:00
2026-02-21 20:39:15 -08:00
2024-09-08 19:55:48 -07:00
2023-10-31 14:06:10 -07:00
2024-06-14 19:21:55 -07:00
2026-02-21 20:39:15 -08:00
2026-02-21 20:39:15 -08:00
2026-02-21 20:39:15 -08:00
2021-08-22 16:44:48 -07:00
2024-03-27 20:55:56 -07:00

GitHub Release Build Status License HACS Sponsor

Advanced Camera Card

Advanced Camera Card

Formerly known as: Frigate Card

A comprehensive camera card for Home Assistant.

  • Live viewing of multiple cameras.
  • Clips, snapshot and review browsing via mini-gallery.
  • Automatic updating to continually show latest clip / snapshot.
  • Support for filtering events by zone and label.
  • Arbitrary entity access via menu (e.g. motion sensor access).
  • Fullscreen mode.
  • Grid or carousel/swipeable media, thumbnails and cameras.
  • Direct media downloads.
  • Lovelace visual editing.
  • Full Picture Elements support.
  • Theme friendly.

See full documentation.

S
Description
Fork of dermotduffy/advanced-camera-card - adds cameras[].media.severities so the thumbnail bar, gallery and timeline can be pinned to Frigate alerts.
Readme MIT
126 MiB
Languages
TypeScript 97.1%
SCSS 2.2%
JavaScript 0.6%