from pydantic import BaseModel, Field class ProjectCreate(BaseModel): name: str = Field(default="Default") segments_count: int = Field(ge=1) intro_seconds: float = Field(ge=0) outro_seconds: float = Field(ge=0) reencode_enabled: bool = False ffmpeg_pass1_template: str | None = None ffmpeg_pass2_template: str | None = None class ProjectUpdate(BaseModel): name: str | None = None segments_count: int | None = Field(default=None, ge=1) intro_seconds: float | None = Field(default=None, ge=0) outro_seconds: float | None = Field(default=None, ge=0) reencode_enabled: bool | None = None ffmpeg_pass1_template: str | None = None ffmpeg_pass2_template: str | None = None class ProjectOut(BaseModel): id: str name: str segments_count: int intro_seconds: float outro_seconds: float reencode_enabled: bool ffmpeg_pass1_template: str | None = None ffmpeg_pass2_template: str | None = None created_at: str updated_at: str class VideoOut(BaseModel): id: str project_id: str filename: str file_path: str duration_seconds: float created_at: str class MarkersUpdate(BaseModel): markers: list[float] class SegmentEdit(BaseModel): segment_key: str start_seconds: float = Field(ge=0) end_seconds: float = Field(ge=0) class SegmentEditsUpdate(BaseModel): segments: list[SegmentEdit] class SegmentEditOut(SegmentEdit): modified_at: str class AutoCutRequest(BaseModel): window_seconds: float | None = None class SplitRequest(BaseModel): markers: list[float] | None = None output_prefix: str | None = None class SplitAllRequest(BaseModel): video_ids: list[str] | None = None class JobOut(BaseModel): id: str kind: str status: str progress: float message: str | None = None details: dict | None = None logs: list[dict] = Field(default_factory=list) result: dict | None = None created_at: str updated_at: str