ffmpeg / renderer /core /models.py
Ava2lon's picture
Upload 25 files
3e3d7b1 verified
Raw
History Blame
1.83 kB
from __future__ import annotations
from dataclasses import dataclass, field
from pathlib import Path
from typing import Any, Literal
JobState = Literal["PENDING", "RUNNING", "FAILED", "COMPLETED"]
@dataclass
class Scene:
start: float
duration: float
media: str
caption: str = ""
transition: str = "fade"
background: str = "blur"
@dataclass
class RenderRequest:
scenes: list[Scene]
template: str = "tiktok_classic"
output_name: str = "render.mp4"
voiceover: str | None = None
background_music: str | None = None
subtitle_format: Literal["srt", "ass"] = "ass"
normalize: bool = True
metadata: dict[str, Any] = field(default_factory=dict)
@dataclass
class AIReelsRequest:
script: str
voiceover: str
assets: list[str]
template: str = "tiktok_classic"
output_name: str = "ai_reel.mp4"
background_music: str | None = None
@dataclass
class RenderResult:
output_path: Path
commands: list[list[str]]
metrics: dict[str, Any]
logs: list[str] = field(default_factory=list)
@dataclass
class AssetMetadata:
path: str
mime_type: str
size_bytes: int
mtime: float
duration: float = 0.0
width: int | None = None
height: int | None = None
fps: float | None = None
bitrate: int | None = None
video_codec: str | None = None
audio_codec: str | None = None
has_audio: bool = False
streams: list[dict[str, Any]] = field(default_factory=list)
@dataclass
class JobRecord:
job_id: str
state: JobState
created_at: float
updated_at: float
output_path: str | None = None
failure_reason: str | None = None
commands: list[list[str]] = field(default_factory=list)
logs: list[str] = field(default_factory=list)
metrics: dict[str, Any] = field(default_factory=dict)