This is only a GIF preview (very standard configuration) — you can do so much more with it, and it looks a lot prettier in the dashboard, try it out
Click any weather condition or Day/Night to switch instantly and see every effect in motion.
- Animated weather display
- Current conditions
- Forecast support
- Dashboard-friendly layout / editor
Getting Started · Installation · Quick Start · Setup · Examples
Customization · Appearance · CSS Variables
Guides · Chips · Layout & Layering · Icons
Reference · Color Mode · Performance
Help · Troubleshooting
Maintenance · Maintenance & Archive Info
Note
Parts of the development use AI-assisted coding to move faster than doing everything by hand would allow.
Easiest way to install and manage updates. HACS handles everything for you.
Installation Steps
- Open HACS in Home Assistant.
- Click the three-dot menu (top right) → Custom repositories.
- Add the repository URL: https://github.com/whyisthisbroken/atmo-weather-card
- Select category: Dashboard
- Click Add.
- HACS will scan the repository and redirect you to it automatically. If not, go to HACS and search for Atmo Weather Card.
- Click Download.
- Reload your dashboard (clear browser cache if the card doesn't appear).
For manual installation without HACS. Download the latest files from the releases page.
Installation Steps
-
Download files from the latest release:
atmo-weather-card.jsatmo-weather-card-editor.jsatmo-weather-animations.jsatmo-weather-config.jsatmo-weather-fauna.js
-
Place files in your Home Assistant config folder:
config/www/atmo-weather-card/ ├── atmo-weather-card.js ├── atmo-weather-card-editor.js ├── atmo-weather-animations.js ├── atmo-weather-config.js └── atmo-weather-fauna.js -
Add resource in Home Assistant:
- Navigate to Settings → Dashboards → ⋮ → Resources
- Add a new resource:
- URL:
/local/atmo-weather-card/atmo-weather-card.js - Type: JavaScript Module
- URL:
-
Reload dashboard with a hard-refresh:
- Chrome/Edge:
Ctrl+Shift+R - Firefox:
Ctrl+Shift+R - Safari:
Cmd+Shift+R
- Chrome/Edge:
Note: If you run into preview/FPS/load issues after install or update, see the Troubleshooting section below.
| Option | Type | Default | Description |
|---|---|---|---|
weather_entity |
string |
— | Required. Your weather integration entity (e.g., weather.your_weather_entity). See Troubleshooting: Weather entity is unavailable or values look wrong. |
sun_entity |
string |
— | Required. Tracks the sun to auto-switch between day and night. Without this, the card will default to permanent day. See Troubleshooting: No night effects (stars/comets) are visible. |
moon_phase_entity |
string |
— | Recommended. Displays the correct moon phase (e.g., sensor.moon_phase). |
Note
The sun_entity controls the timing of the sun and moon. Without it, the card defaults to permanent day. Additionally, card colors change based on your configuration.
Add this card to a dashboard after installation, then replace the example entity IDs with your own:
type: custom:atmo-weather-card
weather_entity: weather.home
sun_entity: sun.sun
moon_phase_entity: sensor.moon_phase
chips:
- entity: weather.home
attribute: temperature
icon: weather
- entity: weather.home
attribute: humidity
icon: mdi:water-percentUse the visual editor to add or rearrange chips. Browse the examples for complete layouts, or jump to Appearance for the full configuration reference.
The card is meant to be pretty flexible. You can customize these examples however you like, mix different elements, or combine them with other Home Assistant cards. If you want the exact look from the screenshots, use the weather icons guide.
Forecast Slider
type: custom:atmo-weather-card
weather_entity: weather.your_weather_entity
sun_entity: sun.sun
moon_phase_entity: sensor.moon_phase
card_style: standalone
card_height: 160px
card_padding: 16px
celestial_size: 50
celestial_alignment: left
celestial_x: "60"
chip_area_position: top-right
chip_text_size: 14px
chip_label_size: 11px
chip_area_layout: horizontal-scroll
chip_area_scroll_count: 3
chip_area_align: center
chip_area_width: 180px
chip_area_height: 100%
chip_padding: 0px
chip_area_padding: 16px
chip_area_gap: 2px
chip_gap: 6px
chip_icon_size: 32px
chip_style: vertical
chip_area_background: true
chip_area_grouped: true
chip_area_separator: true
chip_icon_background_color: rgba(255,255,255,0.55)
card_offset: 40px 0px 40px 0px
chip_icon_background: false
custom_cards_position: bottom-left
perf_fps: 60
perf_cloud_quality: 2
perf_effects: 2
perf_dpr: 2
chips:
- entity: weather.your_weather_entity
position: custom
position_anchor: top-left
position_y: 16px
text_size: 32px
hide_icon: true
hide_label: true
attribute: temperature
background: false
position_x: 16px
padding: 0px 8px
fancy_unit: true
value_weight: "700"
- attribute: uv_index
entity: weather.your_weather_entity
position: custom
position_anchor: bottom-left
position_x: 20px
position_y: 20px
style: vertical
icon_size: 14px
padding: 6px
ring_width: 4px
text_size: 13px
type: ring
align: center
forecast: daily
hide_icon: true
label_size: 8px
ring_gap: 4px
ring_min: 0
ring_max: 11
ring_color: "#ffffff"
height: 50px
marquee_speed: 55
forecast_precision: 1
name: UV
- entity: weather.your_weather_entity
forecast: daily
attribute: temperature
icon: weather
forecast_precision: 0
icon_path: /local/your-icon-folder/
unit_format: °
forecast_show_min: true
forecast_low_position: below
- entity: weather.your_weather_entity
forecast: daily
attribute: temperature
forecast_offset: 1
icon: weather
forecast_precision: 0
icon_path: /local/your-icon-folder/
unit_format: °
forecast_show_min: true
forecast_low_position: below
- entity: weather.your_weather_entity
forecast: daily
attribute: temperature
forecast_offset: 2
icon: weather
forecast_precision: 0
icon_path: /local/your-icon-folder/
unit_format: °
forecast_show_min: true
forecast_low_position: below
- entity: weather.your_weather_entity
forecast: daily
attribute: temperature
forecast_offset: 3
icon: weather
forecast_precision: 0
icon_path: /local/your-icon-folder/
unit_format: °
forecast_show_min: true
forecast_low_position: below
- entity: weather.your_weather_entity
forecast: daily
attribute: temperature
forecast_offset: 4
icon: weather
forecast_precision: 0
icon_path: /local/your-icon-folder/
unit_format: °
forecast_show_min: true
forecast_low_position: below
- entity: weather.your_weather_entity
forecast: daily
attribute: temperature
forecast_offset: 5
icon: weather
forecast_precision: 0
icon_path: /local/your-icon-folder/
unit_format: °
forecast_show_min: true
forecast_low_position: below
grid_options:
rows: autoForecast & Mini-graph
This example embeds a mini-graph-card with a bit of card-mod styling. For extra drama, the large header text is layered behind the weather elements.
type: custom:atmo-weather-card
weather_entity: weather.your_weather_entity
sun_entity: sun.sun
moon_phase_entity: sensor.moon_phase
card_style: standalone
card_height: 160px
card_padding: 16px
card_square: false
celestial_size: 50
celestial_alignment: left
celestial_x: "50"
celestial_y: 0
chip_area_position: top-right
card_hide_text: false
chip_text_size: 14px
chip_label_size: 12px
chip_area_layout: horizontal-scroll
chip_area_scroll_count: 1
chip_area_width: 160px
chip_padding: 12px 14px 12px 12px
chip_area_padding: 0px
chip_area_gap: 8px
chip_gap: 12px
chip_text_gap: 5px
chip_icon_size: 32px
chip_style: stacked
chip_area_background: true
chip_area_grouped: false
chip_icon_background_color: rgba(255,255,255,0.1)
card_offset: 40px 0px 40px 0px
card_stack_order: 1
chip_icon_background: true
custom_cards_position: bottom-left
perf_fps: 30
perf_cloud_quality: 2
perf_effects: 2
perf_dpr: 2
chips:
- entity: weather.your_weather_entity
position: custom
position_anchor: top-left
position_y: 16px
text_size: 36px
hide_icon: true
hide_label: true
attribute: temperature
background: false
position_x: 16px
padding: 0px 8px
fancy_unit: true
behind_effects: true
value_weight: "700"
- entity: weather.your_weather_entity
forecast: daily
attribute: temperature
forecast_show_min: true
forecast_precision: 0
name: Today
icon: weather
label_overflow: marquee
icon_path: /local/your-icon-folder/
- entity: weather.your_weather_entity
forecast: daily
attribute: temperature
forecast_show_min: true
forecast_precision: 0
forecast_offset: 1
icon: weather
label_overflow: marquee
name: Tomorrow
icon_path: /local/your-icon-folder/
chip_icon_padding: 0px
grid_options:
rows: auto
custom_cards:
- type: custom:mini-graph-card
custom_width: 100%
entities:
- entity: sensor.your_temperature_sensor
show:
icon: false
name: false
state: false
labels: true
fill: false
labels_secondary: true
points: false
legend: false
animate: false
height: 70
line_width: 4
hours_to_show: 24
points_per_hour: 2
color_thresholds:
- value: -10
color: rgba(84, 136, 199, 0.6)
- value: -5
color: rgba(105, 169, 209, 0.6)
- value: 0
color: rgba(131, 196, 207, 0.6)
- value: 5
color: rgba(156, 217, 198, 0.6)
- value: 10
color: rgba(189, 230, 185, 0.6)
- value: 15
color: rgba(224, 237, 171, 0.6)
- value: 20
color: rgba(242, 219, 145, 0.6)
- value: 25
color: rgba(235, 182, 115, 0.6)
- value: 30
color: rgba(224, 143, 94, 0.6)
- value: 35
color: rgba(214, 100, 84, 0.6)
card_mod:
style: |
ha-card {
z-index: -1 !important;
border-radius: 0px;
box-shadow: none;
background-color: transparent;
}
.graph__labels {
opacity: 1 !important;
align-items: flex-end !important;
flex-direction: row-reverse !important;
margin: 0px 14px 0px 0px !important;
padding: 2px 4px !important;
gap: 8px !important;
font-size: 12px !important;
font-weight: 700 !important;
}
.graph__labels span {
background-color: color-mix(in srgb, var(--ha-card-background, var(--card-background-color, var(--primary-background-color))) 20%, transparent) !important;
backdrop-filter: blur(10px) !important;
-webkit-backdrop-filter: blur(10px) !important;
padding: 4px 8px !important;
border: 1px solid rgba(255, 255, 255, 0.08) !important;
box-shadow: inset 0 1px 2px rgba(0,0,0,0.18), inset 0 -1px 1px rgba(0,0,0,0.10) !important;
border-radius: calc(var(--ha-card-border-radius, 12px) - 5px) !important;
}
.graph__labels span:after {
content: " °C";
opacity: 0.6;
}Forecast & Ring Chip
type: custom:atmo-weather-card
weather_entity: weather.your_weather_entity
sun_entity: sun.sun
moon_phase_entity: sensor.moon_phase
card_style: standalone
card_height: 120px
card_padding: 16px
celestial_size: 50
celestial_alignment: center
chip_area_position: bottom-left
chip_text_size: 12px
chip_label_size: 8px
chip_area_layout: horizontal-scroll
chip_area_scroll_count: 1
chip_area_align: center
chip_area_width: 160px
chip_padding: 0px
chip_area_padding: 0px
chip_area_gap: 8px
chip_gap: 6px
chip_text_gap: 4px
chip_icon_size: 22px
chip_style: vertical
chip_area_background: true
chip_icon_background_color: rgba(255,255,255,0.55)
chip_icon_background: false
custom_cards_position: bottom-left
perf_fps: 30
perf_cloud_quality: 2
perf_effects: 2
perf_dpr: 2
chips:
- entity: weather.your_weather_entity
position: custom
position_anchor: top-left
position_y: 16px
text_size: 30px
hide_icon: true
hide_label: true
attribute: temperature
background: false
position_x: 16px
padding: 0px 8px
behind_effects: true
fancy_unit: true
value_weight: "700"
- attribute: precipitation_probability
entity: weather.your_weather_entity
style: vertical
icon_size: 16px
padding: 12px
ring_width: 6px
type: ring
align: center
forecast: daily
name: Rain
ring_gap: 6px
ring_min: 0
ring_max: 100
ring_threshold_mode: gradient
ring_thresholds:
- value: 0
color: rgba(142, 164, 188, 0.9)
- value: 10
color: rgba(119, 149, 180, 0.9)
- value: 20
color: rgba(96, 134, 172, 0.9)
- value: 30
color: rgba(74, 118, 163, 0.9)
- value: 40
color: rgba(87, 133, 161, 0.9)
- value: 50
color: rgba(68, 126, 156, 0.9)
- value: 60
color: rgba(50, 119, 151, 0.9)
- value: 70
color: rgba(102, 107, 153, 0.9)
- value: 80
color: rgba(86, 88, 138, 0.9)
- value: 90
color: rgba(70, 69, 122, 0.9)
marquee_speed: 55
forecast_offset: 0
position: custom
position_anchor: top-right
position_x: 16px
position_y: 16px
forecast_precision: 0
height: 78px
- forecast: daily
attribute: temperature
entity: weather.your_weather_entity
style: inline
icon: weather
icon_path: /local/your-icon-folder/
padding: 6px 10px
text_size: 13px
label_size: 13px
text_gap: 4px
name: Today
value_weight: "600"
overflow: marquee
label_overflow: ellipsis
forecast_show_min: true
- forecast: daily
attribute: temperature
forecast_offset: 1
entity: weather.your_weather_entity
style: inline
icon: weather
icon_path: /local/your-icon-folder/
padding: 6px 10px
text_size: 13px
label_size: 13px
text_gap: 4px
value_weight: "600"
name: Tomorrow
overflow: marquee
label_overflow: ellipsis
forecast_show_min: true
grid_options:
rows: autoThe card has a visual editor for setting up layouts. All YAML settings are listed below.
Where to find things in the editor
The visual editor groups settings into collapsible panels, top to bottom:
Card editor
├─ weather_entity (always visible, top)
├─ Sun & Moon
│ ├─ sun_entity, moon_phase_entity
│ ├─ Position & Size ▸ celestial_position, celestial_alignment,
│ │ celestial_x, celestial_y, celestial_size
│ └─ Moon Style ▸ celestial_moon_style
├─ Color Mode
│ ├─ card_color_mode, theme_entity
│ └─ Advanced options ▸ card_filter
├─ Card Style
│ ├─ card_style, card_height, card_padding
│ └─ Advanced options ▸ card_hide_text, card_square, card_full_width,
│ card_mask_vertical, card_mask_horizontal,
│ card_stack_order, card_offset
├─ Overlays
│ ├─ Chips ▸ the chips list, row styles, card_background_style
│ ├─ Image ▸ image_day, image_night, image_scale, image_alignment,
│ │ image_x, image_y, Status Override ▸ status_entity,
│ │ status_day, status_night
│ └─ Cards ▸ custom_cards_position, custom_cards_css_class, custom_cards
├─ Performance
│ └─ perf_mode, perf_fps, perf_cloud_quality, perf_effects, perf_dpr,
│ perf_fauna, fauna_bird_density, fauna_plane_density,
│ fauna_bird_flock_size, fauna_birds_at_night, animation_speed,
│ bird_animation_speed, star_animation_speed
└─ Tap Action (bottom)
└─ card_tap_action
The sections below document every option, including type, default, and behavior.
Card Style & Layout
| Option | Type | Default | Description |
|---|---|---|---|
card_style |
string |
immersive |
Set to standalone for a solid background with dynamic weather visuals, or immersive for a transparent background. |
card_height |
number · string |
200 |
Height in pixels. Numbers are automatically treated as px (e.g., 110 becomes 110px). Set to auto to dynamically fill the available height (for grid layouts). |
card_padding |
string |
16px |
Inner padding around the text. Accepts any CSS padding value (e.g., 8px, 12px 20px). |
card_hide_text |
boolean |
false |
Hides all text overlays, including chips. The card's weather animations and configured chip settings remain available if you enable it again. |
card_square |
boolean |
false |
Forces the card into a perfect square. Highly useful for grid layouts. |
card_full_width |
boolean |
false |
Stretches the card edge-to-edge by removing side margins. |
card_offset |
string |
0px |
Shifts the card using CSS margin (e.g., "-50px 0px 0px 0px"). Useful when layering cards. |
card_stack_order |
number |
auto | Manually sets the z-index (e.g., 1, 0, -1). Useful for forcing an immersive card to display in front of cards with solid backgrounds. See Troubleshooting: Card always stays in front of other cards and Card appears behind other cards or becomes hard to see. |
card_tap_action |
object |
— | A standard Home Assistant tap action. |
Theme & Filters
| Option | Type | Default | Description |
|---|---|---|---|
card_color_mode |
string |
auto |
Controls the card's color scheme. By default, it follows your Home Assistant theme. Set to entity to follow a theme_entity, or force_dark / force_light to lock the look. Also accepts night / day to override the sky content. See Colors. |
card_filter |
string |
none |
Applies a visual filter preset to the weather canvas. Options: darken, vivid, muted, warm. |
celestial_moon_style |
string |
default |
The moon's glow color. default follows the theme (muted blue in light mode, white in dark mode). Other options: blue, yellow, purple, grey. |
card_mask_vertical |
boolean |
true |
(Immersive only) Fades the top and bottom edges. Set to false to disable. |
card_mask_horizontal |
boolean |
true |
(Immersive only) Fades the left and right edges. Set to false to disable. |
theme_entity |
string |
— | Drives the card's color scheme from any entity's state instead of your HA theme. Commonly set to sun.sun to sync the card with sunrise/sunset. See Colors. |
Sun & Moon
The sun and moon share a single position and the card swaps them based on your sun_entity. See Colors for the full details. The card also automatically generates a dynamic sunrise and sunset effect based on the sun's elevation, and rotates the moon accurately based on your Home Assistant latitude setting.
| Option | Type | Default | Description |
|---|---|---|---|
celestial_size |
number |
auto | Overrides the sun/moon diameter in pixels. |
celestial_position |
string |
fixed |
How the sun and moon are positioned. fixed uses the celestial_alignment, celestial_x, and celestial_y values. dynamic_sun animates the sun across the sky following the real solar arc (moon stays fixed). dynamic_both animates both the sun and the moon. |
celestial_alignment |
string |
top-left |
Where the sun and moon anchor inside the card. Uses a 9-cell grid (e.g., top-left, center, bottom-right). Also accepts left, right as shorthand. |
celestial_x |
number |
0 |
Horizontal offset in pixels from the anchored position. |
celestial_y |
number |
0 |
Vertical offset in pixels from the anchored position. |
Chips: editor structure
Chips are the main layout element of this card. Each chip can show live entity data or forecast data, and you can add as many as you want. For a walkthrough on how to set them up, see the Chips guide.
Each chip card in the editor is organized like this, top to bottom:
Chip
├─ Sensor / Forecast toggle
├─ Data source (always visible)
│ ├─ entity
│ └─ attribute
├─ Forecast box (Forecast mode only, not in an accordion)
│ ├─ forecast, forecast_offset
│ ├─ attribute ("Show")
│ └─ forecast_precision
├─ Type (Ring/Bar chips only)
│ ├─ type, ring_min/bar_min, ring_max/bar_max,
│ │ ring_width/bar_height, ring_gap/bar_gap, ring_color/bar_color,
│ │ ring_threshold_mode/bar_threshold_mode, ring_thresholds/bar_thresholds
│ └─ Ring/Bar entity ▸ gauge_entity, gauge_attribute
├─ Layout
│ └─ style, align, chip_round, background, background_color,
│ width, height, padding, inner_gap, text_gap
├─ Text
│ ├─ Label ▸ hide_label, name, name_sensor, name_attribute,
│ │ label_size, label_weight, label_overflow
│ ├─ Value ▸ hide_value, fancy_unit, unit_format, value_precision,
│ │ text_size, value_weight, overflow
│ ├─ Sub value ▸ hide_sub_value, sub_value_entity, sub_value_attribute,
│ │ sub_value_format, sub_value_size, sub_value_weight,
│ │ sub_value_position, sub_value_overflow
│ └─ Scrolling ▸ marquee_rtl, marquee_speed (only when overflow: marquee)
├─ Icon
│ └─ hide_icon, icon, icon_path, icon_size, icon_padding,
│ icon_background, icon_background_color
├─ Position
│ └─ position, position_anchor, position_x, position_y, behind_effects
└─ Tap Action
└─ card_tap_action (scoped to this chip)
[!TIP] Changing the entity in Data source, Label (
name_sensor), Sub value (sub_value_entity), or the Ring/Bar entity disclosure (gauge_entity) automatically clears that field's attribute, since the previously selected attribute may not exist on the new entity.
Row options
| Option | Type | Default | Description |
|---|---|---|---|
chips |
list |
— | The list of chips to display. Each entry is an object with its own settings (see below). |
chip_area_position |
string |
bottom-left |
Where the chips row is positioned. |
chip_area_layout |
string |
wrap |
Row behavior. wrap moves overflowing chips to a new line, horizontal-scroll keeps them on one line with a hidden scrollbar and edge fades, vertical-scroll stacks them in a scrollable column, grid arranges them in equal columns. scroll is accepted as an alias for horizontal-scroll. |
chip_area_columns |
number |
3 |
Number of equal-width columns when chip_area_layout: grid is active. |
chip_area_align |
string |
start |
How each chip aligns inside its grid cell. Options: start, center, end. Grid layout only. |
chip_area_width |
string |
— | Limits the full row width (e.g., 60% or 200px). Useful to place the chips row next to the top text instead of spanning the card. |
chip_area_height |
string |
— | Sets the height of the chips row (e.g., 120px). |
chip_padding |
string |
5px 10px |
Inner padding of each chip (e.g., 5px 10px). |
chip_area_padding |
string |
— | Padding of the outer chips container (the wrapper around all chips). |
chip_area_gap |
string |
8px |
Space between chips. |
chip_gap |
string |
6px |
Space between the icon and text inside each chip. |
chip_style |
string |
inline |
Controls the chip layout style. inline is the default horizontal layout with icon and text side by side. stacked arranges the icon, name, and value in a compact two-column grid. vertical stacks icon, name, and value in a centered column. |
chip_area_scroll_count |
number |
— | Number of chips visible at once when using a scroll layout. Enables snap-scrolling through pages of chips. |
chip_area_grouped |
boolean |
false |
Wraps all chips into a single shared background container instead of styling each chip individually. Requires chip_area_background: true. |
chip_area_full_width |
boolean |
false |
Stretches each chip to fill the available row width. Useful in combination with chip_area_scroll_count or grid layouts. |
chip_text_size |
string |
— | Font size of the chip value text. Accepts any CSS size value (e.g., 16px, 1.2em). |
chip_label_size |
string |
— | Font size of the chip name label. |
chip_icon_size |
string |
— | Global icon size for all chips. |
chip_icon_padding |
string |
— | Global padding around the icon for all chips. |
chip_icon_background |
boolean |
false |
Adds a background behind the icon area of each chip. |
chip_area_background |
boolean |
false |
Adds a styled background behind each chip (the style is controlled by card_background_style). |
card_background_style |
string |
frosted |
Visual treatment used when chip backgrounds are enabled. Options: frosted (translucent glass), contrast (solid and readable), theme (uses Home Assistant theme colors). |
chip_area_separator |
boolean |
false |
Adds a thin divider line between chips. Only visible when chip_area_grouped is enabled. |
chip_background_color |
string |
— | Custom background color applied to all chips. Accepts any CSS color value, including rgba(). |
chip_icon_background_color |
string |
— | Custom background color for the icon area of all chips. |
chip_area_background_color |
string |
— | Custom background color for the grouped container when chip_area_grouped is enabled. |
chip_text_gap |
string |
0.35em |
Gap between the name label and the value text inside each chip. |
chip_area_hide |
boolean |
false |
Hides the chips row entirely. |
Per-chip options
Each entry inside the chips list accepts the following keys.
| Option | Type | Default | Description |
|---|---|---|---|
entity |
string |
— | Required. Any sensor, binary_sensor, or weather entity. Pointing it at the weather entity shows the current state (e.g., Sunny). |
attribute |
string |
— | Read a specific attribute of the entity instead of its state (e.g., humidity on a weather entity). |
forecast |
string |
— | Set to daily or hourly to show forecast data instead of live entity data. The chip's name is generated automatically (day names for daily, time for hourly). Requires the entity to be a weather entity. |
forecast_offset |
number |
0 |
Which forecast entry to display. 0 = today/now, 1 = tomorrow/next hour, and so on. Daily goes up to 6, hourly up to 23. |
forecast_precision |
number |
— | Maximum number of decimal places for forecast values (0–2). Only limits the number shown; trailing zero decimals are trimmed (e.g. a whole number stays without a decimal point even at precision 1 or 2). |
value_precision |
number |
— | Forces the chip's main value to always show exactly this many decimal places (0–2), padding with zeros if needed (e.g. 22 becomes 22.0 at precision 1). Leave unset to use Home Assistant's own display precision for the entity/attribute ("Auto"). Does not apply to forecast chips — use forecast_precision for those. |
forecast_show_min |
boolean |
false |
Shows the low/high temperature range (e.g., 8 – 18) instead of only the high. Only works with attribute: temperature on daily forecasts. In the editor this is internally mapped to sub-value options (sub_value_attribute: templow and sub_value_position). |
unit_format |
string |
— | Replaces the unit shown after the value. Placed directly after the value with no space, e.g. ° turns 12 °C into 12°. |
name |
string |
— | Optional label shown before the value (e.g., Wind). For forecast chips, this overrides the auto-generated day/time name. |
icon |
string |
auto | An mdi: icon (e.g., mdi:water-percent), the keyword weather to automatically show the icon matching the current weather state (or the forecasted condition when using forecast), or empty to inherit the sensor's own icon. |
icon_path |
string |
— | Folder for custom SVG icons (e.g., /local/weather-icons/). When set, the value of icon resolves to an image file instead of an MDI icon. For example, icon: weather combined with icon_path: /local/weather-icons/ loads /local/weather-icons/rainy.svg for rainy weather. You can find the animated SVG icons from the examples here. |
hide_icon |
boolean |
false |
Hides the icon for this chip. |
hide_label |
boolean |
false |
Hides the name label for this chip. |
hide_value |
boolean |
false |
Hides the value text for this chip. |
fancy_unit |
boolean |
false |
Renders the temperature unit as a small superscript next to the value. Only works when reading a temperature attribute from a weather entity. |
width |
string |
— | Limits the chip's width in pixels. Use 200px (or 200, which is normalized to 200px). Required for marquee overflow. |
height |
string |
— | Sets the chip height in pixels. Use 40px (or 40, which is normalized to 40px). |
overflow |
string |
ellipsis |
How text exceeding width is handled. Options: ellipsis (cuts off with …), clip (cuts off without indicator), wrap (breaks onto a second line), marquee (scrolls horizontally). |
label_overflow |
string |
ellipsis |
How the name label handles overflow. Same options as overflow. |
marquee_speed |
number |
30 |
Scroll speed in pixels per second when any overflow mode is marquee (overflow, label_overflow, or sub_value_overflow). Minimum 5. |
marquee_rtl |
boolean |
false |
Reverses marquee direction (scrolls right-to-left) for all marquee-based text overflows. |
card_tap_action |
object |
more-info |
A standard Home Assistant tap action scoped to this chip. |
name_sensor |
string |
— | An entity whose state (or attribute) is used as the chip's dynamic name label. Updates in real time. |
name_attribute |
string |
— | Reads a specific attribute from the name_sensor entity instead of its state. |
hide_sub_value |
boolean |
false |
Hides the optional secondary value. |
sub_value_entity |
string |
— | Entity used for the secondary value. |
sub_value_attribute |
string |
— | Attribute read from sub_value_entity instead of its state. |
sub_value_format |
string |
— | Optional text format for the secondary value. |
sub_value_position |
string |
— | Where to display the secondary value. Use beside or below. |
sub_value_overflow |
string |
ellipsis |
How the secondary value handles overflow. Uses the same options as overflow. |
position |
string |
— | Set to custom to detach this chip from the row and place it freely on the card using position_anchor, position_x, and position_y. |
position_anchor |
string |
top-left |
Anchor point for a free-positioned chip. Uses a 9-cell grid (e.g., top-left, center, bottom-right). |
position_x |
string |
0 |
Horizontal offset for a free-positioned chip (e.g., 20px, 10%). |
position_y |
string |
0 |
Vertical offset for a free-positioned chip (e.g., 20px, 10%). |
behind_effects |
boolean |
false |
Places the chip behind the weather animations. Only works on free-positioned chips. |
forecast_low_position |
string |
— | Where to show the low temperature when forecast_show_min is active. beside places it inline (e.g., 8 – 18). below renders it on a second line under the high. In the editor this is internally mapped to sub_value_position (beside/below). |
Per-chip style overrides
Every chip can override the global row styles individually. This is what makes it possible to mix completely different-looking chips in a single card, for example a large stacked forecast chip next to a small inline live sensor.
| Option | Type | Default | Description |
|---|---|---|---|
style |
string |
— | Overrides the global chip_style for this chip. Accepts inline, stacked, or vertical. |
background |
boolean |
— | Overrides the global chip_area_background for this chip. Set to false to hide the background on a specific chip even when backgrounds are globally enabled (or the other way around). |
background_color |
string |
— | Custom background color for this chip. Accepts any CSS color value, including rgba() for transparency. |
padding |
string |
— | Overrides the chip padding for this chip only. |
text_size |
string |
— | Overrides the value text size for this chip. |
label_size |
string |
— | Overrides the name label text size for this chip. |
label_weight |
string |
— | Font weight of the name label (e.g., 500, 600, 700). |
inner_gap |
string |
— | Overrides the icon/text gap for this chip. |
icon_size |
string |
— | Overrides the icon size for this chip. |
icon_padding |
string |
— | Overrides the icon padding for this chip. |
icon_background |
boolean |
— | Overrides the global chip_icon_background for this chip. |
icon_background_color |
string |
— | Custom background color for the icon area. Accepts any CSS color value, including rgba(). |
align |
string |
— | Content alignment within this chip. Options: start, center, end. |
value_weight |
string |
— | Font weight of the value text (e.g., 500, 600, 700). |
sub_value_size |
string |
— | Overrides the secondary value text size for this chip. |
sub_value_weight |
string |
— | Font weight of the secondary value (e.g., 500, 600, 700). |
text_gap |
string |
— | Overrides the gap between the name label and value for this chip. |
chip_round |
boolean |
false |
Forces a fully rounded (pill) shape on this chip. |
Ring & Bar gauge options
Setting type to ring or bar turns a chip into a circular or linear gauge instead of standard text. Works well for battery levels, humidity, CPU usage, or any numeric sensor. See the Chips guide for usage examples and threshold configuration.
| Option | Type | Default | Description |
|---|---|---|---|
type |
string |
— | Set to ring or bar to enable the gauge. |
ring_min / bar_min |
number |
0 |
Minimum value for the gauge range. |
ring_max / bar_max |
number |
100 |
Maximum value for the gauge range. |
ring_width / bar_height |
number |
4 |
Thickness of the ring stroke, or height of the bar, in pixels. |
ring_gap / bar_gap |
number |
3 |
Gap between the gauge and the chip content in pixels. |
ring_color / bar_color |
string |
theme primary | Color of the filled portion. Accepts any CSS color. |
ring_threshold_mode / bar_threshold_mode |
string |
— | How thresholds are applied. solid fills the whole gauge with the matched color. segments draws each range as a separate arc/segment. gradient blends between colors. |
ring_thresholds / bar_thresholds |
list |
— | A list of { value, color } entries. The gauge changes color once the value passes a threshold. |
gauge_entity |
string |
— | Optional secondary entity that drives the gauge fill, independent of the chip's main entity/attribute. |
gauge_attribute |
string |
— | Reads a specific attribute from gauge_entity instead of its state. |
Custom Images
You can add your own images (such as a house image) to the card. This works in both standalone and immersive modes. See the Custom House Image tutorial for a step-by-step guide.
| Option | Type | Default | Description |
|---|---|---|---|
image_day |
string |
— | File path for the daytime image (e.g., /local/house-day.png). |
image_night |
string |
— | File path for the nighttime image. Falls back to the day image if left empty. |
image_scale |
number |
100 |
Image size as a percentage of the total card height. |
image_alignment |
string |
top-right |
Image placement. Options: top-left, top-center, top-right, center-left, center, center-right, bottom-left, bottom-center, bottom-right. |
image_x |
string |
0 |
Horizontal offset from the selected image alignment. Accepts pixels or CSS values such as -20 or 10%. |
image_y |
string |
0 |
Vertical offset from the selected image alignment. Accepts pixels or CSS values such as 10 or -5%. |
status_entity |
string |
— | Entity to monitor for a status-specific image (for example a door sensor). |
status_day |
string |
— | Day image to show while status_entity is active, open, or home. |
status_night |
string |
— | Night image to show while status_entity is active, open, or home. |
Embedded Cards
You can embed other Home Assistant cards directly inside this card. This is useful for adding buttons, specific sensors, weather forecasts, graphs and more.
| Option | Type | Default | Description |
|---|---|---|---|
custom_cards |
list |
— | A list of cards to display. You can use standard Home Assistant cards or custom ones. |
custom_cards_position |
string |
bottom |
Where to place the container holding your custom cards (e.g., bottom, top, bottom-right). |
custom_cards_css_class |
string |
— | Assigns a custom CSS class to the container, making it easy to style with card_mod. |
custom_width |
string |
— | Used directly on the nested cards. Forces a specific width for an individual card (e.g., 100%, 50px). |
custom_height |
string |
— | Used directly on the nested cards. Forces a specific height for an individual card (e.g., 150px). |
Basic Example:
custom_cards_position: bottom
custom_cards:
- type: weather-forecast
custom_width: 100%
entity: weather.your_weather_entityCSS Variables
Most users won't need these. The options above cover all common use cases. These CSS variables are here for fine-tuning specific details like font sizes, shadows, and spacing, either in your theme or via
card_mod.
Card Variables
| Variable | Default | Description |
|---|---|---|
--awc-card-border-radius |
12px |
Adjusts the corner radius. |
--awc-card-border-width |
HA theme | Overrides the card's border width. Inherits from the Home Assistant theme by default. |
--awc-card-padding |
16px |
Padding space around the text. |
--awc-canvas-filter |
none |
Applies a custom CSS filter to the canvas (this overrides the card_filter config option). |
--awc-stack-order |
-1 / 1 |
Controls the stacking order (z-index) of the card. Defaults to -1 for immersive and 1 for standalone. |
--awc-custom-cards-direction |
row |
Flex direction of the custom cards container. |
--awc-custom-cards-gap |
8px |
Gap between items in the custom cards container. |
--awc-custom-cards-justify |
flex-start |
Horizontal justification of the custom cards container. |
--awc-custom-cards-align |
flex-start |
Vertical alignment of the custom cards container. |
Text Variables
| Variable | Default | Description |
|---|---|---|
--awc-text-day |
#2c2c2e |
Text color during the daytime. |
--awc-text-night |
#FFFFFF |
Text color during the nighttime. |
--awc-text-color |
auto | Resolved text color for the current scheme. Overrides both day and night colors at once. |
--awc-text-shadow-day |
soft white glow | Text shadow effect for daytime. |
--awc-text-shadow-night |
soft dark glow | Text shadow effect for nighttime. |
--awc-text-shadow-active |
auto | Resolved text shadow for the current scheme. Overrides both day and night shadows at once. |
--awc-chip-text-shadow |
0 1px 2px rgba(0,0,0,0.35) |
Text shadow applied to the chip name label. |
--awc-bottom-font-size |
clamp(15px, 5cqmin, 26px) |
Chip text size (dynamically responsive). |
--awc-bottom-font-weight |
500 |
Chip text weight. |
--awc-bottom-gap |
8px |
Gap between chips in the row. |
--awc-bottom-opacity |
0.7 |
Opacity of chips without a background. |
--awc-chip-name-weight |
700 |
Font weight of the chip name label. |
--awc-chip-name-opacity |
0.7 |
Opacity of the chip name label. |
--awc-chip-name-color |
inherit |
Color of the chip name label. |
--awc-chip-gap |
6px |
Gap between the icon and text inside each chip. |
--awc-chips-padding |
0 (5px 10px with background) |
Inner padding of each chip. |
--awc-row-width |
calc(100% - padding) |
Width of the chips row. Overrides the chip_area_width option. |
--awc-row-height |
auto |
Height of the chips row. Overrides the chip_area_height option. |
--awc-row-columns |
3 |
Number of columns when chip_area_layout: grid is active. |
--awc-row-fade-l |
auto | Left edge fade width for the scrolling chip row. |
--awc-row-fade-r |
auto | Right edge fade width for the scrolling chip row. |
--awc-bottom-bg-color |
auto | Background color when chip_area_background is enabled. Defaults to the active background style. |
--awc-bottom-bg-radius |
card radius | Border radius for the chip background. |
--awc-bottom-bg-filter |
blur(10px) |
Backdrop filter for the chip background (only used by the frosted style). |
--awc-bg-shadow |
auto | Overrides the shadow used by frosted and contrast chip backgrounds. |
--awc-bg-border |
1px solid … |
Overrides the border used by the frosted background style. |
--awc-icon-size |
1.1em |
Size of the chip icon. |
--awc-icon-drop-shadow |
drop-shadow(0px 3px 6px rgba(0,0,0,0.3)) |
Drop shadow filter applied to custom image icons set via icon_path. |
--awc-marquee-duration |
20s |
Animation duration for the marquee overflow mode. Longer = slower. |
--awc-marquee-fade |
12px |
Edge fade width on either side of a marquee chip. |
--awc-marquee-separator |
"•" |
Character inserted between marquee repetitions. |
--awc-marquee-sep-gap |
0.4em |
Padding around the marquee separator character. |
Stacked & Vertical Chip Variables
These variables only apply when chip_style is set to stacked or vertical.
| Variable | Default | Description |
|---|---|---|
--awc-stacked-icon-bg |
auto | Background color of the icon area in stacked/vertical chips. |
--awc-stacked-icon-radius |
auto | Border radius of the icon area. |
--awc-stacked-icon-inset |
3px |
Inset used to calculate the icon area's border radius relative to the chip's border radius. |
--awc-stacked-name-size |
0.85em |
Font size of the name label in stacked/vertical chips. |
--awc-stacked-name-weight |
500 |
Font weight of the name label in stacked/vertical chips. |
--awc-stacked-name-tracking |
0.03em |
Letter spacing of the name label in stacked/vertical chips. |
--awc-stacked-name-opacity |
0.6 |
Opacity of the name label in stacked/vertical chips. |
--awc-stacked-name-color |
inherit |
Color of the name label in stacked/vertical chips. |
--awc-stacked-value-weight |
700 |
Font weight of the value in stacked/vertical chips. |
--awc-stacked-column-gap |
10px |
Horizontal gap between the icon and text columns in stacked chips. |
--awc-stacked-row-gap |
4px |
Vertical gap between the name and value rows in stacked/vertical chips. |
--awc-vertical-icon-gap |
6px |
Bottom margin of the icon in vertical chips. |
Card Mod Example
This example shows how you can apply styles to the card using card_mod.
type: custom:atmo-weather-card
weather_entity: weather.your_weather_entity
card_mod:
style: |
:host {
--awc-text-day: #ffffff;
--awc-text-night: #ffffff;
--awc-text-shadow-day: 0 1px 2px rgba(0, 0, 0, 0.15);
--awc-text-shadow-night: 0 1px 2px rgba(0, 0, 0, 0.8);
}Chips & Forecasts
Chips are basically buttons you can optionally add to the card. You can add as many as you like and show live info, like current weather conditions or data from any Home Assistant entity, but also weather forecasts. You can leave them grouped in a row and make them all look the same (useful for building a daily forecast), or you can style and position each one individually. Full option references (Row options, Per-chip options, Per-chip style overrides, Ring & Bar gauge options) live in the Appearance section — the walkthroughs below only cover the "how" with examples.
Start with a simple chip row:
chips:
- entity: weather.your_weather_entity
icon: weather
- entity: sensor.outside_humidity
name: Humidity
- entity: sensor.wind_speed
icon: mdi:weather-windyForecast chips
By default, a chip reads the current state of its entity. Setting forecast to daily or hourly switches it to forecast mode instead. In this mode, the chip subscribes to the weather entity's forecast data and displays a specific future entry.
Use forecast_offset to pick which entry: 0 is today (or now), 1 is tomorrow (or the next hour), and so on. The chip automatically generates a name label: day names like "Mon", "Tue" for daily, or times like "14:00" for hourly. You can still override this with name if you want a custom label.
When using icon: weather on a forecast chip, the icon matches the forecasted condition for that entry, not the current weather.
chips:
- entity: weather.your_weather_entity
forecast: daily
attribute: temperature
forecast_offset: 1
forecast_show_min: true
icon: weather
icon_path: /local/weather-icons/
- entity: weather.your_weather_entity
forecast: hourly
attribute: temperature
forecast_offset: 3
unit_format: "°"The first chip shows tomorrow's temperature range (low – high) with a weather icon matching tomorrow's condition. The second chip shows the temperature 3 hours from now, with ° directly after the value instead of the full unit.
For the full list of forecast-related options (forecast, forecast_offset, forecast_precision, forecast_show_min, forecast_low_position, value_precision, unit_format), see Per-chip options in Appearance.
Per-chip styling
Every chip can override the global row styles. This means you can mix different chip formats, backgrounds, sizes, and spacing in one card without needing separate rows or CSS hacks.
For example, you might want most chips to be small inline elements but make one specific forecast chip larger with a stacked layout and its own background color:
chip_style: inline
chip_area_background: true
chips:
- entity: sensor.outside_temperature
- entity: sensor.humidity
- entity: weather.your_weather_entity
forecast: daily
attribute: temperature
forecast_offset: 1
style: stacked
background_color: "rgba(0, 0, 0, 0.3)"
padding: 12px 16px
text_size: 18px
icon: weather
icon_path: /local/weather-icons/The first two chips follow the global inline style and default background. The third chip overrides everything it needs to look different. All per-chip style overrides are listed under Per-chip style overrides in Appearance.
Free positioning
Any chip can be pulled out of the row and placed freely on the card. Set position: custom and use the anchor/offset system to put it exactly where you want.
chips:
- entity: sensor.outside_temperature
position: custom
position_anchor: top-right
position_x: 20px
position_y: 10px
background: trueThis places the temperature chip 20px from the right and 10px from the top, independent of where the chips row sits. The position_anchor uses the same 9-cell grid as the other position options (top-left, center, bottom-right, etc.).
Free-positioned chips can still use all the same styling and forecast options as regular chips.
Ring & bar gauges
Any chip can be turned into a circular or linear gauge by setting type: ring or type: bar. The gauge fills proportionally based on the entity's value within a min/max range. This works well for things like battery levels, humidity, CPU usage, or any numeric sensor.
chips:
- entity: sensor.living_room_humidity
type: ring
ring_min: 0
ring_max: 100
ring_width: 4
ring_gap: 3
ring_color: "#03a9f4"
style: vertical
hide_label: true
icon: mdi:water-percentYou can add color thresholds that change the gauge color when the value passes a certain point. Threshold colors support three modes: solid fills the entire gauge with the matching threshold color, segments draws each threshold range as a separate colored arc/segment, and gradient blends smoothly between threshold colors.
chips:
- entity: sensor.cpu_temperature
type: ring
ring_min: 30
ring_max: 100
ring_color: "#4caf50"
ring_threshold_mode: solid
ring_thresholds:
- value: 60
color: "#ff9800"
- value: 80
color: "#f44336"Full option reference (including the bar equivalents and gauge_entity/gauge_attribute) is under Ring & Bar gauge options in Appearance.
Layout & Layering
Use standalone when the card should have its own background. Use immersive when it should visually blend with neighboring cards or sit behind other dashboard content.
For layered layouts, position the sun or moon with its alignment and offsets, then detach individual chips from the row with position: custom. Use card_offset only when cards need to overlap, and increase card_stack_order in small steps when the card needs to render above another card.
type: custom:atmo-weather-card
weather_entity: weather.your_weather_entity
sun_entity: sun.sun
card_style: immersive
card_stack_order: 1
celestial_alignment: top-right
celestial_x: 16
celestial_y: 12
chips:
- entity: weather.your_weather_entity
attribute: temperature
position: custom
position_anchor: top-left
position_x: 16px
position_y: 16px
hide_icon: true
hide_label: true
background: falsecustom_cards can be placed in the same card for graphs, buttons, or other Lovelace cards. If elements overlap, adjust one property at a time: first card_stack_order, then card_offset, then the position of individual chips or embedded cards. Full option details are in Appearance.
Weather Icons
You can replace the default MDI icons inside a chip with your own animated SVG files. The examples use these.
- Download the SVG icons and name them after the weather conditions (such as
sunny.svgorrainy.svg). The names for the states are standardized; you can find the possible weather states in the official HA documentation. - Put the files into a folder like
config/www/weather-icons/. - In your chip config, set
icontoweatherand add the folder path toicon_path:
chips:
- entity: weather.your_weather_entity
icon: weather
icon_path: /local/weather-icons/The card then resolves the icon by the current weather state. For example, rainy weather loads /local/weather-icons/rainy.svg.
Custom House Image
This explains how to create an image for your own home and use it in the card.
- Take a reference photo from a corner angle to properly capture the depth of the house.
- Generate a 3D model using an AI image tool. Use a prompt similar to:
Isometric view of a modern minimalist architectural model section from the outside on solid white background. [Describe your floors/rooms]. Materials are matte white and light only. No complex textures, studio lighting, very clean, simplified shapes.
- Remove the background with an online tool or image editor and save the resulting image as a transparent PNG.
- Create day and night variants by adjusting the prompt appropriately.
- Upload the files to your
config/www/images/directory and reference them in the card config as/local/images/my-house-day.png.
The card's appearance depends on your sun_entity (sun or moon) and your card_color_mode (light or dark).
How to set this up
| Mode | Config | What it does |
|---|---|---|
| Follow your HA theme | sun_entity: sun.sun |
The card shows the sun during the day and the moon at night, syncing its colors to whatever your Home Assistant theme is doing. Android and iOS can auto-toggle dark mode based on sunrise and sunset — this is exactly what the card was designed for. |
| Follow the sun | sun_entity: sun.suncard_color_mode: entitytheme_entity: sun.sun |
The card switches between light and dark at the real sunrise and sunset, regardless of what your Home Assistant theme is doing. Its colors match the time of day no matter what the rest of your dashboard looks like. |
| Force light or dark | card_color_mode: force_darkor card_color_mode: force_light |
Locks the card's colors to one value. The sky still follows sun_entity, so you still get the moon and stars at night — only the card's colors are forced. |
| Custom logic | card_color_mode: entitytheme_entity: sensor.my_custom_mode |
theme_entity can point at any entity — a template sensor, an input_boolean, or anything else. The card switches to its dark look when the state is dark, night, evening, on, true, or below_horizon. Anything else counts as light. Useful for rules like "dark after 9pm" or "dark when it's overcast". |
Start with a perf_mode preset. Individual performance settings override the preset.
| Situation | Recommended setting | Result |
|---|---|---|
| Older tablet, wall panel, or battery-conscious device | perf_mode: low |
Reduces rendering load and disables extra effects. |
| Most dashboards | perf_mode: default |
Balanced animation quality and resource use. |
| Powerful desktop or dedicated display | perf_mode: ultra |
Prioritizes frame rate and cloud detail. |
When the dashboard stutters, reduce settings in this order: perf_dpr, perf_fps, perf_effects, then perf_fauna. This usually preserves the card's layout while lowering GPU and CPU work.
type: custom:atmo-weather-card
weather_entity: weather.your_weather_entity
perf_mode: default
perf_dpr: 1
perf_fps: 30
perf_effects: 0
perf_fauna: 1Test one change at a time. See Troubleshooting for device-specific recovery steps.
Performance Settings
The card has three performance presets (low, default, and ultra) which cover most setups. If you need more control, each setting can be changed individually. Any value set manually overrides the preset.
| Option | Type | Default | Description |
|---|---|---|---|
perf_mode |
string |
default |
Performance preset. low disables effects and lowers resolution for weak devices. default is balanced. ultra raises the frame rate and cloud detail to maximum. |
perf_fps |
number |
30 |
Animation frame rate. 30 saves battery, 60 is smoother. See Troubleshooting: Editor preview stutters or FPS looks wrong after install/update and Performance is weak on older devices. |
perf_cloud_quality |
number |
1.5 |
Cloud detail level. Controls how many puffs each cloud shape gets. 0.5 = low, 1 = medium, 1.5 = high, 2 = ultra. |
perf_effects |
number |
1 |
Weather effects intensity. 0 disables visual effects like shooting stars, comets, aurora, fog/wind visuals, and similar atmospheric extras. 1 enables default spawn rates. 2 increases effect intensity and spawn rates (comets appear 1.8x more often). Spawn rates also scale with perf_fps and overall system performance. See Troubleshooting: No night effects (stars/comets) are visible and Performance is weak on older devices. |
perf_fauna |
number |
2 |
Birds and planes spawn rate. 0 = no fauna, 1 = birds only, 2 = birds and planes. Separate control from weather effects. See Troubleshooting: No birds or planes are visible. |
animation_speed |
number |
1.0 |
Global animation speed multiplier. Range 0 to 3. 0 freezes animated motion, 1.0 is default speed, 2.0 is double speed. |
bird_animation_speed |
number |
1.0 |
Bird-only speed multiplier. Range 0 to 3. Applied on top of animation_speed for bird movement and wing flapping. |
star_animation_speed |
number |
1.0 |
Star twinkle speed multiplier. Range 0 to 2. Applied on top of animation_speed for nighttime star twinkle only. 0 stops twinkling, 1.0 is default speed. |
perf_dpr |
number |
2 |
Canvas sharpness. Controls the device pixel ratio used for rendering. 0.5 = low, 1 = medium, 1.5 = high, 2 = full retina. Lower values reduce GPU load on high-DPI screens. See Troubleshooting: Performance is weak on older devices. |
fauna_bird_density |
number |
1.0 |
Bird spawn rate multiplier. Range 0.5 to 2.0. Scales how often bird flocks appear. 0.5 = sparse, 1.0 = default, 2.0 = frequent. Only works with perf_fauna: 1 or 2. See Troubleshooting: No birds or planes are visible. |
fauna_plane_density |
number |
1.0 |
Plane spawn rate multiplier. Range 0.5 to 2.0. Scales how often planes appear. 0.5 = sparse, 1.0 = default, 2.0 = frequent. Only works with perf_fauna: 2. See Troubleshooting: No birds or planes are visible. |
fauna_bird_flock_size |
number |
6 |
Target average birds per flock. Range 1 to 20. Runtime fallback is 6. If perf_mode: default is active and no explicit value is set, the editor preset applies 8. Actual flock size is randomized around this value (about ±2) and occasional single-bird passes can still occur. See Troubleshooting: Editor values differ from runtime defaults. |
fauna_birds_at_night |
boolean |
true |
Controls whether birds can appear at night. Set to false for daytime-only birds. Planes are unaffected. See Troubleshooting: No birds or planes are visible. |
Examples
type: custom:atmo-weather-card
weather_entity: weather.your_weather_entity
perf_fauna: 2 # Enable both birds and planes
fauna_bird_density: 1.5 # 50% more bird flocks
fauna_plane_density: 0.7 # 30% fewer planes
fauna_bird_flock_size: 10 # Higher average flock size (actual spawn count still varies)
fauna_birds_at_night: false # Disable birds during nighttype: custom:atmo-weather-card
weather_entity: weather.your_weather_entity
animation_speed: 1.0 # Global animation speed (0.0-3.0)
bird_animation_speed: 1.4 # Birds only; multiplied on top of animation_speed
star_animation_speed: 0.6 # Stars only; twinkle speed (0.0-2.0)Installation & Updates
- Clear your browser cache completely (cached images and files) right after installation or update.
- If it still stutters, close the editor and open it again.
- Verify the resource URL is correct:
/local/atmo-weather-card/atmo-weather-card.js. - Verify all files exist in
config/www/atmo-weather-card/:
atmo-weather-card.jsatmo-weather-card-editor.jsatmo-weather-animations.jsatmo-weather-config.jsatmo-weather-fauna.js
- Clear browser cache completely (cached images and files).
- Hard-refresh the dashboard.
- Verify the Lovelace resource still points to
/local/atmo-weather-card/atmo-weather-card.js. - If needed, reload Home Assistant frontend once.
Layout & Editor
- The editor can show preset values when
perf_modeis active. - Example:
fauna_bird_flock_sizeruntime fallback is6, but thedefaultpreset applies8if no explicit value is set. - Set your value explicitly if you want to override preset behavior.
- Set
Layer Order(card_stack_order) to1. - Higher values place the card further in front of other cards.
- Increase
card_stack_orderstep by step (for example1, then2). - Check
card_offsetand card placement if cards visually overlap.
- Since v6.6.5, changing a chip's entity (
entity,name_sensor,sub_value_entity,gauge_entity) automatically clears its attribute field, since the previously selected attribute may not exist on the new entity. - On older versions, manually clear or re-select the attribute field after switching the entity.
- Update to the latest release to get this automatic reset.
Data & Effects
- Verify
weather_entityexists and is currently available in Home Assistant. - Confirm the entity has valid state/attributes (temperature, wind, etc.).
- If unavailable, fix entity availability first, then reload the dashboard.
- Check
perf_fauna:
0= no fauna1= birds only2= birds and planes
- Check your density settings (
fauna_bird_density,fauna_plane_density) and wait a short time for spawns.
- Verify day/night detection is correct (
sun_entity, card color mode, and weather conditions). - Ensure
perf_effectsis1or2. - Wait briefly after state transitions for particle initialization.
Display & Performance
- On "Auto" (no
value_precisionset), decimal places follow Home Assistant's own Display Precision for that entity/attribute (Settings → Devices & services → Entities → your entity → Advanced settings). The card does not control this. - Set
value_precision(0,1, or2) on the chip to force an exact number of decimals regardless of the entity's own precision. - Make sure you're on v6.6.4 or later — earlier versions could drop the unit or trim trailing zero decimals while
value_precisionwas set.
- Set
perf_mode: low. - Lower
perf_fpsand/orperf_dpr. - Reduce fauna/effects intensity if needed.
- On high-DPI displays, reducing
perf_dprusually helps the most.
Atmo Weather Card is an independent, actively maintained Lovelace card project. See Maintenance & Archive Info for maintenance status and historical background.
This project is licensed under the MIT License - see the LICENSE file for details.