{% extends "base.html" %} {% block title %}Dashboard · LibreSignage{% endblock %} {% block head %} {% endblock %} {% block content %}

CMS dashboard

Manage content and publish it to every screen from one place.

{% if latest_publish %} Last publish #{{ latest_publish.id }}: {{ latest_publish.created_at }} UTC to {{ latest_publish.screen_count }} {{ "screen" if latest_publish.screen_count == 1 else "screens" }} {% else %} Nothing has been published yet. {% endif %} Connected players check for updates every 2 seconds.
{% if can_publish_all or publish_groups %}
{% if can_publish_all %}
{% endif %} {% if publish_groups %}
{% endif %}
{% endif %}
{% if unpublished_count %}
{{ unpublished_count }} {{ "screen has" if unpublished_count == 1 else "screens have" }} unpublished assignment changes.
{% endif %} {% if emergency_overrides %}

Active emergency overrides

{% for emergency in emergency_overrides %} {% endfor %}
{% endif %} {% for alert in alerts %} {% endfor %}
{% for label, count, endpoint in [ ("Content items", items|length, "content.index"), ("Playlists", playlists|length, "content.playlists"), ("Schedules", schedules|length, "content.schedules"), ("Screens", screens|length, "dashboard.screen_inventory") ] %}
{{ count }} {{ label }}
{% endfor %}

Managed screens

{% if screens %}
{% for screen in screens %} {% set state = health_states[screen.id] %} {% set report = health.get(screen.id) %} {% set layout_assignment = layout_assignments[screen.id] %}

{{ screen.name }}

{% if screen.id in unpublished_ids %} Draft changes {% elif screen.published_revision %} Published r{{ screen.published_revision }} {% endif %} {{ state|title }}
{% if screen.last_seen_at %} Last contact {{ screen.last_seen_at }} UTC {% else %} Player has not connected {% endif %} Open once while online and wait for “Offline playlist ready” before deploying or rebooting this screen. {% if report %} Cache: {{ "ready" if report.cache_ready else "not ready" }} {% if report.cache_revision %} for r{{ report.cache_revision }} {% endif %} · Service worker: {{ "active" if report.service_worker_active else "inactive" }} {% if report.storage_usage is not none %} · Storage {{ (report.storage_usage / 1048576)|round(1) }} MiB {% if report.storage_quota %} / {{ (report.storage_quota / 1048576)|round(1) }} MiB {% endif %} {% endif %} {% if report.last_error %} {{ report.last_error }} {% endif %} {% if report.last_content_title %} Last played: {{ report.last_content_title }} {% if report.last_content_started_at %} · {{ report.last_content_started_at }} {% endif %} {% endif %} {% if report.cache_failure_reason == "insufficient_storage" %} {% elif report.cache_required_bytes and report.cache_available_bytes and report.cache_required_bytes >= report.cache_available_bytes * 0.8 %}
This revision is close to the browser's available storage limit.
{% endif %} {% endif %}
Remote actions {% for action, label in [ ("reload", "Restart player"), ("sync", "Sync now"), ("clear_cache", "Clear cache") ] %}
{% endfor %} {% if g.user.role == "admin" and native_agents[screen.id] %}
{% endif %} {% if commands[screen.id] %} Latest: {{ commands[screen.id][0].action|replace("_", " ") }} · {{ commands[screen.id][0].status }} {% endif %}
{% endfor %}
{% else %}

No screens registered

Add a screen to create its permanent player URL.

{% endif %}
{% endblock %} {% block scripts %} {% endblock %}