ffmpeg / renderer /core /config.py
Ava2lon's picture
Upload 38 files
fe7106b verified
Raw
History Blame Contribute Delete
2.59 kB
from __future__ import annotations
import os
from dataclasses import dataclass
from pathlib import Path
DEFAULT_ROOT = Path.cwd()
@dataclass(frozen=True)
class Settings:
"""Runtime settings tuned for small CPU-only Hugging Face Spaces."""
base_dir: Path = Path(os.getenv("AVA2LON_BASE_DIR", os.getenv("BASYX_BASE_DIR", str(DEFAULT_ROOT))))
temp_dir: Path = Path(os.getenv("TEMP_DIR", str(DEFAULT_ROOT / "temp")))
exports_dir: Path = Path(os.getenv("EXPORTS_DIR", str(DEFAULT_ROOT / "exports")))
jobs_dir: Path = Path(os.getenv("JOBS_DIR", str(DEFAULT_ROOT / "jobs")))
storage_dir: Path = Path(os.getenv("STORAGE_DIR", str(DEFAULT_ROOT / "storage")))
metadata_cache: Path = Path(os.getenv("METADATA_CACHE", str(DEFAULT_ROOT / "temp" / "metadata_cache.json")))
signing_secret: str = os.getenv("AVA2LON_SIGNING_SECRET", os.getenv("BASYX_SIGNING_SECRET", "dev-secret-change-me"))
api_key: str = os.getenv("AVA2LON_API_KEY", os.getenv("BASYX_API_KEY", ""))
font_path: Path = Path(os.getenv("FONT_PATH", "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"))
output_width: int = int(os.getenv("OUTPUT_WIDTH", "1080"))
output_height: int = int(os.getenv("OUTPUT_HEIGHT", "1920"))
output_fps: int = int(os.getenv("OUTPUT_FPS", "30"))
ffmpeg_timeout_seconds: int = int(os.getenv("FFMPEG_TIMEOUT_SECONDS", "900"))
download_timeout_seconds: int = int(os.getenv("DOWNLOAD_TIMEOUT_SECONDS", "60"))
max_download_bytes: int = int(os.getenv("MAX_DOWNLOAD_BYTES", str(500 * 1024 * 1024)))
allow_private_asset_urls: bool = os.getenv("ALLOW_PRIVATE_ASSET_URLS", "false").lower() == "true"
whisper_model_size: str = os.getenv("WHISPER_MODEL_SIZE", "tiny")
whisper_compute_type: str = os.getenv("WHISPER_COMPUTE_TYPE", "int8")
whisper_device: str = os.getenv("WHISPER_DEVICE", "cpu")
whisper_model_dir: Path = Path(os.getenv("WHISPER_MODEL_DIR", str(DEFAULT_ROOT / "models")))
max_retries: int = int(os.getenv("MAX_RETRIES", "3"))
max_workers: int = int(os.getenv("MAX_RENDER_WORKERS", "1"))
job_retention_seconds: int = int(os.getenv("JOB_RETENTION_SECONDS", str(24 * 3600)))
crf: int = int(os.getenv("OUTPUT_CRF", "23"))
preset: str = os.getenv("OUTPUT_PRESET", "veryfast")
def ensure_dirs(self) -> None:
for directory in (
self.temp_dir,
self.exports_dir,
self.jobs_dir,
self.storage_dir,
self.metadata_cache.parent,
self.whisper_model_dir,
):
directory.mkdir(parents=True, exist_ok=True)