60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
"""Typed config for brainrotinator.
|
|
|
|
Replaces the old `global` block in main.py and the dict access scattered
|
|
across the codebase. Loaded from `config.json` at the project root.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
CONFIG_PATH = Path(__file__).resolve().parent / "config.json"
|
|
|
|
|
|
class Config(BaseModel):
|
|
# Upload metadata
|
|
tags: list[str] = Field(default_factory=list)
|
|
description: str = "#shorts"
|
|
|
|
# Upload scheduling
|
|
howManyUploads: int = 1
|
|
howManyHoursBetweenSchedule: int = 0
|
|
howManyMinsBetweenUpload: int = 5
|
|
howManyHoursLongToSleep: int = 23
|
|
sleepXMinsBeforeStartingUploader: int = 0
|
|
|
|
# Editing
|
|
chunkDuration: int = 58
|
|
blurTopBottomOfClip: bool = True
|
|
useWhisperForTranscription: bool = False
|
|
filterProfanityInSubtitles: bool = False
|
|
|
|
# Subtitles
|
|
subtitleFontSize: int = 100
|
|
subtitleMarginV: int = 480
|
|
|
|
# Upload targets
|
|
uploadToYoutube: bool = True
|
|
uploadToInstagram: bool = True
|
|
uploadToTiktok: bool = False
|
|
|
|
# Selenium
|
|
firefoxHeadless: bool = True
|
|
|
|
# Model dirs (empty = use cwd)
|
|
voskModelDir: str = "models"
|
|
tinyLlamaDir: str = "models"
|
|
|
|
@classmethod
|
|
def load(cls, path: Path | str = CONFIG_PATH) -> "Config":
|
|
with open(path) as f:
|
|
return cls.model_validate(json.load(f))
|
|
|
|
def save(self, path: Path | str = CONFIG_PATH) -> None:
|
|
with open(path, "w") as f:
|
|
json.dump(self.model_dump(), f, indent=4)
|