feat: implement vertical crop, local LLM deepseek-v4-flash, multi-threading, word-level pink box highlight subtitles, and Nextcloud scan sync
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import os
|
||||
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
MUAPI_API_KEY = os.getenv("MUAPI_API_KEY", "").strip()
|
||||
MUAPI_BASE_URL = os.getenv("MUAPI_BASE_URL", "https://api.muapi.ai/api/v1").rstrip("/")
|
||||
|
||||
POLL_INTERVAL_SECONDS = float(os.getenv("MUAPI_POLL_INTERVAL", "5"))
|
||||
POLL_TIMEOUT_SECONDS = float(os.getenv("MUAPI_POLL_TIMEOUT", "600"))
|
||||
|
||||
# Local-mode (--mode local) settings — only consulted when running offline.
|
||||
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "").strip()
|
||||
OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4o-mini")
|
||||
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY", "").strip()
|
||||
GEMINI_MODEL = os.getenv("GEMINI_MODEL", "gemini-2.5-flash")
|
||||
LLM_PROVIDER = os.getenv("LLM_PROVIDER", "openai").strip().lower()
|
||||
LOCAL_WHISPER_MODEL = os.getenv("LOCAL_WHISPER_MODEL", "base")
|
||||
LOCAL_WHISPER_DEVICE = os.getenv("LOCAL_WHISPER_DEVICE", "auto") # auto / cpu / cuda
|
||||
LOCAL_OUTPUT_DIR = os.getenv("LOCAL_OUTPUT_DIR", "output")
|
||||
|
||||
# VAD (Voice Activity Detection) settings for faster-whisper
|
||||
# Default threshold is 0.5; lower = more sensitive, higher = less sensitive
|
||||
# Default min_speech_duration_ms is 250ms; increase to avoid tiny false positives
|
||||
# Default min_silence_duration_ms is 2000ms; increase to avoid splitting mid-sentence
|
||||
# DISABLED by default because VAD is too aggressive on mixed speech/music content
|
||||
LOCAL_WHISPER_VAD_FILTER = os.getenv("LOCAL_WHISPER_VAD_FILTER", "false").strip().lower() == "true"
|
||||
_vad_params_env = os.getenv("LOCAL_WHISPER_VAD_PARAMETERS", "")
|
||||
if _vad_params_env:
|
||||
import json
|
||||
LOCAL_WHISPER_VAD_PARAMETERS = json.loads(_vad_params_env)
|
||||
else:
|
||||
# Match faster-whisper defaults when VAD is enabled
|
||||
LOCAL_WHISPER_VAD_PARAMETERS = {
|
||||
"threshold": 0.5,
|
||||
"min_speech_duration_ms": 250,
|
||||
"max_speech_duration_s": float("inf"),
|
||||
"min_silence_duration_ms": 2000,
|
||||
"speech_pad_ms": 400,
|
||||
}
|
||||
|
||||
|
||||
def require_api_key() -> str:
|
||||
if not MUAPI_API_KEY:
|
||||
raise RuntimeError(
|
||||
"MUAPI_API_KEY is not set. Add it to your .env file or export it as an env var."
|
||||
)
|
||||
return MUAPI_API_KEY
|
||||
|
||||
|
||||
def require_openai_key() -> str:
|
||||
if not OPENAI_API_KEY:
|
||||
raise RuntimeError(
|
||||
"OPENAI_API_KEY is not set. Local mode needs an OpenAI key for highlight ranking. "
|
||||
"Add it to your .env or export it, or switch back to --mode api."
|
||||
)
|
||||
return OPENAI_API_KEY
|
||||
|
||||
|
||||
def require_gemini_key() -> str:
|
||||
if not GEMINI_API_KEY:
|
||||
raise RuntimeError(
|
||||
"GEMINI_API_KEY is not set. Local mode needs a Gemini key when LLM_PROVIDER=gemini. "
|
||||
"Add it to your .env or export it, or switch LLM_PROVIDER back to openai."
|
||||
)
|
||||
return GEMINI_API_KEY
|
||||
Reference in New Issue
Block a user