Full Caroussel

, , , , , ,

Un diaporama plein écran pour photos, vidéos et GIF, qui parcourt seul des dossiers entiers grâce à un moteur de filtres par mots-clés et par arborescence — pensé pour revoir des années d’archives sans jamais toucher une souris.


Vue d’ensemble

Full Caroussel est un lecteur/diaporama Python plein écran pour bibliothèques de médias volumineuses : images, GIF animés et vidéos (audio compris) s’enchaînent automatiquement, avec lecture clavier complète et zéro montage préalable. Le point de départ, c’est un dossier — souvent des années de photos et vidéos de famille ou de voyages, jamais triées — et un moteur de filtres qui permet de cibler exactement ce qu’on veut revoir, par mot-clé ou par sous-dossier, sans déplacer un seul fichier.

Deux interfaces cohabitent : PyQt5 pour les dialogues de configuration au lancement (choix du dossier, types de médias, ordre de tri, durée des slides), puis pygame prend la main pour l’affichage plein écran et toute la boucle d’événements.

Aperçu du projet Full Caroussel — capture d'écran à venir
Capture d’écran générique — sera remplacée par une vraie capture du diaporama en plein écran.

Fonctionnalités

  • Photos, GIF et vidéos mélangés — une même lecture parcourt indifféremment images, GIF animés et vidéos avec leur audio, sans conversion préalable.
  • Scan récursif sécurisé — parcours automatique de toute une arborescence de dossiers, avec protection contre les boucles de liens symboliques.
  • Filtres par mots-clés — un ou plusieurs mots-clés filtrent les fichiers par nom, avec exclusion via le préfixe « – » (ex. « vacances -2020 »).
  • Filtres par arborescence — syntaxe « /dossier » pour cibler une chaîne de sous-dossiers ordonnée, « +/ » pour un croisement non ordonné, « -/ » pour exclure une branche entière, y compris imbriquée.
  • Préchargement en arrière-plan — un thread dédié précharge et redimensionne les images suivantes pendant la lecture, pour des transitions sans à-coup.
  • Lecture vidéo fluide — décodage vidéo dans un thread séparé avec file bornée, seek en cours de lecture, et extraction/lecture audio synchronisée.
  • Transition en fondu — fondu enchaîné optionnel entre les slides, activable à la volée.
  • Contrôle clavier complet — navigation, pause, plein écran, volume, redémarrage, aide intégrée, sans jamais quitter le clavier.

Sous le capot

L’application s’appuie sur deux frameworks UI complémentaires : PyQt5 pour les boîtes de dialogue de configuration au lancement (sélecteur de dossier, types de médias, ordre de tri, durée des slides), puis pygame prend entièrement le relais pour la fenêtre principale, la boucle d’événements et le rendu.

Le chargement est pensé pour rester fluide même sur de grosses bibliothèques : un cache LRU thread-safe conserve les images déjà redimensionnées, un thread démon précharge en arrière-plan les prochaines images via PIL, et un second thread décode les vidéos avec OpenCV dans une file bornée pour limiter la mémoire utilisée. Les GIF animés sont analysés image par image à la demande, avec une recherche en temps logarithmique pour retrouver la bonne frame selon le temps écoulé.

Pour l’audio des vidéos, la piste est extraite via ffmpeg puis rejouée par pygame ; l’arrêt du son est volontairement bloquant (via un sémaphore) pour garantir qu’aucun chevauchement audio ne se produit d’une slide à l’autre.

Le moteur de filtres est la pièce la plus fine du programme : il combine des mots-clés simples, des exclusions globales, et une syntaxe dédiée aux chemins de dossiers (chaîne ordonnée, croisement non ordonné, exclusion imbriquée) pour retrouver précisément un sous-ensemble de médias dans une arborescence qui peut compter des dizaines de milliers de fichiers.


Contrôles

ToucheAction
→ / ↓ / NSlide suivante
← / ↑ / PSlide précédente
EspacePause / reprise du diaporama
FBascule plein écran
TActive / désactive le fondu enchaîné
MCoupe / rétablit le son
+ / –Volume
RRedémarre la slide en cours
H / F1Aide
Échap / QQuitte le programme

Stack technique

  • Python 3.11
  • Pygame — fenêtre plein écran, boucle d’événements et rendu
  • PyQt5 — dialogues de configuration au lancement
  • OpenCV — décodage et lecture des vidéos
  • Pillow (PIL) — préchargement et redimensionnement des images
  • NumPy — manipulation des images et des ratios d’affichage
  • ffmpeg — extraction de l’audio des vidéos

Cas d’usage

Revoir des années d’archives photo/vidéo familiales sans les trier au préalable, animer un mur d’images en fond d’événement, ou simplement parcourir un gros dossier de médias hétérogènes (photos, GIF, vidéos) au clavier, en ciblant précisément un lieu, une date ou une personne grâce aux filtres par mots-clés et par dossier.

Un dossier, un mot-clé, et des années de souvenirs défilent en plein écran — sans jamais toucher une souris.

Détails


Client

Projet personnel

Live


Projet précédent

Projet suivant

Autres projets