Divoom Pixoo 64

I created a version 0.0.1 :smile: of Pixxo Rest as an Home Assistant Add-on. Here is the link to the HA Add On Repo: GitHub - kmplngj/ha-addons: Addons for Home Assistant.

I will add some more readme and documentation in the next days. Perhaps someone wants to test it.

Add the repo url in the HA Add-On Store, install Pixoo Rest. Set the IP address and Screen Size of your Pixoo64 in the configuration, save this and then start the Add-On.

2 Likes

the data you have to use with this command is custompageindex (value 0, 1 or 2). But before doing this you have also set the channel to 3 (custom channel) to this the changes on the Pixoo. I created three input button helpers and a small automation to use them.

alias: Pixoo64 Button Set Custom Channel Pressed
description: ""
trigger:
  - platform: state
    entity_id:
      - input_button.pixoo64_set_custom_channel_1
    id: channel_1
  - platform: state
    entity_id:
      - input_button.pixoo64_set_custom_channel_2
    id: channel_2
  - platform: state
    entity_id:
      - input_button.pixoo64_set_custom_channel_3
    id: channel_3
condition: []
action:
  - service: rest_command.pixoo64_set_channel
    data:
      effect: 3
  - choose:
      - conditions:
          - condition: trigger
            id: channel_1
        sequence:
          - service: rest_command.pixoo64_set_custom_channel
            data:
              custompageindex: 0
      - conditions:
          - condition: trigger
            id: channel_2
        sequence:
          - service: rest_command.pixoo64_set_custom_channel
            data:
              custompageindex: 1
      - conditions:
          - condition: trigger
            id: channel_3
        sequence:
          - service: rest_command.pixoo64_set_custom_channel
            data:
              custompageindex: 2
    default: []
mode: single

Hey. Can I ask what exactly you selected in these tools to convert the gif? I am not able to get it running. The Pixoo always restarts when I send the data.

Nevermind, I figured it out.
For anyone stumbling upon this, here is the current documentation ShowDoc

You have to pay attention to all the parameters and the image has to have the same width and height.

For converting, you can use the tools listed above (select binary as input on the base64 encoding), or use imagemagick and openssl base64 encode.

1 Like

I there a way to set a specific clock face? I can set channel, but can’t figure out a specific face.

I updated my Pixoo-Rest HA Addon. I now use my fork of Pixoo-Rest while my pull request is open at the original source. I added a rest api call to sent an image to the display via an url.

I use this in an automation to display the cover art of the current playing song on my HomePod, Amp or Apple TV.

1 Like

I also updated the original gist from my first post to include more functions and also a rest command for pixxo-rest image url.

Here are also two scripts use the rest commands more easily.

alias: Pixoo - Display line of text
fields:
  id:
    description: the text id is unique and new text with the same ID will replace the old
    required: true
    default: 1
    example: 1
    selector:
      number:
        min: 1
        max: 20
        step: 1
  Text:
    description: the text string is utf8 string and lenght is smaller than 512
    required: true
    selector:
      text: null
  Color:
    description: Color of the message
    required: true
    selector:
      color_rgb: null
    default:
      - 255
      - 255
      - 255
  Speed:
    description: Scrolling Speed in ms
    required: true
    default: 50
    example: 50
    selector:
      number:
        min: 10
        max: 500
        step: 5
  x:
    description: the start x postion
    required: true
    default: 0
    example: 0
    selector:
      number:
        min: 0
        max: 64
        step: 1
  "y":
    description: the start y postion
    required: true
    default: 0
    example: 0
    selector:
      number:
        min: 0
        max: 64
        step: 1
  Direction:
    description: 0:scroll left, 1:scroll right
    required: true
    default: 0
    example: 0
    selector:
      number:
        min: 0
        max: 1
        step: 1
  Font:
    description: 0~7, app animation’s font
    required: true
    default: 2
    example: 2
    selector:
      number:
        min: 0
        max: 7
        step: 1
  TextWidth:
    description: the text width is based point and bigger than 16, smaller than 64
    required: true
    default: 64
    example: 64
    selector:
      number:
        min: 16
        max: 64
        step: 1
  Align:
    description: >-
      horizontal text alignment, 1=left; 2=middle; 3=right, it will support at
      90102 version
    required: true
    default: 2
    example: 2
    selector:
      number:
        min: 1
        max: 3
        step: 1
