Commit Graph
123 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 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 31d0c9322f fix: Always respect the returned MIME type (#2473)
- Closes #2449
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 9535bb8aa0 fix: Don't detect audio from stale webrtc connection (#2429)
- Closes: #2417
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 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 24c6b98948 feat: Allow user generated notifications (#2401) 2026-03-07 20:47:24 -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 497e6e88a0 perf: Variety of small type and performance fixes (#2367) 2026-02-22 15:02:14 -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 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
Dermot Duffy 93f1f08e51 feat: Make cameras optional (#2343) 2026-02-13 20:21:05 -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 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
Dermot Duffy 13bea49429 feat: Add option to disable mousewheel carousel scrolling (#2263)
- Closes: #2220
2025-12-08 17:19:56 -08:00
Dermot Duffy c38bf192e0 fix: PTZ actions should reflect camera rotation (#2258)
- Closes: #2210
2025-12-07 21:12:12 -08:00
Dermot Duffy 3279481b0e feat: Add festive visual effects (#2252)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Introduces an effects system (fireworks, ghost, hearts, shamrocks,
snow), a new `effect` action, and optional date-based loading effects,
integrated into the card with docs, schema, editor, and tests.
> 
> - **Effects System**:
> - Add `EffectsController` and `advanced-camera-card-effects` host with
lazy-loaded effect modules (`fireworks`, `ghost`, `hearts`, `shamrocks`,
`snow`).
> - New base effect component with fade-in/out; SCSS and z-index
updates.
> - **Actions**:
> - New custom action `advanced_camera_card_action: effect` with
`effect_action` (`start`|`stop`|`toggle`).
>   - Wire into `ActionFactory` and add `EffectAction` executor.
> - **Card Integration**:
> - Mount effects host in `advanced-camera-card` and expose
`getEffectsControllerAPI()` via `CardController`.
> - Loading component can trigger date-based effects (e.g., New Year
fireworks) when enabled.
> - **Configuration & Editor**:
> - Add `performance.features.card_loading_effects` (default `true`)
alongside `card_loading_indicator`.
> - Update schemas, defaults, low-performance profile (disables
effects), and editor toggles.
> - **Docs & Examples**:
>   - Document `effect` action parameters and add menu example.
>   - Update performance docs with new option.
> - **Localization & Tests**:
>   - Update i18n strings for new performance option.
> - Add comprehensive tests for effects controller, action, factory,
config defaults/profiles, and utilities.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
cffd4304fe3bd22340316f9cec53e341379b1756. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-12-06 18:21:44 -08:00
Dermot Duffy 78dee9194f feat: Add timeline support for folder media (#2197)
- Closes #2106
2025-10-04 15:47:39 -07:00
Dermot Duffy bc5022ef1a feat: Enable go2rtc live stream proxying (#2159)
- Closes #1984
2025-08-28 21:19:19 -07:00
Dermot Duffy 4d4b64232a feat: Add support for rotating camera streams (#2149)
* Closes #1307
2025-08-23 17:30:53 -07:00
Dermot Duffy c3e7cef9cf fix: Camera aspect-ratio should always apply (#2114)
- Closes #2073
2025-07-13 14:56:03 -07:00
Dermot Duffy 2b92f84665 perf: Improve performance of the carousel auto-height functionality (#2094) 2025-06-08 15:05:40 -07:00
Dermot Duffy 13e43b8747 fix: Handle spaces in PTZ presets (#2084)
- Closes #2079
2025-06-03 20:27:40 -07:00
Dermot Duffy 956a2e523c feat: Add folder view to view folder media (#2077)
- Closes: #2068

Note: Renames existing `folder` view to `folders` [experimental
functionality]
2025-05-31 17:13:39 -07:00
Dermot Duffy c077f8bf70 feat: Add folder title matching and parsing (#2067)
This is a breaking change for users of the [experimental 'folder'
functionality](https://card.camera/#/configuration/folders).

Related: #1748
2025-05-27 07:50:51 -07:00
Dermot Duffy c6a4c8aea2 feat: Implement basic general folder support (#2051)
- Related: #1748
2025-05-21 19:59:21 -07:00
Dermot Duffy a5ffd51728 fix: Lazy unloading should not leave dangling connections (#2004)
- Closes #1992
2025-04-12 10:48:37 +01:00
Dermot Duffy a24c9628c5 fix: Reolink PTZ support should detect presets (#1997)
- Related: #1964
2025-04-06 17:47:43 +01:00
Dermot Duffy b5eee5878a feat: Add out of the box support for Reolink PTZ (#1982)
- Closes: #1964
2025-03-26 21:26:02 -07:00
Dermot Duffy d6225fefda refactor: Break apart monolithic configuration schema (#1977)
[skip ci]
2025-03-22 15:06:11 -07:00
Dermot Duffy 75ae7720d3 fix: Confirmations should apply to all actions (#1959)
This also refactors how generic HA actions are handled, and improves
typing of actions.


[skip ci]
2025-03-15 14:32:48 -07:00
Dermot Duffy a79ffa6edc refactor: Retire the use of unmaintained custom-card-helpers (#1956)
- Closes #1295
2025-03-09 16:02:33 -07:00
Dermot Duffy 7daf580c7a fix: Use better default media download filenames (#1949)
* Closes #1938


[skip ci]
2025-03-07 18:57:07 -08:00
Dermot Duffy 3b77b11196 fix: Increase reliability of media auto actions (e.g. play) (#1934)
Refactors media player handling entirely to make the code more
consistent and less boilerplate. Add testing for media player actions.

- Closes #1921
- Closes #1916
2025-03-03 20:59:01 -08:00
Dermot Duffy 0432eea4b8 feat: Add UI support for PTZ presets (#1920)
- Closes #1889

Whilst a simple change theoretically, the card has such a collection of
surfaces that can overlap other surfaces, it's challenging to get this
to work right! There's a real chance this will have broken something
z-index related (e.g. X overlaps Y when it should not), or (for related
reasons) broken curver corners on the card.
2025-02-27 20:22:12 -08:00
Dermot Duffy c66c3ec919 feat: Add control/output of selected camera via an entity (#1895)
- Closes #1871
2025-02-17 13:33:10 -08:00
Dermot Duffy cc376a8be1 feat: Rename the card to advanced-camera-card (#1873)
Whilst the Frigate support in this card is the best among camera
engines, the name incorrectly suggests that Frigate is a requirement.
Instead, to broaden the appeal, change to more camera agnostic name.
This does not suggest any change in priority, role or support for
Frigate.

This change is likely to be bug prone, due to the size of the rename --
the code contains 1500+ references to "Frigate" most of which make sense
to rename, some which do not, all of which needed human assessment.

- Closes #1298


BREAKING CHANGE: References to `frigate-card` in all kinds of
configuration need to be updated to `advanced-camera-card`. An automated
config upgrade should take care of the majority of usecases (click `Edit
-> Upgrade -> Save`), though may not be perfect.
2025-02-06 19:32:32 -08:00
Dermot DuffyandIlya Rakhlin 43947b49dc fix: Downloads for iOS (#1869)
- Closes #1863

---------

Co-authored-by: Ilya Rakhlin <i.rakhlin@gmail.com>
2025-02-01 16:08:32 -08:00
Dermot Duffy 57a687d659 fix: Restore camera layout support in image view (#1831)
* Closes #1804
2025-01-16 20:00:31 -08:00
Dermot Duffy 1f37895793 fix: Prevent gallery auto-scrolling from scrolling entire browser (#1824)
- Closes #1814
2025-01-11 16:44:05 -08:00
Dermot Duffy 2678500670 feat: Allow user-agent based conditions (#1821)
* Closes #1819
2025-01-10 07:41:19 -08:00
Dermot Duffy 9d812af9f4 fix: Use HA style and coloring for all icons (#1790) 2024-12-23 15:22:27 -08:00
Dermot Duffy 9f4ddb1e88 fix: Only include custom integrations in diagnostics (#1765) 2024-12-15 20:56:36 -08:00
Dermot Duffy dab9ff3045 fix: Substantially reduce cases where errors block whole card (#1764) 2024-12-15 20:39:18 -08:00