diff --git a/backend/app/models/schemas.py b/backend/app/models/schemas.py index da5f9aa..46597b7 100644 --- a/backend/app/models/schemas.py +++ b/backend/app/models/schemas.py @@ -88,7 +88,7 @@ class RenderRequest(BaseModel): subtitle_style: Optional[SubtitleStyle] = None keep_original_audio: bool = False # Intro text overlay (shown at beginning of video for YouTube Shorts thumbnail) - intro_text: Optional[str] = None # Max 10 characters recommended + intro_text: Optional[str] = None # Max 20 characters recommended intro_duration: float = 0.7 # Duration of frozen frame with intro text (seconds) intro_font_size: int = 100 # Font size diff --git a/frontend/src/components/VideoPreview.jsx b/frontend/src/components/VideoPreview.jsx index d4601f6..8377cd4 100644 --- a/frontend/src/components/VideoPreview.jsx +++ b/frontend/src/components/VideoPreview.jsx @@ -3,6 +3,9 @@ import { Download, FileText, Film } from 'lucide-react'; import { jobsApi } from '../api/client'; export default function VideoPreview({ videoUrl, jobId }) { + // Generate cache-busting timestamp + const cacheBuster = `?t=${Date.now()}`; + return (

@@ -17,6 +20,7 @@ export default function VideoPreview({ videoUrl, jobId }) { controls className="w-full h-full object-contain" poster="" + key={videoUrl} > 브라우저가 비디오를 지원하지 않습니다. diff --git a/frontend/src/pages/HomePage.jsx b/frontend/src/pages/HomePage.jsx index 9bdbfb3..32377c1 100644 --- a/frontend/src/pages/HomePage.jsx +++ b/frontend/src/pages/HomePage.jsx @@ -498,8 +498,8 @@ export default function HomePage() { try { const res = await thumbnailApi.generateCatchphrase(currentJob.job_id, 'homeshopping'); if (res.data.catchphrase) { - // 최대 10자 제한 - const text = res.data.catchphrase.slice(0, 10); + // 최대 20자 제한 + const text = res.data.catchphrase.slice(0, 20); setIntroText(text); } } catch (err) { @@ -575,7 +575,7 @@ export default function HomePage() { 완성된 영상

@@ -905,13 +905,13 @@ export default function HomePage() { setIntroText(e.target.value.slice(0, 10))} - placeholder="최대 10자 입력..." - maxLength={10} + onChange={(e) => setIntroText(e.target.value.slice(0, 20))} + placeholder="최대 20자 입력..." + maxLength={20} className="w-full p-3 bg-gray-800 border border-gray-700 rounded-lg text-white text-lg focus:outline-none focus:border-pink-500" /> - {introText.length}/10 + {introText.length}/20