ymcnabb's picture
Upload folder using huggingface_hub
1824ea0 verified
"""Application configuration loaded from .env with defaults."""
from __future__ import annotations
import os
from dataclasses import dataclass, field
from pathlib import Path
from dotenv import load_dotenv
def _load_env() -> None:
"""Load .env from project root (or CWD) if it exists."""
for candidate in (Path(__file__).resolve().parents[2], Path.cwd()):
env_path = candidate / ".env"
if env_path.is_file():
load_dotenv(env_path)
return
load_dotenv()
_load_env()
@dataclass(frozen=True)
class Settings:
"""Immutable application settings."""
output_dir: str = field(
default_factory=lambda: os.getenv("STEMSPLITTER_OUTPUT_DIR", "./output")
)
model_file_dir: str = field(
default_factory=lambda: os.getenv(
"STEMSPLITTER_MODEL_DIR", "/tmp/audio-separator-models/"
)
)
default_2stem_model: str = field(
default_factory=lambda: os.getenv(
"STEMSPLITTER_2STEM_MODEL",
"model_mel_band_roformer_ep_3005_sdr_11.4360.ckpt",
)
)
default_4stem_model: str = field(
default_factory=lambda: os.getenv(
"STEMSPLITTER_4STEM_MODEL", "htdemucs_ft.yaml"
)
)
output_format: str = field(
default_factory=lambda: os.getenv("STEMSPLITTER_OUTPUT_FORMAT", "WAV")
)
output_bitrate: str = field(
default_factory=lambda: os.getenv("STEMSPLITTER_OUTPUT_BITRATE", "320k")
)
sample_rate: int = field(
default_factory=lambda: int(os.getenv("STEMSPLITTER_SAMPLE_RATE", "44100"))
)
normalization: float = field(
default_factory=lambda: float(
os.getenv("STEMSPLITTER_NORMALIZATION", "0.9")
)
)
log_level: str = field(
default_factory=lambda: os.getenv("STEMSPLITTER_LOG_LEVEL", "WARNING")
)
web_host: str = field(
default_factory=lambda: os.getenv("STEMSPLITTER_WEB_HOST", "127.0.0.1")
)
web_port: int = field(
default_factory=lambda: int(os.getenv("STEMSPLITTER_WEB_PORT", "7860"))
)
def get_settings() -> Settings:
"""Return a fresh Settings instance (re-reads env vars)."""
return Settings()