Customize Branding
PaletteAI allows you to customize the appearance of the PaletteAI User Interface (UI) during installation or upgrades. Using Helm chart values under canvas.branding, you can customize the following front-end elements:
- Header colors - Background color for the top navigation bar (text color is derived for contrast).
- Sidebar colors - Background color for the sidebar navigation (text color is derived for contrast).
- Primary brand color - Accent color for buttons, links, and related tokens.
- Primary logo - Custom mark for the login page and header (see placement below).
- Secondary logo - Optional second mark in the header when used with a primary logo.
- Favicon - Icon shown in the browser tab.
- ConfigMap name and namespace - Where the branding ConfigMap is created (optional overrides).
All branding fields are optional. For example, you can set only primaryLogo and leave the rest empty. Invalid or malformed values are ignored and the UI falls back to defaults. The legacy ConfigMap key logoUrl is not read; use primaryLogo (and optionally secondaryLogo) instead.
Asset formats and limits
- HTTP(S) URLs - Canvas loads these same-origin via
/ai/api/brand-logo(or your base path +/api/brand-logo). Supported image types from the remote server include PNG, JPEG, GIF, SVG, WebP, and ICO. Maximum size per asset: 2 MB. - Data URIs - Must be base64-encoded
data:image/png;base64,...,data:image/jpeg;base64,..., ordata:application/octet-stream;base64,.... Other data URI types are rejected. (Use an HTTP(S) URL if you need SVG, GIF, or WebP.)
Logo placement
- Login - Uses
primaryLogoonly (the secondary logo does not appear on the login page). The logo sits in a fixed-height area of 56px (3.5rem); the image keeps aspect ratio within that space. - Header, primary only -
primaryLogoappears on the right side of the header (company-logo slot), scaled withobject-fit: containto a maximum height of 32px. - Header, primary + secondary -
primaryLogois on the left (after the product switcher), up to 26px tall.secondaryLogois on the right, up to 32px tall. secondaryLogowithoutprimaryLogo- Ignored; setprimaryLogofirst.
Prerequisites
-
Helm installed.
-
kubectl installed and available in your
$PATH. -
The
KUBECONFIGenvironment variable set to the path of the PaletteAI hub cluster'skubeconfigfile.export KUBECONFIG=<kubeconfig-location> -
Access to the PaletteAI
values.yamlHelm chart. -
A text editor to modify the PaletteAI
values.yamlHelm chart. -
For HTTP(S) assets, URLs reachable from the PaletteAI hub cluster (HTTPS recommended).
-
For data URIs, a small PNG or JPEG encoded as base64 (see asset formats above).
Enablement
-
Open your PaletteAI
values.yamlfile in a text editor of your choice. Locate thecanvas.brandingsection. Modify the existing values, as desired.canvas:
branding:
brandColor: ''
configMapName: 'branding'
namespace: ''
favicon: ''
headerBackgroundColor: ''
sidebarBackgroundColor: ''
primaryLogo: ''
secondaryLogo: ''The following table describes the fields in additional detail. All fields are optional.
Field Description Default brandColorPrimary brand color; drives the brand-bold token (buttons, links, etc.). ''configMapNameKubernetes name of the branding ConfigMap. brandingnamespaceNamespace where the ConfigMap is created. If empty, the Helm release namespace is used. ''faviconData URI or HTTP(S) URL. Recommended source: 32×32 or 48×48 px PNG, or a multi-resolution ICO. Browsers render favicons small; keep the design simple and legible at 16px. Max 2 MB when loaded via HTTP(S). ''headerBackgroundColorBackground color for the header. Text color is derived for contrast. ''sidebarBackgroundColorBackground color for the sidebar navigation. Text color is derived for contrast. ''primaryLogoData URI or HTTP(S) URL. Shown on login (56px-tall area) and in the header (see placement). Recommended source: at least 128×128 px for sharp scaling on high-DPI displays, or a wide mark (e.g. 256×64) with height ≥ 64 px; aspect ratio 1:1 or wider. Max 2 MB when loaded via HTTP(S). ''secondaryLogoData URI or HTTP(S) URL; requires primaryLogo. Header right slot, up to 32 px tall. Recommended source: same as primary (e.g. 128×128 or wide 256×64). Max 2 MB when loaded via HTTP(S).''Display reference (after scaling in the UI)
Asset / combination Effective max display height Login ( primaryLogo)56px Header right, primary only 32px Header left ( primaryLogo+secondaryLogo)26px Header right ( secondaryLogo)32px Favicon Browser-defined (typically 16–32px) tipColors can be specified in the following formats:
- Hex colors (
#FFFFFF,#FFF) - RGB (
rgb(255, 255, 255)) - RGBA (
rgba(255, 255, 255, 0.8))
- Hex colors (
-
Apply your changes by upgrading your PaletteAI installation.
helm upgrade paletteai spectrocloud/paletteai \
--namespace mural-system \
--values values.yaml
Validate
-
Check that the ConfigMap was created successfully. Use the name from
canvas.branding.configMapNameif you overrode it (defaultbranding).kubectl get configmap branding --namespace mural-system -
View the ConfigMap contents. Check that the ConfigMap was populated with the correct values.
kubectl describe configmap branding --namespace mural-system -
Log in to PaletteAI to verify the UI reflects the values defined in the ConfigMap. If the UI is not using the expected colors or logo, check the Canvas pod logs for any branding-related errors.
kubectl logs deployment/canvas --namespace mural-system | grep --ignore-case brand