| 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<FeatureId, boolean>; |
| 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<string, AudioSpeakerProfile>; |
| 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; |
| } |
|
|