Configuration Reference
All channel behavior is controlled by three JSON configuration objects stored on each channel record. No code changes are needed to customize a channel — everything is database-driven.
What It Does
Configuration determines how every pipeline stage behaves for a given channel: which voice to use, how the video looks, whether to include background music, what subtitle style to apply, and more. Changing these settings immediately affects the next pipeline run without any redeployment.
voice_config
Controls text-to-speech generation.
| Field | Type | Default | Description |
|---|---|---|---|
voice | string | "alloy" | OpenAI TTS voice: alloy, echo, fable, nova, onyx, shimmer |
speed | number | 1.0 | Speaking speed multiplier (0.25 to 4.0) |
visual_config
Controls video composition, backgrounds, subtitles, and thumbnails.
Background Settings
| Field | Type | Default | Description |
|---|---|---|---|
background_color | string | "#1a1a2e" | Hex color for solid background fallback |
background_image | string | null | Storage path to a template background PNG |
overlay_image | string | null | Storage path to a transparent overlay PNG |
Slideshow Settings
| Field | Type | Default | Description |
|---|---|---|---|
slideshow_provider | string | null | Image provider: "pexels" or null (disabled) |
slideshow_image_count | number | 5 | Number of images to fetch per video |
slideshow_keywords_source | string | "auto" | "auto" (extract from script) or "manual" |
slideshow_manual_keywords | array | [] | Manual keyword list (if source is manual) |
slideshow_duration_per_image | number | auto | Seconds per image (auto-calculated if null) |
slideshow_zoom_range | array | [1.0, 1.3] | Ken Burns zoom min/max multiplier |
Subtitle Settings
| Field | Type | Default | Description |
|---|---|---|---|
subtitle_color | string | "#ffffff" | Main subtitle text color (hex) |
subtitle_highlight | string | "#e94560" | Accent/highlight color for the currently spoken word |
subtitle_style | string | "word_highlight" | Subtitle mode: "word_highlight" or "simple" |
font | string | "Montserrat-Bold" | Font family for subtitles |
Branding
| Field | Type | Default | Description |
|---|---|---|---|
accent_color | string | "#e94560" | Brand accent color (thumbnail bar, UI highlights) |
music_config
Controls optional background music mixed under the voiceover.
| Field | Type | Default | Description |
|---|---|---|---|
provider | string | null | Music provider: "jamendo" or null (disabled) |
volume | number | 0.15 | Music volume relative to voice (0.0 to 1.0) |
fade_in_seconds | number | 1.0 | Music fade-in duration at start |
fade_out_seconds | number | 2.0 | Music fade-out duration at end |
Other Channel Fields
These are top-level fields on the channel record, not nested inside a config object:
| Field | Type | Description |
|---|---|---|
name | string | Display name (e.g., “Gaming”) |
slug | string | URL-safe identifier (e.g., “gaming”) |
prompt_template | string | Channel-level context injected into all AI prompts |
posting_cadence | number | Target videos per day (controls topic selection count) |
active | boolean | Whether the channel is active in the pipeline |
Where to Find It
- Dashboard: Channel Settings page — each config section has its own tab (Voice, Visual, Music)
- Database:
channelstable —voice_config,visual_config, andmusic_configcolumns
How It Works
When any pipeline stage runs, it reads the channel’s current configuration from the database. This means:
- You change a setting in the dashboard (e.g., switch voice from “alloy” to “nova”)
- The dashboard writes the updated
voice_configJSON to thechannelstable - The next pipeline run reads the new config and uses it
There is no caching or delay. Changes take effect on the very next pipeline execution.