sequence:
  - service: rest_command.pixoo64_set_text
    data:
      id: "{{ id }}"
      x: "{{ x }}"
      "y": "{{ y }}"
      Direction: "{{ Direction }}"
      TextWidth: "{{ TextWidth }}"
      Text: "{{ Text }}"
      Speed: "{{ Speed }}"
      Font: "{{ Font }}"
      Align: "{{ Align }}"
      Color: "{{ \"#%02x%02x%02x\" | format(Color[0], Color[1], Color[2]) }}"
mode: queued
max: 3
alias: Pixoo - Sent Image via URL
fields:
  Imageurl:
    description: the complete URL to the Image with protocol
    required: true
    selector:
      text: null
  x:
    description: the x postion
    required: true
    default: 0
    example: 0
    selector:
      number:
        min: 0
        max: 64
        step: 1
  "y":
    description: the y postion
    required: true
    default: 0
    example: 0
    selector:
      number:
        min: 0
        max: 64
        step: 1
sequence:
  - service: rest_command.pixoo_rest_imageurl
    data:
      Imageurl: "{{ Imageurl }}"
      x: "{{ x }}"
      "y": "{{ y }}"
mode: queued
max: 3
1 Like

Do you have any code for this?

I installed add-on v0.0.2 but it’s not completely starting. The log appears to show it started successfully but the add-on info page shows the status as red and the “Start” button looping.

s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service legacy-services: starting
s6-rc: info: service legacy-services successfully started
[10:13:49] INFO: Reading Config from Home Asssitant Addon...
[10:13:50] INFO: Starting Pixoo-Rest server...
[2023-09-04 10:13:50 +0900] [109] [INFO] Starting gunicorn 20.1.0
[2023-09-04 10:13:50 +0900] [109] [INFO] Listening at: http://0.0.0.0:5000 (109)
[2023-09-04 10:13:50 +0900] [109] [INFO] Using worker: sync
[2023-09-04 10:13:50 +0900] [110] [INFO] Booting worker with pid: 110

Which OS and which hardware do you use to run Home Assistant?

I’m running Home Assistant Supervised on an x86. Somehow, after some time it just started, so it’s working fine now. Thank you for the response.

Howdy, new to HA so wondering if you can help me.

Got the addon working great and I can test things in Swagger and update the Pixoo, how do I now create scripts to automate things. I’m guessing I need to somehow add the swagger endpoints somewhere into HA to access them but I’m not sure the best way. Hoping there is something to quickly translate them all over. Thank you

I am using your addon, and love it!

Would you make your addon so that we can have multiple instances of it?
I have many 64’s in my house, and would love to control them all this way.

Thanks for your time!

Beta Release: ha-pixoo - Native Home Assistant Integration for Divoom Pixoo Displays

Hi everyone!

I’m excited to share a new Home Assistant integration I’ve been working on for Divoom Pixoo device. This is currently in alpha/beta stage, so I’m looking for brave testers who want to help improve it.

GitHub Repository: GitHub - kmplngj/pixoo-ha: Modern Home Assistant integration for Divoom Pixoo LED displays with full drawing primitives support

What it does

The integration provides native Home Assistant entities and services for controlling your Pixoo display:

  • Light entity for power and brightness control
  • Entities for complete device control (channels, timers, alarms, sensors)
  • Services for display operations
  • Full drawing buffer support for custom animations
  • Media player entity for image galleries and slideshows
  • Automatic device discovery via Scan

Example Automations

Here are some practical examples to get you started:

1. Display Media Player Info

Show album art and track information from your Apple TV, amplifier, or HomePod:

alias: Display Media Info on Pixoo
description: Display currently playing media with cover art and scrolling title
triggers:
  - entity_id:
      - media_player.appletv
      - media_player.amplifier
      - media_player.homepod
    attribute: entity_picture
    for:
      seconds: 3
    trigger: state
conditions:
  - condition: template
    value_template: >
      {{ state_attr(trigger.entity_id, 'media_title') is not none }}
