KW Knowledge base

Branding

Vistralio can be re-skinned with your own product name, tagline, primary colour, logo, and favicon. The branding is exposed publicly so the **login screen** already shows it before the user signs in.

Mitch Wigham
Updated 24 June 2026 · 6 views

Branding

Vistralio can be re-skinned with your own product name, tagline, primary colour, logo, and favicon. The branding is exposed publicly so the login screen already shows it before the user signs in.

Where it appears

  • The browser tab title
  • The browser tab icon / favicon
  • The sidebar title and logo
  • The login form
  • The PWA install prompt

Editing

Settings → Branding (requires branding.edit or admin).

Field Notes
Name Replaces "Vistralio" everywhere it appears
Tagline Appears under the name on the login screen
Primary colour Hex value, used for the accent colour. Pick something with enough contrast against the dark slate background
Logo PNG, JPEG, SVG, or WebP. Upload a file or paste a remote image URL. Square aspect works best; max 1MB recommended
Favicon .ico, PNG, SVG, WebP, or a remote URL. Used for the browser tab and refreshed by the app shell after save

The logo file is written to /var/lib/vistralio/branding/logo.<ext> and served by nginx at /branding/logo.<ext>. The favicon is written alongside it and served back through /favicon.ico.

API

# Read (public — no auth)
curl https://cctv.example.com/api/branding

# Update (admin)
curl -X PUT https://cctv.example.com/api/branding \
     -H "Authorization: Bearer $TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"name":"Acme NVR","tagline":"Watch everywhere","primary_color":"#10b981"}'

# Upload a logo (multipart)
curl -X POST https://cctv.example.com/api/branding/logo \
     -H "Authorization: Bearer $TOKEN" \
     -F "file=@./acme-logo.png"

# Set logo from a remote URL
curl -X POST https://cctv.example.com/api/branding/logo-url \
     -H "Authorization: Bearer $TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"url":"https://example.com/acme-logo.png"}'

# Upload a favicon
curl -X POST https://cctv.example.com/api/branding/favicon \
     -H "Authorization: Bearer $TOKEN" \
     -F "file=@./favicon.ico"

# Set favicon from a remote URL
curl -X POST https://cctv.example.com/api/branding/favicon-url \
     -H "Authorization: Bearer $TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"url":"https://example.com/favicon.ico"}'

Reverting to defaults

There's no "reset" button — set the values back manually, or DELETE the brand.* keys via the settings API:

curl -X PUT https://cctv.example.com/api/settings/brand.name \
     -H "Authorization: Bearer $TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"value":null,"scope":"admin","description":""}'

Still need help?

Log a support ticket and the team will pick it up from this page.