ffmpeg / renderer /core /models.py
Ava2lon's picture
Upload 34 files
9845310 verified
Raw
History Blame Contribute Delete
3.34 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", "CANCEL_REQUESTED", "CANCELLED"]
@dataclass
class Scene:
start: float
duration: float
media: str
caption: str = ""
transition: str = "fade"
background: str = "blur"
layout: str = "fill"
effect: str | None = None
@dataclass
class RenderRequest:
scenes: list[Scene]
template: str = "tiktok_classic"
preset: str | None = None
creative_style: str | None = None
platform: str | None = None
output_name: str = "render.mp4"
voiceover: str | None = None
background_music: str | None = None
music_volume: float = 0.316
music_fade_in: float = 0.0
music_fade_out: float = 0.0
music_loop: bool = True
music_start: float = 0.0
music_ducking: bool = True
voice_volume: float = 1.0
subtitle_format: Literal["srt", "ass"] = "ass"
auto_subtitles: bool = False
subtitle_language: str | None = None
whisper_model_size: str | None = None
preview: bool = False
audio_normalize: bool = False
watermark: str | None = None
watermark_position: str = "bottom-right"
intro: str | None = None
outro: str | None = None
callback_url: str | None = None
export_target: str | None = None
priority: int = 0
scheduled_at: float | None = None
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"
creative_style: str | None = None
platform: str | None = None
output_name: str = "ai_reel.mp4"
background_music: str | None = None
music_volume: float = 0.316
music_fade_in: float = 0.0
music_fade_out: float = 0.0
music_loop: bool = True
music_start: float = 0.0
music_ducking: bool = True
voice_volume: float = 1.0
@dataclass
class RenderResult:
output_path: Path
commands: list[list[str]]
metrics: dict[str, Any]
logs: list[str] = field(default_factory=list)
@dataclass
class TaskResult:
output_path: Path | None = None
commands: list[list[str]] = field(default_factory=list)
metrics: dict[str, Any] = field(default_factory=dict)
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
download_token: str | None = None
callback_url: str | None = None
export_target: str | None = None
export_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)