actions:
  # Clear display
  - action: pixoo.clear_display
    target:
      entity_id: light.pixoo_display

  # Display cover art
  - condition: template
    value_template: >
      {{ state_attr(trigger.entity_id, 'entity_picture') is not none }}
  - action: pixoo.display_image
    data:
      url: >
        http://homeassistant.local:8123{{ state_attr(trigger.entity_id, 'entity_picture') }}
    target:
      entity_id: light.pixoo_display

  # Display artist and title as scrolling text
  - delay:
      seconds: 1
  - action: pixoo.display_text
    data:
      text: >
        {{ state_attr(trigger.entity_id, 'media_artist') }} - {{ state_attr(trigger.entity_id, 'media_title') }}
      color: "#FFFFFF"
      x: 0
      y: 48
      font: 2
      speed: 60
      text_id: 1
      scroll_direction: left
    target:
      entity_id: light.pixoo_display
mode: single

2. Doorbell Alert

Show a doorbell notification with buzzer sound:

alias: Doorbell Alert on Pixoo
triggers:
  - entity_id: binary_sensor.doorbell
    to: "on"
    trigger: state
actions:
  - action: pixoo.display_text
    data:
      text: "DOORBELL!"
      color: "#FF0000"
      x: 0
      y: 16
      font: 7
      text_id: 0
    target:
      entity_id: light.pixoo_display
  - action: pixoo.play_buzzer
    data:
      active_time: 500
      off_time: 100
      total_time: 3000
    target:
      entity_id: light.pixoo_display

3. Weather Display

Show current weather on a timer:

alias: Update Pixoo Weather Display
triggers:
  - trigger: time_pattern
    minutes: "/30"
conditions:
  - condition: time
    after: "07:00:00"
    before: "23:00:00"
actions:
  - action: pixoo.display_text
    data:
      text: >
        {{ states('sensor.outdoor_temperature') }}°C - {{ states('weather.home') }}
      color: "#00AAFF"
      x: 0
      y: 24
      font: 5
      text_id: 2
    target:
      entity_id: light.pixoo_display

4. Image Slideshow

Display a rotating collection of images using the media player entity:

alias: Start Morning Photo Slideshow
triggers:
  - trigger: time
    at: "08:00:00"
actions:
  - action: media_player.play_media
    target:
      entity_id: media_player.pixoo_gallery
    data:
      media_content_type: playlist
      media_content_id: >
        [
          {"url": "http://example.com/photo1.jpg", "duration": 10},
          {"url": "http://example.com/photo2.jpg", "duration": 10},
          {"url": "http://example.com/photo3.jpg", "duration": 10}
        ]
  - action: media_player.shuffle_set
    target:
      entity_id: media_player.pixoo_gallery
    data:
      shuffle: true

Current Status

This integration is in active development and still has rough edges. Please note:

  • This is alpha/beta quality software
  • Some features may not work as expected
  • Breaking changes may occur before v1.0
  • Documentation is still evolving

How You Can Help

I’m looking for testers who can:

  • Try the integration with their Pixoo devices
  • Report bugs and issues on GitHub
  • Suggest improvements and new features
  • Share their automation examples

If you encounter any problems or have suggestions, please open an issue on the GitHub repository: GitHub · Where software is built

Installation

The integration is available through manual installation (copy to custom_components/pixoo) or will soon be available via HACS. Full installation instructions are in the README.

Thanks

A huge thank you to the original pixoo library authors and the Home Assistant community. Special thanks to anyone who tries this out and provides feedback!

Looking forward to hearing your experiences and making this integration even better together.

Cheers,
Jan

1 Like

:art: Pixoo Page Engine - Build Beautiful Dashboards Without Code

Hey everyone! :wave:

I’m excited to share a major new feature for the Pixoo Home Assistant integration: The Page Engine (BETA, like the rest of the integration). This is heavily inspired by the amazing work in pixoo-homeassistant, but completely rewritten from scratch to integrate seamlessly with the modern async architecture.

What Is It?

The Page Engine is a declarative component system that lets you design custom display pages using simple YAML configuration – no pixel-by-pixel positioning or complex automations needed. Think of it as a mini design language specifically for your Pixoo display.

You can:

  • Create multi-element layouts with text, images, icons, shapes, and graphs
  • Use Home Assistant templates ({{ states('sensor.temperature') }}) anywhere
  • Set up automatic page rotation (like a dashboard carousel)
  • Show temporary override messages (doorbell, alerts) that auto-resume rotation
  • Build reusable templates with variables

Why Is This Cool?

