My Lovelace Plugins


This plugin is replaced entirely by layout card

On to something a bit more hands-on: column-card

It is a well known trick (mentioned in the docs to create a header on a lovelace view by using panel:true and vertical-stack.

The problem with this approach is that anything below the header is locked in position by the stack. You lose lovelaces ability to adjust for wider screens. The column card fixes this.

Here are two screenshots from my configuration, showing the same view with my phone held in portrait and landscape mode respectively:

Note how the header stretches across the entire screen, but the cards below move to either below or beside each other depending on the available space.



Since version 0.80, this is built into home-assistant by default

See: Glance card documentation

This plugin will not be maintained, and no support will be given

Somewhat related is color-glance-card

It works exactly like a default glance card except the background color is the primary color of your theme.


This works really great with column-card in combination with the lovelace kiosk mode script by @ciotlosm

Here’s my hallway dashboard for example, with the theme switched when the alarm is armed/disarmed:

Note: This function will most likely be included in home-assistant version 0.80



On the topic of slight modifications to default cards, there’s also useful-markdown-card.

Because let’s face it; the default markdown card isn’t terribly useful…

My card allows you to embed states and attributes from entities in the markdown. Besides that, it works exactly the same as the default.

      - type: custom:useful-markdown-card
        content: >
          ## Lovelace

          Starting with Home Assistant 0.72, we're experimenting with a new way of defining your interface. We're calling it the **Lovelace UI**

          Also, the current time is [[ sensor.time.state ]] [[ sensor.time.attributes.icon ]].


And yes, it updates in real time.



Let’s move on to lovelace-player.

This is not a card but a general plugin that lets you use any browser that’s currently viewing your lovelace interface as a media_player. This means that it can, for example, play back TTS messages.

This also requires that you add a custom component to home assistant, made by @pkozul who is my main source of inspiration for this plugin and the next one.



A similar type of plugin is lovelace-fullykiosk

There’s a fun app for android devices called Fully Kiosk Browser. Its main purpose is to display a single web page, without the user being able to move away from the site, or close the app. But it also gives you a degree of control over the device that iDevice users like myself could only dream of.

For example, you can get a live feed from the devices camera into home assistant, or you can get it to report movement in front of the camera like a security sensor.

All of those features are available through a REST interface and can easily be connected to home assistant. A few of them, though can benefit from this plugin.

Specifically, this plugin gives you the ability to turn on and off the screen of the device remotely, as well as check its current state. It also enables a movement sensor with shorter response time than you’d get via the REST interface. It only works while the device is setup to display your lovelace interface, though.

This plugin is inspired by ha-floorplan-kiosk by @pkozul.



Next are some new types of rows for the default entities card

First up is slider-entity-row

This gives you a brightness slider for any dimmable light.


You can configure it a bit, put the slider below the toggle, hide the slider when the light is turned off and so on…

This is inspired by the custom-ui project for the “old” home assistant interface.

The slider-entity-row now also supports media_player (volume control) and cover (position).
The customization options have been changed though. So your old config may not work with the new version.



Another row for the entities card

Have you ever accidentally turned a switch on or off when scrolling past on your phone?
If so, you might like toggle-lock-entity-row.


It’s simple enough. Now you have to click the toggle twice before anything happens.

As an added bonus, you can select which users have the ability to unlock the toggle.

This one’s also inspired by custom-ui.



Yet another entity row: time-input-row.

This lets you input a time to a input_datetime right in the lovelace interface, without having to open up the more-info dialog.


I made this solely for my own benefit, so it’s not documented at all, and it only support inputing times, not dates.
If you think you’d use it, let me know and I might try to add the feature.



This plugin is replaced entirely by fold-entity-row

The final entity row (for now) is folding-group-entity-row.

This row works with groups.
It will take a group, and add all of the entities in it in a collapsible list to the entities card.


This was somewhat inspired by haiku by lukiffer.



Next up is an element for picture-elements

dim-image-element takes an image and an entity, and sets the opacity of the image to the brightness value of the entity.

I don’t really see a use case myself, but someone asked about it on discord, and I saw a way to make it happen…

The configuration would look something like:

      - type: custom:dim-image-element
        entity: light.my_dimable_light
        image: !resource my_image.jpg
          top: 50%
          left: 50%

Besides the entity, it takes the same configuration options as the image element.



This is included in home-assistant since 0.81.0

But smoother, for more items and much prettier.

See documentation for each card.

A significantly more useful picture-elements element is long-press

This allows you to add elements to your picture that does one thing when you click them, and another - totally different - thing when you click and hold for about half a second.

A typical use case would be a light that you toggle on or off by clicking (or tapping on a touch screen), but holding the mouse button (or finger) down for a while will bring up the more-info dialog and allow you to dim the light or change its color.

But the long-press action can also be something entirely different, like calling a service or toggling a different entity.



Finally, theres another card… kind of…

The card-modder allows you to take any card and inject style it.

Think of the amazing stuff people have made with picture-elements over at That’s made possible - in part - because elements can be styled with custom css. And now any normal card can as well.

It’s also a great way to produce atrocities such as:

But I’m sure that in the hands of anyone even just a tiny bit more artistic than myself, it can be used to produce wonderful things.

A bonus feature of this card is that you can manually select which size it will report when placing in the layout. That can give some more control over which card ends up where on screen:


Awesome stuff mate! I am already using a lot of your cards and now found out you even have more new stuff for us :grinning:

Great stuff here!

I use the card modder personally and the card is very powerful! Can be used to completely re-design your UI.

These are some great ideas. I’ll be trying out the long-press plugin soon. Thanks!

Is there any way to change the number of columns used? Mine is showing 2 columns when 3 would be better. Goes down to 1 on my phone which is great.

Would it be as simple as changing the max column width from 500px to 300px or something like that?

Also getting an error… NotSupportedError: Cannot define multiple custom elements with the same tag name

lovelace yaml looks like this:

  - title: TV & Movies
    icon: mdi:kodi
    panel: true
      - type: vertical-stack
          - type: custom:column-card
              - type: custom:upcoming-media-card

I’m thinking it’s because I’m trying to use the upcoming-media card inside the column card? Any way to fix that?

1 Like

That would do the trick. 500px was chosen to be as close to the look-and-feel of stock lovelace as possible.

It seems to me like you are importing mini-media-player.js twice. Check that.

I am importing it twice - once for sonarr and once for radarr. Works fine until I use the column card.

You should only import scripts once, in the resources: section. I can’t see any way that column card would trigger this problem.

This is amazing, thank you, the toggle-lock and the input-row are immediately going into my config.

There goes my Saturday afternoon.