from pydantic_settings import BaseSettings from pathlib import Path class Settings(BaseSettings): # 基础路径配置 BASE_DIR: Path = Path(__file__).resolve().parent.parent UPLOAD_DIR: Path = BASE_DIR.parent / "uploads" OUTPUT_DIR: Path = BASE_DIR.parent / "outputs" ASSETS_DIR: Path = BASE_DIR.parent / "assets" PUBLISH_SCREENSHOT_DIR: Path = BASE_DIR.parent / "private_outputs" / "publish_screenshots" # 数据库/缓存 REDIS_URL: str = "redis://localhost:6379/0" DEBUG: bool = True # Playwright 配置 WEIXIN_HEADLESS_MODE: str = "headless-new" WEIXIN_USER_AGENT: str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" WEIXIN_LOCALE: str = "zh-CN" WEIXIN_TIMEZONE_ID: str = "Asia/Shanghai" WEIXIN_CHROME_PATH: str = "/usr/bin/google-chrome" WEIXIN_BROWSER_CHANNEL: str = "" WEIXIN_FORCE_SWIFTSHADER: bool = True WEIXIN_TRANSCODE_MODE: str = "reencode" WEIXIN_DEBUG_ARTIFACTS: bool = False WEIXIN_RECORD_VIDEO: bool = False WEIXIN_KEEP_SUCCESS_VIDEO: bool = False WEIXIN_RECORD_VIDEO_WIDTH: int = 1280 WEIXIN_RECORD_VIDEO_HEIGHT: int = 720 # Douyin Playwright 配置 DOUYIN_HEADLESS_MODE: str = "headless-new" DOUYIN_USER_AGENT: str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36" DOUYIN_LOCALE: str = "zh-CN" DOUYIN_TIMEZONE_ID: str = "Asia/Shanghai" DOUYIN_CHROME_PATH: str = "/usr/bin/google-chrome" DOUYIN_BROWSER_CHANNEL: str = "" DOUYIN_FORCE_SWIFTSHADER: bool = True # Douyin 调试录屏 DOUYIN_DEBUG_ARTIFACTS: bool = False DOUYIN_RECORD_VIDEO: bool = False DOUYIN_KEEP_SUCCESS_VIDEO: bool = False DOUYIN_RECORD_VIDEO_WIDTH: int = 1280 DOUYIN_RECORD_VIDEO_HEIGHT: int = 720 # TTS 配置 DEFAULT_TTS_VOICE: str = "zh-CN-YunxiNeural" MAX_UPLOAD_SIZE_MB: int = 500 # LatentSync 配置 LATENTSYNC_GPU_ID: int = 1 # GPU ID (默认使用 GPU1) LATENTSYNC_LOCAL: bool = True # 使用本地推理 (False 则使用远程 API) LATENTSYNC_API_URL: str = "http://localhost:8007" # 远程 API 地址 LATENTSYNC_INFERENCE_STEPS: int = 20 # 推理步数 [20-50] LATENTSYNC_GUIDANCE_SCALE: float = 1.5 # 引导系数 [1.0-3.0] LATENTSYNC_ENABLE_DEEPCACHE: bool = True # 启用 DeepCache 加速 LATENTSYNC_SEED: int = 1247 # 随机种子 (-1 则随机) LATENTSYNC_USE_SERVER: bool = True # 使用常驻服务 (Persistent Server) 加速 # Supabase 配置 SUPABASE_URL: str = "" SUPABASE_PUBLIC_URL: str = "" # 公网访问地址,用于生成前端可访问的 URL SUPABASE_KEY: str = "" # JWT 配置 JWT_SECRET_KEY: str = "your-secret-key-change-in-production" JWT_ALGORITHM: str = "HS256" JWT_EXPIRE_HOURS: int = 24 # 管理员配置 ADMIN_PHONE: str = "" ADMIN_PASSWORD: str = "" # GLM AI 配置 GLM_API_KEY: str = "" GLM_MODEL: str = "glm-4.7-flash" # CORS 配置 (逗号分隔的域名列表,* 表示允许所有) CORS_ORIGINS: str = "*" # 抖音 Cookie (用于视频下载功能,会过期需要定期更新) DOUYIN_COOKIE: str = "" @property def LATENTSYNC_DIR(self) -> Path: """LatentSync 目录路径 (动态计算)""" return self.BASE_DIR.parent.parent / "models" / "LatentSync" class Config: env_file = ".env" extra = "ignore" # 忽略未知的环境变量 settings = Settings()