Instead of writing complex automations with multiple service calls to draw each element, you define everything in one place:

Old way (without Page Engine):

- service: pixoo.clear_display
- service: pixoo.display_text
  data:
    text: "Temperature"
    x: 2
    y: 2
- service: pixoo.display_text
  data:
    text: "{{ states('sensor.temperature') }}°C"
    x: 2
    y: 12
- service: pixoo.display_image
  data:
    url: "{{ state_attr('weather.home', 'entity_picture') }}"

New way (with Page Engine):

service: pixoo.render_page
target:
  entity_id: light.pixoo64_display
data:
  page:
    page_type: components
    background: "#001122"
    components:
      - type: text
        x: 2
        y: 2
        text: "Temperature"
        color: "#FFFFFF"
      
      - type: text
        x: 2
        y: 12
        text: "{{ states('sensor.temperature') }}°C"
        color: "#00FF00"
      
      - type: image
        x: 40
        y: 0
        source:
          url: "{{ state_attr('weather.home', 'entity_picture') }}"

Much cleaner, right? And everything renders in a single transaction!


Component Types

The Page Engine supports 8+ component types:

1. Text - Static or scrolling text

- type: text
  x: 0
  y: 0
  text: "{{ states('sensor.title') }}"
  color: "#FFFFFF"
  align: center
  scroll: true          # Auto-scroll long text
  scroll_speed: 50      # 0-100

2. Rectangle - Filled or outlined boxes

- type: rectangle
  x: 0
  y: 16
  width: 64
  height: 20
  color: "#FF0000"
  filled: true

3. Image - From URL, file path, or base64

- type: image
  x: 0
  y: 0
  source:
    url: "{{ state_attr('media_player.spotify', 'entity_picture') }}"
  resize_mode: fit      # fit, fill, none

4. Icon - MDI icons (Material Design Icons)

- type: icon
  icon: "mdi:battery-{{ (battery | int / 10) | round * 10 }}"
  x: 48
  y: 48
  size: 16
  color: "#00FF00"

5. Line - Lines with thickness and color thresholds

- type: line
  start: [0, 32]
  end: [64, 32]
  color: "#FFFFFF"
  thickness: 2
  value: "{{ states('sensor.temperature') }}"
  color_thresholds:
    - value: 20
      color: "#0088FF"  # Blue when cold
    - value: 30
      color: "#FF0000"  # Red when hot

6. Circle - Dots, markers, or gauge segments

- type: circle
  center: [32, 32]
  radius: 10
  color: "#00FF00"
  filled: true

7. Arc - Circular progress rings and gauges

- type: arc
  center: [32, 32]
  radius: 20
  start_angle: 0
  end_angle: "{{ (battery | float) * 3.6 }}"  # 0-100% -> 0-360°
  color: "#00FF00"
  thickness: 4
  filled: false

8. Arrow - Directional arrows for compasses, wind direction

- type: arrow
  center: [32, 32]
  length: 20
  angle: "{{ state_attr('weather.home', 'wind_bearing') }}"
  color: "#FFFFFF"
  thickness: 2
  head_size: 4

Real-World Examples

:iphone: Now Playing (Spotify/Apple Music)

service: pixoo.render_page
target:
  entity_id: light.pixoo64_display
data:
  page:
    page_type: components
    background: "#000000"
    components:
      # Album cover (full screen)
      - type: image
        x: 0
        y: 0
        source:
          url: "{{ state_attr('media_player.spotify', 'entity_picture') }}"
      
      # Dark overlay bar at bottom
      - type: rectangle
        x: 0
        y: 46
        width: 64
        height: 18
        filled: true
        color: "#000000"
      
      # Track title
      - type: text
        x: 2
        y: 48
        text: "{{ state_attr('media_player.spotify', 'media_title') }}"
        color: "#FFFFFF"
        scroll: true
      
      # Artist
      - type: text
        x: 2
        y: 56
        text: "{{ state_attr('media_player.spotify', 'media_artist') }}"
        color: "#888888"

:battery: Battery Gauge (Circular Progress)

service: pixoo.render_page
target:
  entity_id: light.pixoo64_display
