<%- include("partials/layout-top", { title }) %>
<%- include("partials/page-header", { eyebrow: "Content delivery", pageTitle: "Resources", description: "Upload and manage media for Lumi, overlays, alerts, and other streaming features. Locked resources stay internal; exposed resources receive a read-only URL." }) %>
Available to Lumi <%= storage.effective_available_bytes === null ? "Unknown" : formatBytes(storage.effective_available_bytes) %>

<% if (storage.quota_enabled) { %> Limited by the smaller of remaining quota and usable disk space. <% } else { %> Based on disk space after Lumi's safety reserve. <% } %>

Library usage <%= formatBytes(storage.used_bytes) %> <%= storage.file_count %> file<%= storage.file_count === 1 ? "" : "s" %>
Disk free <%= storage.disk_free_bytes === null ? "Unavailable" : formatBytes(storage.disk_free_bytes) %> <%= storage.disk_available ? `${formatBytes(storage.reserve_bytes)} reserved` : "Disk statistics unavailable" %>
Library limit <%= storage.quota_enabled ? formatBytes(storage.limit_bytes) : "Unlimited" %> Per-file maximum: <%= formatBytes(storage.max_file_bytes) %>

Add resources

Uploads are stored under generated filenames and never executed by Lumi.

Storage limits and supported formats<%= settings.limit_gib > 0 ? `${settings.limit_gib} GiB library limit` : "Unlimited library" %> · <%= settings.max_file_mib %> MiB per file · <%= settings.max_files %> files per upload
Use 0 for no Lumi-specific quota. Physical disk capacity still applies.
Lumi stops accepting uploads before the disk falls below this reserve.

<% formatGroups.forEach((group) => { %>
<%= group.category.charAt(0).toUpperCase() + group.category.slice(1) %> <%= group.extensions.join(" · ") %>
<% }) %>

Some accepted formats, such as MKV, AVI, HEIC, or PSD, may not decode in the browser preview. Lumi will still store and serve them correctly.

File browser

Preview, rename, lock, expose, copy, or remove uploaded resources.

> No files uploaded yet. Drop media in the upload area above to make it available to Lumi.
<% resources.forEach((resource) => { %>
<% if (resource.preview_kind === "image") { %> <% } else if (resource.preview_kind === "video" || resource.preview_kind === "audio") { %>
<% if (resource.preview_kind === "video") { %> <% } else { %> <% } %>
0:00 / --:--
<% } else { %> <% } %>

<%= resource.display_name %>

<%= resource.original_name %>

<%= resource.access_level === "exposed" ? "Exposed" : "Locked" %>
>
Download
data-confirm-mode="modal" data-confirm-title="Lock resource" data-confirm-text="Lock this resource and revoke its current read-only URL? Anything using that URL will stop working." data-confirm-label="Lock resource" <% } %> >
More actions
<% }) %>
<%- include("partials/layout-bottom") %>