export type RuntimeMode = 'production' | 'internal' | 'self_hosted'; export type FeatureId = | 'playground' | 'audio_studio' | 'video_studio' | 'post_production' | 'audio_export' | 'video_export'; export interface CapabilityBanner { tone: string; title: string; message: string; } export interface CapabilitySnapshot { runtime_mode: RuntimeMode; license: { state: 'not_configured' | 'valid' | 'invalid' | 'dev_override'; source: string; }; features: Record; ui: { show_runtime_help: boolean; banner: CapabilityBanner | null; }; } export interface AudioSpeakerProfile { speaker_id: string; display_name: string; mode: 'instruct' | 'clone'; instruct: string; ref_audio_filename?: string | null; ref_text?: string | null; } export interface AudioLine { id: string; speaker: string; text: string; render_filename?: string | null; render_duration_seconds?: number | null; render_updated_at?: number | null; } export interface AudioMixdown { id: string; filename: string; format: 'wav' | 'mp3'; duration_seconds: number; created_at: number; } export interface AudioProject { id: string; name: string; gap_ms: number; lines: AudioLine[]; speaker_profiles: Record; mixdowns: AudioMixdown[]; created_at: number; updated_at: number; } export interface ProjectSummary { id: string; name: string; updated_at: number; } export interface VideoAsset { id: string; filename: string; original_name: string; media_type: string; uploaded_at: number; } export interface VideoScene { id: string; title: string; text: string; visual_prompt: string; asset_id?: string | null; duration_seconds: number; } export interface VideoPreview { id: string; filename: string; duration_seconds: number; created_at: number; } export interface VideoProject { id: string; name: string; aspect_ratio: '9:16' | '16:9'; width: number; height: number; scenes: VideoScene[]; assets: VideoAsset[]; previews: VideoPreview[]; created_at: number; updated_at: number; } export interface TimelineItem { id: string; title: string; source_video_project_id?: string | null; asset_filename?: string | null; duration_seconds: number; } export interface PostPreview { id: string; filename: string; created_at: number; duration_seconds: number; } export interface PostExport { id: string; filename: string; created_at: number; duration_seconds: number; } export interface PostProject { id: string; name: string; aspect_ratio: '9:16' | '16:9'; width: number; height: number; source_video_project_id?: string | null; source_audio_project_id?: string | null; audio_mixdown_filename?: string | null; timeline: TimelineItem[]; previews: PostPreview[]; exports: PostExport[]; created_at: number; updated_at: number; }