multi-stage Dockerfile + player recap styles

Dockerfile: split into whisperx-base and runtime stages so app-only
changes skip the 10min pip install on rebuild. Example compose updated.

Player recap: replace hardcoded 'story so far' prompt with selectable
styles (story/diary/bullets/custom) via dropdown in Setup and Settings.

Settings: add NAT20_ONBOARDING_COMPLETED env var; fix merge logic so
env vars properly override defaults (not just empty DB values).
This commit is contained in:
KansaiGaijin
2026-07-10 16:25:52 +12:00
parent a261301638
commit babc0f58ef
9 changed files with 122 additions and 21 deletions

View File

@@ -13,6 +13,7 @@ router = APIRouter(prefix="/api/settings", tags=["settings"])
# Env var overrides — set these in docker-compose.yml to prefill the setup wizard
_ENV_OVERRIDES = {
"onboarding_completed": "NAT20_ONBOARDING_COMPLETED",
"hf_token": "NAT20_HF_TOKEN",
"whisper_model": "NAT20_WHISPER_MODEL",
"whisper_compute_type": "NAT20_WHISPER_COMPUTE_TYPE",
@@ -36,13 +37,16 @@ def _coerce(key: str, value: str):
def _merge_with_env(raw: dict) -> dict:
"""DB values win, env vars fill gaps, DEFAULT_SETTINGS fill remaining gaps."""
merged = {**config.DEFAULT_SETTINGS, **raw}
"""Priority: explicit user DB saves (non-default) > env vars > DEFAULT_SETTINGS."""
merged = {**config.DEFAULT_SETTINGS}
for key, env_name in _ENV_OVERRIDES.items():
if not raw.get(key, "").strip():
val = os.environ.get(env_name)
if val is not None:
merged[key] = val
val = os.environ.get(env_name)
if val is not None:
merged[key] = val
for key, val in raw.items():
db_val = val.strip()
if db_val and db_val != config.DEFAULT_SETTINGS.get(key, ""):
merged[key] = db_val
return merged