Status
{# Every service stays visible at every width — these wrap onto more rows rather than scrolling or truncating. A hidden pill is a service whose status you can't see. #}Right now
{# Two cards here, not three. Storage carries a per-disk table that no third-of-a-page column can hold without towering over these two and hollowing them out — it gets its own full-width row below. #}
{% if tautulli.status == 'ok' %}
{% if tautulli.sessions %}
{% for s in tautulli.sessions %}
{% else %}
{{ service_error("Tautulli", tautulli.error) }}
{% endif %}
{{ s.title }}
{{ s.user }}
{% endfor %}
{% else %}
Nothing streaming right now.
{% endif %}Downloads
{% if sabnzbd.status == 'ok' %} {% set st = sabnzbd.sab_status | lower %} {% endif %}
{% if sabnzbd.status == 'ok' %}
{{ sabnzbd.speed }}
{{ sabnzbd.queue_count }} queued ·
{{ sabnzbd.sizeleft }} left
- Avg speed (7d)
- {{ sabnzbd.avg_speed }}
- Grabbed (7d)
- {{ sabnzbd.completed_7d }}
- Volume (7d)
- {{ sabnzbd.week_size }}
Storage
{% if unraid.status == 'ok' %} {% endif %}
{% if unraid.status == 'ok' %}
{% if unraid.disks or unraid.caches or unraid.parities %}
{# Array total leads, then the disks that make it up. #}
{% set pct = unraid.array_used_pct %}
{% else %}
{# Fallback: container-visible disk usage, no per-disk detail. #}
{% set pct = unraid.array_used_pct %}
| Disk | Used | Size | Free | Usage | Temp |
|---|---|---|---|---|---|
| {{ dk.name }} | {{ dk.used }} | {{ dk.total }} | {{ dk.free }} |
|
{{ disk_state(dk) }} |
| {{ dk.name }} | — | — | — | Parity · no filesystem | {{ disk_state(dk) }} |
{{ pct }}%
{{ unraid.array_free }} free of {{ unraid.array_total }}
{{ unraid.array_used }} used
{% if unraid.source == "local" %}
Container disk usage ({{ unraid.mount }}). Set UNRAID_API_KEY for full array stats.
Library
- Series
- {{ sonarr.total_series }}
- Missing episodes
- {{ sonarr.missing_episodes }}
- Movies
- {{ radarr.total_movies }}
- Missing
- {{ radarr.missing_movies }}
Discover — not in your library yet
Popular TV on Rotten Tomatoes
{% if rt_tv and rt_tv[0] is defined and rt_tv[0].error is defined %}
Couldn't load TV recommendations.
{% elif rt_tv %}
{% for show in rt_tv %}
{% if rt_tv | length > 5 %}
{% endif %}
{% else %}
{{ loop.index }}
{% if show.poster %}
{% else %}{% endif %}
{% endfor %}
{{ show.title }}{% if show.year %} ({{ show.year }}){% endif %}
{{ show.description[:180] ~ '…' if show.description and show.description|length > 180 else (show.description or '') }}
No TV recommendations available.
{% endif %}Top box office on Rotten Tomatoes
{% if rt_movies and rt_movies[0] is defined and rt_movies[0].error is defined %}
Couldn't load movie recommendations.
{% elif rt_movies %}
{% for movie in rt_movies %}
{% if rt_movies | length > 5 %}
{% endif %}
{% else %}
{{ loop.index }}
{% if movie.poster %}
{% else %}{% endif %}
{% endfor %}
{{ movie.title }}{% if movie.year %} ({{ movie.year }}){% endif %}
{{ movie.description[:180] ~ '…' if movie.description and movie.description|length > 180 else (movie.description or '') }}
No movie recommendations available.
{% endif %}Requests & indexers
Requests — Ombi
{% if ombi.status == 'ok' %} {% endif %}
{% if ombi.status == 'ok' %}
{% if ombi.recent %}
{% for req in ombi.recent %}
{# Same anatomy as an indexer row: status dot, name over a
dimmed detail line, status badge on the right. #}
{% set st = req.status | lower %}
{{ req.status }}
{% endfor %}
{% if ombi.recent | length > 5 %}
{% endif %}
{% else %}
{{ req.title }}
{{ req.type }} · {{ req.user }} · {{ req.date_display }}
No recent requests.
{% endif %} {% else %} {{ service_error("Ombi", ombi.error) }} {% endif %}Indexers — Prowlarr
{% if prowlarr.status == 'ok' %} {% endif %}
{% if prowlarr.status == 'ok' %}
{# Bars are scaled against the busiest indexer, not against 100%,
so a spread of single-digit shares is still readable. The label
beside each bar stays the true percentage. #}
{% set top_share = prowlarr.indexers[0].share if prowlarr.indexers else 0 %}
{% for idx in prowlarr.indexers %}
{% set share = idx.share %}
{% if prowlarr.has_stats %}
{% endif %}
{{ 'Online' if idx.up else 'Offline' }}
{% endfor %}
{% else %}
{{ service_error("Prowlarr", prowlarr.error) }}
{% endif %}
{{ idx.name }}
{{ idx.protocol }}{% if prowlarr.has_stats %} · {{ '{:,}'.format(idx.grabs) }} grabs · {{ '{:,}'.format(idx.queries) }} queries{% endif %}
{% if prowlarr.has_stats %}
{% endif %}
Watch insights — last 30 days
Most played
{% if tautulli.top_played %}
{% for item in tautulli.top_played %}
{% else %}
{{ loop.index }}
{% set mt = item.media_type | lower %}
{{ 'TV' if mt == 'episode' else ('Movie' if mt == 'movie' else mt or '?') }}
{{ item.plays }}×
{% endfor %}
{{ item.title }}
{{ item.user }}
No play history yet.
{% endif %}Top viewers
{% if tautulli.top_users %}
{% for u in tautulli.top_users %}
{% else %}
{{ loop.index }}
{{ u.plays }} plays
{% endfor %}
{{ u.username }}
No viewer data yet.
{% endif %}Top TV
{% if tautulli.top_tv_list %}
{% for item in tautulli.top_tv_list %}
{% else %}
{{ loop.index }}
{{ item.plays }} plays
{% endfor %}
{{ item.title }}
No data yet.
{% endif %}Top movies
{% if tautulli.top_movie_list %}
{% for item in tautulli.top_movie_list %}
{% else %}
{{ loop.index }}
{{ item.plays }} plays
{% endfor %}
{{ item.title }}
No data yet.
{% endif %}