Prismai / activity_web /backend /startup.py
Satyam S
PRISM AI — with demo attendance button
af32e72
Raw
History Blame Contribute Delete
2.68 kB
from __future__ import annotations
import os
import shutil
from pathlib import Path
from typing import Iterable
def get_ffmpeg_path() -> str | None:
"""Return an ffmpeg executable path if available, including imageio-ffmpeg fallback."""
ffmpeg = shutil.which("ffmpeg")
if ffmpeg:
return ffmpeg
try:
from imageio_ffmpeg import get_ffmpeg_exe
ffmpeg = get_ffmpeg_exe()
if ffmpeg and Path(ffmpeg).exists():
return ffmpeg
except Exception:
pass
return None
def ensure_insightface_models_flat(model_names: Iterable[str] | None = None) -> None:
"""Ensure InsightFace model directories are not nested (model/model/*).
If a model folder was extracted into a nested directory like
~/.insightface/models/antelopev2/antelopev2/* this moves the inner
contents up one level so InsightFace can find them.
"""
home = Path.home()
base = home / ".insightface" / "models"
if model_names is None:
model_names = [p.name for p in base.iterdir() if p.is_dir()] if base.exists() else []
for name in model_names:
model_dir = base / name
nested = model_dir / name
try:
if nested.exists() and nested.is_dir():
print(f"[startup] fixing nested insightface model folder: {nested}")
for item in nested.iterdir():
target = model_dir / item.name
# if target exists, overwrite by moving with replace
if target.exists():
if target.is_dir():
shutil.rmtree(target)
else:
target.unlink()
shutil.move(str(item), str(model_dir))
# remove now-empty nested dir
try:
nested.rmdir()
except Exception:
pass
except Exception as exc:
print(f"[startup] warning: failed to flatten model folder {nested}: {exc}")
def check_ffmpeg_available() -> bool:
"""Return True if ffmpeg is available via PATH or imageio-ffmpeg."""
ffmpeg = get_ffmpeg_path()
if ffmpeg:
return True
print("[startup] warning: ffmpeg not found on PATH. Clips may be encoded with a codec\n"
"that some browsers cannot play. To ensure in-browser playback, install ffmpeg:\n"
" - Windows: install via Chocolatey `choco install ffmpeg` or download from https://ffmpeg.org/download.html\n"
" - macOS: `brew install ffmpeg`\n"
" - Linux: use your distro package manager (apt/yum/pacman)\n")
return False