8x32 PI : vitesse de lecture, QR code et affiche, sens de l'image sur la vitrine

- Vitesse de lecture : réglage VITESSE du lecteur et menu « Vitesse » sur la
  page web (×0,25 à ×2, gardé dans .vitesse.txt du dossier des animations).
- QR code d'accès à la page web et affiche A5 (outils/generer_qrcode.py →
  qrcode/) : une coulée inspirée de « cascade » en haut, une partie de
  « tetris » en bas, couleurs tirées des animations de l'équipe
  (qrcode/sources/), titre en pixels de couleur.
- Matrice de la vitrine : image retournée d'un demi-tour (INVERSER_X et
  INVERSER_Y) et nouveau réglage DECALAGE_X / DECALAGE_Y (ici 1 pixel vers
  la droite).
- Doc : README, INTERFACE_WEB.md et CLAUDE.md à jour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bach
2026-10-09 16:04:13 +02:00
co-authored by Claude Opus 5.5
parent 156f9ce438
commit 5b0e858abe
135 changed files with 434 additions and 11 deletions
+15
View File
@@ -350,6 +350,9 @@ def accueil():
actives=[fiche(n) for n in actives()],
desactivees=[fiche(n, DESACTIVEES) for n in desactivees()],
en_cours=lire_en_cours(),
vitesse=lecteur.lire_vitesse_de_lecture(DOSSIER),
vitesses=[(0.25, "×0,25 (très lent)"), (0.5, "×0,5 (lent)"), (0.75, "×0,75"),
(1.0, "×1 (normal)"), (1.5, "×1,5"), (2.0, "×2 (rapide)")],
nb_corbeille=nb_corbeille,
dossier=DOSSIER,
adresses=adresses_du_pi(),
@@ -507,6 +510,18 @@ def action():
ranger_dans(CORBEILLE, nom, depuis=os.path.join(DOSSIER, DESACTIVEES))
flash(f"« {nom} » est dans la corbeille.", "ok")
elif quoi == "vitesse":
try:
vitesse = float(request.form.get("vitesse", "1"))
assert 0.1 <= vitesse <= 4
except (ValueError, AssertionError):
abort(400)
# Un petit fichier caché dans le dossier des animations : il est lu par
# le lecteur au début de chaque animation, et survit aux redémarrages.
with open(os.path.join(DOSSIER, ".vitesse.txt"), "w") as f:
f.write(f"{vitesse:g}\n")
flash(f"Vitesse de lecture : ×{vitesse:g} (à partir de la prochaine animation).", "ok")
elif quoi == "vider_corbeille":
shutil.rmtree(os.path.join(DOSSIER, CORBEILLE), ignore_errors=True)
flash("Corbeille vidée.", "ok")