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