export interface Song { id: string; title: string; lyrics: string; style: string; coverUrl: string; duration: string; createdAt: Date; isGenerating?: boolean; queuePosition?: number; // Position in queue (undefined = actively generating, number = waiting in queue) tags: string[]; audioUrl?: string; isPublic?: boolean; likeCount?: number; viewCount?: number; userId?: string; creator?: string; creator_avatar?: string; } export interface Playlist { id: string; name: string; description?: string; coverUrl?: string; cover_url?: string; songIds?: string[]; isPublic?: boolean; is_public?: boolean; user_id?: string; creator?: string; created_at?: string; song_count?: number; songs?: any[]; } export interface Comment { id: string; songId: string; userId: string; username: string; content: string; createdAt: Date; } export interface GenerationParams { // Mode customMode: boolean; // Simple Mode songDescription?: string; // Custom Mode prompt: string; lyrics: string; style: string; title: string; // Common instrumental: boolean; vocalLanguage: string; // Music Parameters bpm: number; keyScale: string; timeSignature: string; duration: number; // Generation Settings inferenceSteps: number; guidanceScale: number; batchSize: number; randomSeed: boolean; seed: number; thinking: boolean; audioFormat: 'mp3' | 'flac'; inferMethod: 'ode' | 'sde'; shift: number; // LM Parameters lmTemperature: number; lmCfgScale: number; lmTopK: number; lmTopP: number; lmNegativePrompt: string; lmBackend?: 'pt' | 'vllm'; // Expert Parameters referenceAudioUrl?: string; sourceAudioUrl?: string; audioCodes?: string; repaintingStart?: number; repaintingEnd?: number; instruction?: string; audioCoverStrength?: number; taskType?: string; useAdg?: boolean; cfgIntervalStart?: number; cfgIntervalEnd?: number; customTimesteps?: string; useCotMetas?: boolean; useCotCaption?: boolean; useCotLanguage?: boolean; autogen?: boolean; constrainedDecodingDebug?: boolean; allowLmBatch?: boolean; getScores?: boolean; getLrc?: boolean; scoreScale?: number; lmBatchChunkSize?: number; trackName?: string; completeTrackClasses?: string[]; isFormatCaption?: boolean; } export interface PlayerState { currentSong: Song | null; isPlaying: boolean; progress: number; volume: number; } export interface User { id: string; username: string; createdAt: Date; followerCount?: number; followingCount?: number; isFollowing?: boolean; isAdmin?: boolean; avatar_url?: string; banner_url?: string; } export interface UserProfile { user: User; publicSongs: Song[]; publicPlaylists: Playlist[]; stats: { totalSongs: number; totalLikes: number; }; } // Simplified views for ACE-Step UI export type View = 'create' | 'library' | 'profile' | 'song' | 'playlist' | 'search';