Admin Settings v{{ version }}

{% with messages = get_flashed_messages(with_categories=true) %} {% if messages %}
{% for category, message in messages %}

{{ message }}

{% endfor %}
{% endif %} {% endwith %}

Booth Status

When closed, the public request page shows a "booth closed" message instead of the form.

Database Health

{% if not health.ok %}

❌ {{ health.message }}

{% if health.missing_columns %}

Missing columns: {{ health.missing_columns | join(', ') }}

{% endif %} {% if health.missing_tables %}

Missing tables: {{ health.missing_tables | join(', ') }}

{% endif %}
{% else %}

✅ {{ health.message }}

{% endif %}

Database Statistics

Total requests: {{ total_records }}

Database size: {{ db_size }}

Uploaded MP3s: {{ upload_file_count }} files in {{ upload_dir_count }} request folders

Uploads total size: {{ upload_size }}

{% if status_counts %}

Status breakdown:

    {% for status, count in status_counts.items() %}
  • {{ status }}: {{ count }}
  • {% endfor %}
{% endif %}

Database path:
{{ db_path }}

Uploads path:
{{ upload_path }}

Revision Limit

Set to 0 to disable customer-submitted revisions. Operators can still upload new versions manually.

Dashboard Auto-Refresh

Kiosk Display Mode

Set how the public /kiosk page cycles. Use -1 for QR only, 0 for pricing only, 1 for queue only, or 5+ seconds to cycle between QR, pricing, and queue.

Examples: -1 = QR only, 0 = pricing only, 1 = queue only, 10 = rotate QR → pricing → queue every 10 seconds.

Hermes API Key

Set via Portainer env var HERMES_API_KEY. Used for callback auth.

Current key: {{ hermes_key_masked }}

{% if not hermes_key_set %}

⚠️ No Hermes API key is configured. Set the HERMES_API_KEY environment variable in Portainer before using the callback workflow.

{% endif %}

Callback Link Expiry

How long the signed Hermes callback URL stays valid (in hours). Default is 168 hours (7 days).

ntfy Notifications

Push notifications for new customer requests. Leave either field blank to disable.

ntfy Server URL
ntfy Topic
ntfy Access Token

Required if the topic is access-controlled. Leave blank to keep the existing stored token.


Send Test Notification

MusicGPT Integration

API key is set via the MUSICGPT_API_KEY environment variable in Docker.

API key configured: {{ '✅ Yes' if musicgpt_api_key_set else '❌ No' }}

Webhook URL: {{ musicgpt_webhook_url }}

This URL is sent as webhook_url with every MusicGPT conversion request. MusicGPT POSTs results here when each task completes.


Album Cover Delivery

When enabled, the generated album cover is attached to the delivery email. It is always shown on this admin page.


Automatic MusicGPT Polling

When enabled, the site automatically polls MusicGPT every few minutes and downloads MP3/WAV files once they are ready.

Email (SMTP) Settings

These settings are used to send confirmation, preview, and delivery emails to customers. The password is stored encrypted using the Flask secret key.

SMTP Host
SMTP Port
SMTP Username
From Address
SMTP Password

Send Test Email

MP3 Metadata Tags

These values are written into every uploaded MP3 file. The song title from the prompt is written to the Title tag automatically. Blank fields are skipped.

Artist
Album
Year
Comment

Database Backup / Restore

Download a copy of the SQLite database before the event. Upload a previous backup to restore it; the current database will be renamed as a timestamped backup.

Music Files Backup

Download all uploaded MP3 and archived revision files as a single ZIP.

⚠️ Reset System

Use this only at the start of a new event. It will delete every request and every uploaded MP3 file. This cannot be undone.