Creating Brand Profiles
August 26, 2026 · View on GitHub
Brand profiles let you maintain consistent visual identity across videos. Each brand defines colors, fonts, and voice settings.
Quick Start: Run
/brandin Claude Code to create a brand interactively. It can extract colors from a website URL, generate a palette from a single color, or let you specify colors manually.
Brand Structure
brands/
├── default/
│ ├── brand.json # Colors, fonts, spacing
│ ├── voice.json # Voice settings
│ └── assets/ # Logo, backgrounds, watermarks
│ ├── logo.svg
│ └── background.mp4
└── my-company/
├── brand.json
├── voice.json
└── assets/
Creating a New Brand
-
Copy the default brand
cp -r brands/default brands/my-company -
Edit brand.json
{ "name": "My Company", "description": "Corporate brand for My Company videos", "colors": { "primary": "#2563eb", "primaryLight": "#3b82f6", "textDark": "#1e293b", ... }, "fonts": { "primary": "Inter, sans-serif", "mono": "JetBrains Mono, monospace" } } -
Configure voice settings (optional) Edit
voice.jsonto use a different ElevenLabs voice:{ "voiceId": "your-voice-id", "settings": { "stability": 0.75, "similarityBoost": 0.9 } } -
Add brand assets Place logo, background videos, or watermarks in
assets/.
Using a Brand in a Project
When creating a new project with /video, you'll be prompted to select a brand:
Which brand?
1. default - #3B82F6 (blue)
2. digital-samba - #3771e0 (blue)
3. my-company - #your-color
4. Create new brand → /brand
The selected brand's colors, fonts, and assets are automatically applied to your project via src/config/brand.ts.
Manual Brand Loading
If you prefer manual setup, reference the brand in your project's config:
// brand.ts (auto-generated by /video command)
import { loadBrand } from '../../../lib/brand';
export const brand = loadBrand('my-company');
Brand Properties
Colors
| Property | Description |
|---|---|
primary | Main accent color |
primaryLight | Lighter variant for hover/highlight |
textDark | Primary text color |
textMedium | Secondary text color |
textLight | Tertiary/muted text |
bgLight | Light background |
bgDark | Dark background |
bgOverlay | Semi-transparent overlay |
divider | Border/divider color |
shadow | Shadow color (with alpha) |
Fonts
| Property | Description |
|---|---|
primary | Main font for headings and body |
mono | Monospace font for code |
Typography
Define sizes and weights for each text style:
h1,h2,h3- Heading stylesbody- Body textlabel- Labels and captions
Voice Settings
ElevenLabs
| Property | Description |
|---|---|
voiceId | ElevenLabs voice ID |
stability | Voice stability (0-1, higher = more consistent) |
similarityBoost | Voice similarity (0-1, higher = more similar to original) |
style | Style exaggeration (0-1) |
model | ElevenLabs model to use |
Qwen3-TTS
Add an optional qwen3 section to voice.json for self-hosted TTS:
{
"voiceId": "...",
"settings": { ... },
"qwen3": {
"speaker": "Ryan",
"language": "Auto",
"instruct": "",
"clone": {
"refAudio": "assets/voice-reference.m4a",
"refText": "Exact transcript of the reference audio."
}
}
}
| Property | Description |
|---|---|
qwen3.speaker | Built-in speaker name (Ryan, Aiden, Vivian, etc.) |
qwen3.language | Language hint (Auto, English, Chinese, etc.) |
qwen3.instruct | Emotion/style instruction (e.g., "Speak warmly") |
qwen3.clone.refAudio | Path to reference audio, relative to brand directory |
qwen3.clone.refText | Exact transcript of the reference audio |
Both qwen3 and qwen3.clone are optional. Set clone to null or omit it to use built-in speakers only.
Setting Up Voice Cloning
Run /voice-clone for a guided workflow that:
- Records or imports reference audio
- Tests the clone quality
- Saves the profile to your brand's
voice.json
Once saved, use --brand to load it automatically:
uv run tools/voiceover.py --provider qwen3 --brand my-company --scene-dir public/audio/scenes --json