feat: 타임라인 에디터 및 비디오 스튜디오 컴포넌트 추가
- TimelineEditor, VideoStudio 컴포넌트 신규 추가 - 백엔드 transcriber, video_processor 서비스 개선 - 프론트엔드 HomePage 리팩토링 및 스타일 업데이트 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -32,18 +32,20 @@ class DownloadResponse(BaseModel):
|
||||
|
||||
|
||||
class SubtitleStyle(BaseModel):
|
||||
font_size: int = 28
|
||||
font_color: str = "white"
|
||||
outline_color: str = "black"
|
||||
outline_width: int = 2
|
||||
position: str = "bottom" # top, center, bottom
|
||||
font_size: int = 70
|
||||
font_color: str = "FFFFFF" # hex color code (white)
|
||||
outline_color: str = "000000" # hex color code (black)
|
||||
outline_width: int = 4 # 아웃라인 두께 (가독성을 위해 4로 증가)
|
||||
position: str = "center" # top, center, bottom
|
||||
margin_v: int = 50 # 수직 위치 (0=가장자리, 100=화면 중심쪽) - 화면 높이의 %
|
||||
font_name: str = "Pretendard"
|
||||
# Enhanced styling options
|
||||
bold: bool = True # 굵은 글씨 (가독성 향상)
|
||||
shadow: int = 1 # 그림자 깊이 (0=없음, 1-4)
|
||||
background_box: bool = True # 불투명 배경 박스로 원본 자막 덮기
|
||||
background_opacity: str = "E0" # 배경 불투명도 (00=투명, FF=완전불투명, E0=권장)
|
||||
animation: str = "none" # none, fade, pop (자막 애니메이션)
|
||||
shadow: int = 2 # 그림자 깊이 (0=없음, 1-4)
|
||||
background_box: bool = False # False=아웃라인 스타일 (깔끔함), True=배경 박스
|
||||
background_opacity: str = "80" # 배경 불투명도 (00=투명, FF=완전불투명, 80=반투명)
|
||||
animation: str = "fade" # none, fade, pop (자막 애니메이션)
|
||||
max_chars_per_line: int = 0 # 줄당 최대 글자 수 (0=비활성화, 15~20 권장)
|
||||
|
||||
|
||||
class TranslationModeEnum(str, Enum):
|
||||
@@ -68,11 +70,18 @@ class ProcessResponse(BaseModel):
|
||||
message: str
|
||||
|
||||
|
||||
class ExcludeRegion(BaseModel):
|
||||
"""A region to exclude (cut out) from the video."""
|
||||
start: float # Start time in seconds
|
||||
end: float # End time in seconds
|
||||
|
||||
|
||||
class TrimRequest(BaseModel):
|
||||
"""Request to trim a video to a specific time range."""
|
||||
start_time: float # Start time in seconds
|
||||
end_time: float # End time in seconds
|
||||
reprocess: bool = False # Whether to automatically reprocess after trimming (default: False for manual workflow)
|
||||
exclude_regions: List[ExcludeRegion] = [] # Regions to cut out from the middle of the video
|
||||
|
||||
|
||||
class TranscribeRequest(BaseModel):
|
||||
@@ -91,6 +100,7 @@ class RenderRequest(BaseModel):
|
||||
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
|
||||
intro_position: str = "center" # top, center, bottom
|
||||
|
||||
|
||||
class TrimResponse(BaseModel):
|
||||
|
||||
Reference in New Issue
Block a user