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.
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/
-
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/.
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.
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');| 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) |
| Property | Description |
|---|---|
primary |
Main font for headings and body |
mono |
Monospace font for code |
Define sizes and weights for each text style:
h1,h2,h3- Heading stylesbody- Body textlabel- Labels and captions
| 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 |
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.
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:
python tools/voiceover.py --provider qwen3 --brand my-company --scene-dir public/audio/scenes --json