Commit Graph
100 Commits
Author SHA1 Message Date
Dermot Duffy f18e4cd4b8 refactor: Unify substream actions into substream_{on,off} (#2497)
## Summary

- Collapse `live_substream_{on,off,select}` into a unified
`substream_{on,off}` pair, symmetric with `call_{start,end}`.
- Rename the `camera` field on the former `live_substream_select` to
`stream` (it always was a stream ID).
- Add optional `camera` field to both new actions for targeting a
non-selected base camera.
- YAML configs are migrated automatically; URL bookmarks must be updated
by hand.

## Migration

### Cycling between camera and substream (toggle button)

Before:
```yaml
tap_action:
  action: custom:advanced-camera-card-action
  advanced_camera_card_action: live_substream_on
```

After:
```yaml
tap_action:
  action: custom:advanced-camera-card-action
  advanced_camera_card_action: substream_on
```

### Selecting a specific substream

Before:
```yaml
tap_action:
  action: custom:advanced-camera-card-action
  advanced_camera_card_action: live_substream_select
  camera: camera.front_door_hd
```

After:
```yaml
tap_action:
  action: custom:advanced-camera-card-action
  advanced_camera_card_action: substream_on
  stream: camera.front_door_hd
```

### Turning the substream off

Before:
```yaml
tap_action:
  action: custom:advanced-camera-card-action
  advanced_camera_card_action: live_substream_off
```

After:
```yaml
tap_action:
  action: custom:advanced-camera-card-action
  advanced_camera_card_action: substream_off
```

### URL querystrings (manual update required)

| Before | After |
| --- | --- |
|
`?advanced-camera-card-action.live_substream_select=camera.front_door_hd`
| `?advanced-camera-card-action.substream_on=camera.front_door_hd` |
2026-06-30 17:45:13 -07:00
Dermot Duffy 15e335a647 feat: Add support for inbound "calls" from triggers (#2500) 2026-06-30 17:45:13 -07:00
Dermot Duffy f4c686c298 chore: Allow parallel rollup instances (#2499) 2026-06-30 17:45:13 -07:00
Dermot Duffy 04059920bb chore: Don't use rollup serving by default (#2495) 2026-06-30 17:45:13 -07:00
Dermot Duffy 48761f0478 refactor: Use toggleAttribute natively where possible (#2494) 2026-06-30 17:45:13 -07:00
Dermot Duffy 2acec49b29 refactor: Clone context when a view is cloned (#2493) 2026-06-30 17:45:13 -07:00
Dermot Duffy 3f0d2ef14d chore: Add worktree deployment support (#2491) 2026-06-30 17:45:13 -07:00
Dermot Duffy f21a46297a fix: Improve visual styling for transmitting/triggering (#2490) 2026-06-30 17:45:13 -07:00
Dermot Duffy 090138a01e fix: Lock the grid when the UI is locked (#2489) 2026-06-30 17:45:13 -07:00
Dermot Duffy 881ba51e9f feat: Escape ends calls (#2488) 2026-06-30 17:45:13 -07:00
Dermot Duffy 9b750953ae fix: Lock thumbnails and timeline when UX is locked for calls (#2487) 2026-06-30 17:45:13 -07:00
Dermot Duffy abcba884e5 feat: Add 'call' support to improve 2-way audio experience (#2486)
Draws significant inspiration (and direct styling) from
https://github.com/dermotduffy/advanced-camera-card/pull/2447 . Thank
you @Maudfer !

BREAKING CHANGE:

The microphone condition previously bundled two unrelated signals —
whether a two-way-audio session was connected and whether the microphone
was muted. Connection state is now its own dedicated call condition, and
microphone is reserved purely for mute state. Configs are upgraded
automatically (the card rewrites affected conditions under overrides,
elements, and automations). If you maintain config by hand, convert as
follows:

If you only used connected:

# Before
```yaml
condition: microphone
connected: true
```

# After
```yaml
condition: call
call: true
```
If you used both connected and muted — they must be split into two
conditions, since they no longer live together:

# Before
```yaml
condition: microphone
connected: true
muted: false
```

# After
```yaml
condition: and
conditions:
  - condition: call
    call: true
  - condition: microphone
    muted: false
```
2026-06-30 17:45:13 -07:00
Dermot Duffy be7e7d79dc feat: Add UI optional UI locking when microphone is hot (#2484) 2026-06-30 17:45:12 -07:00
Dermot Duffy 9a763db1f3 fix: Avoid go2rtc renegotiation on camera selection change (#2483) 2026-06-30 17:45:12 -07:00
Dermot Duffy a68b665f03 feat: Add live.microphone.auto_mute / auto_unmute (#2482) 2026-06-30 17:45:12 -07:00
Dermot Duffy 9eb503deff feat: Add casting capability to user_agent condition (#2480) 2026-06-30 17:45:12 -07:00
Dermot Duffy 261a7e1a92 feat: Auto-resolve Frigate client_id from camera entity (#2475)
Credit goes to @Eduardo-Jaramillo for the inspiration and contribution
of https://github.com/dermotduffy/advanced-camera-card/pull/2474 .
2026-06-30 17:45:12 -07:00
Dermot Duffy 9d088d7bcb fix: Add support for synchronously reseting go2rtc sessions (#2478)
This is part 1 of
https://docs.google.com/document/d/1zbHYWqulEUaNLeX0fK3rfIiLugMlCQo_SFg3hcgiRRw/edit?tab=t.0
.

There is a significant chance this will improve issues people have been
experiencing with poorly designed doorbells that can only open a single
stream at a time.
2026-06-30 17:45:12 -07:00
Dermot Duffy 31d0c9322f fix: Always respect the returned MIME type (#2473)
- Closes #2449
2026-06-30 17:45:12 -07:00
Dermot Duffy 591f466b92 fix: Render sub-labels for Frigate reviews (#2468)
- Closes: #2438
2026-06-30 17:45:12 -07:00
Dermot Duffy 056a038e81 fix: Improve folder icon rendering (#2467) 2026-06-30 17:45:12 -07:00
Dermot Duffy d8ad347dfa fix: Preload should reliably preload initial load (#2466) 2026-06-30 17:45:12 -07:00
Dermot Duffy bc366626f1 refactor: Refactor media loading manager for improved robustness (#2464) 2026-06-30 17:45:12 -07:00
Dermot Duffy 47bcce93d3 feat: Add hardened error handling and retries (#2451)
- Closes #1830
 - Closes #2099
2026-06-30 17:45:12 -07:00
Dermot Duffy 4bc787e2b7 chore: Compress AI instructions (#2434) 2026-06-30 17:45:12 -07:00
Dermot Duffy eb72a97fb7 fix: Various tiny fixes/improvements (#2433) 2026-06-30 17:45:12 -07:00
Dermot Duffy 31f13f40cf fix: Remove unused localization keys (#2432) 2026-06-30 17:45:12 -07:00
Dermot Duffy a1202e8b8f fix: Improve en strings (#2431) 2026-06-30 17:45:12 -07:00
Dermot Duffy e2cceb55c8 feat: Updated screensaver image mode fetches random images (#2430)
BREAKING CHANGE: The `screensaver` image mode now shows a random image
from [picsum.photos](picsum.photos) instead of the embedded default
image. If you previously set `image.mode: screensaver`, change it to
`image.mode: default` to restore the previous behavior.
2026-06-30 17:45:12 -07:00
Dermot Duffy 9535bb8aa0 fix: Don't detect audio from stale webrtc connection (#2429)
- Closes: #2417
2026-06-30 17:45:12 -07:00
Dermot Duffy 55732ead1d fix: Don't allow gallery to scroll horizontally (#2428)
- Closes: #2424
2026-06-30 17:45:12 -07:00
Dermot Duffy 1cd5520154 feat: Add proxying support for images (#2427)
- Closes #2418
2026-06-30 17:45:12 -07:00
Dermot Duffy 9384785d37 test: Further improve test coverage (#2422) 2026-06-30 17:45:12 -07:00
Dermot Duffy 050c2f7c1a test: Add tests for localization (#2421) 2026-06-30 17:45:12 -07:00
Dermot Duffy 62fe65556e test: Expand testing to cover 100% of camera manager files (#2420) 2026-06-30 17:45:12 -07:00
Dermot Duffy abf1d8defe test: Add full testing for the frigate engine (#2419) 2026-06-30 17:45:12 -07:00
Dermot Duffy 415a3e0886 test: Improve test coverage of various camera engine files (#2415) 2026-06-30 17:45:12 -07:00
Dermot Duffy 16ca8d79d2 fix: Log problems to the console as warnings (once) (#2414) 2026-06-30 17:45:12 -07:00
Dermot DuffyandYannik Lieblinger 3f5a35c7f6 fix: prevent infinite resize loop in media grid Masonry layout (#2413)
- Credit to @lieblinger.

---------

Co-authored-by: Yannik Lieblinger <yannik@lieblinger.de>
2026-06-30 17:44:49 -07:00
Dermot Duffy ab683df5e8 feat: add problem detection framework for common problems (#2412)
Introduces a ProblemManager that detects and surfaces actionable issues
(stale config, legacy frigate-hass-card resources, slow/failed streams)
via status bar indicators and notification popups with fix actions.
2026-03-13 20:00:59 -07:00
Dermot Duffy 95faddd9a0 fix: Add support for Reolink number based zooming (#2408)
- Closes #2034
2026-03-13 19:55:27 -07:00
Dermot Duffy ebe6b2f8c6 fix: Status actions should not be clickable when status bar is hidden (#2406) 2026-03-08 21:00:54 -07:00
Dermot Duffy ae90b1ec1f chore: Merge main changes into dev (no-op) (#2405) 2026-03-08 20:47:06 -07:00
Dermot Duffy ae8b1134c9 fix: Don't show presets menu when there's a single preset (#2404)
- Closes: #2398
2026-03-08 12:55:01 -07:00
Dermot Duffy 6c46e36a87 docs: Improve doc interlinking (#2402) 2026-03-07 21:35:27 -08:00
Dermot Duffy 24c6b98948 feat: Allow user generated notifications (#2401) 2026-03-07 20:47:24 -08:00
Dermot Duffy 1d81e03b04 fix: Should faithfully use WebRTC card PTZ format data_* (#2396)
- Closes: #2385


BREAKING CHANGE: Requires configuration change (automatic upgrade
offered) to move from (e.g.) `data_left_stop` to `data_end_left`
2026-03-07 10:00:39 -08:00
Dermot Duffy 8223cae501 fix: Button style issue introduced by HA 2026.3 (#2392) (#2394)
- Closes: #2390
2026-03-06 07:39:32 -08:00
Dermot Duffy d5b40254b4 chore: Minor formatting and AI instructions update (#2393) 2026-03-06 07:28:37 -08:00
Dermot Duffy c398562d40 feat: Add PIP (Picture-in-Picture) support (#2391)
- Closes: #1657
2026-03-05 20:19:20 -08:00
Dermot Duffy ecc8ecfd7e fix: Change the not condition to exactly match the HA not condition (#2387)
BREAKING CHANGE: Changes the behavior of the `not` condition when there
is more than one condition present. Users who desire the previous
behavior should wrap their conditions in an `and` first.

 - Closes: #2383
2026-03-01 20:39:03 -08:00
Dermot Duffy 526acf7688 docs: Various small documentation improvements (#2386) 2026-03-01 20:23:59 -08:00
Dermot Duffy db0a747729 docs: Various minor doc improvements (#2384) 2026-03-01 14:49:01 -08:00
Dermot Duffy 37004f91fa chore: Improve AI instructions (#2381) 2026-02-28 21:16:12 -08:00
Dermot Duffy 9ac7fa3383 docs: Improve clarity of labels and zones parameters (#2380) 2026-02-28 20:55:28 -08:00
Dermot Duffy 5dc5e45631 chore: Update vscode task to kill previous instance (#2379) 2026-02-28 20:45:28 -08:00
Dermot Duffy ea86ad0016 feat: Implement support for gesture-based PTZ control (#2378)
- Closes: #1839
2026-02-28 20:36:53 -08:00
Dermot Duffy 40ad3b4460 fix: Issue with height not adjusting (downwards) to aspect ratio (#2375)
- Closes #2341
2026-02-23 19:54:43 -08:00
Dermot Duffy 753cf02d90 docs: Add special case warning for fullscreen condition (#2373) 2026-02-23 18:59:41 -08:00
Dermot Duffy d5e1e02328 fix: Add editor support for go2rtc metadata fetch timeout (#2372) 2026-02-22 19:39:55 -08:00
Dermot Duffy dd25e191ce fix: Propagate review filtered status (#2370) 2026-02-22 15:50:20 -08:00
Dermot Duffy 191b5a289a chore: Create initial Claude permissions (#2369) 2026-02-22 15:13:59 -08:00
Dermot Duffy 497e6e88a0 perf: Variety of small type and performance fixes (#2367) 2026-02-22 15:02:14 -08:00
dermotduffy 0f8c758d38 chore: Add AI instructions. 2026-02-21 20:39:15 -08:00
Dermot Duffy 87a85ce8d9 fix: Add missing capabilities to editor (#2366) 2026-02-21 19:58:15 -08:00
Dermot Duffy 5e867a8334 docs: Include reviews in examples update (#2365) 2026-02-21 16:26:02 -08:00
dermotduffy 615209fbde Merge branch 'main' into dev 2026-02-21 11:28:58 -08:00
Dermot Duffy 504b027854 fix: Fix off-by-one thumbnail for folder media (#2364)
- Closes:
https://github.com/dermotduffy/advanced-camera-card/issues/2326
2026-02-21 11:17:07 -08:00
Dermot Duffy df3614f793 fix: Various editor / diagnostic improvements (#2363)
- Closes: #2360 
 - Closes: #2328
2026-02-21 09:31:10 -08:00
Dermot Duffy 6d5a76ac0a feat: Add documentation links from editor (#2362) 2026-02-20 10:07:38 -08:00
Dermot Duffy 46868ce08e perf: Various rendering performance improvements (#2359) 2026-02-19 21:25:33 -08:00
Dermot Duffy 0a67df9a25 refactor: Convert protected methods to private (#2358) 2026-02-19 20:47:59 -08:00
Dermot Duffy 529500ed94 refactor: Migrate config schema from Zod v3 to Zod v4 (#2357) 2026-02-18 21:47:43 -08:00
Dermot Duffy a15376602f feat: Allow 2-way audio detection to be skipped and timed (#2355)
- For #2313
2026-02-16 19:47:56 -08:00
dermotduffy f34c7e8ee1 Merge branch 'main' into dev 2026-02-16 15:01:17 -08:00
Dermot Duffy d90b062719 chore: Add support for next release branch (#2354) 2026-02-16 15:00:49 -08:00
Dermot Duffy 3ecd7eba3b chore: Add support for next release branch (#2354) 2026-02-16 14:58:19 -08:00
Dermot Duffy 7dbf058ab2 fix: Seek to the start of review media (#2353) 2026-02-16 14:52:11 -08:00
Dermot Duffy 282983cbba fix: Fix styling and severity in status bar (#2352) 2026-02-16 13:57:45 -08:00
Dermot Duffy 47880e4306 feat: Add ability to untrigger after fixed number of seconds (#2350)
- Related: #2342 


BREAKING CHANGE: Renames: `untrigger_seconds` to
`untrigger_delay_seconds`
2026-02-16 12:25:56 -08:00
dermotduffy 584521c78e Merge branch 'main' into dev 2026-02-15 19:28:38 -08:00
Dermot Duffy b1467dc4bd fix: Improve state handling to avoid stuck triggered cameras (#2348)
- Related:
https://github.com/dermotduffy/advanced-camera-card/issues/2342
2026-02-15 19:26:56 -08:00
Dermot Duffy c297bf801a test: Clarify testing configuration (#2347) 2026-02-14 14:55:17 -08:00
dermotduffy ef1766e604 Merge branch 'main' into dev 2026-02-14 13:35:05 -08:00
Dermot Duffy be61d7fa24 fix: Adjust media size to take maximum available space (#2346)
- Closes #2109
2026-02-14 13:33:05 -08:00
Dermot Duffy 93f1f08e51 feat: Make cameras optional (#2343) 2026-02-13 20:21:05 -08:00
Dermot Duffy 0b7917ef70 fix: Increase go2rtc metadata fetch timeout (#2336)
- Related: #2313
2026-02-08 08:39:15 -08:00
Dermot Duffy 21f9469784 fix: Expose gallery and media views as media type agnostic (#2335) 2026-02-08 08:04:11 -08:00
dermotduffy 0a099b95f7 Merge branch 'main' into dev 2026-02-07 21:59:50 -08:00
Dermot Duffy 49073fee48 fix: Update components and styles to work with >= HA 2026.2 (#2333)
Caution: Requires HA >= `2026.2`

- Closes #2329
- Closes #2332
2026-02-07 20:32:05 -08:00
Dermot Duffy 045d15d5ce feat: Escape should dismiss overlay messages (#2324) 2026-01-24 21:39:21 -08:00
Dermot Duffy c03ddd9a13 feat: Add severity media filter (#2323) 2026-01-24 21:25:10 -08:00
Dermot Duffy f4e905a7fb fix: Improve review media filtering (#2322) 2026-01-24 16:22:12 -08:00
Dermot Duffy fc32727860 feat: Add support for Frigate reviews / detections [initial PR] (#2315)
- Add support for Frigate reviews / detections.
 - Add support for GenAI metadata.
- Significant internal refactor to more flexible "UnifiedQuery" to allow
mixing cameras with simple metadata and review metadata (e.g. a timeline
view of a Frigate camera with reviews, and a Reolink camera with simple
metadata).
 - Add support for folder media as camera media.

There are a few more PRs to commit prior to this going live, but
commiting this for now due to the scale of the change.

BREAKING CHANGE: `media_type` and `events_type` are retired under
`live`, `viewer` and `timeline` configuration sections, instead media
type is associated (once) with the camera under `media`.
2026-01-19 13:32:50 -08:00
Dermot Duffy de42a1652f feat: Add support for overriding card border radius (#2298)
- Closes #2287


[skip ci]
2025-12-20 17:00:04 -08:00
Dermot Duffy d17ecd6c12 fix: Small (rare) bug in Frigate PTZ identification capability (#2296)
[skip ci]
2025-12-20 14:52:07 -08:00
Dermot Duffy b06e0aea4d feat: Add de localization (#2295)
All credit for strings go to @Matthias84 . This PR replaces #2283 .


[skip ci]
2025-12-20 14:28:12 -08:00
Dermot Duffy b75513789b refactor: Remove empty translation strings (#2294) 2025-12-20 13:57:52 -08:00
Dermot Duffy 1e821f09c6 fix: Improve 2-way audio detection (#2293)
- For Frigate cameras, you must be running at least [integration
v5.12.0](https://github.com/blakeblackshear/frigate-hass-integration/releases/tag/v5.12.0).
 - Closes: #2191 

Includes a significant refactor of cameras, and the introduction of a
`2-way-audio` capability that is dynamically fetched from `go2rtc`. One
gotcha is if you previously had a substream with 2-way audio, you may
need to modify

```yaml
 - camera_entity: camera.foo
    capabilities:
      disable_except:
        - substream
```

... to ...

```yaml
 - camera_entity: camera.foo
    capabilities:
      disable_except:
        - substream
        - 2-way-audio
```
2025-12-20 13:06:09 -08:00
Dermot Duffy 588ed6c98a fix: Improve audio channel detection for WebRTC (#2280)
- Related: #2191
2025-12-11 05:48:43 -08:00