tedr91/Teds-Cards

A collection of custom Lovelace cards for Home Assistant

0

stars

775

commits

TypeScript

primary language

Sep 1, 2026

updated

custom-cards
hacs
home-assistant
homeassistant
home-assistant-custom
lovelace

README

Ted's Cards

hacs_badge GitHub Release GitHub Issues or Pull Requests GitHub Downloads (all assets, all releases) GitHub Repo stars GitHub License

⚠️ Interim release — testing only. This is a pre-release build published for testing purposes only and is not intended for production use. Features may change or break without notice.

Ted's Cards

This is my collection of custom cards for Home Assistant which I use for my HA wall panels and handheld devices.

After spending months attempting to find an "on/off/brightness" switch that I liked aesthetically, I finally gave up and decided to create my own. The rest of the cards happened as strived to achieve a consistent look and feel without a ton of styling overrides cluttering up all my YAML files. 😊


✨ Card Types

CardTypeDescription
Light Cardcustom:ted-light-cardLight tile with click-to-dim halves and an indicator bar.
Cover Cardcustom:ted-cover-cardCover tile with click-to-position halves and an indicator bar.
Button Cardcustom:ted-button-cardLabel or button tile with an optional entity, icon, and tap/hold actions.
Expandable Button Cardcustom:ted-button-card is the trigger; type custom:ted-expandable-button-cardA button that opens a popup of child buttons on tap (children can be expandable too).
Clock Weather Cardcustom:ted-clock-weather-cardA large clock with the date and current weather.
Remote Cardcustom:ted-remote-cardRemote control for media devices (e.g. Apple TV and Kaleidescape).
Room Cardcustom:ted-room-cardOverview card for a Home Assistant area.
Camera Cardcustom:ted-camera-cardOne or more camera feeds (auto thumbnail or live stream) in single, quad, or multi layouts.
Music Cardcustom:ted-music-cardMusic Assistant player for the current device (wraps droans/mass-player-card; requires it + mass_queue).
Calendar Cardcustom:ted-calendar-cardCalendar for the current device (wraps superdingo101/daylight-calendar-card; requires it).
Navbar Cardcustom:ted-navbar-cardNavigation bar pinned to the top or bottom, with buttons and status items in left/center/right zones.
Alarm Cardcustom:ted-alarm-cardAdd, view, and enable/disable alarms (requires the Ted's Dashboard System integration).
Timer Cardcustom:ted-timer-cardStart, view, and cancel countdown timers (requires the Ted's Dashboard System integration).
Announce Cardcustom:ted-announce-cardBroadcast spoken (TTS) announcements to devices/areas, with predefined messages and recents (requires the Ted's Dashboard System integration).
Assist-Response Cardcustom:ted-assist-response-cardDisplay a title + message (+ optional image) pushed by a voice intent or automation, and navigate the targeted screens to it — the visual counterpart to a spoken Assist answer (requires the Ted's Dashboard System integration).
Photo Viewer Cardcustom:ted-photo-viewer-cardView a single photo or a folder album — page through it (arrows/keys), run a crossfade slideshow, favorite it, and set it as your wallpaper (favorite/set-as-wallpaper require the Ted's Dashboard System integration).

📸 Screenshots

Ted's Cards — dark mode Ted's Cards — light mode


🔧 Requirements

  • Home Assistant
  • One or more calendar entities (e.g. calendar.family, calendar.work)

🚀 Installation

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

OR

Add custom repository
  1. Open HACS in Home Assistant.
  2. Go to Frontend → menu (⋮) → Custom repositories.
  3. Add https://github.com/tedr91/Teds-Cards with category Dashboard.
  4. Search for Ted's Cards and install.
  5. Refresh your browser.

👉 If you don’t have HACS yet, follow: https://hacs.xyz/docs/use/


Manual Installation

Without HACS
  1. Download ted-cards.js from the latest release.
  2. Copy it to <config>/www/community/ted-cards/ted-cards.js.
  3. Add the resource to your dashboard:
    • SettingsDashboards → ⋮ → ResourcesAdd resource
    • URL: /local/community/ted-cards/ted-cards.js
    • Type: JavaScript Module
  4. Refresh your browser.

💡 After updates, bump the version (?v=2) to avoid caching issues.


📖 Usage

🎨 Every card has an Appearance (general) section with Transparency and Background blur sliders — fade the card's surface and blur whatever sits behind it for a frosted-glass look over a dashboard wallpaper. Both default to off (fully opaque, no blur).

💡 Light Card

A compact light tile split into two clickable halves by a subtle divider. Supports light entities only. Brightness is shown on a thin vertical indicator bar on the card's left edge.

Interactions

The card has three interactive regions — the upper half, the lower half, and the centered icon — each of which spans the full card area (padding and hint bars included). Every region responds to single tap, double tap, and long press, and each gesture can be reassigned in the editor's Switch Behavior section.

RegionSingle tap (default)Double tap (default)Long press (default)
Upper halfIncrease brightness to the next 5%Full on (100%)More info
Lower halfTurn offTurn offMore info
IconToggleMore infoMore info

Available actions: Increase brightness, Decrease brightness, Full on (100%), Turn off, Toggle, More info, and Nothing.

For toggle-only lights (no brightness support), the upper-half single tap defaults to Full on and the lower-half single tap to Turn off; the left indicator bar shows full when on and empty when off.

Light Card preview

Minimal config:

type: custom:ted-light-card
entity: light.living_room
Detailed options
type: custom:ted-light-card
entity: light.living_room
name: Living Room          # optional, defaults to entity friendly name
icon: mdi:floor-lamp       # optional, defaults to entity icon
theme: ted-style           # optional, visual styling: ted-style (default) | ha

theme (optional) — Visual styling, selectable in the editor's Appearance section:

  • ted-style (default): a self-contained "Ted's Home Theater" look (Windows 11 Fluent / Mica-dark) that looks the same regardless of your Home Assistant theme.
  • ha: follow the active Home Assistant theme (surfaces, text, and accent color).

Brightness is shown on a thin vertical indicator bar pinned to the card's left edge (it fills bottom→up with the light's brightness; it is not interactive). Its color — labeled Indicator bar color in the editor's Appearance section — is set by indicator_color (optional) when the light is on:

  • theme (default): the theme accent color.
  • light: the light's current color (its rgb_color), falling back to a warm tone.
  • other: a custom color — set indicator_color_custom to an [r, g, b] array (chosen via the editor's color picker).

show_indicator (optional, default true, in the Appearance section) toggles the indicator bar on or off, and indicator_width (optional, px, default 4) sets its width.

show_hint (optional, default false, in the Appearance section): show a matching hint bar up the right edge with + / hints, indicating the top half raises brightness and the bottom half lowers it. hint_width (optional, px, default 8) sets the hint bar width.

The icon is centered in the card and lights up when the light is on. icon_color (optional, in the Appearance section) sets its on color:

  • theme: the theme accent color.
  • light (default): the light's current color (its rgb_color), falling back to a warm tone.
  • other: a custom color — set icon_color_custom to an [r, g, b] array.

background_on (optional, in the Appearance section): override the card's background color while the light is on. Pick a color with the editor's color picker (stored as a #RRGGBB hex string). When unset, the theme background is used.

brushed (optional, default off, in the Appearance section): overlay a brushed-metal sheen just above the background. Pair it with a metallic background_on color (e.g. silver #c0c0c0) for a brushed-aluminum look.

rocker (optional, default on, in the Appearance section): when on, the card behaves as a rocker switch — the two halves run separate UP / DOWN actions and a divider separates them. Turn it off to make the whole card a single button that always runs the Icon behavior (the UP/DOWN options and divider are hidden). rocker_effect (optional, default on, disabled when Rocker is off): a Decora-style rocker bevel that makes one half of the card appear raised, pivoting at the center. The raised half follows the state — top half raised when off, bottom half raised when on.

orientation (optional, default vertical, directly below Visual styling): switch the card to horizontal. In horizontal mode the indicator bar runs along the bottom (filling left → right), the hint bar runs along the top, the divider is vertical, the right half is UP and the left half is DOWN, and the name sits on the left with the state on the right (icon centered). The default size becomes 6 × 1 in a grid (Sections) view, or 240 × 80 px elsewhere.

Also in the Appearance section: show_name, show_icon, and show_state (all default on) toggle the name, centered icon, and the state/brightness label; name_scale, icon_scale, and state_scale (percent, default 100) scale the name text, icon, and state label. width and height (px, default 100 × 120 vertical, 240 × 80 horizontal) set the card's fixed size when it is not a direct item in a grid (Sections) view — e.g. inside a stack, masonry, or panel view. As a direct grid item the card honors the grid cell size instead.

Switch Behavior

The editor's Switch Behavior section lets you reassign the action for every region × gesture. It contains three groups — UP behavior, DOWN behavior, and Icon behavior — each exposing a Single tap, Double tap, and Long press action picker. The config keys are up_tap / up_double_tap / up_hold, down_tap / down_double_tap / down_hold, and icon_tap / icon_double_tap / icon_hold. Any option left at its default is omitted from the saved YAML.

up_tap: increase           # increase | decrease | full_on | full_off | toggle | more_info | none
down_double_tap: toggle
icon_hold: none

Memory (dimmable lights)

For dimmable lights you can choose the brightness the light turns on to. The editor shows a Memory section (only for brightness-capable lights) with three modes:

  • off (default): turn on at the light's last brightness (standard Home Assistant behavior).
  • static: always turn on to a fixed brightness — set memory_value (1–100 %, default 100).
  • helper: turn on to the value of an input_number / number helper, read as a percentage (1–100). Choosing this mode auto-creates and selects a dedicated helper for you (input_number.ted_light_mem_<entity>) — no need to add one in Settings → Helpers. Add a card for the same light elsewhere and it reuses that helper automatically; delete the helper and the card falls back to the default. You can still point memory_entity at your own helper instead.
memory_mode: static        # off | static | helper
memory_value: 60           # static mode, 1–100 %
# or
memory_mode: helper
memory_entity: input_number.living_room_brightness

🪟 Cover Card

A compact cover tile split into two clickable halves by a subtle divider. Supports cover entities only (blinds, shades, shutters, curtains, garage doors, …). The current position is shown on a thin vertical indicator bar on the card's left edge.

Interactions

The card has three interactive regions — the upper half, the lower half, and the centered icon — each spanning the full card area (padding and hint bars included). Every region responds to single tap, double tap, and long press, reassignable in the editor's Switch Behavior section.

RegionSingle tap (default)Double tap (default)Long press (default)
Upper halfOpen more (next 5%)Fully openMore info
Lower halfClose more (next 5%)Fully closedMore info
IconToggleMore infoMore info

The icon's Toggle is smart: while the cover is moving it stops, otherwise it opens (to the configured memory position) or closes. Available actions: Open more, Close more, Fully open, Fully closed, Toggle, Stop, Tilt open, Tilt closed, More info, and Nothing. Tilt actions appear in the editor only for tilt-capable covers.

For open/close-only covers (no position support), the upper-half single tap defaults to Fully open and the lower-half to Fully closed. Tilt-only covers use their tilt position as the primary value driven by the up/down regions.

Cover Card preview

Minimal config:

type: custom:ted-cover-card
entity: cover.living_room_blinds
Detailed options
type: custom:ted-cover-card
entity: cover.living_room_blinds
name: Living Room Blinds   # optional, defaults to entity friendly name
icon: mdi:blinds           # optional, defaults to a device-class icon
icon_open: mdi:blinds-open # optional, shown while the cover is open
theme: ted-style           # optional, visual styling: ted-style (default) | ha

icon_open (optional) sets a different icon to show while the cover is open — e.g. icon: mdi:garage with icon_open: mdi:garage-open. When unset, icon (or a device-class default) is used in all states.

theme, show_indicator, indicator_color, indicator_width, icon_color, show_hint, and hint_width work as in the Light Card (all in the editor's Appearance section). show_indicator (on by default) toggles the indicator bar; indicator_color (theme default / other custom) — labeled Indicator bar color — colors it when open, and indicator_width (px, default 4) sets its width. show_hint (on by default) shows a right-edge hint bar with up/down chevron hints, and hint_width (px, default 8) sets its width. The indicator bar fills from the bottom up with the cover's current position.

background_open (optional, in the Appearance section): override the card's background color while the cover is open. Pick a color with the editor's color picker (stored as a #RRGGBB hex string). When unset, the theme background is used.

brushed (optional, default off, in the Appearance section): overlay a brushed-metal sheen just above the background. Pair it with a metallic background_open color (e.g. silver #c0c0c0) for a brushed-aluminum look.

rocker (optional, default on, in the Appearance section): when on, the card behaves as a rocker switch — the two halves run separate UP / DOWN actions and a divider separates them. Turn it off to make the whole card a single button that always runs the Icon behavior (the UP/DOWN options and divider are hidden). rocker_effect (optional, default on, disabled when Rocker is off): a Decora-style rocker bevel that makes one half of the card appear raised, pivoting at the center. The raised half follows the state — top half raised when closed, bottom half raised when open.

orientation (optional, default vertical, directly below Visual styling): switch the card to horizontal. In horizontal mode the indicator bar runs along the bottom (filling left → right), the hint bar runs along the top, the divider is vertical, the right half is UP and the left half is DOWN, and the name sits on the left with the state on the right (icon centered). The default size becomes 6 × 1 in a grid (Sections) view, or 240 × 80 px elsewhere.

Also in the Appearance section: show_name, show_icon, and show_state (all default on) toggle the name, centered icon, and the state/position label; name_scale, icon_scale, and state_scale (percent, default 100) scale the name text, icon, and state label. width and height (px, default 100 × 120 vertical, 240 × 80 horizontal) set the card's fixed size when it is not a direct item in a grid (Sections) view — e.g. inside a stack, masonry, or panel view. As a direct grid item the card honors the grid cell size instead.

Switch Behavior

The Switch Behavior section reassigns the action for every region × gesture, grouped into UP behavior, DOWN behavior, and Icon behavior. Config keys are up_tap / up_double_tap / up_hold, down_tap / down_double_tap / down_hold, and icon_tap / icon_double_tap / icon_hold. Any option left at its default is omitted from the saved YAML.

up_tap: open_step          # open_step | close_step | open | close | toggle | stop | tilt_open | tilt_close | more_info | none
icon_hold: stop

Memory (position-capable covers)

For covers that support set_cover_position you can choose the position the cover opens to. The editor shows a Memory section (only for position-capable covers) with three modes:

  • off (default): open fully (100%).
  • static: always open to a fixed position — set memory_value (1–100 %, default 100).
  • helper: open to the value of an input_number / number helper, read as a percentage (1–100). Choosing this mode auto-creates and selects a dedicated helper for you (input_number.ted_cover_mem_<entity>) — no need to add one in Settings → Helpers; add a card for the same cover elsewhere and it reuses that helper, and deleting the helper falls back to the default. Changing the position from the card also writes the new value back to the helper. You can still point memory_entity at your own helper instead.
memory_mode: static        # off | static | helper
memory_value: 70           # static mode, 1–100 %
# or
memory_mode: helper
memory_entity: input_number.blinds_position

🏷️👆 Button Card

A small, versatile tile that works as either a label or a button. The entity is optional: with no entity it's a static label (or an action button via the tap/hold actions); with an entity it shows the entity's state and toggles (or opens more-info) by default. It's also the button type used inside Room Card sections.

Button Card preview

Minimal config (button bound to an entity):

type: custom:ted-button-card
entity: light.living_room

Minimal config (plain label):

type: custom:ted-button-card
name: Hello, world!
Detailed options
type: custom:ted-button-card
entity: light.living_room   # optional, the entity to control / show
name: Living Room           # optional label text, defaults to the entity friendly name
icon: mdi:lightbulb         # optional, defaults to the entity icon
theme: ted-style            # optional, visual styling: ted-style (default) | ha
icon_color: amber           # optional icon color (theme color name or #RRGGBB)
background: '#1c1c1c'        # optional background color override
brushed: false              # optional brushed-metal sheen over the background
neumorphic: false           # raised tile when off/idle, pressed when the entity is active
show_name: false            # show the name/label (default off)
name_scale: 100             # name text size, % (10–300)
show_icon: true             # show the icon
icon_scale: 100             # icon size, % (10–300)
show_state: true            # show the entity state under the name
state_scale: 100            # state text size, % (10–300)
width: 100                  # fixed width (px) when NOT a direct grid (Sections) item
height: 120                 # fixed height (px) when NOT a direct grid (Sections) item
tap_action:                 # optional, see Interactions below
  action: toggle
hold_action:
  action: more-info
double_tap_action:
  action: none
# Badge — a small number badge from any entity (e.g. an unread/notification count)
badge:
  entity: sensor.notifications   # the entity whose state is shown as the badge number
  color: red                     # optional badge background color
  text_color: white              # optional badge text color
  show_when_zero: false          # show the badge even when the value is 0 (default hides it)
# Dynamic highlighting — recolor the button from another entity's value
highlight:
  entity: sensor.days_until_bin_day
  rules:
    - operator: '<='             # is | is_not | > | >= | < | <=
      value: 2
      background_color: red
      icon_color: white          # optional
      halt: true                 # stop checking further rules once this one matches
    - operator: '<='
      value: 5
      background_color: orange
      halt: true

theme and brushed work as in the other cards (see the Light Card section). icon_color and background are picked with the editor's color picker; leave them unset to follow the theme.

neumorphic (default off, in the Appearance section): a soft "neumorphic" effect — the tile looks raised when the entity is off/idle (or has no entity) and pressed in when the entity is active (e.g. a light on, a cover open, a media player playing, a lock unlocked).

In the Appearance section, show_icon (default on) and show_name / show_state (default off) toggle the icon, label, and the entity-state line, and name_scale / icon_scale / state_scale (percent, default 100) scale each of them. width and height (px, default 100 × 120) set the card's fixed size when it is not a direct item in a grid (Sections) view — e.g. inside a stack, masonry, or panel view; as a direct grid item the card honors the grid cell.

Interactions — the editor's Interactions section sets tap_action, hold_action, and (under Add interaction) double_tap_action, using Home Assistant's standard action picker (toggle, more-info, navigate, call-service, etc.). Defaults adapt to the entity: tap is toggle for toggleable domains (light, switch, fan, cover, lock, climate, media_player, …) and more-info otherwise; hold is more-info when an entity is set. With no entity, both default to nothing.

Badge (editor Badge section) — overlays a small number from any entity in the top-right corner (e.g. a notification count). It hides automatically when the value is 0 (or unavailable) unless Show when value is zero is on; the badge and text colors are configurable.

Dynamic highlighting (editor Dynamic highlighting section) — recolors the button's background and/or icon from a chosen entity's state. Add one or more rules, each comparing the entity with an operator (is / is not / > / / < / ) and a value (the value becomes a state dropdown for is / is not). Rules are checked top-to-bottom and can be dragged to reorder; turn on stop processing to halt at the first match — handy for threshold ladders like ≤ 2 → red, ≤ 5 → orange, ≤ 10 → yellow.

�️👆 Expandable Button Card

A Button Card that opens a popup of child buttons on tap. The trigger looks and is configured exactly like a normal Button Card (icon/name/state, theme, badge, dynamic highlighting); tapping it opens a native popover holding a configurable set of child buttons. Each child is a full Button Card with its own icon, colors, and actions — and a child can itself be another Expandable Button Card, opening a nested popup without closing its parent. Selecting a leaf button runs its action and closes the popup.

Minimal config:

type: custom:ted-expandable-button-card
name: Scenes
icon: mdi:movie-open
items:
  - type: custom:ted-button-card
    name: Movie
    icon: mdi:movie-open
    tap_action: { action: call-service, service: script.movie_night }
  - type: custom:ted-button-card
    name: Bright
    icon: mdi:white-balance-sunny
    tap_action: { action: call-service, service: script.bright }
Detailed options
type: custom:ted-expandable-button-card
# --- Trigger appearance: any Button Card option (icon/name/state, theme, badge, highlight, …) ---
name: Scenes
icon: mdi:movie-open
theme: ted-style
# --- Popup ---
popup_layout: grid          # grid (default) | list
popup_max_columns: 3        # optional cap on grid columns; unset = size to the button count
popup_title: Scenes         # optional heading shown at the top of the popup
flip_icon: true             # flip the trigger icon (e.g. a chevron) 180° while open (default true)
items:                      # child buttons shown in the popup
  - type: custom:ted-button-card
    name: Movie
    icon: mdi:movie-open
    tap_action: { action: call-service, service: script.movie_night }
  - type: custom:ted-expandable-button-card   # a nested expandable child
    name: More
    icon: mdi:dots-horizontal
    items:
      - type: custom:ted-button-card
        name: Reading
        icon: mdi:book-open-variant

The trigger's own tap/hold/double-tap actions are ignored — tapping the trigger always opens the popup. Configure each child's actions on the child button itself.

Popup (editor) — Popup layout is Grid (square tiles) or List (a single vertical column). For the grid, Max columns is optional — leave it empty and the grid sizes to the number of buttons (a single row); set it to wrap onto multiple rows after that many columns. Popup title adds an optional heading. Flip icon when open (default on) rotates the trigger icon 180° while the popup is open — handy for a chevron that flips to point the other way. The popover anchors to the trigger, opening downward (flipping up if there isn't room) and dismisses on outside-click or Esc.

Popup buttons (editor) — add Button or Expandable button children, drag to reorder, and edit each inline with its own card editor. Nested expandable children open their own sub-popups, so you can build multi-level menus behind a single tile.

�🕒⛅ Clock Weather Card

A large clock with the current date and weather, designed to sit transparently on top of a dashboard background. The clock, date, and weather can each be shown or hidden and positioned independently.

Clock Weather Card preview

Minimal config:

type: custom:ted-clock-weather-card
weather_entity: weather.home
Detailed options
type: custom:ted-clock-weather-card
theme: ted-style            # optional, visual styling: ted-style (default) | ha
force_transparent: true     # transparent card background (default true)
background: '#1c1c1c'        # background color override (only used when force_transparent: false)
brushed: false              # optional brushed-metal sheen over the background
# Clock
show_clock: true
clock_size: large           # small (60%) | medium (80%) | large (100%, default) | extra_large (120%) | custom
clock_size_custom: 100      # size %, used when clock_size: custom (10–400)
clock_offset: 0             # horizontal position: 0 = left, 50 = center, 100 = right
time_format: auto           # auto (default) | 12h | 24h | custom
time_format_custom: 'H:MM'  # token string, used when time_format: custom
# Date
show_date: true
date_size: standard         # standard (default) | custom
date_size_custom: 100       # size %, used when date_size: custom
date_format: standard       # standard (default) | custom
date_format_custom: 'dddd, MMMM D'   # token string, used when date_format: custom
date_below_clock: false     # stack the date directly under the clock
date_offset: 100            # horizontal position: 0 = left, 50 = center, 100 = right
# Weather
show_weather: true
weather_entity: weather.home   # a weather entity
weather_size: standard      # standard (default) | custom
weather_size_custom: 100    # size %, used when weather_size: custom
show_weather_icon: true     # show the condition icon (default true)
icon_style: fancy           # fancy (default) | cool | basic
show_current_temp: true     # show the current temperature
weather_above_clock: false  # place the weather above the clock instead of below
weather_offset: 100         # horizontal position: 0 = left, 50 = center, 100 = right

theme and brushed work as in the other cards (see the Light Card section). force_transparent (default on) drops the card background so the clock floats over your dashboard; turn it off to use the theme background or a background color override.

The editor groups the rest into Clock Settings, Date Settings, Weather Settings, and a Layout section:

  • Sizesclock_size, date_size, and weather_size use preset percentages, or set them to Custom to enter an exact percent (*_size_custom).
  • Time / date formattime_format (auto follows your Home Assistant locale) and date_format both offer a Custom mode where you supply a token string (time_format_custom, date_format_custom).
  • Layoutshow_clock / show_date / show_weather toggle each element, and clock_offset, date_offset, and weather_offset slide each one horizontally (0 left ↔ 50 center ↔ 100 right). date_below_clock stacks the date under the clock, and weather_above_clock moves the weather above it.

Weather icon styles (icon_style, shown when Show weather icon is on): Fancy (animated Meteocons — the default), Cool (the Home Assistant frontend weather SVGs), or Basic (Material Design weather icons). See Credits for icon attribution.

🎛️ Remote Card

A remote-control card for Apple TV and Kaleidescape players. The device family is auto-detected from the remote entity's integration — Apple TV uses the built-in apple_tv integration, while Kaleidescape uses the custom kaleidescape_strato integration (note: not the built-in Kaleidescape integration). Buttons send remote.send_command calls to the selected entity.

Remote Card preview

Minimal config:

type: custom:ted-remote-card
remote_entity: remote.living_room_apple_tv
Detailed options
type: custom:ted-remote-card
remote_entity: remote.living_room_apple_tv             # required, the remote. entity (Apple TV or Kaleidescape)
media_player_entity: media_player.living_room_apple_tv  # recommended, drives state + play/pause + power
name: Living Room            # optional header name
theme: manufacturer          # visual styling: manufacturer (default) | ted-style | ha
background: '#1c1c1c'         # optional background color override
brushed: false               # optional brushed-metal sheen over the background
show_icon: true              # show the device icon in the header
icon_scale: 100              # icon size, % (10–300)
show_name: false             # show the name in the header
name_scale: 100              # name size, % (10–300)
scale: 100                   # overall card scale, % (50–200)
show_status_indicator: false # on/off/playing status dot in the header
# Apple TV only — quick-launch app buttons (each value is a media_player source name)
app_launch_1: Netflix
app_launch_2: Disney+
app_launch_3: YouTube
# Kaleidescape only — where the Home button navigates
kaleidescape_home: home      # home (default) | movie_covers | movie_list | movie_collections | system_status

remote_entity (required) is the remote.* entity that receives the button commands. The entity pickers are limited to the two supported integrations, and the device family is detected automatically from your selection — there's no family dropdown.

media_player_entity (recommended) is a matching media_player.* entity used to show the current state and to make the power and play/pause buttons state-aware. When you pick the remote, the card tries to auto-fill the matching media player (an entity on the same device first, then by name).

theme (in the Appearance section) offers Manufacturer's Style (default — a per-device look resembling the real remote), Ted's Style (the self-contained "Ted's Home Theater" look), or Home Assistant theme. background and brushed work as in the other cards (see the Light Card section). The header is controlled by show_icon / icon_scale, show_name / name_scale, and show_status_indicator; scale resizes the whole remote (50–200%).

App Launchers (Apple TV only) — up to six quick-launch buttons. Each app_launch_N is a media_player source name; when a media player is configured the editor offers a dropdown of its available sources.

Home button target (Kaleidescape only) — kaleidescape_home chooses where the Home button navigates: Home (default), Movie covers, Movie list, Movie collections, or System status.

🏠 Room Card

An overview card for a Home Assistant area, with a compact status bar along the top edge and one or more button sections below it. The area is the card's primary selection, made in the editor's Room section (an Area picker fed by your Home Assistant areas); it also seeds default temperature/occupancy entities for new status items.

Room Card preview

Minimal config:

type: custom:ted-room-card
area: living_room
Detailed options
type: custom:ted-room-card
area: living_room          # the Home Assistant area id
name: Living Room          # optional title override, defaults to the area's name
theme: ted-style           # optional, visual styling: ted-style (default) | ha
brushed: false             # optional brushed-metal sheen over the background
status_items:              # optional, the top status bar (see below)
  - type: temperature
    entity: sensor.living_room_temperature
  - type: occupancy
    entity: binary_sensor.living_room_motion
  - type: brightness
    entity: light.living_room
  - type: volume
    entity: media_player.living_room
  - type: led
    entity: binary_sensor.living_room_window
sections:                  # optional, grids of buttons below the status bar
  - title: Lights
    max_rows: 0            # 0 = unlimited; otherwise caps rows (5 buttons/row)
    buttons:
      - type: custom:ted-light-card
        entity: light.living_room
      - type: custom:ted-cover-card
        entity: cover.living_room
      - type: custom:ted-button-card
        name: Scene

theme and brushed work as in the other cards (see the Light Card section).

Header — the top strip shows an optional icon and the room name. In the editor's Header section: Display icon in header (default off; pick the icon below Name) with an optional Icon size override, Display name in header (default on) with an optional Name size override, and Display header divider line (default on).

Room Photo — an optional photo behind the card UI (above the background/brushed effect, below the header, status, and buttons). In the editor's Room Photo section:

  • Show photo (default on).
  • Photo sourceBundled (a curated set served from a CDN; pick one or leave Auto to match the room name), Custom (upload your own via the HA image picker), or Camera feed (pick a camera entity, then choose its Camera view — Auto thumbnail (default) / Live stream — and Fit mode — Cover / Contain / Fill).
  • Photo placementTop of card (default), Below header, or Fill card.
  • Photo height (px) — leave empty to show the full image at card width; set a height to crop it (hidden for Fill).
  • Photo alignment — the vertical focal point (Top / Center / Bottom) used when the photo is cropped.
  • Edge Gradient (Scrim) — darken any of the Top / Left / Right / Bottom edges so text/buttons stay readable. Sensible defaults per placement (Top→top edge, Fill→top+bottom, Below header→none).
  • Photo opacity (default 100%).

With the default (Show photo on, Auto), the room name is matched to a bundled photo — bathroom, bedroom, kitchen, living room, office, and so on, including synonyms (e.g. "Master Suite" → bedroom, "Den" → office) and possessive names ("Bill's Room" → bedroom). Rooms of the same type get different photos where alternates exist. A room that matches no specific type falls back to a generic photo, so no card is left blank by default (it only shows nothing if the image can't be loaded).

Status bar — a small strip of items pinned to the top edge of the card, managed in the editor's Status items section (add, reorder, delete). Each item is one of:

TypeShowsEntity
temperatureIcon + valueany sensor (auto-filled from the area)
occupancyIcon + valueany sensor (auto-filled from the area)
brightnessTap-to-open vertical sliderlight, number, or input_number
volumeTap-to-open volume slider (double-tap mutes)media_player
ledColored status dotany entity

Each item also accepts an optional icon and name. led items accept on_color / off_color and an advanced colors map (state → color) for per-state colors.

Button sections — one or more grids of buttons below the status bar, managed in the editor's Button sections section (add, reorder, delete sections; add, reorder, delete buttons within each). Each button is a ted-button-card, ted-cover-card, ted-light-card, or ted-camera-card, edited inline with that card's own editor. Buttons lay out 5 per row as squares; set a section's Max rows to cap the height (0 = unlimited). When the buttons overflow the cap, the last visible cell becomes a button that reveals the rest.

Each section has a Section title plus a Show title in card toggle (default off) and a Title alignment selector (Left / Center / Right; disabled while the title is hidden). The title still labels the section in the editor even when it isn't shown in the card.

Spacer — both the status strip and button sections can hold a Spacer: a transparent, non-interactive placeholder whose only option is its Size in px. Status-strip spacers add a horizontal gap (default 24 px); button-section spacers reserve an empty square cell (default 100 px, matching a button).


📷 Camera Card

A camera feed — or several — rendered with Home Assistant's own picture-glance image element so each feed gets both auto thumbnail polling and live streaming for free. Show one camera, or lay out multiple in a Quad (2×2) or Multi (one big feed plus a strip of smaller ones) arrangement. Use it on its own, as a Room Card button, or as a Room Card photo source.

Minimal config:

type: custom:ted-camera-card
cameras:
  - entity: camera.front_door
Detailed options
type: custom:ted-camera-card
layout: single              # optional: single (default) | quad | big-small ("Multi")
big_small_position: right   # optional (Multi only): right (default) | bottom
big_small_width: 25         # optional (Multi only): small-feed strip width, % of the card
cameras:                    # required — one or more cameras, shown in order
  - entity: camera.front_door
    name: Front Door         # optional camera name, defaults to the entity's friendly name
    camera_view: auto        # optional per-camera: auto (thumbnail, default) | live (stream)
    enabled: true            # optional, set false to hide this camera from the layout
  - entity: camera.back_yard
    camera_view: live
show_name: false            # optional, overlay each camera's name along the bottom edge
name_size: 14               # optional, camera-name font size in px (default 14)
fit_mode: cover             # optional: cover (default) | contain | fill
aspect_ratio: "16:9"        # optional, e.g. "16:9" or "1.78" (ignored in grid layout)
theme: ted-style            # optional, visual styling: ted-style (default) | ha
brushed: false              # optional brushed-metal sheen behind the feed
width: 800                  # optional manual width (px), ignored in grid layout
height: 450                 # optional manual height (px), ignored in grid layout
tap_action:                 # optional, defaults to More Info of the tapped camera
  action: more-info
double_tap_action:
  action: none
  • Cameras — add one or more camera.* entities. In the editor, use Auto populate cameras to add every camera at once, drag to reorder, the switch in each row header to show/hide a camera, and the trash icon to remove one. Each camera has an optional Camera Name (defaults to the entity's friendly name) and its own view (auto thumbnail or live stream).
  • LayoutSingle (one feed), Quad (2×2), or Multi (one large feed plus a strip of smaller ones, positioned to the right or bottom, with an adjustable Small feeds width that auto-sizes to keep every feed equal as you show/hide cameras). Slots with no camera show an empty placeholder.
  • Per-camera view — each feed is an Auto thumbnail (default; periodically refreshed still) or a Live stream (continuous video), set in that camera's editor row.
  • Camera name overlayShow Camera Name overlays each feed's name along the bottom edge, with a configurable Camera name size.
  • Long-press a feed — opens a quick popup to switch that feed between Auto thumbnail and Live stream, and (for any non-primary feed) Make primary camera to swap it into the big slot. These are live-view tweaks only and reset on reload — the editor holds the saved defaults.
  • Fit mode — how each image fills its box: Cover (default), Contain, or Fill.
  • Aspect ratio — optional, sets the card's shape when it isn't sized by the dashboard grid.
  • Sizing — in a grid (sections) layout the card fills its grid cell; otherwise it uses the optional Width / Height (defaulting to 800×450). theme and brushed work as in the other cards (see the Light Card section).
  • InteractionsTap defaults to More Info of the tapped camera; Double tap defaults to none. Both accept the standard Home Assistant action options. (Long-press is reserved for the view popup.)
  • Efficient — feeds only stream while the card is on-screen and the browser tab is visible, and hidden cameras use no bandwidth.

🧭 Navbar Card

A navigation bar pinned to the top or bottom of the dashboard. Each section holds an ordered mix of buttons — each a full Button Card, so they get icons, colors, actions, badges, and dynamic highlighting — and status items such as the time, date, weather, or a room's temperature, brightness and volume, arranged in left / center / right zones. The center zone stays pinned to the exact middle regardless of what's on the sides, so a "Home" button can sit perfectly centered.

ℹ️ The navbar overlays the dashboard and reserves space so your content isn't hidden underneath it. It's brand new — please report any layout quirks.

Minimal config:

type: custom:ted-navbar-card
sections:
  - placement: center
    items:
      - type: custom:ted-button-card
        name: Home
        icon: mdi:home
Detailed options
type: custom:ted-navbar-card
theme: ha                 # optional, visual styling: ha (default) | ted-style
alignment: bottom         # bottom (default) | top | left | right (left/right = vertical bar)
bar_type: snap            # snap (edge-to-edge, default) | float (centered) — top/bottom only
size: 48                  # bar thickness in px; buttons size from this
min_width: 16             # float only: minimum bar width in px
max_width: 920            # float only: maximum bar width in px
background: ""            # optional card background color (theme name or hex/rgb)
transparency: 0           # 0–100% — fade the bar's background
blur: 0                   # 0–100% — blur the dashboard behind the bar
sections:                 # up to 5 sections
  - placement: left       # left | center | right (which zone the section sits in)
    align: center         # left | center | right (alignment of items within the section)
    visible: true         # optional, show/hide the section
    overflow: true        # optional, collapse items that don't fit into a “…” popover
    items:                # ordered mix of buttons, status items, and popups
      - type: datetime                      # status item (date + time; set display: time/date to show one)
        display: date
      - type: weather                       # status item (auto-picks a weather entity, or set entity:)
  - placement: center
    items:
      - type: custom:ted-button-card  # a button
        name: Home
        icon: mdi:home
        nav_button_size: normal             # normal (default) | wide
  - placement: right
    items:
      - type: datetime                      # status item — updates live
        display: time
      # A "popup menu" is an Expandable Button Card: a normal button tile that opens a
      # popover of child buttons (configure layout / title / nesting on the card itself).
      - type: custom:ted-expandable-button-card
        icon: mdi:dots-horizontal
        popup_layout: grid                  # grid (default) | list
        popup_max_columns: 3                # optional cap on grid columns (unset = fit items)
        popup_title: Settings               # optional heading
        flip_icon: true                     # flip the trigger icon 180° while open (default true)
        items:
          - type: custom:ted-button-card
            name: Settings
            icon: mdi:cog
  • Navbar alignment — pin the bar to the Bottom (default) or Top edge (horizontal), or the Left / Right edge for a vertical bar. A vertical bar is always snap (Float is hidden), clears the header & sidebar, and maps the section zones top→left, middle→center, bottom→right.
  • Navbar typeSnap spans edge-to-edge; Float centers the bar with margins and rounded corners (top/bottom bars only). A floating bar auto-sizes to fit its buttons (just a little wider) — unless it has left- or **right-**zone items, in which case it spans the full (maximum) width so those items can pin to the edges.
  • Minimum width / Maximum width (float only) — the bounds the floating bar is sized within (defaults 16 and 920 px).
  • Size — the bar thickness in pixels; buttons size automatically from it.
  • Sections (up to 5) — each sits in a left / center / right zone and has its own content alignment. Sections, and the items inside them, are added and dragged to reorder in the editor. The center zone is pinned to the exact center of the bar, independent of the left/right content.
  • Items — each section's + Add item menu adds a button, a status item, or a popup, mixed in any order and dragged to reorder.
  • Buttons — a full Button Card (entity, icon, colors, actions, badge, dynamic highlighting). Button size is Normal (square) or Wide.
  • Status itemsTime, Date and Weather, plus a room's Temperature, Occupancy, Brightness, Volume, an entity Status LED, and a Spacer. Brightness and volume open a slider on tap, and the clock updates live.
  • Popups — the + Add item menu's Popup menu adds an Expandable Button Card: a normal button tile that opens a popover of child buttons. Configure its layout (Grid with optional Max columns, or List), an optional title, Flip icon when open, and nested menus on the card itself — handy for tucking extra controls behind one button.
  • Overflow — when a section's items don't fit the bar, the extras auto-collapse into a “…” popover (turn Auto-collapse overflow off per section to keep them inline).

⏰ Alarm Card

Add, view, and enable/disable alarms. Requires the Ted's Dashboard System integration (which owns the alarms and fires them reliably server-side). The card reads sensor.teds_alarms and calls the backend's add_alarm / update_alarm / remove_alarm services.

type: custom:ted-alarm-card
title: Alarms            # optional header (default "Alarms")
entity: sensor.teds_alarms   # optional, override the alarms sensor
show_add: true           # optional, show the add form (default true)
theme: ha                # optional, visual styling: ha (default) | ted-style

Each alarm row has an enable toggle, its label (and any description / repeat days), the time, and a delete button. The add form takes a label and time. Appearance (in the editor) offers Visual styling, Transparency / Background blur, a Brushed sheen, and a Subtle shadow toggle — matching the other cards.

⏱️ Timer Card

Start, view, and cancel countdown timers. Also requires the Ted's Dashboard System integration; the card reads sensor.teds_timers and calls start_timer / cancel_timer.

type: custom:ted-timer-card
title: Timers            # optional header (default "Timers")
entity: sensor.teds_timers   # optional, override the timers sensor
show_add: true           # optional, show the start form (default true)
theme: ha                # optional, visual styling: ha (default) | ted-style

Running timers show a live countdown with a cancel button; the start form takes a name and an H / M / S duration; recently used timers appear as quick-start chips. The same Appearance options as the Alarm card apply.


📋 Changelog

The newest entry below is used as the GitHub Release notes by the release workflow, so it shows in the Home Assistant / HACS update dialog when you update. Newest first.

v0.9.187

  • The Fullscreen card can now show a close button. When part of the Ted's Dashboard System (dashboard_integration: true), set close_button: true to add a close button beside the maximize/restore toggle; tapping it returns to the previous view (or the Home view when there is no history to go back to). The maximize/restore/close icons were also refreshed to a matching circled set.

v0.9.186

  • The dashboard navbar now shows a temporary launcher button for views without one. When you navigate to a view that isn't in the launcher (e.g. a subview), a button for it is added at the end of the launcher — with its own icon — so the active-view highlight has a home and you can tap back to it. It disappears again when you move to a view that has its own launcher button.

v0.9.185

  • The navbar liquid indicator now matches the ring highlight's size at rest. It sits on the exact button footprint (no inset) and shares the button's corner radius, so switching Highlight style between Ring and Liquid keeps the same size.

v0.9.184

  • Fixed the navbar liquid indicator lagging behind navigation. It now starts moving to the destination the instant you navigate (leading from the URL) instead of waiting for Home Assistant's view to settle, so it tracks your taps immediately. The bar is also no longer torn down and rebuilt during a view swap, which could reset the indicator to the corner.

v0.9.183

  • Reworked the navbar "Liquid morph" indicator into a liquid-glass tile. It's now a single frosted-glass tile with a thin accent ring (using your Highlight color) that flows and squash-stretches from the previous view's launcher button to the current one. It snaps to the active button on first appearance (no more sliding in from the corner) and reads like a themed glass highlight at rest.

v0.9.182

  • Added a "Liquid morph" active-view indicator for the dashboard navbar. Settings → Navbar → Highlight style now offers Ring (default) or Liquid morph — a single gooey blob that flows and stretches from the previous view's launcher button to the current one as you navigate (enabled by the persistent navbar). It uses your Highlight color and only applies to the Ted's Dashboard System navbar.

v0.9.181

  • Fixed navbar launcher icons briefly disappearing when switching views. With the persistent navbar (v0.9.180), the active-view highlight now restyles the current button in place instead of recreating its embedded card, so launcher icons no longer flicker or pop in during navigation.

v0.9.180

  • The navigation bar now persists across view changes on Ted's Dashboard System dashboards. With dashboard integration, the navbar is hosted once and survives navigation instead of being rebuilt for every view, so switching views no longer reconstructs the bar or its embedded buttons — cutting flicker and per-navigation work. Each view still chooses whether the bar auto-hides. Standalone navbars (without dashboard integration) render exactly as before.

v0.9.179

  • Fixed missing Music Assistant album art on HTTPS dashboards. Plain-HTTP MA image-proxy URLs are rewritten to the same-origin /ma-imageproxy/ NGINX route only when Home Assistant is loaded over HTTPS. Current-track, library, and queue artwork are covered; native HA proxy paths, HTTPS CDN images, and the still-supported plain-HTTP HA origin remain unchanged. Same-origin artwork also restores blur-background color sampling without canvas cross-origin failures.

v0.9.178

  • Voice Assist now uses robot state icons in the navbar. The idle button shows robot-outline, unavailable or failed voice shows robot-off-outline, and active interaction shows robot-happy-outline.
  • The Assist overlay now fades in without moving or scaling. Its fixed geometry and backdrop sampling prevent the dashboard from appearing to resize when voice interaction starts.

v0.9.177

  • The idle Voice Assist navbar button now uses a conversation icon instead of a microphone. The microphone appears only while Assist is actively listening, so the resting button no longer suggests that audio capture is already active.

v0.9.176

  • Settings now includes an About tab with system status. It shows the existing device, dependency, integration, and playback diagnostics without Global or This device controls, remains available when the TDS backend is unavailable, and supports direct links with ?tab=about.

v0.9.175

  • TDS Voice rich-result dialogs now support click-outside dismissal. The transparent light-dismiss layer consumes the completed click so it cannot activate the dashboard underneath.
  • The 30-second rich-result lifetime is now visible. A MessageBox-style accent bar counts down along the bottom edge and restarts whenever interaction inside the result resets its lifetime.

v0.9.174

  • TDS Voice now has a responsive, tool-aware interface. Assist responses stream into the overlay while the pipeline runs, named tool activity remains visible, and a fixed 10-bar colorful waveform responds to microphone input without shifting the layout.
  • Weather and Entity Card tool results now render as rich responses. Forecasts use responsive rows, while returned Lovelace entity cards are mounted as read-only previews. Rich results remain for 30 seconds of inactivity, reset their timer on interaction, and fullscreen responses return to the exact originating view without overriding later manual navigation.

v0.9.173

  • HomePods are now the top-priority speaker for auto-selected music playback. When a dashboard device has no explicit music-player setting, a HomePod in the same room now outranks Sonos, Chromecast, AirPlay and DLNA players. Stereo pairs are handled properly too: the combined pair (a Music Assistant sync group) is preferred over one of its own left/right channels, so the card can no longer pick a single speaker and play in mono. Provider ranking is also consistent now — a player ranks the same whether or not Music Assistant's exact-provider lookup has finished, which previously could make the choice change moments after the card loaded.

v0.9.172

  • Fixed: hidden Home Assistant entities no longer appear in Room Card auto-population. The card now honors the hidden flag exposed by Home Assistant's compact entity registry, so controls marked Visible off (such as smart-outlet relay lights) stay out of auto-populated Room Cards.

v0.9.171

  • Fixed: Dynamic Night Mode no longer raises an Unauthorized error on non-admin wall panels and nightstands. Theme snapshots now use a dedicated authenticated-user service instead of the admin-only global settings service. The backend derives the user ID from the Home Assistant service-call context, so each non-admin user can save or clear only their own Auto/Light/Dark restoration entry without weakening global-settings security.

v0.9.170

  • Fixed: Dynamic Night Mode now restores Auto, Light, and Dark exactly. Theme preferences are stored as explicit mode names per Home Assistant user instead of using null for Auto, which the backend treated as a deletion. Explicit Dark is captured rather than mistaken for an already-forced state, and sessions that did not participate in the night override can no longer consume another device's snapshot.

v0.9.169

  • Music playback now defaults to the room's preferred speaker. When a dashboard device has no explicit music-player setting, same-room providers are prioritized before matching the tablet or phone by name (Sonos first, then Chromecast, AirPlay, and DLNA). Room matching now honors device-inherited areas as well as entity-level assignments, while explicit music and system-sound choices still win.

v0.9.168

  • Fixed: navbar hold-menu toggles (auto-hide/float) stopped responding. The v0.9.166 "patch the DOM directly" optimizations for the navbar clock and Music Card progress bar mutated text nodes that lit-html also binds reactively, corrupting its internal tracking and crashing the next unrelated re-render partway through — which is what silently broke the toggle switches. Both now tick via a normal requestUpdate() again (the earlier navbar-clock correctness fix and the Music Card layout-measurement gating are unaffected and stay).

v0.9.167

  • Performance: Music Card no longer re-measures layout on every update. _measureLayout()/_measureTabs()/_measureMini() (each forcing several synchronous layout reads) now only re-run when hass or the config actually changed, instead of on every internal-state update (queue drag, lyrics scroll, menu open/close, etc.).

v0.9.166

  • Performance: Music Card progress no longer re-renders the whole card every second. While playing, the progress bar/elapsed time now patch directly instead of triggering a full re-render (tabs, queue, lyrics, media grid, and layout re-measurement) each tick.
  • Performance + fix: Navbar clock. The clock's per-second tick never actually activated (a stale type check), so it only refreshed on incidental re-renders and could go stale on a quiet screen. It now ticks reliably every second, patching just its own text instead of re-rendering the whole bar.

v0.9.165

  • Reverted the Navbar Card sliding active-view indicator (introduced in v0.9.161, adjusted in v0.9.162/v0.9.164). Each dashboard view mounts its own separate Navbar Card instance, so a real navigation destroys the old bar and creates a fresh one with no memory of the previous position — there is nothing to visibly slide or stretch between. The active-view ring is back to its original per-button instant highlight.

v0.9.164

  • Navbar Card: the sliding active-view ring now actually stretches. Same-size icon buttons never differ in width/height, so the previous move-and-resize transition never visibly stretched — it now bridges to a rect spanning both the old and new button before contracting onto the new one, with a springy overshoot ease, for a genuine liquid stretch/morph between taps.

v0.9.163

  • Device name and room self-management. Non-admin wall-panel users can now update their own Browser Mod or Companion app device name from the Status Card without opening Home Assistant's admin-only device page. The same dialog manages room assignment independently, disables room changes once a non-admin device is scoped, and reports name and room failures separately.

v0.9.162

  • Navbar Card: fixed sliding active-view ring misalignment. The v0.9.161 sliding indicator could drift a few pixels from the actual button because the button's own lift/scale was suppressed along with its ring color. The lift/scale now stays on the button (the indicator measures its rect after that transform), and the indicator re-measures itself if a late layout shift lands after the triggering render.

v0.9.161

  • Navbar Card: liquid sliding active-view indicator. The launcher's active-view ring now slides and stretches/morphs from the previously active button to the newly tapped one instead of instantly jumping, on both the horizontal and vertical (auto-hide) bars. At-rest appearance (color, thickness, lift) is unchanged.

v0.9.160

  • Room Card auto-populate: scene element order. Scene buttons now explicitly use Name → State → Icon ordering, with Name shown at the top, State hidden in the middle slot, and Icon shown at the bottom.

v0.9.159

  • Room Card buttons: larger minimum size. Responsive Room Card layouts now keep a normal button at least 68px wide (up from 58px), reducing cramped buttons before stepping down to fewer buttons per row.

v0.9.158

  • Room Card auto-populate: brightness & volume are icon-only. Auto-populated brightness and volume status items now show just their icon (no value text), for a cleaner status bar.

v0.9.157

  • Brightness status item: the icon now shows the level. With no manual icon set, a brightness item uses the mdi:lightbulb-on-XX range matching the current brightness (and lightbulb-off-outline when off) instead of a static icon. A number/input_number maps by its min–max range; a manual icon: still wins.
  • Room Card auto-populate: smarter status bar. Auto-populated presence is now icon-only and color-coded (accent when occupied, muted when unknown/unavailable), temperature shows just its value, and brightness/volume show icon + value — dropping to icon-only automatically when the value would otherwise clip the room name.

v0.9.156

  • Automatic Night Mode: no longer gets stuck in dark. When a device's account was already in dark mode as night began, night mode couldn't record a "day" value to restore, so it never switched back to light at dawn (and every following night reinforced it). Now, when Dark Mode is enabled in Night Mode, dawn always restores light even if no snapshot was taken — so panels reliably return to light in the morning.

v0.9.155

  • Navbar launcher: no jump on fully-transparent buttons. When the launcher buttons are set to 100% transparency, the "highlight current view" now draws a static ring instead of lifting/scaling the active tile — so it no longer resizes and shifts. Below 100% transparency the lift/scale look is unchanged.

v0.9.154

  • Room Card buttons scale better across screen sizes. Buttons now aim for 5 across but flex between 2 and however-many fit, keeping each button within a sensible size range instead of getting huge on wide wall panels or tiny on narrow ones.
  • Room Card tile shadows no longer clip. On themes with a card drop shadow (e.g. Material 3), the button area now leaves just enough room so tiles' shadows aren't sliced off at the edges — sized automatically to the theme's shadow.
  • Indicator bars follow rounded corners. The Light and Cover cards' brightness/position bars (and hint stripes) and the Music mini-player's progress strip now sit within the card's rounded corners with rounded ends, instead of square edges poking past or being cut on themes with a large corner radius.

v0.9.153

  • Room Card photos are now assigned across rooms, not per-card. A shared assigner is seeded from every Home Assistant area name, so within a type the best-fitting room always gets the main photo (e.g. "Primary Bedroom" wins Bedroom.webp over "Steve's Room") and the remaining rooms fall back to the alternates — deterministically, and updating automatically as areas are added, renamed, or removed.

v0.9.152

  • Room Card photo auto-selection is smarter, and no room is left blank. Auto now matches many more room names (synonyms like "Master Suite"/"Guest Room" → bedroom, "Den"/"Study" → office, "Great Room" → living room, "Powder Room" → bathroom, plus possessive names like "Bill's Room" → bedroom), matches whole words, prefers the most specific match, and falls back to the room's area name. Rooms of the same type now get different photos where alternates exist, and any room that matches no type falls back to a generic photo so a card is no longer left blank. Adds new Bedroom and generic photos.

v0.9.151

  • Fixed: re-overriding a device's Navbar sections could silently lose that device's type-specific layout. Toggling a device's "Navbar sections" from Inheriting back to Overriding always reseeded from the Global bar, so a Nightstand (whose whole point is a bar with weather and date/time stripped out) could have those items reappear after an inherit/override cycle. Re-overriding now reseeds from the device's own type preset when it has one.

v0.9.150

  • Vision tab: tiles is now the default view, with four selectable tile sizes (Small 1.5x, Medium 2x, Large 2.5x — new default, X-Large 3x) via the card's editor.
  • The layout toggle button moved into the same row as "Mark all reviewed" / "Clear all", to their left.
  • "Hide viewed" is now "Show viewed events" and defaults off, so reviewed events are hidden until you turn it on.

v0.9.149

  • Vision tab: a layout toggle button. The card header now has a button (top-right, next to the title) to switch between list and tile view instantly, without editing the card's YAML config.

v0.9.148

  • Vision tab: new tile layout. The Cameras → Vision timeline now supports a larger tile view that keeps the same metadata as the list view but renders the severity as a color dot, keeps the name/time on one row, and places the summary beneath the thumbnail.

v0.9.147

  • Room Card: bundled header photos no longer briefly load from the jsDelivr CDN. With Ted's Dashboard System installed the photos are served locally, but on first paint the card could momentarily request the CDN copy (tripping browser tracking-prevention warnings) before the local cache resolved. It now waits for the local lookup before falling back to the CDN, and fetches any un-cached bundled photo into local storage.

v0.9.146

  • Music Card: the volume control now opens a native Home Assistant slider dialog. Tapping volume (in both the full player and the mini bar) opens a modal with HA's touch-optimized slider plus a mute toggle, replacing the inline slider that was awkward on touch wall panels. This also clears a slider-vertical deprecation warning from the browser console.

v0.9.145

  • Camera Card: smooth Frigate live on the MSE path (Edge and other H.265-via-MSE browsers). The live-edge tracker no longer fast-forwards playback to catch up — which was overloading the decoder, dropping frames, and lurching the video up to 5× — it now jumps to the live edge and plays at normal speed. The MSE path also serves the low-res detect stream (like ACC) so the decoder keeps up. WebRTC browsers are unaffected.

v0.9.144

  • Camera Card: Frigate live now works on browsers without H.265-over-WebRTC (e.g. Microsoft Edge). The card now picks its live transport by browser capability — WebRTC (with audio) where H.265 can be decoded over it, otherwise the MSE player, which decodes H.265 via the platform. Previously such browsers connected over WebRTC but received no video and showed a frozen frame.

v0.9.143

  • Camera Card: the primary live tile no longer freezes on load. A WebRTC connection that took a moment to start rendering could trip an 8-second timer and fall back to a frozen still; the player now treats a connected peer as live, so slow or autoplay-deferred video keeps streaming instead of dropping.
  • Camera Card: primary tile starts muted with a speaker toggle. Every tile now starts muted so it always plays, and the primary live tile shows a mute/unmute speaker button in its corner — tap it to turn audio on or off without reconnecting.

v0.9.142

  • Grouped launcher buttons: the multi-view hint shadow hides at full transparency. When a launcher button's background Transparency is set to 100%, the "card behind" stacked-card shadow on a combined multi-view button is now hidden too, so it doesn't read as a stray mark over the transparent tile.

v0.9.141

  • Camera Card: the primary tile now starts live. The first (primary) camera in any layout defaults to live — one always-on feed with audio for Frigate cameras — while the other tiles stay on lightweight auto thumbnails. Per-camera camera_view settings and in-session view toggles still take precedence.

v0.9.140

  • Camera Card: live audio for Frigate cameras (go2rtc WebRTC). Frigate cameras set to live now stream over go2rtc's WebRTC, which carries audio (go2rtc transcodes the camera's AAC to Opus) alongside H.265 video at sub-second latency. In multi-camera layouts only the primary tile is unmuted. If WebRTC can't connect it falls back to the MSE player (video-only), then to the thumbnail — so a tile is never left dead.
  • Camera Card: the Frigate live player now actually plays. Fixed three issues that stopped the previous MSE player: it used the wrong Frigate instance id (the proxy returned 404), it stalled at the live edge without ever starting, and Chromium couldn't decode audio muxed with H.265. The MSE fallback now trims to the live edge and drops audio only where the browser requires it.

v0.9.139

  • Camera Card: native live video for Frigate cameras. Cameras set to live now play through a built-in MSE player over Frigate's WebSocket, so H.265 cameras stream in real time (~1-2 s) where the browser's WebRTC/HLS transports couldn't. Quality tiers request the matching go2rtc stream (base / _med / _high). Non-Frigate cameras, unsupported browsers, and any playback failure fall back to the existing thumbnail/stream automatically.
  • Camera Card: streams survive a quick tab switch. Briefly switching tabs no longer tears every feed down and forces a full reconnect — teardown now waits a short grace period and cancels if you return.

v0.9.138

  • Launcher button icons follow the theme. Launcher button icons now default to the theme's text color (matching the navbar's weather/clock/date font) instead of always white, so they read correctly on light themes. A Button color you set explicitly still applies.

v0.9.137

  • Grouped launcher buttons: the stacked-card shadow follows the theme radius. The "card behind" shadow on a combined multi-view launcher button no longer uses a fixed corner radius — it matches the button's own theme-driven radius so the two corners line up.

v0.9.136

  • Launcher Buttons: Transparency & Blur. Settings → Navbar → Launcher Buttons gains Transparency and Blur controls for the buttons' backgrounds, side by side below Button/Highlight color.
  • Button Card: entity default icons. A bound entity with no custom icon now shows Home Assistant's own default (e.g. scenes → mdi:palette) instead of the generic tap glyph.
  • Calendar (Agenda): a touch more breathing room — 1px between events and slightly more day-row padding.

v0.9.135

  • Room Card auto-populate: brushed tiles. Auto-populated light, cover, button, and scene tiles now enable the brushed-metal effect.

v0.9.134

  • Room Card: photo cards keep their frosted-glass body. The header photo now sits above the card's frost layer, so on translucent/glass themes the card body still frosts while the photo stays crisp (previously a photo turned the whole card's frost off).
  • Full-transparency cards drop the glass edge-glow too. A fully-transparent card (e.g. the Clock) now also clears the theme's --ha-card-box-shadow, so ha-card::before-based glass themes no longer draw a glowing edge around an otherwise invisible card.

v0.9.133

  • Translucent/glass themes no longer blur where they shouldn't. Under themes that drive card blur from --ha-card-backdrop-filter or an ha-card::before pseudo-element (e.g. visionOS / frosted-glass themes): fully-transparent cards (like the Clock in full-transparency mode) now truly show straight through, and the Room Card header photo stays crisp instead of being blurred by the theme's card frost.

v0.9.132

  • Fullscreen Card: square corners when maximized. Expanding to full screen now forces the housed card to square (0px) corners so a themed card border-radius no longer rounds the screen corners and leaves gaps — most noticeable on themes with larger radii. Normal (non-fullscreen) cards keep their rounded corners.

v0.9.131

  • Music Card: dark-mode readability scrim. In dark mode, a subtle scrim is drawn over the blurred album-art background so light artwork stays readable. No effect on cards that don't use background_mode: blur, or in light mode.

v0.9.130

  • Music Card: removed the “Recent” tab. The full player's tab bar is now Media / Queue / Lyrics. (The “Recently played” row inside the Media tab is unchanged.)

v0.9.129

  • Music Card (Mini): progress bar respects rounded corners. Fixed the playback progress strip poking past the card's bottom corners on themes with a large border radius — it's now clipped to the card shape.

v0.9.128

  • Music Card (Mini): equalizer now matches the full player. The now-playing equalizer uses the same three bars as the full player's queue indicator (was four), and its animation is a touch slower.

v0.9.127

  • Music Card (Mini): tap-to-open menu + now-playing equalizer. The “…” button is gone — tap anywhere on the bar (outside the transport buttons) to open the action menu, which flies up from the bar (or down when the card is near the top of the screen). While audio is playing, an animated equalizer appears at the right of the controls row, or in the title row when the controls are stacked.

v0.9.126

  • Music Card: adaptive Mini player + dashboard_integration. The Mini player now adapts to the space it's given — transport controls fold into the “…” menu as the card narrows (down to just “…”), and drop to a row below the title/artist when the card is tall enough; the thumbnail auto-sizes to the card height. The separate “Micro” mode has been removed — that behavior is now automatic. The player is sourced from Settings via a new YAML-only dashboard_integration: true (replacing the player_source option).

v0.9.125

  • Music Card: new "Micro" player + taller Mini bar. mode: micro is a compact nine-wide, one-row player showing only Play/Pause and a menu (previous, next, shuffle, and repeat move into that menu). mode: mini now defaults to two rows tall. In both bar layouts the thumbnail auto-sizes to the card height (and stays sensibly bounded when the card is set to auto height).

v0.9.124

  • Night Mode dark theme now reliably returns to light at dawn on multi-panel setups. The pre-night dark-theme preference is snapshotted once at the account level (matching Home Assistant's user-scoped dark toggle) instead of per-device, so a panel that booted after dark had already cascaded can no longer "restore" the account back to dark in the morning.

v0.9.123

  • Room Card auto-populate: switches now go to "Others". All switch entities (including smart plugs and switch groups) move from Controls to Others. Controls keeps scenes, zones, lights, covers, fans, and valves.
  • Smarter area-name stripping for possessive room names. A room named "Teddy's Bedroom" (or "Teddy's Room") now also strips the owner, so "Teddy's Ceiling Lights" reads as "Ceiling Lights". Curly and straight apostrophes are treated the same.

v0.9.122

  • Calendar Card (Agenda view): slightly more space above each day. The day-row top padding is now 5px (bottom stays 4px).

v0.9.121

  • Calendar Card (Agenda view) polish. Each day row now has even 4px top/bottom padding, and the line under each day's date is now a vertical divider on the right of the date column at 50% opacity (today stays blue, other days use the grid color) instead of a horizontal underline.

v0.9.120

  • Calendar Card: removed the stray hairline border. In the HA and Ted's Style surface modes, the embedded Daylight Calendar's own card border no longer shows as a 1px line on top of Ted's frosted surface — the surface is now the only card edge. The native (superdingo) look keeps Daylight's own border.

v0.9.119

  • Cards now follow your Home Assistant theme by default. Every card defaults to the active HA theme; the self-contained Ted's Style (Mica-dark) look is now opt-in only. This fixes the out-of-place bright 1px border that appeared around cards on a light theme.
  • Ted's Style card outline adapts to light/dark. In Ted's Style mode the card stroke now uses the Windows 11 Fluent dark-on-light control stroke under a light device preference (and the light-on-dark stroke in dark), so the outline looks correct in both modes instead of a bright rim on pale surfaces.
  • Navbar follows the Personalization theme. With dashboard integration, Ted's Navbar (and its launcher buttons) now follow Settings → General → Personalization → Theme instead of a fixed style.

v0.9.118

  • Music Media tab polish. The library filter is reordered to Favorites (default) / Playlists / Artists / Albums, the filter pills + view toggle now sit below the Recently-played row, and they no longer sit on an opaque bar.
  • Idle player now matches your other cards. With nothing playing (blur background mode), the player no longer paints an opaque fill — it shows the themed card surface (same color, opacity, and blur as every other card) with theme-colored text. The blurred album-art background returns once something plays.

v0.9.117

  • Music card: the Media tab is now an artwork browser. The Media tab presents your Music Assistant library as artwork tiles (with a one-tap list-view toggle), adds a Playlists / Albums / Artists / Favorites filter and a Recently played row, and plays any item on this device's player with a single tap. Favorites shows your favorited playlists. A new media_layout option sets the starting layout.
  • Removed the last Yet Another Media Player leftovers. The card has been self-contained for a while; the stale engine / split / yamp_config / left_config / right_config options (silently ignored by the current card) are gone from the docs and the shipped Music view, and YAMP is no longer listed as a prerequisite.

v0.9.116

  • Room Card auto-populate: smarter ordering, zones, and plugs. Buttons in each section now sort by priority — scenes → zones → lights → covers → plugs → other. Group entities are treated as "zones": the group tile stays in Controls while its individual members move to Others. Switches with an outlet or plug device class get their own "plugs" bucket. A new Group scenes into their own section option keeps scenes inside Controls by default (turn it on for a dedicated Scenes section). Tile names now have the room's area name stripped in every section.

v0.9.115

  • Room Card photos are now served locally when Ted’s Dashboard System is installed. The 16 curated room header photos ship inside TDS and load from your own Home Assistant instead of fetching from a public CDN on every dashboard load — no third-party request, no referrer leak. Card-only users (no TDS) still get the photos from the CDN as before. The photos were also converted to WebP (87% smaller). A “Retrieve default photos” button appears in the Room Card editor only in the rare case the bundled photos are missing.

v0.9.114

  • Night mode’s “Switch to Dark Mode” now uses Home Assistant’s real dark theme. Instead of a per-browser style override, it toggles HA’s own user-scoped Dark Mode at night and restores your previous preference at dawn. Because that setting is per-user, enabling it here also affects the account’s other devices — so turning it on now shows a confirmation listing those devices (with Keep setting / Cancel), and only when the account has more than one device.

v0.9.113

  • Calendar Card: dark mode now follows the Home Assistant theme. On the HA theme, the wrapped Daylight calendar was left in its own "auto" mode, which tracks the browser's color scheme rather than HA's — so in a dark HA theme its text stayed dark and its event tints blended toward white (making events jump out). It now follows HA's dark-mode toggle, so the font turns white and event tints recede to match the rest of the dashboard. Event tint softened slightly (85%) so events are a touch more subtle in both modes.

v0.9.112

  • Calendar Card (HA theme): fixed the surface reading milkier than other cards. On translucent themes (Win11/Mica/macOS), the wrapped Daylight calendar floored its own cell/agenda surface opacity, adding a second translucent layer on top of the card's frosted surface. Its custom surfaces are now forced fully transparent so the calendar matches a native ha-card's translucency.

v0.9.111

  • Night mode redesigned → “Dynamic night mode.” The single on/off switch is gone; each effect is now independently opt-in (all off by default). Schedule and Switch to Dark Mode lead, followed by a collapsible Dynamic brightness section (separate Screen and Background controls with day/night levels) and a Dynamic font section. Background can now be hidden at night behind a calm solid gradient instead of dimmed. Per-device overrides are independent per sub-section.

v0.9.110

  • Personalization section repositioned. In Settings → General, the collapsible Personalization section (Theme, Icon set, Background Wallpaper) now sits directly under Kiosk mode, above the Automatic night mode section. Collapsible sections now render in their declared position within a group rather than always at the bottom.

v0.9.109

  • Settings → General reorganized. Kiosk mode now sits directly under Device type, and a new collapsible Personalization section groups Theme, Icon set, and Background Wallpaper. Weather entity moved into the Advanced section, and the Automatic night mode settings now stay visible even when night mode is turned off.

v0.9.108

  • More dialogs fixed from running off-screen. The same top-layer modal fix from v0.9.107 now also applies to the Timer add/edit and recent-timer dialogs, the Settings “Add” choosers, and the Vision event detail — so none of them can be clipped or pushed off-screen when the card sits inside a tabbed or scaled layout.

v0.9.107

  • Fixed the alarm dialog running off-screen. The taller add/edit alarm dialog could extend past the bottom of the screen with its buttons unreachable. It now opens as a proper top-layer modal that's always centered and reachable, with the header and footer pinned and the body scrolling when needed.

v0.9.106

  • Alarm dialog now uses proper entity pickers. The Wake-up light and Only when present fields are searchable Home Assistant entity pickers (with icons and domain filtering) instead of plain dropdowns.

v0.9.105

  • Alarms can require presence. Each alarm can now name an optional presence sensor (occupancy/motion binary sensor, person, device tracker, or input boolean). If nobody's present when the alarm is due, it skips both the wake-up light and the alarm itself — no point waking an empty room. Set it in the new Only when present field of the add/edit dialog. Requires Ted's Dashboard System.

v0.9.104

  • Alarms can gently wake you with a light. Each alarm can now name a light that gradually brightens up to a target level, reaching full exactly when the alarm rings (a smooth, parabolic sunrise ramp rather than a linear one). As an energy safeguard the light fades back to whatever it was before — but only if you haven't already changed or switched it off. Configure it per alarm in the new Wake-up light section of the add/edit dialog. Requires Ted's Dashboard System.

v0.9.103

  • Vision timeline previews now animate. Each event's thumbnail loops through the stills that were analyzed (Frigate-style), so you can see the motion at a glance instead of a single frozen frame. The detail sheet falls back to the same looping stills when an event has no clip. Respects reduced-motion (shows a static frame). Needs Ted's Dashboard System to retain the frames — older events keep their single thumbnail.

v0.9.102

  • Vision analysis debugging now also raises a notification per pass. With Enable analysis debugging on, each pass (and each A/B pass) posts a silent Info notification titled with the AI Task entity, showing its images/timing/severity and full summary — so you can compare models straight from the notification center without opening each event. Off by default; note it churns the notification list while on.

v0.9.101

  • Vision analysis debugging + model A/B. The diagnostic setting is renamed Enable analysis debugging (and now works in single-pass mode too), and a new AI Task entity — A/B pass runs every pass a second time in parallel against a candidate model with the exact same images — recorded in the event detail for side-by-side comparison, but never published (it can't change the event's summary). Doubles AI cost only while an A/B entity is set.

v0.9.100

  • Vision cost controls. Vision Analysis settings gain Images per pass (now a total budget including Frigate's labelled snapshot, default 5), Max image size (downscales every image before the AI sees it — default 1024 px, 0 = full resolution), and Adaptive image count (sends fewer images on quiet events, scaled to how much the tracked object moved). Together these cut per-event vision cost several-fold and make it predictable across AI models.

v0.9.99

  • Vision: the analysis-passes detail is clearer about what each pass saw. Pass 1 is now labelled “Pass 1 — live, first 10s” and Pass 2 “Pass 2 — finished clip”, and each pass now shows whether the model was actually fed video or stills — so a provider that can't accept video (e.g. Ollama/OpenAI) is no longer silently sent stills without you knowing. (Pairs with the backend change that makes Pass 1 run live at the start of the event.)

v0.9.98

  • Vision: compare both analysis passes. A new diagnostic setting (Settings → Cameras → Vision Analysis → Enable analysis debugging) stores the quick and detailed pass results separately on each event, and the event detail sheet gains an Analysis passes disclosure showing each pass's entity, timing, attachment count, and text — with the one you actually saw tagged shown. Off by default; older events are unaffected.

v0.9.97

  • Cameras and Vision are now one view. Ted's Tab Card gained per-tab gating so the Cameras view can host the Vision timeline as a second tab: a tab can be tied to a setting (the Vision tab hides when Vision Analysis is off), and the tab strip auto-hides when only one tab remains. Both tabs are deep-linkable (?tab=cameras / ?tab=vision).
  • Calendar Card Agenda view: the blank strip above each day row nudged from 1px to 2px.

v0.9.96

  • Navbar: Assist mic moved to the left. The voice Assist button now sits in the navbar's Left section (just after the weather item) instead of leading the Right status cluster. The Nightstand device type no longer auto-hides its navbar — the bar stays visible on the right.

v0.9.95

  • Night Mode no longer darkens other devices on the same account. Automatic Night Mode's dark theme is now applied locally in each browser instead of through Home Assistant's account-wide theme setting, so a nightstand can go dark while wall panels sharing the same HA user account stay light. Devices that share one account can now hold different night-mode settings, and the profile page's Theme selection is left untouched.

v0.9.94

  • Notification severity now has a color, not just an icon. Each severity has a single canonical accent color (info blue, success green, warning amber, danger red, tip purple) shared by the toast, Notification Center, and message detail views — and the danger accent was warmed up to a clearer red. The auto-hide navbar pill now pulsates in the color of the highest-severity unread notification (danger > warning > success > info > tip), so a serious alert reads at a glance even before you reveal the bar.

v0.9.93

  • Calendar Card (Agenda view): tighter day rows. Trimmed daylight-calendar-card's 8px blank strip above each day row down to 1px, so days sit closer together.

v0.9.92

  • Vision card: clearer empty states. Instead of always showing “opt cameras into Vision Analysis”, the timeline now tells you the real reason it's empty — Vision is off, no cameras opted in, watching for activity, all events already viewed, or no events match the current filters — and offers a Show all events button when filters are hiding everything.

v0.9.91

  • Vision card: “Hide viewed” toggle. The Vision timeline now hides events you've already reviewed by default, keeping the list focused on what's new; tap Hide viewed in the filter row to show them again.

v0.9.90

  • Vision Settings: “Any Frigate alert” catch-all trigger. For a Frigate camera, Vision now always has a built-in catch-all so no Frigate alert is ever silently dropped — the motion trigger reads “Any Frigate alert”, is created automatically when you enable analysis, and can't be deleted. Add object triggers (person, car, …) only to give a specific object a different cooldown or actions. Requires the Ted's Dashboard System integration.

v0.9.89

  • Calendar Card (Agenda view): long event titles now truncate with “…” instead of stretching past the card. A long-standing layout quirk in the underlying daylight-calendar-card (its event column and title never shrank below the title's intrinsic width) let long titles overflow the card's right edge; it became more noticeable after the recent event-title size bump. Titles now ellipsis-truncate within the card at any font size.

v0.9.88

  • Voice: interrupt a long answer, and the response view scrolls. While the assistant is speaking you can now cut it off — say a stop word (“stop”, “shut up”, “quit”, “no”, “cancel”…) and it stops and acknowledges with “Okay”, or tap the navbar mic (which turns into a stop button while speaking). The full-screen Assist-Response view now scrolls, so long answers no longer get clipped. See the Voice Assist docs for a suggested agent instruction to keep spoken answers short.

v0.9.87

  • Nightstand device type: navbar now defaults to the right. The one-time Nightstand preset docks the bar to the right edge (was left) and keeps the Left and Right navbar sections enabled — just with the weather and date/time status items removed — instead of hiding them entirely.
  • Calendar Card (Agenda view) polish. In the day column the weekday and forecast now sit tightly just above and below the date number (vertically centered as a group, rather than pinned to the top and bottom), and the date number is a bit larger.

v0.9.86

  • Calendar Card (Agenda view) tuned to a Calendar Card Pro look. In Agenda mode the day date is larger, the weather forecast now shows only the high temperature with its condition icon sized to match, days are spaced 1px apart, events sit flush with no gap, and event titles are a touch larger (via daylight's native event_font_size).

v0.9.85

  • Vision events now show live analysis progress. A camera event appears the instant it's detected with an In progress… badge (and its actions — live feed, chime, notifications — fire immediately), upgrades to Analyzing… while the AI reviews the clip, then settles into its final summary and severity. With two-pass analysis a quick first look can post a preliminary summary before the detailed pass finishes. Requires the Ted's Dashboard System integration.

v0.9.84

  • Vision triggers: “Discard events if severity matches”. The per-trigger severity control is now a discard filter rather than a gate — trigger actions (live feed, chime, notifications) always fire the instant an event starts, and after the full AI analysis completes any event whose final severity matches the selected levels (or that turns out to be a false alarm) is discarded per your Filter out false alarms setting (log only or drop). Requires the Ted's Dashboard System integration.

v0.9.83

  • “Analyzing…” badge on Vision events. When Frigate reports a new object, the Vision timeline now shows the event immediately with a pulsing Analyzing… badge (using Frigate's live thumbnail), then upgrades the row in place once the clip and AI summary are ready (requires the Ted's Dashboard System integration).

v0.9.82

  • Tighter Frigate integration on the Cameras view. For a Frigate camera, the long-press menu now includes Detect / Recordings / Snapshots toggles and a Recordings link (opens Frigate's review page), and each tile can show status chips (review status + active object counts). New Settings → Cameras → Frigate toggles control these plus using Frigate's own detection to save an AI pass (requires the Ted's Dashboard System integration).

v0.9.81

  • Use Frigate as your camera source (Settings → Cameras). When the Frigate integration is installed and exposing cameras, the Cameras settings page now offers a one-tap switch to Frigate — it does a one-time clear of your current camera list and replaces it with your Frigate cameras (requires the Ted's Dashboard System integration).

v0.9.80

  • Removing a Bing “Photo of the Day” now removes it from every device at once. When you tap Remove on one tablet, the wallpaper slideshow on all other devices drops that photo live too (advancing to a new image only if it was the one currently on screen) — instead of the removed photo lingering until each device reloaded (requires the Ted's Dashboard System integration).

v0.9.79

  • Notifications now show a thumbnail image when one is provided. The navbar notifications popup, the Notification Center card, and the toast all display the notification's thumbnail (e.g. a vision event snapshot) in place of the icon when available, falling back to the icon otherwise.

v0.9.78

  • Settings → Cameras substream cleanup. Auto-populate now collapses high/medium/low substream channels into one entry per physical camera (keeping the highest-res) and cleans up any redundant substreams already in the list, and the “Add a camera” picker hides redundant medium/low substreams — matching the camera card editor. A camera whose only entities are substreams is never hidden.

v0.9.77

  • Camera card editor polish for substreams. The Medium/Low substream pickers now show the auto-detected feed as a muted placeholder when left blank, so the effective stream is always visible. The main “Camera entity” picker now hides redundant medium/low substream entities (keeping only the main feeds), while never hiding a camera whose only entities are substreams.

v0.9.76

  • Camera card substream matching is now device-aware. Auto-detection and “Auto populate” only pair feeds that belong to the same parent device and share a significant portion of their entity name. This correctly links renamed cameras to their substreams (e.g. a renamed camera.front_yard_camera to its _medium/_low_resolution_channel siblings) while keeping distinct feeds like doorbell package cameras separate.

v0.9.75

  • Camera card “Auto populate” is now smart about substreams. It collapses the high/medium/low variants of the same camera into a single entry (keeping the highest-res), so you no longer get a wall of duplicate feeds — the card auto-detects the lower-res siblings for small tiles. Substream detection also now recognizes Reolink's _high/medium/low_resolution_channel entity naming.
  • Removed the “Camera source” selector from the card editor. The device-Settings source is a dashboard-integration feature and is now YAML-only; cards already using it keep working.

v0.9.74

  • Camera card now auto-detects substream entities. When the Medium/Low substream fields are left blank, the card finds sibling camera entities by naming convention (UniFi Protect _high/_medium/_low, Reolink _clear/_balanced/_fluent, generic _main/_sub), so lower-res feeds are used for small tiles with no manual setup. Explicit config still overrides.

v0.9.73

  • Camera card can now use lower-resolution substreams for small feeds. Each camera gains optional "Medium substream" and "Low substream" entities. The card renders the low feed for the small Multi tiles, the medium feed for the Multi primary tile and the Quad/Auto-grid tiles, and the full (main) feed for the Single layout — with graceful fallback to the main camera when a substream isn't set. Cuts bandwidth on multi-camera layouts.

v0.9.72

  • Tapping a notification in the Notification Center card now opens it. A tap marks the notification read and opens the full event in the same centered detail modal used by the navbar notifications popup (title, time, any vision clip, and the full message) instead of only marking it read.

v0.9.71

  • Fixed repeated “Unauthorized” log spam on non-admin tablets. Auto-refresh-on-update now subscribes through the backend's dedicated WebSocket command instead of listening to the custom event directly, so kiosk/Wallpanel users no longer flood the log with Refusing to allow … to subscribe to event errors. Requires Ted's Dashboard System v0.9.76+.

v0.9.70

  • Mini Music Player volume slider now fills its popup. The vertical slider stretches to fit the popout height instead of floating short in the middle.

v0.9.69

  • Mini Music Player volume popout is now a vertical slider. The volume flyout shows the level on top, a vertical slider (louder = up), and the speaker/mute button at the bottom.

v0.9.68

  • Fixed the mini Music Player “…” menu opening off-screen. On a bottom-pinned mini player the menu (and volume flyout) now open upward instead of dropping below the screen edge.

v0.9.67

  • Music Player “mini” mode: “Party Mode!”. The mini player’s “…” menu has a new Party Mode! item that opens Music Assistant’s built-in fullscreen party dashboard for the current player. Requires Music Assistant 2.8+ with the Party plugin.
  • New Web View card. A reusable full-bleed web-view (iframe) card that loads a URL from its config or a ?url= navigation parameter — used by Party Mode to show the party page inside the dashboard.

v0.9.66

  • Music Player “mini” mode: new “…” menu. The compact mini player’s volume button is now a “…” button that opens a menu with Media, Queue, and Volume. Media and Queue open a pop-up window with the full player’s Media or Queue tab, and Volume opens a compact slider (tap the speaker to mute).

v0.9.65

  • Fixed a full-screen black overlay on some devices. The Vision “Display live feed” overlay added in v0.9.64 could render as a permanent black screen on devices whose browser doesn’t support the Popover API (some companion-app webviews and wall tablets). The live view is now hidden by default and only appears when a feed is actually opened.

v0.9.64

  • Vision “Display live feed” opens a live camera view instantly. When a trigger fires this action, targeted screens now pop open a muted, full-screen live stream of the camera (WebRTC-preferred for speed) instead of navigating to the Cameras view. It closes automatically after 60 seconds, or on a tap.

v0.9.63

  • Room Card: new auto_max_rows option — each section auto-limits its visible rows to what fits the card's height (measured in rows of 1.5x-height tiles) and overflows the rest into the “…” menu.

v0.9.62

v0.9.61

v0.9.60

v0.9.59

  • Room Card: the editor now refreshes after Auto-populate, so it no longer shows stale fields from the previously configured entities.
  • Music card (mini): the playback progress is now a thin, non-interactive strip pinned to the card's bottom edge (no seek thumb).
  • Calendar card: new agenda_evening_lookahead option — the agenda shows 0 extra days before 5pm and 1 extra day (through tomorrow) from 5pm on.

v0.9.58

  • Room Card: the light-name header text stays legible when it sits over a top-scrimmed header photo.
  • Room Card auto-populate: Controls and Scenes item names now have the room's area name stripped out (e.g. in a “Kitchen” room, “Kitchen Ceiling Lights” becomes “Ceiling Lights”).

v0.9.57

v0.9.56

  • Settings: hide Global tab from non-admins. The Settings card now hides the “Global” tab for non-administrator users (and forces the “This device” scope), instead of showing it read-only.

v0.9.55

  • Global Theme setting. Settings → General now has a Theme option (HA Theme / Ted's Style) that drives every Ted card with dashboard_integration enabled (clock, room, calendar, …). The old per-Calendars “Theme” setting was removed. An explicit theme: on a card still wins.
  • Room Card: now defaults to the HA theme, and a newly added section button leaves its Name empty so it inherits the entity's name and icon.
  • Room Card auto-populate: entities from Browser Mod devices (e.g. the tablet's own screen) go to the Others section instead of Controls/Media; Controls lights are ordered by role (ceiling/main → pendant → lamp/desk → accent → other); and Scenes render as icon + name.

v0.9.54

  • Calendar Card: matched header colors. Ted's Style now has a steel-blue header and HA Style uses the theme's primary color, each with a lightly translucent header (Ted's 40%, HA 30%) over the themed surface. SuperDingo's Style keeps Daylight's native header.

v0.9.53

  • Calendar Card: consistent theming + a third option. The theme styling now has three choices — Home Assistant (a cohesive HA-card surface), Ted's (a dark frosted, translucent surface), and SuperDingo's (the native Daylight Calendar look). Previously “Ted's Style” looked like a plain HA card and “HA Theme” looked like the raw Daylight card; both now match the rest of Ted's cards by making Daylight's own body/header transparent behind the chosen surface.

v0.9.52

  • Room Card: added a 1.5x button height, and the button sections now scroll on their own so the status header stays visible on a fixed-size card.
  • Calendar Card: replaced the “Calendar source” option with a yaml-only dashboard_integration flag (consistent with the other cards) — calendars come from Settings when it's on, otherwise from the card's own entities. A card-only calendar's empty state no longer points to Settings. The Header editor section was tidied (Show header on its own row, color + transparency paired), gained a Show controls toggle, and disables the rest when the header is hidden.

v0.9.51

  • Room Card auto-populate: taller light/cover tiles. Auto-populated light and cover tiles are now double-height with default name/icon/state styling.

v0.9.50

  • Clock: system-aware custom hour. With time_format: custom, the hour token now follows Home Assistant's 12/24-hour setting — h:MM renders as h:MM (12-hour) or H:MM (24-hour) automatically, keeping your leading-zero/separator style.
  • Confirmation dialogs work over the card editor. The self-contained confirmation and prompt dialogs (e.g. the Room Card “Auto-populate” overwrite warning) are now native modal dialogs, so they appear above the card editor and are interactive instead of passing clicks through to it.

v0.9.49

  • Room Card auto-populate refinements. Auto-populated light/cover tiles now show a compact name + icon + state (at 75%), generic buttons show a name (60%) + state without an icon, the Media section uses a multi-speaker icon, and the section layout switches to tabs whenever there is more than one section. The editor's “Auto-populate” overwrite confirmation now appears above the card editor instead of behind it.

v0.9.48

  • Room Card auto-populate. The Room Card can now build itself from a room's entities. Standalone cards get an Auto-populate from area button in the editor (with an overwrite warning), and cards with dashboard_integration: true and no sections automatically adopt the device's area and populate live — hiding themselves when the device has no area. It adds occupancy, temperature (a single thermostat is shown and adjustable from the header), main-light brightness, and volume status items, and groups controls into Controls, Scenes, Thermostats, Media, and Others sections.

v0.9.47

v0.9.46

  • Vision card: bulk actions + list-order fix. The filter row now has right-aligned “mark all reviewed” and “clear all” buttons, and marking an old event reviewed no longer pops it to the top of the list — it keeps its chronological position.

v0.9.45

  • Vision false-alarm fixes. Events are no longer all tagged as false alarms (a boolean-coercion bug), "Drop" now discards false alarms flagged during the detailed pass, and the global-only Vision Analysis settings are hidden from the "This device" tab.

v0.9.44

  • Consistent collapsible-list UX + card-picker cleanup. List rows now show the expand chevron at the far right with a trash-can delete button immediately to its left across the Settings and Navbar editors. The Settings, Announce, and Notification Center cards are hidden from the "Add card" chooser (they are configured through the dashboard).

v0.9.43

  • Vision Analysis: false-alarm filtering, real video, and two-pass analysis. The AI flags likely false alarms; a "Filter out false alarms" setting (Off / Log only / Drop) can skip a trigger's actions, and the Vision card shows a "False alarm" tag and filter. Capture defaults to recording the real camera stream (falls back to stitched frames), and an optional two-pass mode does a fast first analysis then a detailed refine, with separate AI Task entities per pass and smart provider defaults. Capture window default is now 10s.

v0.9.42

  • Vision "Display live feed" opens the camera live. Targeted screens navigate to the Cameras view and the triggering camera becomes the primary feed, switched to a live stream. Also fixed Settings list rows that rendered taller than the standard height.

v0.9.41

  • Vision trigger actions reworked into four fixed on/off sections (Display live feed, Toast notification, Push notification, Custom action), each with a header toggle.

v0.9.40

  • Vision "Additional actions" reworked into consistent collapsible lists.

v0.9.39

  • Thermostat voice aliases moved into the Thermostats list (expand a thermostat for a collapsible "Aliases" section).

v0.9.38

  • Settings polish. Consistent list-row heights and button styles across the Cameras, Vision, Announce, and Navbar editors; typed "+ Add" buttons open a type-picker popup; the Vision severity-filter description sits above its checkboxes.

v0.9.37

  • Consistent collapsible section headers across the settings editors, plus Announce view polish.

v0.9.36

  • Vision Analysis redesigned to per-camera triggers and actions, moved into the Cameras list (the separate Vision settings tab was removed).

v0.9.35

  • Native Camera Vision Analysis. AI-analyzes camera detection events (severity, summaries, thumbnail/clip) into a timeline card, with per-camera opt-in, using Home Assistant's built-in AI Task (no LLM Vision required).

Earlier entries predate the v0.9 version reset and remain in the git history.


License

MIT

Contributors

tedr91

775 commits

tedr91/Teds-Cards

A collection of custom Lovelace cards for Home Assistant

0

stars

775

commits

TypeScript

primary language

Sep 1, 2026

updated

custom-cards
hacs
home-assistant
homeassistant
home-assistant-custom
lovelace

README

Ted's Cards

hacs_badge GitHub Release GitHub Issues or Pull Requests GitHub Downloads (all assets, all releases) GitHub Repo stars GitHub License

⚠️ Interim release — testing only. This is a pre-release build published for testing purposes only and is not intended for production use. Features may change or break without notice.

Ted's Cards

This is my collection of custom cards for Home Assistant which I use for my HA wall panels and handheld devices.

After spending months attempting to find an "on/off/brightness" switch that I liked aesthetically, I finally gave up and decided to create my own. The rest of the cards happened as strived to achieve a consistent look and feel without a ton of styling overrides cluttering up all my YAML files. 😊


✨ Card Types

CardTypeDescription
Light Cardcustom:ted-light-cardLight tile with click-to-dim halves and an indicator bar.
Cover Cardcustom:ted-cover-cardCover tile with click-to-position halves and an indicator bar.
Button Cardcustom:ted-button-cardLabel or button tile with an optional entity, icon, and tap/hold actions.
Expandable Button Cardcustom:ted-button-card is the trigger; type custom:ted-expandable-button-cardA button that opens a popup of child buttons on tap (children can be expandable too).
Clock Weather Cardcustom:ted-clock-weather-cardA large clock with the date and current weather.
Remote Cardcustom:ted-remote-cardRemote control for media devices (e.g. Apple TV and Kaleidescape).
Room Cardcustom:ted-room-cardOverview card for a Home Assistant area.
Camera Cardcustom:ted-camera-cardOne or more camera feeds (auto thumbnail or live stream) in single, quad, or multi layouts.
Music Cardcustom:ted-music-cardMusic Assistant player for the current device (wraps droans/mass-player-card; requires it + mass_queue).
Calendar Cardcustom:ted-calendar-cardCalendar for the current device (wraps superdingo101/daylight-calendar-card; requires it).
Navbar Cardcustom:ted-navbar-cardNavigation bar pinned to the top or bottom, with buttons and status items in left/center/right zones.
Alarm Cardcustom:ted-alarm-cardAdd, view, and enable/disable alarms (requires the Ted's Dashboard System integration).
Timer Cardcustom:ted-timer-cardStart, view, and cancel countdown timers (requires the Ted's Dashboard System integration).
Announce Cardcustom:ted-announce-cardBroadcast spoken (TTS) announcements to devices/areas, with predefined messages and recents (requires the Ted's Dashboard System integration).
Assist-Response Cardcustom:ted-assist-response-cardDisplay a title + message (+ optional image) pushed by a voice intent or automation, and navigate the targeted screens to it — the visual counterpart to a spoken Assist answer (requires the Ted's Dashboard System integration).
Photo Viewer Cardcustom:ted-photo-viewer-cardView a single photo or a folder album — page through it (arrows/keys), run a crossfade slideshow, favorite it, and set it as your wallpaper (favorite/set-as-wallpaper require the Ted's Dashboard System integration).

📸 Screenshots

Ted's Cards — dark mode Ted's Cards — light mode


🔧 Requirements

  • Home Assistant
  • One or more calendar entities (e.g. calendar.family, calendar.work)

🚀 Installation

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

OR

Add custom repository
  1. Open HACS in Home Assistant.
  2. Go to Frontend → menu (⋮) → Custom repositories.
  3. Add https://github.com/tedr91/Teds-Cards with category Dashboard.
  4. Search for Ted's Cards and install.
  5. Refresh your browser.

👉 If you don’t have HACS yet, follow: https://hacs.xyz/docs/use/


Manual Installation

Without HACS
  1. Download ted-cards.js from the latest release.
  2. Copy it to <config>/www/community/ted-cards/ted-cards.js.
  3. Add the resource to your dashboard:
    • SettingsDashboards → ⋮ → ResourcesAdd resource
    • URL: /local/community/ted-cards/ted-cards.js
    • Type: JavaScript Module
  4. Refresh your browser.

💡 After updates, bump the version (?v=2) to avoid caching issues.


📖 Usage

🎨 Every card has an Appearance (general) section with Transparency and Background blur sliders — fade the card's surface and blur whatever sits behind it for a frosted-glass look over a dashboard wallpaper. Both default to off (fully opaque, no blur).

💡 Light Card

A compact light tile split into two clickable halves by a subtle divider. Supports light entities only. Brightness is shown on a thin vertical indicator bar on the card's left edge.

Interactions

The card has three interactive regions — the upper half, the lower half, and the centered icon — each of which spans the full card area (padding and hint bars included). Every region responds to single tap, double tap, and long press, and each gesture can be reassigned in the editor's Switch Behavior section.

RegionSingle tap (default)Double tap (default)Long press (default)
Upper halfIncrease brightness to the next 5%Full on (100%)More info
Lower halfTurn offTurn offMore info
IconToggleMore infoMore info

Available actions: Increase brightness, Decrease brightness, Full on (100%), Turn off, Toggle, More info, and Nothing.

For toggle-only lights (no brightness support), the upper-half single tap defaults to Full on and the lower-half single tap to Turn off; the left indicator bar shows full when on and empty when off.

Light Card preview

Minimal config:

type: custom:ted-light-card
entity: light.living_room
Detailed options
type: custom:ted-light-card
entity: light.living_room
name: Living Room          # optional, defaults to entity friendly name
icon: mdi:floor-lamp       # optional, defaults to entity icon
theme: ted-style           # optional, visual styling: ted-style (default) | ha

theme (optional) — Visual styling, selectable in the editor's Appearance section:

  • ted-style (default): a self-contained "Ted's Home Theater" look (Windows 11 Fluent / Mica-dark) that looks the same regardless of your Home Assistant theme.
  • ha: follow the active Home Assistant theme (surfaces, text, and accent color).

Brightness is shown on a thin vertical indicator bar pinned to the card's left edge (it fills bottom→up with the light's brightness; it is not interactive). Its color — labeled Indicator bar color in the editor's Appearance section — is set by indicator_color (optional) when the light is on:

  • theme (default): the theme accent color.
  • light: the light's current color (its rgb_color), falling back to a warm tone.
  • other: a custom color — set indicator_color_custom to an [r, g, b] array (chosen via the editor's color picker).

show_indicator (optional, default true, in the Appearance section) toggles the indicator bar on or off, and indicator_width (optional, px, default 4) sets its width.

show_hint (optional, default false, in the Appearance section): show a matching hint bar up the right edge with + / hints, indicating the top half raises brightness and the bottom half lowers it. hint_width (optional, px, default 8) sets the hint bar width.

The icon is centered in the card and lights up when the light is on. icon_color (optional, in the Appearance section) sets its on color:

  • theme: the theme accent color.
  • light (default): the light's current color (its rgb_color), falling back to a warm tone.
  • other: a custom color — set icon_color_custom to an [r, g, b] array.

background_on (optional, in the Appearance section): override the card's background color while the light is on. Pick a color with the editor's color picker (stored as a #RRGGBB hex string). When unset, the theme background is used.

brushed (optional, default off, in the Appearance section): overlay a brushed-metal sheen just above the background. Pair it with a metallic background_on color (e.g. silver #c0c0c0) for a brushed-aluminum look.

rocker (optional, default on, in the Appearance section): when on, the card behaves as a rocker switch — the two halves run separate UP / DOWN actions and a divider separates them. Turn it off to make the whole card a single button that always runs the Icon behavior (the UP/DOWN options and divider are hidden). rocker_effect (optional, default on, disabled when Rocker is off): a Decora-style rocker bevel that makes one half of the card appear raised, pivoting at the center. The raised half follows the state — top half raised when off, bottom half raised when on.

orientation (optional, default vertical, directly below Visual styling): switch the card to horizontal. In horizontal mode the indicator bar runs along the bottom (filling left → right), the hint bar runs along the top, the divider is vertical, the right half is UP and the left half is DOWN, and the name sits on the left with the state on the right (icon centered). The default size becomes 6 × 1 in a grid (Sections) view, or 240 × 80 px elsewhere.

Also in the Appearance section: show_name, show_icon, and show_state (all default on) toggle the name, centered icon, and the state/brightness label; name_scale, icon_scale, and state_scale (percent, default 100) scale the name text, icon, and state label. width and height (px, default 100 × 120 vertical, 240 × 80 horizontal) set the card's fixed size when it is not a direct item in a grid (Sections) view — e.g. inside a stack, masonry, or panel view. As a direct grid item the card honors the grid cell size instead.

Switch Behavior

The editor's Switch Behavior section lets you reassign the action for every region × gesture. It contains three groups — UP behavior, DOWN behavior, and Icon behavior — each exposing a Single tap, Double tap, and Long press action picker. The config keys are up_tap / up_double_tap / up_hold, down_tap / down_double_tap / down_hold, and icon_tap / icon_double_tap / icon_hold. Any option left at its default is omitted from the saved YAML.

up_tap: increase           # increase | decrease | full_on | full_off | toggle | more_info | none
down_double_tap: toggle
icon_hold: none

Memory (dimmable lights)

For dimmable lights you can choose the brightness the light turns on to. The editor shows a Memory section (only for brightness-capable lights) with three modes:

  • off (default): turn on at the light's last brightness (standard Home Assistant behavior).
  • static: always turn on to a fixed brightness — set memory_value (1–100 %, default 100).
  • helper: turn on to the value of an input_number / number helper, read as a percentage (1–100). Choosing this mode auto-creates and selects a dedicated helper for you (input_number.ted_light_mem_<entity>) — no need to add one in Settings → Helpers. Add a card for the same light elsewhere and it reuses that helper automatically; delete the helper and the card falls back to the default. You can still point memory_entity at your own helper instead.
memory_mode: static        # off | static | helper
memory_value: 60           # static mode, 1–100 %
# or
memory_mode: helper
memory_entity: input_number.living_room_brightness

🪟 Cover Card

A compact cover tile split into two clickable halves by a subtle divider. Supports cover entities only (blinds, shades, shutters, curtains, garage doors, …). The current position is shown on a thin vertical indicator bar on the card's left edge.

Interactions

The card has three interactive regions — the upper half, the lower half, and the centered icon — each spanning the full card area (padding and hint bars included). Every region responds to single tap, double tap, and long press, reassignable in the editor's Switch Behavior section.

RegionSingle tap (default)Double tap (default)Long press (default)
Upper halfOpen more (next 5%)Fully openMore info
Lower halfClose more (next 5%)Fully closedMore info
IconToggleMore infoMore info

The icon's Toggle is smart: while the cover is moving it stops, otherwise it opens (to the configured memory position) or closes. Available actions: Open more, Close more, Fully open, Fully closed, Toggle, Stop, Tilt open, Tilt closed, More info, and Nothing. Tilt actions appear in the editor only for tilt-capable covers.

For open/close-only covers (no position support), the upper-half single tap defaults to Fully open and the lower-half to Fully closed. Tilt-only covers use their tilt position as the primary value driven by the up/down regions.

Cover Card preview

Minimal config:

type: custom:ted-cover-card
entity: cover.living_room_blinds
Detailed options
type: custom:ted-cover-card
entity: cover.living_room_blinds
name: Living Room Blinds   # optional, defaults to entity friendly name
icon: mdi:blinds           # optional, defaults to a device-class icon
icon_open: mdi:blinds-open # optional, shown while the cover is open
theme: ted-style           # optional, visual styling: ted-style (default) | ha

icon_open (optional) sets a different icon to show while the cover is open — e.g. icon: mdi:garage with icon_open: mdi:garage-open. When unset, icon (or a device-class default) is used in all states.

theme, show_indicator, indicator_color, indicator_width, icon_color, show_hint, and hint_width work as in the Light Card (all in the editor's Appearance section). show_indicator (on by default) toggles the indicator bar; indicator_color (theme default / other custom) — labeled Indicator bar color — colors it when open, and indicator_width (px, default 4) sets its width. show_hint (on by default) shows a right-edge hint bar with up/down chevron hints, and hint_width (px, default 8) sets its width. The indicator bar fills from the bottom up with the cover's current position.

background_open (optional, in the Appearance section): override the card's background color while the cover is open. Pick a color with the editor's color picker (stored as a #RRGGBB hex string). When unset, the theme background is used.

brushed (optional, default off, in the Appearance section): overlay a brushed-metal sheen just above the background. Pair it with a metallic background_open color (e.g. silver #c0c0c0) for a brushed-aluminum look.

rocker (optional, default on, in the Appearance section): when on, the card behaves as a rocker switch — the two halves run separate UP / DOWN actions and a divider separates them. Turn it off to make the whole card a single button that always runs the Icon behavior (the UP/DOWN options and divider are hidden). rocker_effect (optional, default on, disabled when Rocker is off): a Decora-style rocker bevel that makes one half of the card appear raised, pivoting at the center. The raised half follows the state — top half raised when closed, bottom half raised when open.

orientation (optional, default vertical, directly below Visual styling): switch the card to horizontal. In horizontal mode the indicator bar runs along the bottom (filling left → right), the hint bar runs along the top, the divider is vertical, the right half is UP and the left half is DOWN, and the name sits on the left with the state on the right (icon centered). The default size becomes 6 × 1 in a grid (Sections) view, or 240 × 80 px elsewhere.

Also in the Appearance section: show_name, show_icon, and show_state (all default on) toggle the name, centered icon, and the state/position label; name_scale, icon_scale, and state_scale (percent, default 100) scale the name text, icon, and state label. width and height (px, default 100 × 120 vertical, 240 × 80 horizontal) set the card's fixed size when it is not a direct item in a grid (Sections) view — e.g. inside a stack, masonry, or panel view. As a direct grid item the card honors the grid cell size instead.

Switch Behavior

The Switch Behavior section reassigns the action for every region × gesture, grouped into UP behavior, DOWN behavior, and Icon behavior. Config keys are up_tap / up_double_tap / up_hold, down_tap / down_double_tap / down_hold, and icon_tap / icon_double_tap / icon_hold. Any option left at its default is omitted from the saved YAML.

up_tap: open_step          # open_step | close_step | open | close | toggle | stop | tilt_open | tilt_close | more_info | none
icon_hold: stop

Memory (position-capable covers)

For covers that support set_cover_position you can choose the position the cover opens to. The editor shows a Memory section (only for position-capable covers) with three modes:

  • off (default): open fully (100%).
  • static: always open to a fixed position — set memory_value (1–100 %, default 100).
  • helper: open to the value of an input_number / number helper, read as a percentage (1–100). Choosing this mode auto-creates and selects a dedicated helper for you (input_number.ted_cover_mem_<entity>) — no need to add one in Settings → Helpers; add a card for the same cover elsewhere and it reuses that helper, and deleting the helper falls back to the default. Changing the position from the card also writes the new value back to the helper. You can still point memory_entity at your own helper instead.
memory_mode: static        # off | static | helper
memory_value: 70           # static mode, 1–100 %
# or
memory_mode: helper
memory_entity: input_number.blinds_position

🏷️👆 Button Card

A small, versatile tile that works as either a label or a button. The entity is optional: with no entity it's a static label (or an action button via the tap/hold actions); with an entity it shows the entity's state and toggles (or opens more-info) by default. It's also the button type used inside Room Card sections.

Button Card preview

Minimal config (button bound to an entity):

type: custom:ted-button-card
entity: light.living_room

Minimal config (plain label):

type: custom:ted-button-card
name: Hello, world!
Detailed options
type: custom:ted-button-card
entity: light.living_room   # optional, the entity to control / show
name: Living Room           # optional label text, defaults to the entity friendly name
icon: mdi:lightbulb         # optional, defaults to the entity icon
theme: ted-style            # optional, visual styling: ted-style (default) | ha
icon_color: amber           # optional icon color (theme color name or #RRGGBB)
background: '#1c1c1c'        # optional background color override
brushed: false              # optional brushed-metal sheen over the background
neumorphic: false           # raised tile when off/idle, pressed when the entity is active
show_name: false            # show the name/label (default off)
name_scale: 100             # name text size, % (10–300)
show_icon: true             # show the icon
icon_scale: 100             # icon size, % (10–300)
show_state: true            # show the entity state under the name
state_scale: 100            # state text size, % (10–300)
width: 100                  # fixed width (px) when NOT a direct grid (Sections) item
height: 120                 # fixed height (px) when NOT a direct grid (Sections) item
tap_action:                 # optional, see Interactions below
  action: toggle
hold_action:
  action: more-info
double_tap_action:
  action: none
# Badge — a small number badge from any entity (e.g. an unread/notification count)
badge:
  entity: sensor.notifications   # the entity whose state is shown as the badge number
  color: red                     # optional badge background color
  text_color: white              # optional badge text color
  show_when_zero: false          # show the badge even when the value is 0 (default hides it)
# Dynamic highlighting — recolor the button from another entity's value
highlight:
  entity: sensor.days_until_bin_day
  rules:
    - operator: '<='             # is | is_not | > | >= | < | <=
      value: 2
      background_color: red
      icon_color: white          # optional
      halt: true                 # stop checking further rules once this one matches
    - operator: '<='
      value: 5
      background_color: orange
      halt: true

theme and brushed work as in the other cards (see the Light Card section). icon_color and background are picked with the editor's color picker; leave them unset to follow the theme.

neumorphic (default off, in the Appearance section): a soft "neumorphic" effect — the tile looks raised when the entity is off/idle (or has no entity) and pressed in when the entity is active (e.g. a light on, a cover open, a media player playing, a lock unlocked).

In the Appearance section, show_icon (default on) and show_name / show_state (default off) toggle the icon, label, and the entity-state line, and name_scale / icon_scale / state_scale (percent, default 100) scale each of them. width and height (px, default 100 × 120) set the card's fixed size when it is not a direct item in a grid (Sections) view — e.g. inside a stack, masonry, or panel view; as a direct grid item the card honors the grid cell.

Interactions — the editor's Interactions section sets tap_action, hold_action, and (under Add interaction) double_tap_action, using Home Assistant's standard action picker (toggle, more-info, navigate, call-service, etc.). Defaults adapt to the entity: tap is toggle for toggleable domains (light, switch, fan, cover, lock, climate, media_player, …) and more-info otherwise; hold is more-info when an entity is set. With no entity, both default to nothing.

Badge (editor Badge section) — overlays a small number from any entity in the top-right corner (e.g. a notification count). It hides automatically when the value is 0 (or unavailable) unless Show when value is zero is on; the badge and text colors are configurable.

Dynamic highlighting (editor Dynamic highlighting section) — recolors the button's background and/or icon from a chosen entity's state. Add one or more rules, each comparing the entity with an operator (is / is not / > / / < / ) and a value (the value becomes a state dropdown for is / is not). Rules are checked top-to-bottom and can be dragged to reorder; turn on stop processing to halt at the first match — handy for threshold ladders like ≤ 2 → red, ≤ 5 → orange, ≤ 10 → yellow.

�️👆 Expandable Button Card

A Button Card that opens a popup of child buttons on tap. The trigger looks and is configured exactly like a normal Button Card (icon/name/state, theme, badge, dynamic highlighting); tapping it opens a native popover holding a configurable set of child buttons. Each child is a full Button Card with its own icon, colors, and actions — and a child can itself be another Expandable Button Card, opening a nested popup without closing its parent. Selecting a leaf button runs its action and closes the popup.

Minimal config:

type: custom:ted-expandable-button-card
name: Scenes
icon: mdi:movie-open
items:
  - type: custom:ted-button-card
    name: Movie
    icon: mdi:movie-open
    tap_action: { action: call-service, service: script.movie_night }
  - type: custom:ted-button-card
    name: Bright
    icon: mdi:white-balance-sunny
    tap_action: { action: call-service, service: script.bright }
Detailed options
type: custom:ted-expandable-button-card
# --- Trigger appearance: any Button Card option (icon/name/state, theme, badge, highlight, …) ---
name: Scenes
icon: mdi:movie-open
theme: ted-style
# --- Popup ---
popup_layout: grid          # grid (default) | list
popup_max_columns: 3        # optional cap on grid columns; unset = size to the button count
popup_title: Scenes         # optional heading shown at the top of the popup
flip_icon: true             # flip the trigger icon (e.g. a chevron) 180° while open (default true)
items:                      # child buttons shown in the popup
  - type: custom:ted-button-card
    name: Movie
    icon: mdi:movie-open
    tap_action: { action: call-service, service: script.movie_night }
  - type: custom:ted-expandable-button-card   # a nested expandable child
    name: More
    icon: mdi:dots-horizontal
    items:
      - type: custom:ted-button-card
        name: Reading
        icon: mdi:book-open-variant

The trigger's own tap/hold/double-tap actions are ignored — tapping the trigger always opens the popup. Configure each child's actions on the child button itself.

Popup (editor) — Popup layout is Grid (square tiles) or List (a single vertical column). For the grid, Max columns is optional — leave it empty and the grid sizes to the number of buttons (a single row); set it to wrap onto multiple rows after that many columns. Popup title adds an optional heading. Flip icon when open (default on) rotates the trigger icon 180° while the popup is open — handy for a chevron that flips to point the other way. The popover anchors to the trigger, opening downward (flipping up if there isn't room) and dismisses on outside-click or Esc.

Popup buttons (editor) — add Button or Expandable button children, drag to reorder, and edit each inline with its own card editor. Nested expandable children open their own sub-popups, so you can build multi-level menus behind a single tile.

�🕒⛅ Clock Weather Card

A large clock with the current date and weather, designed to sit transparently on top of a dashboard background. The clock, date, and weather can each be shown or hidden and positioned independently.

Clock Weather Card preview

Minimal config:

type: custom:ted-clock-weather-card
weather_entity: weather.home
Detailed options
type: custom:ted-clock-weather-card
theme: ted-style            # optional, visual styling: ted-style (default) | ha
force_transparent: true     # transparent card background (default true)
background: '#1c1c1c'        # background color override (only used when force_transparent: false)
brushed: false              # optional brushed-metal sheen over the background
# Clock
show_clock: true
clock_size: large           # small (60%) | medium (80%) | large (100%, default) | extra_large (120%) | custom
clock_size_custom: 100      # size %, used when clock_size: custom (10–400)
clock_offset: 0             # horizontal position: 0 = left, 50 = center, 100 = right
time_format: auto           # auto (default) | 12h | 24h | custom
time_format_custom: 'H:MM'  # token string, used when time_format: custom
# Date
show_date: true
date_size: standard         # standard (default) | custom
date_size_custom: 100       # size %, used when date_size: custom
date_format: standard       # standard (default) | custom
date_format_custom: 'dddd, MMMM D'   # token string, used when date_format: custom
date_below_clock: false     # stack the date directly under the clock
date_offset: 100            # horizontal position: 0 = left, 50 = center, 100 = right
# Weather
show_weather: true
weather_entity: weather.home   # a weather entity
weather_size: standard      # standard (default) | custom
weather_size_custom: 100    # size %, used when weather_size: custom
show_weather_icon: true     # show the condition icon (default true)
icon_style: fancy           # fancy (default) | cool | basic
show_current_temp: true     # show the current temperature
weather_above_clock: false  # place the weather above the clock instead of below
weather_offset: 100         # horizontal position: 0 = left, 50 = center, 100 = right

theme and brushed work as in the other cards (see the Light Card section). force_transparent (default on) drops the card background so the clock floats over your dashboard; turn it off to use the theme background or a background color override.

The editor groups the rest into Clock Settings, Date Settings, Weather Settings, and a Layout section:

  • Sizesclock_size, date_size, and weather_size use preset percentages, or set them to Custom to enter an exact percent (*_size_custom).
  • Time / date formattime_format (auto follows your Home Assistant locale) and date_format both offer a Custom mode where you supply a token string (time_format_custom, date_format_custom).
  • Layoutshow_clock / show_date / show_weather toggle each element, and clock_offset, date_offset, and weather_offset slide each one horizontally (0 left ↔ 50 center ↔ 100 right). date_below_clock stacks the date under the clock, and weather_above_clock moves the weather above it.

Weather icon styles (icon_style, shown when Show weather icon is on): Fancy (animated Meteocons — the default), Cool (the Home Assistant frontend weather SVGs), or Basic (Material Design weather icons). See Credits for icon attribution.

🎛️ Remote Card

A remote-control card for Apple TV and Kaleidescape players. The device family is auto-detected from the remote entity's integration — Apple TV uses the built-in apple_tv integration, while Kaleidescape uses the custom kaleidescape_strato integration (note: not the built-in Kaleidescape integration). Buttons send remote.send_command calls to the selected entity.

Remote Card preview

Minimal config:

type: custom:ted-remote-card
remote_entity: remote.living_room_apple_tv
Detailed options
type: custom:ted-remote-card
remote_entity: remote.living_room_apple_tv             # required, the remote. entity (Apple TV or Kaleidescape)
media_player_entity: media_player.living_room_apple_tv  # recommended, drives state + play/pause + power
name: Living Room            # optional header name
theme: manufacturer          # visual styling: manufacturer (default) | ted-style | ha
background: '#1c1c1c'         # optional background color override
brushed: false               # optional brushed-metal sheen over the background
show_icon: true              # show the device icon in the header
icon_scale: 100              # icon size, % (10–300)
show_name: false             # show the name in the header
name_scale: 100              # name size, % (10–300)
scale: 100                   # overall card scale, % (50–200)
show_status_indicator: false # on/off/playing status dot in the header
# Apple TV only — quick-launch app buttons (each value is a media_player source name)
app_launch_1: Netflix
app_launch_2: Disney+
app_launch_3: YouTube
# Kaleidescape only — where the Home button navigates
kaleidescape_home: home      # home (default) | movie_covers | movie_list | movie_collections | system_status

remote_entity (required) is the remote.* entity that receives the button commands. The entity pickers are limited to the two supported integrations, and the device family is detected automatically from your selection — there's no family dropdown.

media_player_entity (recommended) is a matching media_player.* entity used to show the current state and to make the power and play/pause buttons state-aware. When you pick the remote, the card tries to auto-fill the matching media player (an entity on the same device first, then by name).

theme (in the Appearance section) offers Manufacturer's Style (default — a per-device look resembling the real remote), Ted's Style (the self-contained "Ted's Home Theater" look), or Home Assistant theme. background and brushed work as in the other cards (see the Light Card section). The header is controlled by show_icon / icon_scale, show_name / name_scale, and show_status_indicator; scale resizes the whole remote (50–200%).

App Launchers (Apple TV only) — up to six quick-launch buttons. Each app_launch_N is a media_player source name; when a media player is configured the editor offers a dropdown of its available sources.

Home button target (Kaleidescape only) — kaleidescape_home chooses where the Home button navigates: Home (default), Movie covers, Movie list, Movie collections, or System status.

🏠 Room Card

An overview card for a Home Assistant area, with a compact status bar along the top edge and one or more button sections below it. The area is the card's primary selection, made in the editor's Room section (an Area picker fed by your Home Assistant areas); it also seeds default temperature/occupancy entities for new status items.

Room Card preview

Minimal config:

type: custom:ted-room-card
area: living_room
Detailed options
type: custom:ted-room-card
area: living_room          # the Home Assistant area id
name: Living Room          # optional title override, defaults to the area's name
theme: ted-style           # optional, visual styling: ted-style (default) | ha
brushed: false             # optional brushed-metal sheen over the background
status_items:              # optional, the top status bar (see below)
  - type: temperature
    entity: sensor.living_room_temperature
  - type: occupancy
    entity: binary_sensor.living_room_motion
  - type: brightness
    entity: light.living_room
  - type: volume
    entity: media_player.living_room
  - type: led
    entity: binary_sensor.living_room_window
sections:                  # optional, grids of buttons below the status bar
  - title: Lights
    max_rows: 0            # 0 = unlimited; otherwise caps rows (5 buttons/row)
    buttons:
      - type: custom:ted-light-card
        entity: light.living_room
      - type: custom:ted-cover-card
        entity: cover.living_room
      - type: custom:ted-button-card
        name: Scene

theme and brushed work as in the other cards (see the Light Card section).

Header — the top strip shows an optional icon and the room name. In the editor's Header section: Display icon in header (default off; pick the icon below Name) with an optional Icon size override, Display name in header (default on) with an optional Name size override, and Display header divider line (default on).

Room Photo — an optional photo behind the card UI (above the background/brushed effect, below the header, status, and buttons). In the editor's Room Photo section:

  • Show photo (default on).
  • Photo sourceBundled (a curated set served from a CDN; pick one or leave Auto to match the room name), Custom (upload your own via the HA image picker), or Camera feed (pick a camera entity, then choose its Camera view — Auto thumbnail (default) / Live stream — and Fit mode — Cover / Contain / Fill).
  • Photo placementTop of card (default), Below header, or Fill card.
  • Photo height (px) — leave empty to show the full image at card width; set a height to crop it (hidden for Fill).
  • Photo alignment — the vertical focal point (Top / Center / Bottom) used when the photo is cropped.
  • Edge Gradient (Scrim) — darken any of the Top / Left / Right / Bottom edges so text/buttons stay readable. Sensible defaults per placement (Top→top edge, Fill→top+bottom, Below header→none).
  • Photo opacity (default 100%).

With the default (Show photo on, Auto), the room name is matched to a bundled photo — bathroom, bedroom, kitchen, living room, office, and so on, including synonyms (e.g. "Master Suite" → bedroom, "Den" → office) and possessive names ("Bill's Room" → bedroom). Rooms of the same type get different photos where alternates exist. A room that matches no specific type falls back to a generic photo, so no card is left blank by default (it only shows nothing if the image can't be loaded).

Status bar — a small strip of items pinned to the top edge of the card, managed in the editor's Status items section (add, reorder, delete). Each item is one of:

TypeShowsEntity
temperatureIcon + valueany sensor (auto-filled from the area)
occupancyIcon + valueany sensor (auto-filled from the area)
brightnessTap-to-open vertical sliderlight, number, or input_number
volumeTap-to-open volume slider (double-tap mutes)media_player
ledColored status dotany entity

Each item also accepts an optional icon and name. led items accept on_color / off_color and an advanced colors map (state → color) for per-state colors.

Button sections — one or more grids of buttons below the status bar, managed in the editor's Button sections section (add, reorder, delete sections; add, reorder, delete buttons within each). Each button is a ted-button-card, ted-cover-card, ted-light-card, or ted-camera-card, edited inline with that card's own editor. Buttons lay out 5 per row as squares; set a section's Max rows to cap the height (0 = unlimited). When the buttons overflow the cap, the last visible cell becomes a button that reveals the rest.

Each section has a Section title plus a Show title in card toggle (default off) and a Title alignment selector (Left / Center / Right; disabled while the title is hidden). The title still labels the section in the editor even when it isn't shown in the card.

Spacer — both the status strip and button sections can hold a Spacer: a transparent, non-interactive placeholder whose only option is its Size in px. Status-strip spacers add a horizontal gap (default 24 px); button-section spacers reserve an empty square cell (default 100 px, matching a button).


📷 Camera Card

A camera feed — or several — rendered with Home Assistant's own picture-glance image element so each feed gets both auto thumbnail polling and live streaming for free. Show one camera, or lay out multiple in a Quad (2×2) or Multi (one big feed plus a strip of smaller ones) arrangement. Use it on its own, as a Room Card button, or as a Room Card photo source.

Minimal config:

type: custom:ted-camera-card
cameras:
  - entity: camera.front_door
Detailed options
type: custom:ted-camera-card
layout: single              # optional: single (default) | quad | big-small ("Multi")
big_small_position: right   # optional (Multi only): right (default) | bottom
big_small_width: 25         # optional (Multi only): small-feed strip width, % of the card
cameras:                    # required — one or more cameras, shown in order
  - entity: camera.front_door
    name: Front Door         # optional camera name, defaults to the entity's friendly name
    camera_view: auto        # optional per-camera: auto (thumbnail, default) | live (stream)
    enabled: true            # optional, set false to hide this camera from the layout
  - entity: camera.back_yard
    camera_view: live
show_name: false            # optional, overlay each camera's name along the bottom edge
name_size: 14               # optional, camera-name font size in px (default 14)
fit_mode: cover             # optional: cover (default) | contain | fill
aspect_ratio: "16:9"        # optional, e.g. "16:9" or "1.78" (ignored in grid layout)
theme: ted-style            # optional, visual styling: ted-style (default) | ha
brushed: false              # optional brushed-metal sheen behind the feed
width: 800                  # optional manual width (px), ignored in grid layout
height: 450                 # optional manual height (px), ignored in grid layout
tap_action:                 # optional, defaults to More Info of the tapped camera
  action: more-info
double_tap_action:
  action: none
  • Cameras — add one or more camera.* entities. In the editor, use Auto populate cameras to add every camera at once, drag to reorder, the switch in each row header to show/hide a camera, and the trash icon to remove one. Each camera has an optional Camera Name (defaults to the entity's friendly name) and its own view (auto thumbnail or live stream).
  • LayoutSingle (one feed), Quad (2×2), or Multi (one large feed plus a strip of smaller ones, positioned to the right or bottom, with an adjustable Small feeds width that auto-sizes to keep every feed equal as you show/hide cameras). Slots with no camera show an empty placeholder.
  • Per-camera view — each feed is an Auto thumbnail (default; periodically refreshed still) or a Live stream (continuous video), set in that camera's editor row.
  • Camera name overlayShow Camera Name overlays each feed's name along the bottom edge, with a configurable Camera name size.
  • Long-press a feed — opens a quick popup to switch that feed between Auto thumbnail and Live stream, and (for any non-primary feed) Make primary camera to swap it into the big slot. These are live-view tweaks only and reset on reload — the editor holds the saved defaults.
  • Fit mode — how each image fills its box: Cover (default), Contain, or Fill.
  • Aspect ratio — optional, sets the card's shape when it isn't sized by the dashboard grid.
  • Sizing — in a grid (sections) layout the card fills its grid cell; otherwise it uses the optional Width / Height (defaulting to 800×450). theme and brushed work as in the other cards (see the Light Card section).
  • InteractionsTap defaults to More Info of the tapped camera; Double tap defaults to none. Both accept the standard Home Assistant action options. (Long-press is reserved for the view popup.)
  • Efficient — feeds only stream while the card is on-screen and the browser tab is visible, and hidden cameras use no bandwidth.

🧭 Navbar Card

A navigation bar pinned to the top or bottom of the dashboard. Each section holds an ordered mix of buttons — each a full Button Card, so they get icons, colors, actions, badges, and dynamic highlighting — and status items such as the time, date, weather, or a room's temperature, brightness and volume, arranged in left / center / right zones. The center zone stays pinned to the exact middle regardless of what's on the sides, so a "Home" button can sit perfectly centered.

ℹ️ The navbar overlays the dashboard and reserves space so your content isn't hidden underneath it. It's brand new — please report any layout quirks.

Minimal config:

type: custom:ted-navbar-card
sections:
  - placement: center
    items:
      - type: custom:ted-button-card
        name: Home
        icon: mdi:home
Detailed options
type: custom:ted-navbar-card
theme: ha                 # optional, visual styling: ha (default) | ted-style
alignment: bottom         # bottom (default) | top | left | right (left/right = vertical bar)
bar_type: snap            # snap (edge-to-edge, default) | float (centered) — top/bottom only
size: 48                  # bar thickness in px; buttons size from this
min_width: 16             # float only: minimum bar width in px
max_width: 920            # float only: maximum bar width in px
background: ""            # optional card background color (theme name or hex/rgb)
transparency: 0           # 0–100% — fade the bar's background
blur: 0                   # 0–100% — blur the dashboard behind the bar
sections:                 # up to 5 sections
  - placement: left       # left | center | right (which zone the section sits in)
    align: center         # left | center | right (alignment of items within the section)
    visible: true         # optional, show/hide the section
    overflow: true        # optional, collapse items that don't fit into a “…” popover
    items:                # ordered mix of buttons, status items, and popups
      - type: datetime                      # status item (date + time; set display: time/date to show one)
        display: date
      - type: weather                       # status item (auto-picks a weather entity, or set entity:)
  - placement: center
    items:
      - type: custom:ted-button-card  # a button
        name: Home
        icon: mdi:home
        nav_button_size: normal             # normal (default) | wide
  - placement: right
    items:
      - type: datetime                      # status item — updates live
        display: time
      # A "popup menu" is an Expandable Button Card: a normal button tile that opens a
      # popover of child buttons (configure layout / title / nesting on the card itself).
      - type: custom:ted-expandable-button-card
        icon: mdi:dots-horizontal
        popup_layout: grid                  # grid (default) | list
        popup_max_columns: 3                # optional cap on grid columns (unset = fit items)
        popup_title: Settings               # optional heading
        flip_icon: true                     # flip the trigger icon 180° while open (default true)
        items:
          - type: custom:ted-button-card
            name: Settings
            icon: mdi:cog
  • Navbar alignment — pin the bar to the Bottom (default) or Top edge (horizontal), or the Left / Right edge for a vertical bar. A vertical bar is always snap (Float is hidden), clears the header & sidebar, and maps the section zones top→left, middle→center, bottom→right.
  • Navbar typeSnap spans edge-to-edge; Float centers the bar with margins and rounded corners (top/bottom bars only). A floating bar auto-sizes to fit its buttons (just a little wider) — unless it has left- or **right-**zone items, in which case it spans the full (maximum) width so those items can pin to the edges.
  • Minimum width / Maximum width (float only) — the bounds the floating bar is sized within (defaults 16 and 920 px).
  • Size — the bar thickness in pixels; buttons size automatically from it.
  • Sections (up to 5) — each sits in a left / center / right zone and has its own content alignment. Sections, and the items inside them, are added and dragged to reorder in the editor. The center zone is pinned to the exact center of the bar, independent of the left/right content.
  • Items — each section's + Add item menu adds a button, a status item, or a popup, mixed in any order and dragged to reorder.
  • Buttons — a full Button Card (entity, icon, colors, actions, badge, dynamic highlighting). Button size is Normal (square) or Wide.
  • Status itemsTime, Date and Weather, plus a room's Temperature, Occupancy, Brightness, Volume, an entity Status LED, and a Spacer. Brightness and volume open a slider on tap, and the clock updates live.
  • Popups — the + Add item menu's Popup menu adds an Expandable Button Card: a normal button tile that opens a popover of child buttons. Configure its layout (Grid with optional Max columns, or List), an optional title, Flip icon when open, and nested menus on the card itself — handy for tucking extra controls behind one button.
  • Overflow — when a section's items don't fit the bar, the extras auto-collapse into a “…” popover (turn Auto-collapse overflow off per section to keep them inline).

⏰ Alarm Card

Add, view, and enable/disable alarms. Requires the Ted's Dashboard System integration (which owns the alarms and fires them reliably server-side). The card reads sensor.teds_alarms and calls the backend's add_alarm / update_alarm / remove_alarm services.

type: custom:ted-alarm-card
title: Alarms            # optional header (default "Alarms")
entity: sensor.teds_alarms   # optional, override the alarms sensor
show_add: true           # optional, show the add form (default true)
theme: ha                # optional, visual styling: ha (default) | ted-style

Each alarm row has an enable toggle, its label (and any description / repeat days), the time, and a delete button. The add form takes a label and time. Appearance (in the editor) offers Visual styling, Transparency / Background blur, a Brushed sheen, and a Subtle shadow toggle — matching the other cards.

⏱️ Timer Card

Start, view, and cancel countdown timers. Also requires the Ted's Dashboard System integration; the card reads sensor.teds_timers and calls start_timer / cancel_timer.

type: custom:ted-timer-card
title: Timers            # optional header (default "Timers")
entity: sensor.teds_timers   # optional, override the timers sensor
show_add: true           # optional, show the start form (default true)
theme: ha                # optional, visual styling: ha (default) | ted-style

Running timers show a live countdown with a cancel button; the start form takes a name and an H / M / S duration; recently used timers appear as quick-start chips. The same Appearance options as the Alarm card apply.


📋 Changelog

The newest entry below is used as the GitHub Release notes by the release workflow, so it shows in the Home Assistant / HACS update dialog when you update. Newest first.

v0.9.187

  • The Fullscreen card can now show a close button. When part of the Ted's Dashboard System (dashboard_integration: true), set close_button: true to add a close button beside the maximize/restore toggle; tapping it returns to the previous view (or the Home view when there is no history to go back to). The maximize/restore/close icons were also refreshed to a matching circled set.

v0.9.186

  • The dashboard navbar now shows a temporary launcher button for views without one. When you navigate to a view that isn't in the launcher (e.g. a subview), a button for it is added at the end of the launcher — with its own icon — so the active-view highlight has a home and you can tap back to it. It disappears again when you move to a view that has its own launcher button.

v0.9.185

  • The navbar liquid indicator now matches the ring highlight's size at rest. It sits on the exact button footprint (no inset) and shares the button's corner radius, so switching Highlight style between Ring and Liquid keeps the same size.

v0.9.184

  • Fixed the navbar liquid indicator lagging behind navigation. It now starts moving to the destination the instant you navigate (leading from the URL) instead of waiting for Home Assistant's view to settle, so it tracks your taps immediately. The bar is also no longer torn down and rebuilt during a view swap, which could reset the indicator to the corner.

v0.9.183

  • Reworked the navbar "Liquid morph" indicator into a liquid-glass tile. It's now a single frosted-glass tile with a thin accent ring (using your Highlight color) that flows and squash-stretches from the previous view's launcher button to the current one. It snaps to the active button on first appearance (no more sliding in from the corner) and reads like a themed glass highlight at rest.

v0.9.182

  • Added a "Liquid morph" active-view indicator for the dashboard navbar. Settings → Navbar → Highlight style now offers Ring (default) or Liquid morph — a single gooey blob that flows and stretches from the previous view's launcher button to the current one as you navigate (enabled by the persistent navbar). It uses your Highlight color and only applies to the Ted's Dashboard System navbar.

v0.9.181

  • Fixed navbar launcher icons briefly disappearing when switching views. With the persistent navbar (v0.9.180), the active-view highlight now restyles the current button in place instead of recreating its embedded card, so launcher icons no longer flicker or pop in during navigation.

v0.9.180

  • The navigation bar now persists across view changes on Ted's Dashboard System dashboards. With dashboard integration, the navbar is hosted once and survives navigation instead of being rebuilt for every view, so switching views no longer reconstructs the bar or its embedded buttons — cutting flicker and per-navigation work. Each view still chooses whether the bar auto-hides. Standalone navbars (without dashboard integration) render exactly as before.

v0.9.179

  • Fixed missing Music Assistant album art on HTTPS dashboards. Plain-HTTP MA image-proxy URLs are rewritten to the same-origin /ma-imageproxy/ NGINX route only when Home Assistant is loaded over HTTPS. Current-track, library, and queue artwork are covered; native HA proxy paths, HTTPS CDN images, and the still-supported plain-HTTP HA origin remain unchanged. Same-origin artwork also restores blur-background color sampling without canvas cross-origin failures.

v0.9.178

  • Voice Assist now uses robot state icons in the navbar. The idle button shows robot-outline, unavailable or failed voice shows robot-off-outline, and active interaction shows robot-happy-outline.
  • The Assist overlay now fades in without moving or scaling. Its fixed geometry and backdrop sampling prevent the dashboard from appearing to resize when voice interaction starts.

v0.9.177

  • The idle Voice Assist navbar button now uses a conversation icon instead of a microphone. The microphone appears only while Assist is actively listening, so the resting button no longer suggests that audio capture is already active.

v0.9.176

  • Settings now includes an About tab with system status. It shows the existing device, dependency, integration, and playback diagnostics without Global or This device controls, remains available when the TDS backend is unavailable, and supports direct links with ?tab=about.

v0.9.175

  • TDS Voice rich-result dialogs now support click-outside dismissal. The transparent light-dismiss layer consumes the completed click so it cannot activate the dashboard underneath.
  • The 30-second rich-result lifetime is now visible. A MessageBox-style accent bar counts down along the bottom edge and restarts whenever interaction inside the result resets its lifetime.

v0.9.174

  • TDS Voice now has a responsive, tool-aware interface. Assist responses stream into the overlay while the pipeline runs, named tool activity remains visible, and a fixed 10-bar colorful waveform responds to microphone input without shifting the layout.
  • Weather and Entity Card tool results now render as rich responses. Forecasts use responsive rows, while returned Lovelace entity cards are mounted as read-only previews. Rich results remain for 30 seconds of inactivity, reset their timer on interaction, and fullscreen responses return to the exact originating view without overriding later manual navigation.

v0.9.173

  • HomePods are now the top-priority speaker for auto-selected music playback. When a dashboard device has no explicit music-player setting, a HomePod in the same room now outranks Sonos, Chromecast, AirPlay and DLNA players. Stereo pairs are handled properly too: the combined pair (a Music Assistant sync group) is preferred over one of its own left/right channels, so the card can no longer pick a single speaker and play in mono. Provider ranking is also consistent now — a player ranks the same whether or not Music Assistant's exact-provider lookup has finished, which previously could make the choice change moments after the card loaded.

v0.9.172

  • Fixed: hidden Home Assistant entities no longer appear in Room Card auto-population. The card now honors the hidden flag exposed by Home Assistant's compact entity registry, so controls marked Visible off (such as smart-outlet relay lights) stay out of auto-populated Room Cards.

v0.9.171

  • Fixed: Dynamic Night Mode no longer raises an Unauthorized error on non-admin wall panels and nightstands. Theme snapshots now use a dedicated authenticated-user service instead of the admin-only global settings service. The backend derives the user ID from the Home Assistant service-call context, so each non-admin user can save or clear only their own Auto/Light/Dark restoration entry without weakening global-settings security.

v0.9.170

  • Fixed: Dynamic Night Mode now restores Auto, Light, and Dark exactly. Theme preferences are stored as explicit mode names per Home Assistant user instead of using null for Auto, which the backend treated as a deletion. Explicit Dark is captured rather than mistaken for an already-forced state, and sessions that did not participate in the night override can no longer consume another device's snapshot.

v0.9.169

  • Music playback now defaults to the room's preferred speaker. When a dashboard device has no explicit music-player setting, same-room providers are prioritized before matching the tablet or phone by name (Sonos first, then Chromecast, AirPlay, and DLNA). Room matching now honors device-inherited areas as well as entity-level assignments, while explicit music and system-sound choices still win.

v0.9.168

  • Fixed: navbar hold-menu toggles (auto-hide/float) stopped responding. The v0.9.166 "patch the DOM directly" optimizations for the navbar clock and Music Card progress bar mutated text nodes that lit-html also binds reactively, corrupting its internal tracking and crashing the next unrelated re-render partway through — which is what silently broke the toggle switches. Both now tick via a normal requestUpdate() again (the earlier navbar-clock correctness fix and the Music Card layout-measurement gating are unaffected and stay).

v0.9.167

  • Performance: Music Card no longer re-measures layout on every update. _measureLayout()/_measureTabs()/_measureMini() (each forcing several synchronous layout reads) now only re-run when hass or the config actually changed, instead of on every internal-state update (queue drag, lyrics scroll, menu open/close, etc.).

v0.9.166

  • Performance: Music Card progress no longer re-renders the whole card every second. While playing, the progress bar/elapsed time now patch directly instead of triggering a full re-render (tabs, queue, lyrics, media grid, and layout re-measurement) each tick.
  • Performance + fix: Navbar clock. The clock's per-second tick never actually activated (a stale type check), so it only refreshed on incidental re-renders and could go stale on a quiet screen. It now ticks reliably every second, patching just its own text instead of re-rendering the whole bar.

v0.9.165

  • Reverted the Navbar Card sliding active-view indicator (introduced in v0.9.161, adjusted in v0.9.162/v0.9.164). Each dashboard view mounts its own separate Navbar Card instance, so a real navigation destroys the old bar and creates a fresh one with no memory of the previous position — there is nothing to visibly slide or stretch between. The active-view ring is back to its original per-button instant highlight.

v0.9.164

  • Navbar Card: the sliding active-view ring now actually stretches. Same-size icon buttons never differ in width/height, so the previous move-and-resize transition never visibly stretched — it now bridges to a rect spanning both the old and new button before contracting onto the new one, with a springy overshoot ease, for a genuine liquid stretch/morph between taps.

v0.9.163

  • Device name and room self-management. Non-admin wall-panel users can now update their own Browser Mod or Companion app device name from the Status Card without opening Home Assistant's admin-only device page. The same dialog manages room assignment independently, disables room changes once a non-admin device is scoped, and reports name and room failures separately.

v0.9.162

  • Navbar Card: fixed sliding active-view ring misalignment. The v0.9.161 sliding indicator could drift a few pixels from the actual button because the button's own lift/scale was suppressed along with its ring color. The lift/scale now stays on the button (the indicator measures its rect after that transform), and the indicator re-measures itself if a late layout shift lands after the triggering render.

v0.9.161

  • Navbar Card: liquid sliding active-view indicator. The launcher's active-view ring now slides and stretches/morphs from the previously active button to the newly tapped one instead of instantly jumping, on both the horizontal and vertical (auto-hide) bars. At-rest appearance (color, thickness, lift) is unchanged.

v0.9.160

  • Room Card auto-populate: scene element order. Scene buttons now explicitly use Name → State → Icon ordering, with Name shown at the top, State hidden in the middle slot, and Icon shown at the bottom.

v0.9.159

  • Room Card buttons: larger minimum size. Responsive Room Card layouts now keep a normal button at least 68px wide (up from 58px), reducing cramped buttons before stepping down to fewer buttons per row.

v0.9.158

  • Room Card auto-populate: brightness & volume are icon-only. Auto-populated brightness and volume status items now show just their icon (no value text), for a cleaner status bar.

v0.9.157

  • Brightness status item: the icon now shows the level. With no manual icon set, a brightness item uses the mdi:lightbulb-on-XX range matching the current brightness (and lightbulb-off-outline when off) instead of a static icon. A number/input_number maps by its min–max range; a manual icon: still wins.
  • Room Card auto-populate: smarter status bar. Auto-populated presence is now icon-only and color-coded (accent when occupied, muted when unknown/unavailable), temperature shows just its value, and brightness/volume show icon + value — dropping to icon-only automatically when the value would otherwise clip the room name.

v0.9.156

  • Automatic Night Mode: no longer gets stuck in dark. When a device's account was already in dark mode as night began, night mode couldn't record a "day" value to restore, so it never switched back to light at dawn (and every following night reinforced it). Now, when Dark Mode is enabled in Night Mode, dawn always restores light even if no snapshot was taken — so panels reliably return to light in the morning.

v0.9.155

  • Navbar launcher: no jump on fully-transparent buttons. When the launcher buttons are set to 100% transparency, the "highlight current view" now draws a static ring instead of lifting/scaling the active tile — so it no longer resizes and shifts. Below 100% transparency the lift/scale look is unchanged.

v0.9.154

  • Room Card buttons scale better across screen sizes. Buttons now aim for 5 across but flex between 2 and however-many fit, keeping each button within a sensible size range instead of getting huge on wide wall panels or tiny on narrow ones.
  • Room Card tile shadows no longer clip. On themes with a card drop shadow (e.g. Material 3), the button area now leaves just enough room so tiles' shadows aren't sliced off at the edges — sized automatically to the theme's shadow.
  • Indicator bars follow rounded corners. The Light and Cover cards' brightness/position bars (and hint stripes) and the Music mini-player's progress strip now sit within the card's rounded corners with rounded ends, instead of square edges poking past or being cut on themes with a large corner radius.

v0.9.153

  • Room Card photos are now assigned across rooms, not per-card. A shared assigner is seeded from every Home Assistant area name, so within a type the best-fitting room always gets the main photo (e.g. "Primary Bedroom" wins Bedroom.webp over "Steve's Room") and the remaining rooms fall back to the alternates — deterministically, and updating automatically as areas are added, renamed, or removed.

v0.9.152

  • Room Card photo auto-selection is smarter, and no room is left blank. Auto now matches many more room names (synonyms like "Master Suite"/"Guest Room" → bedroom, "Den"/"Study" → office, "Great Room" → living room, "Powder Room" → bathroom, plus possessive names like "Bill's Room" → bedroom), matches whole words, prefers the most specific match, and falls back to the room's area name. Rooms of the same type now get different photos where alternates exist, and any room that matches no type falls back to a generic photo so a card is no longer left blank. Adds new Bedroom and generic photos.

v0.9.151

  • Fixed: re-overriding a device's Navbar sections could silently lose that device's type-specific layout. Toggling a device's "Navbar sections" from Inheriting back to Overriding always reseeded from the Global bar, so a Nightstand (whose whole point is a bar with weather and date/time stripped out) could have those items reappear after an inherit/override cycle. Re-overriding now reseeds from the device's own type preset when it has one.

v0.9.150

  • Vision tab: tiles is now the default view, with four selectable tile sizes (Small 1.5x, Medium 2x, Large 2.5x — new default, X-Large 3x) via the card's editor.
  • The layout toggle button moved into the same row as "Mark all reviewed" / "Clear all", to their left.
  • "Hide viewed" is now "Show viewed events" and defaults off, so reviewed events are hidden until you turn it on.

v0.9.149

  • Vision tab: a layout toggle button. The card header now has a button (top-right, next to the title) to switch between list and tile view instantly, without editing the card's YAML config.

v0.9.148

  • Vision tab: new tile layout. The Cameras → Vision timeline now supports a larger tile view that keeps the same metadata as the list view but renders the severity as a color dot, keeps the name/time on one row, and places the summary beneath the thumbnail.

v0.9.147

  • Room Card: bundled header photos no longer briefly load from the jsDelivr CDN. With Ted's Dashboard System installed the photos are served locally, but on first paint the card could momentarily request the CDN copy (tripping browser tracking-prevention warnings) before the local cache resolved. It now waits for the local lookup before falling back to the CDN, and fetches any un-cached bundled photo into local storage.

v0.9.146

  • Music Card: the volume control now opens a native Home Assistant slider dialog. Tapping volume (in both the full player and the mini bar) opens a modal with HA's touch-optimized slider plus a mute toggle, replacing the inline slider that was awkward on touch wall panels. This also clears a slider-vertical deprecation warning from the browser console.

v0.9.145

  • Camera Card: smooth Frigate live on the MSE path (Edge and other H.265-via-MSE browsers). The live-edge tracker no longer fast-forwards playback to catch up — which was overloading the decoder, dropping frames, and lurching the video up to 5× — it now jumps to the live edge and plays at normal speed. The MSE path also serves the low-res detect stream (like ACC) so the decoder keeps up. WebRTC browsers are unaffected.

v0.9.144

  • Camera Card: Frigate live now works on browsers without H.265-over-WebRTC (e.g. Microsoft Edge). The card now picks its live transport by browser capability — WebRTC (with audio) where H.265 can be decoded over it, otherwise the MSE player, which decodes H.265 via the platform. Previously such browsers connected over WebRTC but received no video and showed a frozen frame.

v0.9.143

  • Camera Card: the primary live tile no longer freezes on load. A WebRTC connection that took a moment to start rendering could trip an 8-second timer and fall back to a frozen still; the player now treats a connected peer as live, so slow or autoplay-deferred video keeps streaming instead of dropping.
  • Camera Card: primary tile starts muted with a speaker toggle. Every tile now starts muted so it always plays, and the primary live tile shows a mute/unmute speaker button in its corner — tap it to turn audio on or off without reconnecting.

v0.9.142

  • Grouped launcher buttons: the multi-view hint shadow hides at full transparency. When a launcher button's background Transparency is set to 100%, the "card behind" stacked-card shadow on a combined multi-view button is now hidden too, so it doesn't read as a stray mark over the transparent tile.

v0.9.141

  • Camera Card: the primary tile now starts live. The first (primary) camera in any layout defaults to live — one always-on feed with audio for Frigate cameras — while the other tiles stay on lightweight auto thumbnails. Per-camera camera_view settings and in-session view toggles still take precedence.

v0.9.140

  • Camera Card: live audio for Frigate cameras (go2rtc WebRTC). Frigate cameras set to live now stream over go2rtc's WebRTC, which carries audio (go2rtc transcodes the camera's AAC to Opus) alongside H.265 video at sub-second latency. In multi-camera layouts only the primary tile is unmuted. If WebRTC can't connect it falls back to the MSE player (video-only), then to the thumbnail — so a tile is never left dead.
  • Camera Card: the Frigate live player now actually plays. Fixed three issues that stopped the previous MSE player: it used the wrong Frigate instance id (the proxy returned 404), it stalled at the live edge without ever starting, and Chromium couldn't decode audio muxed with H.265. The MSE fallback now trims to the live edge and drops audio only where the browser requires it.

v0.9.139

  • Camera Card: native live video for Frigate cameras. Cameras set to live now play through a built-in MSE player over Frigate's WebSocket, so H.265 cameras stream in real time (~1-2 s) where the browser's WebRTC/HLS transports couldn't. Quality tiers request the matching go2rtc stream (base / _med / _high). Non-Frigate cameras, unsupported browsers, and any playback failure fall back to the existing thumbnail/stream automatically.
  • Camera Card: streams survive a quick tab switch. Briefly switching tabs no longer tears every feed down and forces a full reconnect — teardown now waits a short grace period and cancels if you return.

v0.9.138

  • Launcher button icons follow the theme. Launcher button icons now default to the theme's text color (matching the navbar's weather/clock/date font) instead of always white, so they read correctly on light themes. A Button color you set explicitly still applies.

v0.9.137

  • Grouped launcher buttons: the stacked-card shadow follows the theme radius. The "card behind" shadow on a combined multi-view launcher button no longer uses a fixed corner radius — it matches the button's own theme-driven radius so the two corners line up.

v0.9.136

  • Launcher Buttons: Transparency & Blur. Settings → Navbar → Launcher Buttons gains Transparency and Blur controls for the buttons' backgrounds, side by side below Button/Highlight color.
  • Button Card: entity default icons. A bound entity with no custom icon now shows Home Assistant's own default (e.g. scenes → mdi:palette) instead of the generic tap glyph.
  • Calendar (Agenda): a touch more breathing room — 1px between events and slightly more day-row padding.

v0.9.135

  • Room Card auto-populate: brushed tiles. Auto-populated light, cover, button, and scene tiles now enable the brushed-metal effect.

v0.9.134

  • Room Card: photo cards keep their frosted-glass body. The header photo now sits above the card's frost layer, so on translucent/glass themes the card body still frosts while the photo stays crisp (previously a photo turned the whole card's frost off).
  • Full-transparency cards drop the glass edge-glow too. A fully-transparent card (e.g. the Clock) now also clears the theme's --ha-card-box-shadow, so ha-card::before-based glass themes no longer draw a glowing edge around an otherwise invisible card.

v0.9.133

  • Translucent/glass themes no longer blur where they shouldn't. Under themes that drive card blur from --ha-card-backdrop-filter or an ha-card::before pseudo-element (e.g. visionOS / frosted-glass themes): fully-transparent cards (like the Clock in full-transparency mode) now truly show straight through, and the Room Card header photo stays crisp instead of being blurred by the theme's card frost.

v0.9.132

  • Fullscreen Card: square corners when maximized. Expanding to full screen now forces the housed card to square (0px) corners so a themed card border-radius no longer rounds the screen corners and leaves gaps — most noticeable on themes with larger radii. Normal (non-fullscreen) cards keep their rounded corners.

v0.9.131

  • Music Card: dark-mode readability scrim. In dark mode, a subtle scrim is drawn over the blurred album-art background so light artwork stays readable. No effect on cards that don't use background_mode: blur, or in light mode.

v0.9.130

  • Music Card: removed the “Recent” tab. The full player's tab bar is now Media / Queue / Lyrics. (The “Recently played” row inside the Media tab is unchanged.)

v0.9.129

  • Music Card (Mini): progress bar respects rounded corners. Fixed the playback progress strip poking past the card's bottom corners on themes with a large border radius — it's now clipped to the card shape.

v0.9.128

  • Music Card (Mini): equalizer now matches the full player. The now-playing equalizer uses the same three bars as the full player's queue indicator (was four), and its animation is a touch slower.

v0.9.127

  • Music Card (Mini): tap-to-open menu + now-playing equalizer. The “…” button is gone — tap anywhere on the bar (outside the transport buttons) to open the action menu, which flies up from the bar (or down when the card is near the top of the screen). While audio is playing, an animated equalizer appears at the right of the controls row, or in the title row when the controls are stacked.

v0.9.126

  • Music Card: adaptive Mini player + dashboard_integration. The Mini player now adapts to the space it's given — transport controls fold into the “…” menu as the card narrows (down to just “…”), and drop to a row below the title/artist when the card is tall enough; the thumbnail auto-sizes to the card height. The separate “Micro” mode has been removed — that behavior is now automatic. The player is sourced from Settings via a new YAML-only dashboard_integration: true (replacing the player_source option).

v0.9.125

  • Music Card: new "Micro" player + taller Mini bar. mode: micro is a compact nine-wide, one-row player showing only Play/Pause and a menu (previous, next, shuffle, and repeat move into that menu). mode: mini now defaults to two rows tall. In both bar layouts the thumbnail auto-sizes to the card height (and stays sensibly bounded when the card is set to auto height).

v0.9.124

  • Night Mode dark theme now reliably returns to light at dawn on multi-panel setups. The pre-night dark-theme preference is snapshotted once at the account level (matching Home Assistant's user-scoped dark toggle) instead of per-device, so a panel that booted after dark had already cascaded can no longer "restore" the account back to dark in the morning.

v0.9.123

  • Room Card auto-populate: switches now go to "Others". All switch entities (including smart plugs and switch groups) move from Controls to Others. Controls keeps scenes, zones, lights, covers, fans, and valves.
  • Smarter area-name stripping for possessive room names. A room named "Teddy's Bedroom" (or "Teddy's Room") now also strips the owner, so "Teddy's Ceiling Lights" reads as "Ceiling Lights". Curly and straight apostrophes are treated the same.

v0.9.122

  • Calendar Card (Agenda view): slightly more space above each day. The day-row top padding is now 5px (bottom stays 4px).

v0.9.121

  • Calendar Card (Agenda view) polish. Each day row now has even 4px top/bottom padding, and the line under each day's date is now a vertical divider on the right of the date column at 50% opacity (today stays blue, other days use the grid color) instead of a horizontal underline.

v0.9.120

  • Calendar Card: removed the stray hairline border. In the HA and Ted's Style surface modes, the embedded Daylight Calendar's own card border no longer shows as a 1px line on top of Ted's frosted surface — the surface is now the only card edge. The native (superdingo) look keeps Daylight's own border.

v0.9.119

  • Cards now follow your Home Assistant theme by default. Every card defaults to the active HA theme; the self-contained Ted's Style (Mica-dark) look is now opt-in only. This fixes the out-of-place bright 1px border that appeared around cards on a light theme.
  • Ted's Style card outline adapts to light/dark. In Ted's Style mode the card stroke now uses the Windows 11 Fluent dark-on-light control stroke under a light device preference (and the light-on-dark stroke in dark), so the outline looks correct in both modes instead of a bright rim on pale surfaces.
  • Navbar follows the Personalization theme. With dashboard integration, Ted's Navbar (and its launcher buttons) now follow Settings → General → Personalization → Theme instead of a fixed style.

v0.9.118

  • Music Media tab polish. The library filter is reordered to Favorites (default) / Playlists / Artists / Albums, the filter pills + view toggle now sit below the Recently-played row, and they no longer sit on an opaque bar.
  • Idle player now matches your other cards. With nothing playing (blur background mode), the player no longer paints an opaque fill — it shows the themed card surface (same color, opacity, and blur as every other card) with theme-colored text. The blurred album-art background returns once something plays.

v0.9.117

  • Music card: the Media tab is now an artwork browser. The Media tab presents your Music Assistant library as artwork tiles (with a one-tap list-view toggle), adds a Playlists / Albums / Artists / Favorites filter and a Recently played row, and plays any item on this device's player with a single tap. Favorites shows your favorited playlists. A new media_layout option sets the starting layout.
  • Removed the last Yet Another Media Player leftovers. The card has been self-contained for a while; the stale engine / split / yamp_config / left_config / right_config options (silently ignored by the current card) are gone from the docs and the shipped Music view, and YAMP is no longer listed as a prerequisite.

v0.9.116

  • Room Card auto-populate: smarter ordering, zones, and plugs. Buttons in each section now sort by priority — scenes → zones → lights → covers → plugs → other. Group entities are treated as "zones": the group tile stays in Controls while its individual members move to Others. Switches with an outlet or plug device class get their own "plugs" bucket. A new Group scenes into their own section option keeps scenes inside Controls by default (turn it on for a dedicated Scenes section). Tile names now have the room's area name stripped in every section.

v0.9.115

  • Room Card photos are now served locally when Ted’s Dashboard System is installed. The 16 curated room header photos ship inside TDS and load from your own Home Assistant instead of fetching from a public CDN on every dashboard load — no third-party request, no referrer leak. Card-only users (no TDS) still get the photos from the CDN as before. The photos were also converted to WebP (87% smaller). A “Retrieve default photos” button appears in the Room Card editor only in the rare case the bundled photos are missing.

v0.9.114

  • Night mode’s “Switch to Dark Mode” now uses Home Assistant’s real dark theme. Instead of a per-browser style override, it toggles HA’s own user-scoped Dark Mode at night and restores your previous preference at dawn. Because that setting is per-user, enabling it here also affects the account’s other devices — so turning it on now shows a confirmation listing those devices (with Keep setting / Cancel), and only when the account has more than one device.

v0.9.113

  • Calendar Card: dark mode now follows the Home Assistant theme. On the HA theme, the wrapped Daylight calendar was left in its own "auto" mode, which tracks the browser's color scheme rather than HA's — so in a dark HA theme its text stayed dark and its event tints blended toward white (making events jump out). It now follows HA's dark-mode toggle, so the font turns white and event tints recede to match the rest of the dashboard. Event tint softened slightly (85%) so events are a touch more subtle in both modes.

v0.9.112

  • Calendar Card (HA theme): fixed the surface reading milkier than other cards. On translucent themes (Win11/Mica/macOS), the wrapped Daylight calendar floored its own cell/agenda surface opacity, adding a second translucent layer on top of the card's frosted surface. Its custom surfaces are now forced fully transparent so the calendar matches a native ha-card's translucency.

v0.9.111

  • Night mode redesigned → “Dynamic night mode.” The single on/off switch is gone; each effect is now independently opt-in (all off by default). Schedule and Switch to Dark Mode lead, followed by a collapsible Dynamic brightness section (separate Screen and Background controls with day/night levels) and a Dynamic font section. Background can now be hidden at night behind a calm solid gradient instead of dimmed. Per-device overrides are independent per sub-section.

v0.9.110

  • Personalization section repositioned. In Settings → General, the collapsible Personalization section (Theme, Icon set, Background Wallpaper) now sits directly under Kiosk mode, above the Automatic night mode section. Collapsible sections now render in their declared position within a group rather than always at the bottom.

v0.9.109

  • Settings → General reorganized. Kiosk mode now sits directly under Device type, and a new collapsible Personalization section groups Theme, Icon set, and Background Wallpaper. Weather entity moved into the Advanced section, and the Automatic night mode settings now stay visible even when night mode is turned off.

v0.9.108

  • More dialogs fixed from running off-screen. The same top-layer modal fix from v0.9.107 now also applies to the Timer add/edit and recent-timer dialogs, the Settings “Add” choosers, and the Vision event detail — so none of them can be clipped or pushed off-screen when the card sits inside a tabbed or scaled layout.

v0.9.107

  • Fixed the alarm dialog running off-screen. The taller add/edit alarm dialog could extend past the bottom of the screen with its buttons unreachable. It now opens as a proper top-layer modal that's always centered and reachable, with the header and footer pinned and the body scrolling when needed.

v0.9.106

  • Alarm dialog now uses proper entity pickers. The Wake-up light and Only when present fields are searchable Home Assistant entity pickers (with icons and domain filtering) instead of plain dropdowns.

v0.9.105

  • Alarms can require presence. Each alarm can now name an optional presence sensor (occupancy/motion binary sensor, person, device tracker, or input boolean). If nobody's present when the alarm is due, it skips both the wake-up light and the alarm itself — no point waking an empty room. Set it in the new Only when present field of the add/edit dialog. Requires Ted's Dashboard System.

v0.9.104

  • Alarms can gently wake you with a light. Each alarm can now name a light that gradually brightens up to a target level, reaching full exactly when the alarm rings (a smooth, parabolic sunrise ramp rather than a linear one). As an energy safeguard the light fades back to whatever it was before — but only if you haven't already changed or switched it off. Configure it per alarm in the new Wake-up light section of the add/edit dialog. Requires Ted's Dashboard System.

v0.9.103

  • Vision timeline previews now animate. Each event's thumbnail loops through the stills that were analyzed (Frigate-style), so you can see the motion at a glance instead of a single frozen frame. The detail sheet falls back to the same looping stills when an event has no clip. Respects reduced-motion (shows a static frame). Needs Ted's Dashboard System to retain the frames — older events keep their single thumbnail.

v0.9.102

  • Vision analysis debugging now also raises a notification per pass. With Enable analysis debugging on, each pass (and each A/B pass) posts a silent Info notification titled with the AI Task entity, showing its images/timing/severity and full summary — so you can compare models straight from the notification center without opening each event. Off by default; note it churns the notification list while on.

v0.9.101

  • Vision analysis debugging + model A/B. The diagnostic setting is renamed Enable analysis debugging (and now works in single-pass mode too), and a new AI Task entity — A/B pass runs every pass a second time in parallel against a candidate model with the exact same images — recorded in the event detail for side-by-side comparison, but never published (it can't change the event's summary). Doubles AI cost only while an A/B entity is set.

v0.9.100

  • Vision cost controls. Vision Analysis settings gain Images per pass (now a total budget including Frigate's labelled snapshot, default 5), Max image size (downscales every image before the AI sees it — default 1024 px, 0 = full resolution), and Adaptive image count (sends fewer images on quiet events, scaled to how much the tracked object moved). Together these cut per-event vision cost several-fold and make it predictable across AI models.

v0.9.99

  • Vision: the analysis-passes detail is clearer about what each pass saw. Pass 1 is now labelled “Pass 1 — live, first 10s” and Pass 2 “Pass 2 — finished clip”, and each pass now shows whether the model was actually fed video or stills — so a provider that can't accept video (e.g. Ollama/OpenAI) is no longer silently sent stills without you knowing. (Pairs with the backend change that makes Pass 1 run live at the start of the event.)

v0.9.98

  • Vision: compare both analysis passes. A new diagnostic setting (Settings → Cameras → Vision Analysis → Enable analysis debugging) stores the quick and detailed pass results separately on each event, and the event detail sheet gains an Analysis passes disclosure showing each pass's entity, timing, attachment count, and text — with the one you actually saw tagged shown. Off by default; older events are unaffected.

v0.9.97

  • Cameras and Vision are now one view. Ted's Tab Card gained per-tab gating so the Cameras view can host the Vision timeline as a second tab: a tab can be tied to a setting (the Vision tab hides when Vision Analysis is off), and the tab strip auto-hides when only one tab remains. Both tabs are deep-linkable (?tab=cameras / ?tab=vision).
  • Calendar Card Agenda view: the blank strip above each day row nudged from 1px to 2px.

v0.9.96

  • Navbar: Assist mic moved to the left. The voice Assist button now sits in the navbar's Left section (just after the weather item) instead of leading the Right status cluster. The Nightstand device type no longer auto-hides its navbar — the bar stays visible on the right.

v0.9.95

  • Night Mode no longer darkens other devices on the same account. Automatic Night Mode's dark theme is now applied locally in each browser instead of through Home Assistant's account-wide theme setting, so a nightstand can go dark while wall panels sharing the same HA user account stay light. Devices that share one account can now hold different night-mode settings, and the profile page's Theme selection is left untouched.

v0.9.94

  • Notification severity now has a color, not just an icon. Each severity has a single canonical accent color (info blue, success green, warning amber, danger red, tip purple) shared by the toast, Notification Center, and message detail views — and the danger accent was warmed up to a clearer red. The auto-hide navbar pill now pulsates in the color of the highest-severity unread notification (danger > warning > success > info > tip), so a serious alert reads at a glance even before you reveal the bar.

v0.9.93

  • Calendar Card (Agenda view): tighter day rows. Trimmed daylight-calendar-card's 8px blank strip above each day row down to 1px, so days sit closer together.

v0.9.92

  • Vision card: clearer empty states. Instead of always showing “opt cameras into Vision Analysis”, the timeline now tells you the real reason it's empty — Vision is off, no cameras opted in, watching for activity, all events already viewed, or no events match the current filters — and offers a Show all events button when filters are hiding everything.

v0.9.91

  • Vision card: “Hide viewed” toggle. The Vision timeline now hides events you've already reviewed by default, keeping the list focused on what's new; tap Hide viewed in the filter row to show them again.

v0.9.90

  • Vision Settings: “Any Frigate alert” catch-all trigger. For a Frigate camera, Vision now always has a built-in catch-all so no Frigate alert is ever silently dropped — the motion trigger reads “Any Frigate alert”, is created automatically when you enable analysis, and can't be deleted. Add object triggers (person, car, …) only to give a specific object a different cooldown or actions. Requires the Ted's Dashboard System integration.

v0.9.89

  • Calendar Card (Agenda view): long event titles now truncate with “…” instead of stretching past the card. A long-standing layout quirk in the underlying daylight-calendar-card (its event column and title never shrank below the title's intrinsic width) let long titles overflow the card's right edge; it became more noticeable after the recent event-title size bump. Titles now ellipsis-truncate within the card at any font size.

v0.9.88

  • Voice: interrupt a long answer, and the response view scrolls. While the assistant is speaking you can now cut it off — say a stop word (“stop”, “shut up”, “quit”, “no”, “cancel”…) and it stops and acknowledges with “Okay”, or tap the navbar mic (which turns into a stop button while speaking). The full-screen Assist-Response view now scrolls, so long answers no longer get clipped. See the Voice Assist docs for a suggested agent instruction to keep spoken answers short.

v0.9.87

  • Nightstand device type: navbar now defaults to the right. The one-time Nightstand preset docks the bar to the right edge (was left) and keeps the Left and Right navbar sections enabled — just with the weather and date/time status items removed — instead of hiding them entirely.
  • Calendar Card (Agenda view) polish. In the day column the weekday and forecast now sit tightly just above and below the date number (vertically centered as a group, rather than pinned to the top and bottom), and the date number is a bit larger.

v0.9.86

  • Calendar Card (Agenda view) tuned to a Calendar Card Pro look. In Agenda mode the day date is larger, the weather forecast now shows only the high temperature with its condition icon sized to match, days are spaced 1px apart, events sit flush with no gap, and event titles are a touch larger (via daylight's native event_font_size).

v0.9.85

  • Vision events now show live analysis progress. A camera event appears the instant it's detected with an In progress… badge (and its actions — live feed, chime, notifications — fire immediately), upgrades to Analyzing… while the AI reviews the clip, then settles into its final summary and severity. With two-pass analysis a quick first look can post a preliminary summary before the detailed pass finishes. Requires the Ted's Dashboard System integration.

v0.9.84

  • Vision triggers: “Discard events if severity matches”. The per-trigger severity control is now a discard filter rather than a gate — trigger actions (live feed, chime, notifications) always fire the instant an event starts, and after the full AI analysis completes any event whose final severity matches the selected levels (or that turns out to be a false alarm) is discarded per your Filter out false alarms setting (log only or drop). Requires the Ted's Dashboard System integration.

v0.9.83

  • “Analyzing…” badge on Vision events. When Frigate reports a new object, the Vision timeline now shows the event immediately with a pulsing Analyzing… badge (using Frigate's live thumbnail), then upgrades the row in place once the clip and AI summary are ready (requires the Ted's Dashboard System integration).

v0.9.82

  • Tighter Frigate integration on the Cameras view. For a Frigate camera, the long-press menu now includes Detect / Recordings / Snapshots toggles and a Recordings link (opens Frigate's review page), and each tile can show status chips (review status + active object counts). New Settings → Cameras → Frigate toggles control these plus using Frigate's own detection to save an AI pass (requires the Ted's Dashboard System integration).

v0.9.81

  • Use Frigate as your camera source (Settings → Cameras). When the Frigate integration is installed and exposing cameras, the Cameras settings page now offers a one-tap switch to Frigate — it does a one-time clear of your current camera list and replaces it with your Frigate cameras (requires the Ted's Dashboard System integration).

v0.9.80

  • Removing a Bing “Photo of the Day” now removes it from every device at once. When you tap Remove on one tablet, the wallpaper slideshow on all other devices drops that photo live too (advancing to a new image only if it was the one currently on screen) — instead of the removed photo lingering until each device reloaded (requires the Ted's Dashboard System integration).

v0.9.79

  • Notifications now show a thumbnail image when one is provided. The navbar notifications popup, the Notification Center card, and the toast all display the notification's thumbnail (e.g. a vision event snapshot) in place of the icon when available, falling back to the icon otherwise.

v0.9.78

  • Settings → Cameras substream cleanup. Auto-populate now collapses high/medium/low substream channels into one entry per physical camera (keeping the highest-res) and cleans up any redundant substreams already in the list, and the “Add a camera” picker hides redundant medium/low substreams — matching the camera card editor. A camera whose only entities are substreams is never hidden.

v0.9.77

  • Camera card editor polish for substreams. The Medium/Low substream pickers now show the auto-detected feed as a muted placeholder when left blank, so the effective stream is always visible. The main “Camera entity” picker now hides redundant medium/low substream entities (keeping only the main feeds), while never hiding a camera whose only entities are substreams.

v0.9.76

  • Camera card substream matching is now device-aware. Auto-detection and “Auto populate” only pair feeds that belong to the same parent device and share a significant portion of their entity name. This correctly links renamed cameras to their substreams (e.g. a renamed camera.front_yard_camera to its _medium/_low_resolution_channel siblings) while keeping distinct feeds like doorbell package cameras separate.

v0.9.75

  • Camera card “Auto populate” is now smart about substreams. It collapses the high/medium/low variants of the same camera into a single entry (keeping the highest-res), so you no longer get a wall of duplicate feeds — the card auto-detects the lower-res siblings for small tiles. Substream detection also now recognizes Reolink's _high/medium/low_resolution_channel entity naming.
  • Removed the “Camera source” selector from the card editor. The device-Settings source is a dashboard-integration feature and is now YAML-only; cards already using it keep working.

v0.9.74

  • Camera card now auto-detects substream entities. When the Medium/Low substream fields are left blank, the card finds sibling camera entities by naming convention (UniFi Protect _high/_medium/_low, Reolink _clear/_balanced/_fluent, generic _main/_sub), so lower-res feeds are used for small tiles with no manual setup. Explicit config still overrides.

v0.9.73

  • Camera card can now use lower-resolution substreams for small feeds. Each camera gains optional "Medium substream" and "Low substream" entities. The card renders the low feed for the small Multi tiles, the medium feed for the Multi primary tile and the Quad/Auto-grid tiles, and the full (main) feed for the Single layout — with graceful fallback to the main camera when a substream isn't set. Cuts bandwidth on multi-camera layouts.

v0.9.72

  • Tapping a notification in the Notification Center card now opens it. A tap marks the notification read and opens the full event in the same centered detail modal used by the navbar notifications popup (title, time, any vision clip, and the full message) instead of only marking it read.

v0.9.71

  • Fixed repeated “Unauthorized” log spam on non-admin tablets. Auto-refresh-on-update now subscribes through the backend's dedicated WebSocket command instead of listening to the custom event directly, so kiosk/Wallpanel users no longer flood the log with Refusing to allow … to subscribe to event errors. Requires Ted's Dashboard System v0.9.76+.

v0.9.70

  • Mini Music Player volume slider now fills its popup. The vertical slider stretches to fit the popout height instead of floating short in the middle.

v0.9.69

  • Mini Music Player volume popout is now a vertical slider. The volume flyout shows the level on top, a vertical slider (louder = up), and the speaker/mute button at the bottom.

v0.9.68

  • Fixed the mini Music Player “…” menu opening off-screen. On a bottom-pinned mini player the menu (and volume flyout) now open upward instead of dropping below the screen edge.

v0.9.67

  • Music Player “mini” mode: “Party Mode!”. The mini player’s “…” menu has a new Party Mode! item that opens Music Assistant’s built-in fullscreen party dashboard for the current player. Requires Music Assistant 2.8+ with the Party plugin.
  • New Web View card. A reusable full-bleed web-view (iframe) card that loads a URL from its config or a ?url= navigation parameter — used by Party Mode to show the party page inside the dashboard.

v0.9.66

  • Music Player “mini” mode: new “…” menu. The compact mini player’s volume button is now a “…” button that opens a menu with Media, Queue, and Volume. Media and Queue open a pop-up window with the full player’s Media or Queue tab, and Volume opens a compact slider (tap the speaker to mute).

v0.9.65

  • Fixed a full-screen black overlay on some devices. The Vision “Display live feed” overlay added in v0.9.64 could render as a permanent black screen on devices whose browser doesn’t support the Popover API (some companion-app webviews and wall tablets). The live view is now hidden by default and only appears when a feed is actually opened.

v0.9.64

  • Vision “Display live feed” opens a live camera view instantly. When a trigger fires this action, targeted screens now pop open a muted, full-screen live stream of the camera (WebRTC-preferred for speed) instead of navigating to the Cameras view. It closes automatically after 60 seconds, or on a tap.

v0.9.63

  • Room Card: new auto_max_rows option — each section auto-limits its visible rows to what fits the card's height (measured in rows of 1.5x-height tiles) and overflows the rest into the “…” menu.

v0.9.62

v0.9.61

v0.9.60

v0.9.59

  • Room Card: the editor now refreshes after Auto-populate, so it no longer shows stale fields from the previously configured entities.
  • Music card (mini): the playback progress is now a thin, non-interactive strip pinned to the card's bottom edge (no seek thumb).
  • Calendar card: new agenda_evening_lookahead option — the agenda shows 0 extra days before 5pm and 1 extra day (through tomorrow) from 5pm on.

v0.9.58

  • Room Card: the light-name header text stays legible when it sits over a top-scrimmed header photo.
  • Room Card auto-populate: Controls and Scenes item names now have the room's area name stripped out (e.g. in a “Kitchen” room, “Kitchen Ceiling Lights” becomes “Ceiling Lights”).

v0.9.57

v0.9.56

  • Settings: hide Global tab from non-admins. The Settings card now hides the “Global” tab for non-administrator users (and forces the “This device” scope), instead of showing it read-only.

v0.9.55

  • Global Theme setting. Settings → General now has a Theme option (HA Theme / Ted's Style) that drives every Ted card with dashboard_integration enabled (clock, room, calendar, …). The old per-Calendars “Theme” setting was removed. An explicit theme: on a card still wins.
  • Room Card: now defaults to the HA theme, and a newly added section button leaves its Name empty so it inherits the entity's name and icon.
  • Room Card auto-populate: entities from Browser Mod devices (e.g. the tablet's own screen) go to the Others section instead of Controls/Media; Controls lights are ordered by role (ceiling/main → pendant → lamp/desk → accent → other); and Scenes render as icon + name.

v0.9.54

  • Calendar Card: matched header colors. Ted's Style now has a steel-blue header and HA Style uses the theme's primary color, each with a lightly translucent header (Ted's 40%, HA 30%) over the themed surface. SuperDingo's Style keeps Daylight's native header.

v0.9.53

  • Calendar Card: consistent theming + a third option. The theme styling now has three choices — Home Assistant (a cohesive HA-card surface), Ted's (a dark frosted, translucent surface), and SuperDingo's (the native Daylight Calendar look). Previously “Ted's Style” looked like a plain HA card and “HA Theme” looked like the raw Daylight card; both now match the rest of Ted's cards by making Daylight's own body/header transparent behind the chosen surface.

v0.9.52

  • Room Card: added a 1.5x button height, and the button sections now scroll on their own so the status header stays visible on a fixed-size card.
  • Calendar Card: replaced the “Calendar source” option with a yaml-only dashboard_integration flag (consistent with the other cards) — calendars come from Settings when it's on, otherwise from the card's own entities. A card-only calendar's empty state no longer points to Settings. The Header editor section was tidied (Show header on its own row, color + transparency paired), gained a Show controls toggle, and disables the rest when the header is hidden.

v0.9.51

  • Room Card auto-populate: taller light/cover tiles. Auto-populated light and cover tiles are now double-height with default name/icon/state styling.

v0.9.50

  • Clock: system-aware custom hour. With time_format: custom, the hour token now follows Home Assistant's 12/24-hour setting — h:MM renders as h:MM (12-hour) or H:MM (24-hour) automatically, keeping your leading-zero/separator style.
  • Confirmation dialogs work over the card editor. The self-contained confirmation and prompt dialogs (e.g. the Room Card “Auto-populate” overwrite warning) are now native modal dialogs, so they appear above the card editor and are interactive instead of passing clicks through to it.

v0.9.49

  • Room Card auto-populate refinements. Auto-populated light/cover tiles now show a compact name + icon + state (at 75%), generic buttons show a name (60%) + state without an icon, the Media section uses a multi-speaker icon, and the section layout switches to tabs whenever there is more than one section. The editor's “Auto-populate” overwrite confirmation now appears above the card editor instead of behind it.

v0.9.48

  • Room Card auto-populate. The Room Card can now build itself from a room's entities. Standalone cards get an Auto-populate from area button in the editor (with an overwrite warning), and cards with dashboard_integration: true and no sections automatically adopt the device's area and populate live — hiding themselves when the device has no area. It adds occupancy, temperature (a single thermostat is shown and adjustable from the header), main-light brightness, and volume status items, and groups controls into Controls, Scenes, Thermostats, Media, and Others sections.

v0.9.47

v0.9.46

  • Vision card: bulk actions + list-order fix. The filter row now has right-aligned “mark all reviewed” and “clear all” buttons, and marking an old event reviewed no longer pops it to the top of the list — it keeps its chronological position.

v0.9.45

  • Vision false-alarm fixes. Events are no longer all tagged as false alarms (a boolean-coercion bug), "Drop" now discards false alarms flagged during the detailed pass, and the global-only Vision Analysis settings are hidden from the "This device" tab.

v0.9.44

  • Consistent collapsible-list UX + card-picker cleanup. List rows now show the expand chevron at the far right with a trash-can delete button immediately to its left across the Settings and Navbar editors. The Settings, Announce, and Notification Center cards are hidden from the "Add card" chooser (they are configured through the dashboard).

v0.9.43

  • Vision Analysis: false-alarm filtering, real video, and two-pass analysis. The AI flags likely false alarms; a "Filter out false alarms" setting (Off / Log only / Drop) can skip a trigger's actions, and the Vision card shows a "False alarm" tag and filter. Capture defaults to recording the real camera stream (falls back to stitched frames), and an optional two-pass mode does a fast first analysis then a detailed refine, with separate AI Task entities per pass and smart provider defaults. Capture window default is now 10s.

v0.9.42

  • Vision "Display live feed" opens the camera live. Targeted screens navigate to the Cameras view and the triggering camera becomes the primary feed, switched to a live stream. Also fixed Settings list rows that rendered taller than the standard height.

v0.9.41

  • Vision trigger actions reworked into four fixed on/off sections (Display live feed, Toast notification, Push notification, Custom action), each with a header toggle.

v0.9.40

  • Vision "Additional actions" reworked into consistent collapsible lists.

v0.9.39

  • Thermostat voice aliases moved into the Thermostats list (expand a thermostat for a collapsible "Aliases" section).

v0.9.38

  • Settings polish. Consistent list-row heights and button styles across the Cameras, Vision, Announce, and Navbar editors; typed "+ Add" buttons open a type-picker popup; the Vision severity-filter description sits above its checkboxes.

v0.9.37

  • Consistent collapsible section headers across the settings editors, plus Announce view polish.

v0.9.36

  • Vision Analysis redesigned to per-camera triggers and actions, moved into the Cameras list (the separate Vision settings tab was removed).

v0.9.35

  • Native Camera Vision Analysis. AI-analyzes camera detection events (severity, summaries, thumbnail/clip) into a timeline card, with per-camera opt-in, using Home Assistant's built-in AI Task (no LLM Vision required).

Earlier entries predate the v0.9 version reset and remain in the git history.


License

MIT

Contributors

tedr91

775 commits

Languages

TypeScript

86.4%

HTML

11.9%

JavaScript

1.6%