import os # "image"/"audio"/"video"/"other" d'après l'EXTENSION du fichier (voir # _user_assets.filename, auth/save_user_asset.py) — pas de colonne dédiée # en base : l'extension suffit, jamais ambiguë ici (tout upload passe par # routes/assets/upload_user_asset.py, qui valide déjà le contenu pour un # son, voir MAX_AUDIO_SECONDS). Utilisé pour organiser "Mes assets" en # sous-sections (demande explicite : "voir, utiliser ou supprimer des # son, image et vidéo", voir templates/scene_edit.html) — le sélecteur de # fichier des actions "son"/"vidéo" (user_assets_options_json, # routes/scenes/scene_edit_view.py), lui, liste TOUT sans distinction. _IMAGE_EXTENSIONS = {".png", ".jpg", ".jpeg", ".gif", ".webp", ".svg", ".bmp"} _AUDIO_EXTENSIONS = {".mp3", ".wav", ".ogg", ".m4a", ".aac", ".flac"} _VIDEO_EXTENSIONS = {".mp4", ".webm", ".mov", ".avi", ".ogv"} def user_asset_kind(filename: str) -> str: ext = os.path.splitext(filename)[1].lower() if ext in _IMAGE_EXTENSIONS: return "image" if ext in _AUDIO_EXTENSIONS: return "audio" if ext in _VIDEO_EXTENSIONS: return "video" return "other"