data:
  page:
    page_type: components
    background: "#000000"
    components:
      # Background ring
      - type: arc
        center: [32, 32]
        radius: 24
        start_angle: 0
        end_angle: 360
        color: "#222222"
        thickness: 6
      
      # Battery progress arc
      - type: arc
        center: [32, 32]
        radius: 24
        start_angle: 0
        end_angle: "{{ (states('sensor.battery') | float) * 3.6 }}"
        color: "#00FF00"
        thickness: 6
        value: "{{ states('sensor.battery') | float }}"
        color_thresholds:
          - value: 20
            color: "#FF0000"  # Red when low
          - value: 50
            color: "#FFAA00"  # Orange when medium
          - value: 100
            color: "#00FF00"  # Green when full
      
      # Battery icon
      - type: icon
        icon: "mdi:battery-{{ (states('sensor.battery') | int / 10) | round * 10 }}"
        x: 24
        y: 24
        size: 16
        color: "#FFFFFF"
      
      # Percentage text
      - type: text
        x: 32
        y: 48
        align: center
        text: "{{ states('sensor.battery') }}%"
        color: "#FFFFFF"

:thermometer: Weather Dashboard

service: pixoo.render_page
target:
  entity_id: light.pixoo64_display
data:
  page:
    page_type: components
    background: "#001122"
    components:
      # Temperature ring (outer)
      - type: arc
        center: [32, 36]
        radius: 20
        start_angle: 0
        end_angle: "{{ ((state_attr('weather.home', 'temperature') | float + 20) / 60 * 360) | int }}"
        color: "#00FFFF"
        thickness: 4
        value: "{{ state_attr('weather.home', 'temperature') }}"
        color_thresholds:
          - value: 0
            color: "#0088FF"  # Blue (cold)
          - value: 20
            color: "#00FFFF"  # Cyan (mild)
          - value: 30
            color: "#FF8800"  # Orange (hot)
      
      # Weather icon (center)
      - type: icon
        icon: "mdi:weather-{{ states('weather.home') }}"
        x: 24
        y: 28
        size: 16
        color: "#FFFFFF"
      
      # Wind direction arrow
      - type: arrow
        center: [52, 52]
        length: 10
        angle: "{{ state_attr('weather.home', 'wind_bearing') }}"
        color: "#FFFFFF"
        thickness: 2
        head_size: 3
      
      # Temperature text
      - type: text
        x: 32
        y: 48
        align: center
        text: "{{ state_attr('weather.home', 'temperature') }}°C"
        color: "#FFFFFF"

:bar_chart: Progress Bar

service: pixoo.render_page
target:
  entity_id: light.pixoo64_display
data:
  page:
    page_type: components
    background: "#000000"
    components:
      # Title
      - type: text
        x: 32
        y: 6
        align: center
        text: "Download Progress"
        color: "#FFFFFF"
      
      # Percentage
      - type: text
        x: 32
        y: 18
        align: center
        text: "{{ (states('sensor.download_progress') | float) | round(0) }}%"
        color: "#FFFFFF"
      
      # Progress bar border
      - type: rectangle
        x: 1
        y: 28
        width: 62
        height: 8
        filled: false
        color: "#FFFFFF"
      
      # Progress bar fill (60px max width)
      - type: rectangle
        x: 2
        y: 29
        width: "{{ (states('sensor.download_progress') | float / 100 * 60) | round(0, 'floor') }}"
        height: 6
        filled: true
        color: "#00FF00"

Automatic Page Rotation

Want a rotating dashboard that cycles through multiple pages? Just set up rotation in your integration options!

1. Create a pages file (/config/pixoo_pages.yaml):

pages:
  - name: weather
    page_type: components
    duration: 15
    enabled: true
    background: "#001122"
    components:
      - type: text
        x: 32
        y: 8
        align: center
        text: "{{ state_attr('weather.home', 'temperature') }}°C"
        color: "#FFFFFF"
      # ... more components

  - name: now_playing
    page_type: components
    duration: 10
    enabled: "{{ is_state('media_player.spotify', 'playing') }}"  # Only show when playing
    background: "#000000"
    components:
      - type: image
        x: 0
        y: 0
        source:
          url: "{{ state_attr('media_player.spotify', 'entity_picture') }}"
      # ... more components

  - name: battery_status
    page_type: components
    duration: 8
    enabled: true
    # ... battery gauge components

2. Configure rotation in Settings → Devices & Services → Pixoo:

  • Set pages_yaml_path to pixoo_pages.yaml
  • Enable rotation
  • Set default duration

