Skip to content

Media Dashboard

A wall-display card that aggregates media content from four sources into a single glanceable view with poster art, external ratings, local theater showtimes, and a preference system.

Overview

The media dashboard shows what's worth watching right now across four categories:

  • In Theaters -- movies currently playing at local cinemas, ranked by quality and popularity, with showtimes for nearby theaters
  • Plex Movies -- recently added movies on the home Plex server, ranked by runtime and rating
  • Plex Shows -- recently added TV shows on the home Plex server, quality scored using a 50-minute episode runtime normalization instead of the 120-minute movie baseline
  • Coming Soon -- upcoming theatrical and streaming releases

Users can like or dismiss items. Liked items float to the top; dismissed items move to a collapsible "Hidden" section with a restore button. All preferences persist across restarts.

Cards

Compact Card

The compact card sits on the wall display alongside other dashboard cards. It shows 3 posters at a time with category tabs at the bottom. Arrows paginate by 3 posters. The card auto-rotates categories every 15 seconds when not being interacted with.

Detail Popup

Tapping the compact card opens the detail popup with all four categories as horizontally scrollable poster rows. Each row has scroll arrows for quick navigation. Tapping a poster loads its full detail panel with:

  • Ratings row with Kometa-style icons: TMDb, IMDb, Rotten Tomatoes critics (tomato), and RT audience (popcorn) -- fresh/rotten icon variants based on 60% threshold
  • MPAA certification, runtime, and genre names
  • Director, theatrical release date, and worldwide box office revenue
  • Movie tagline in italics
  • Synopsis
  • Like/unlike toggle and dismiss button
  • Collapsible 7-day showtime schedule grouped by day, with theater summaries

Dismissed items appear in a "Hidden (N)" toggle below each category's poster row. Expanding it shows dimmed posters with a restore button.

Data Sources

Source What it provides Refresh cadence
Tautulli Recently added Plex movies and shows, poster images via pms_image_proxy Every 2 hours
TMDb Now-playing and upcoming movies, popularity/vote metadata, poster CDN, director/certification/revenue via detail endpoint Every 12 hours
SerpApi Theater showtimes via Google search for configured local cinemas Once daily
MDbList External ratings aggregator -- IMDb, Rotten Tomatoes (critics + audience), Metacritic; enriches items during each refresh On each refresh

Architecture

The system uses the standard AppDaemon relay script pattern for card-to-app communication:

Lovelace Cards (JS)
  │ callService("script", "media_dashboard_relay", { command, payload })
Home Assistant (relay script fires event)
  │ media_dashboard_command event
media_dashboard_app (AppDaemon)
  │ Orchestrates fetchers, publishes sensors
sensor.media_dashboard_status  ──▶  Cards read attributes
sensor.media_dashboard_detail  ──▶  Detail panel reads on demand

Poster images are downloaded to /media/ and synced to /config/www/ via a shell command, so HA can serve them as /local/ URLs.

Ranking

All items are scored using a unified heuristic combining three factors:

Factor Weight Measures
Quality 45% TMDb score (0-10) or runtime as a proxy for Plex items (TV shows use 50min episode normalization; movies use 120min)
Recency 25% How recently released or added (newer = higher)
Prominence 30% TMDb popularity (log-scale), vote count, genre presence

Liked items are boosted to the top of their category after scoring.

  • App README: appdaemon/apps/media_dashboard_app/README.md
  • Card files: appdaemon/apps/media_dashboard_app/cards/
  • Providers: appdaemon/providers/media_providers/