127 lines
4.0 KiB
TypeScript
127 lines
4.0 KiB
TypeScript
// ─── Content Creation Studio Types ───
|
|
|
|
export type StudioChannel = 'youtube' | 'instagram' | 'naver_blog' | 'tiktok' | 'facebook';
|
|
|
|
export type ContentFormat =
|
|
| 'shorts' | 'long_form' // YouTube
|
|
| 'reels' | 'carousel' | 'feed_image' | 'stories' // Instagram
|
|
| 'seo_post' | 'faq_post' // Naver Blog
|
|
| 'short_video' // TikTok
|
|
| 'ad_creative' | 'retarget_content'; // Facebook
|
|
|
|
export interface ChannelFormatOption {
|
|
channel: StudioChannel;
|
|
label: string;
|
|
icon: string;
|
|
formats: { key: ContentFormat; label: string; aspectRatio: '16:9' | '9:16' | '1:1' | '4:5' }[];
|
|
}
|
|
|
|
export type ContentPillarId = string;
|
|
|
|
export type AssetSourceType = 'collected' | 'my_assets' | 'ai_generated';
|
|
|
|
export type MusicGenre = 'calm' | 'upbeat' | 'cinematic' | 'corporate' | 'none';
|
|
|
|
export interface MusicTrack {
|
|
id: string;
|
|
name: string;
|
|
genre: MusicGenre;
|
|
duration: string;
|
|
}
|
|
|
|
export type NarrationLanguage = 'ko' | 'en' | 'ja' | 'zh';
|
|
export type NarrationVoice = 'male' | 'female';
|
|
|
|
export interface SoundSettings {
|
|
genre: MusicGenre;
|
|
trackId: string | null;
|
|
narrationEnabled: boolean;
|
|
narrationLanguage: NarrationLanguage;
|
|
narrationVoice: NarrationVoice;
|
|
subtitleEnabled: boolean;
|
|
}
|
|
|
|
export type GenerateOutputType = 'image' | 'video';
|
|
|
|
export interface StudioState {
|
|
channel: StudioChannel | null;
|
|
format: ContentFormat | null;
|
|
pillarId: ContentPillarId | null;
|
|
assetSources: AssetSourceType[];
|
|
sound: SoundSettings;
|
|
outputType: GenerateOutputType;
|
|
}
|
|
|
|
export const DEFAULT_SOUND: SoundSettings = {
|
|
genre: 'calm',
|
|
trackId: null,
|
|
narrationEnabled: false,
|
|
narrationLanguage: 'ko',
|
|
narrationVoice: 'female',
|
|
subtitleEnabled: true,
|
|
};
|
|
|
|
export const CHANNEL_OPTIONS: ChannelFormatOption[] = [
|
|
{
|
|
channel: 'youtube',
|
|
label: 'YouTube',
|
|
icon: 'youtube',
|
|
formats: [
|
|
{ key: 'shorts', label: 'Shorts', aspectRatio: '9:16' },
|
|
{ key: 'long_form', label: 'Long-form', aspectRatio: '16:9' },
|
|
],
|
|
},
|
|
{
|
|
channel: 'instagram',
|
|
label: 'Instagram',
|
|
icon: 'instagram',
|
|
formats: [
|
|
{ key: 'reels', label: 'Reels', aspectRatio: '9:16' },
|
|
{ key: 'carousel', label: 'Carousel', aspectRatio: '1:1' },
|
|
{ key: 'feed_image', label: 'Feed Image', aspectRatio: '1:1' },
|
|
{ key: 'stories', label: 'Stories', aspectRatio: '9:16' },
|
|
],
|
|
},
|
|
{
|
|
channel: 'naver_blog',
|
|
label: 'Naver Blog',
|
|
icon: 'globe',
|
|
formats: [
|
|
{ key: 'seo_post', label: 'SEO Post', aspectRatio: '16:9' },
|
|
{ key: 'faq_post', label: 'FAQ Post', aspectRatio: '16:9' },
|
|
],
|
|
},
|
|
{
|
|
channel: 'tiktok',
|
|
label: 'TikTok',
|
|
icon: 'tiktok',
|
|
formats: [
|
|
{ key: 'short_video', label: 'Short Video', aspectRatio: '9:16' },
|
|
],
|
|
},
|
|
{
|
|
channel: 'facebook',
|
|
label: 'Facebook',
|
|
icon: 'facebook',
|
|
formats: [
|
|
{ key: 'ad_creative', label: 'Ad Creative', aspectRatio: '1:1' },
|
|
{ key: 'retarget_content', label: 'Retarget Content', aspectRatio: '16:9' },
|
|
],
|
|
},
|
|
];
|
|
|
|
export const MUSIC_TRACKS: MusicTrack[] = [
|
|
{ id: 'calm-1', name: 'Gentle Morning', genre: 'calm', duration: '2:30' },
|
|
{ id: 'calm-2', name: 'Soft Healing', genre: 'calm', duration: '3:15' },
|
|
{ id: 'calm-3', name: 'Peaceful Flow', genre: 'calm', duration: '2:45' },
|
|
{ id: 'upbeat-1', name: 'Fresh Start', genre: 'upbeat', duration: '2:20' },
|
|
{ id: 'upbeat-2', name: 'Bright Day', genre: 'upbeat', duration: '2:50' },
|
|
{ id: 'upbeat-3', name: 'Energy Boost', genre: 'upbeat', duration: '3:00' },
|
|
{ id: 'cinematic-1', name: 'Grand Reveal', genre: 'cinematic', duration: '3:30' },
|
|
{ id: 'cinematic-2', name: 'Transformation', genre: 'cinematic', duration: '4:00' },
|
|
{ id: 'cinematic-3', name: 'Before & After', genre: 'cinematic', duration: '2:55' },
|
|
{ id: 'corp-1', name: 'Professional Trust', genre: 'corporate', duration: '2:40' },
|
|
{ id: 'corp-2', name: 'Clean & Modern', genre: 'corporate', duration: '3:10' },
|
|
{ id: 'corp-3', name: 'Confidence', genre: 'corporate', duration: '2:35' },
|
|
];
|