3. Reload pages after editing:

service: pixoo.rotation_reload_pages
target:
  entity_id: light.pixoo64_display

Pages will automatically cycle based on their duration and enabled conditions!


Temporary Override Messages

Show urgent notifications that auto-resume rotation:

service: pixoo.show_message
target:
  entity_id: light.pixoo64_display
data:
  duration: 10  # Show for 10 seconds, then resume rotation
  page:
    page_type: components
    background: "#FF0000"
    components:
      - type: icon
        icon: "mdi:doorbell"
        x: 24
        y: 16
        size: 16
        color: "#FFFFFF"
      
      - type: text
        x: 32
        y: 40
        align: center
        text: "Doorbell!"
        color: "#FFFFFF"

Perfect for:

  • :bell: Doorbell alerts
  • :door: Door/window sensors
  • :alarm_clock: Timer notifications
  • :package: Package delivery alerts
  • :red_car: Garage door status

Available Services

pixoo.render_page

Render a single page immediately (no rotation).

pixoo.render_page_by_name

Render a specific page from your pixoo_pages.yaml file.

pixoo.show_message

Show temporary message with auto-resume.

pixoo.rotation_start / pixoo.rotation_stop

Control page rotation.

pixoo.rotation_reload_pages

Reload pages from YAML file.

pixoo.rotation_next_page / pixoo.rotation_previous_page

Manual page navigation.


Color Thresholds (Dynamic Coloring)

Many components support color_thresholds for dynamic coloring based on sensor values:

- type: arc
  # ... position, size, etc.
  value: "{{ states('sensor.battery') | float }}"
  color_thresholds:
    - value: 0
      color: "#FF0000"  # Red: 0-20%
    - value: 20
      color: "#FFAA00"  # Orange: 20-50%
    - value: 50
      color: "#00FF00"  # Green: 50-100%

The component automatically picks the right color based on the current value!


Conditional Pages

Use enabled to show pages only when relevant:

- name: now_playing
  enabled: "{{ is_state('media_player.spotify', 'playing') }}"
  # Only shown when Spotify is playing

- name: washing_machine_done
  enabled: "{{ is_state('binary_sensor.washing_machine', 'off') and is_state('sensor.washer_run_state', 'stopped') }}"
  duration: 30
  # Only shown when wash cycle just finished

Pre-Built Templates

The integration ships with ready-to-use templates:

  • :iphone: Now Playing - Media player with album art
  • :bar_chart: Progress Bar - Generic progress indicator
  • :battery: Battery Gauge - Circular battery display
  • :thermometer: Weather Dashboard - Weather with temperature ring
  • :compass: Compass Navigation - Wind/GPS direction
  • :chart_with_upwards_trend: Network Activity - Bar chart visualization
  • :satellite: Weather Radar - Concentric circles with indicators
  • :chart: Stock Dashboard - 4-stock grid with S&P 500

Check out the examples folder for complete YAML configs!


Installation

The Page Engine is included in the latest version of the integration:

HACS (recommended):

  1. Add custom repository: https://github.com/kmplngj/pixoo-ha
  2. Install “Pixoo” integration
  3. Restart Home Assistant
  4. Add integration via Settings → Devices & Services

Manual:

  1. Copy custom_components/pixoo/ to your HA config
  2. Restart Home Assistant

Technical Details

For those interested in the implementation:

  • Built on Pydantic v2 for type-safe models
  • Full Jinja2 template support in all fields
  • Async rendering pipeline with best-effort component handling
  • Variable dependency resolution (variables can reference other variables)
  • Pillow-based image processing with buffering
  • Rotation state machine with message override support
  • Support for Pixoo 16, Pixoo 64, and Pixoo Max (auto-detected)

What’s Next?

I’m planning to add:

  • :chart_with_upwards_trend: Graph component - Historical sensor data graphs
  • :art: Color gradients - Smooth color transitions
  • :zap: Animation support - Frame-based animations
  • :memo: More templates - Community contributions welcome!

Credits

Huge thanks to @gickowtf for pixoo-homeassistant – this work served as the inspiration and reference for the Page Engine architecture. The component DSL concept and rotation logic are heavily based on that brilliant project, adapted to work with the modern async pixooasync library.

1 Like