Démothèque en ligne !

Bon, on sait, c’est déjà là façon puzzle du côté de youtube…

Cela fait une douzaine d’années qu’on glane ça et là les bonnes vidéos de démos produites par la Demoscene. Les puristes préféreront les exécutables/archives et les machines correspondantes pour les visionner en conditions réelles. Il est cependant plus confortable d’utiliser les vidéos, plus exactement les captures en vidéo, de ces démos. Chaque été et automne, une campagne de collecte internet est faite, en espérant trouver les formats en bonne qualité. Et quelques jours avant l’Alchimie ou la microAlchimie, une playlist est faite sous VLC sur la collection en cours. Diffusion en journée vers l’écran principal de la salle pour donner une ambiance sonore et visuelle. Cela permet de préparer le travail à l’avance et de bosser ailleurs qu’à la régie pendant nos modestes events.

Du coup, l’état de notre démothèque au fil des années est assez conséquent. « Son » état de l’art date de l’automne 2020 et il continuera d’évoluer tant que la « Scene is not dead ». Attention, la collection n’est pas exhaustive. Sont privilégiées les démos agréables à l’oeil et à l’esgourde, en tentant compte de la pluralité des scenes (PC, Amiga, Atari, etc).
Vu la période un peu creuse en présentiel et l’évolution de nos serveurs, on a eu un peu de temps pour bâtir une instance pireteub PeerTube et proposer la visualisation des démos à domicile. Chez vous : Canapé sur Scene, sans flicage, sans profilage, sans publicité intempestive.
On l’a déjà dit maintes fois, si vous désirez une copie de notre démothèque, viendez à l’Alchimie avec un disque (formaté macOS ou à défaut FAT32, mais pas NTFS).

C’est là : https://video.triplea.fr

Cherchez avec les noms des groupes, des démos (si vous les connaissez). Vous pouvez aussi vous aider des tags-étiquettes qu’on a placé : PC, Amiga, Atari TOS, Antiques, C64, Oric, Wild…
Pour des raisons de place et de CPU consommés, et d’écran de projection un peu cheap, on avait priviligié jusqu’à récemment le format 720p. Depuis peu, avec l’évolution de notre matériel en régie, certaines vidéos sont en 1080p. Mais quelques oeuvres, collectées il y a longtemps peuvent être encore en basse qualité. Merci alors de nous la signaler si elle existe en version meilleure qualité ailleurs.

Côté serveur

Debian 10 tournant en machine virtuelle (VM), 4 coeurs et 16 Go RAM, HDD 2 To dédié. Sous VirtualBox/macOS Catalina. L’hôte est un mac mini 2018 i5 hexacoeur avec 64 Go RAM, qui héberge aussi d’autres VMs.

Attention, prévoir de la place disque. Du fait du réencodage en HLS (plus pratique et plus peerable) et en plusieurs exemples de qualité plus faible, ça va douiller niveau stockage. Notre démothèque native fait environ 180 Go pour 3400 fichiers MP4. Le disque de la VM a une taille actuelle, après import-intégration des vidéos, d’environ 700 Go. Sachant qu’on a pas uploadé toutes les Wilds, certaines ayant un humour que seuls les connaisseurs de la Demoscene peuvent déchiffrer, voire étant d’un goût douteux pour les non initiés. Donc plutôt 153 Go et 3340 fichiers uploadés.

Pour la construction de l’instance, il y a des scripts/tutoriels tout prêts sur l’internet. J’ai utilisé celui-là (tôi yêu PostgreSQL).
La seule difficulté est que tournant sur une VM, son serveur web n’est pas en façade pour les ports 80/tcp et 443/tcp.
En façade, le serveur web est celui de la machine hôte (pour mes blogs et sites personnels), une redirection proxypass est faite dans apache2 via un VirtualHost sur le port 443 vers PeerTube. Le port 80 est condamné pour réaliser le mécanisme d’obtention du certificat LetsEncrypt (certbot installé dans macOS via brew). Dans le httpd.conf, l’IP de la VM sur mon réseau intranet est 192.168.1.27, le certificat sur la VM peut-être généré et auto-certifié ou copié depuis l’hôte une seule fois (pas de vérification avec SSLProxyCheckPeer* à off), et ça donne ça :

<VirtualHost *:80>

  ServerAdmin pierre.*****@free.fr

  ServerName video.triplea.fr

  DocumentRoot "/Library/WebServer/video.triplea.fr/html"

  <Directory "/Library/WebServer/video.triplea.fr/html">
    AllowOverride All
    Options FollowSymLinks Indexes MultiViews
    Require all granted
  </Directory>

  ErrorLog "/Library/WebServer/video.triplea.fr/logs/error.video.log"
  CustomLog "/Library/WebServer/video.triplea.fr/logs/access.video.log" common

</VirtualHost>

<VirtualHost *:443>

  ServerAdmin pierre.*****@free.fr

  ServerName video.triplea.fr

  SSLEngine on

  SSLCertificateFile "/etc/letsencrypt/live/video.triplea.fr/cert.pem"
  SSLCertificateKeyFile "/etc/letsencrypt/live/video.triplea.fr/privkey.pem"
  SSLCACertificateFile "/etc/letsencrypt/live/video.triplea.fr/fullchain.pem"

  SSLProxyEngine on
  SSLProxyVerify none
  SSLProxyCheckPeerCN off
  SSLProxyCheckPeerName off
  SSLProxyCheckPeerExpire off

  ProxyRequests off
  ProxyPreserveHost On
  ProxyPass / https://192.168.1.27:443/ timeout=1200 KeepAlive=On
  ProxyPassReverse / https://192.168.1.27:443/
  SetEnv force-proxy-request-1.0 1
  SetEnv proxy-nokeepalive 1

  Header always set Strict-Transport-Security "max-age=15768000;"

  ErrorLog "/Library/WebServer/video.triplea.fr/logs/error.video.log"
  CustomLog "/Library/WebServer/video.triplea.fr/logs/access.video.log" common

</VirtualHost>

Il y a le port 9000/tcp aussi à router vers la VM PeerTube. N’étant pas utilisé par l’hôte, j’ai paramétré sur la freebox un routage direct.

Côté client

Et c’est qui qui va uploader 3400 fichiers dans le Tube ? Hein ? Possible à la main, mais ce serait mieux en ligne de commande. Et ça existe heureusement, ouf !
Tourne sous nunux, donc installé aussi sur la machine virtuelle. La collection en natif étant sur le disque de l’hôte sous macOS, j’ai déclaré un répertoire partagé Demoscene au niveau de la configuration de la VM dans VirtualBox (donc installation des vbox guest addition sur le Debian 10).

Pour lister tout ça, merci à mmu_man qui m’a pondu la ligne suivante afin de générer un gros script d’import. Les fichiers sont répartis par machines/catégories dans différents dossiers. Par exemple, pour Amiga :

find /media/sf_Demoscene/Amiga/ -type f | while read f; do echo "sleep 10 && peertube-cli up -u 'https://video.triplea.fr' -U rajah -p 'monmotdepasse' -f '$f' -n '$(basename "$f" .mp4)' -t 'Amiga' -L en -l 7 -c 4"; done

Cela permet d’obtenir des lignes comme cela :

sleep 10 && peertube-cli up -u "https://video.triplea.fr" -U rajah -p "monmotdepasse" -f '/media/sf_Demoscene/Amiga/3LN - 3 Letters Of Fame.mp4' -n '3LN - 3 Letters Of Fame' -t 'Amiga' -L en -l 7 -c 4
sleep 10 && peertube-cli up -u "https://video.triplea.fr" -U rajah -p "monmotdepasse" -f '/media/sf_Demoscene/Amiga/Absence & Excellence - Meltdown.mp4' -n 'Absence & Excellence - Meltdown' -t 'Amiga' -L en -l 7 -c 4
sleep 10 && peertube-cli up -u "https://video.triplea.fr" -U rajah -p "monmotdepasse" -f '/media/sf_Demoscene/Amiga/Abyss - Coda.mp4' -n 'Abyss - Coda' -t 'Amiga' -L en -l 7 -c 4
...
sleep 10 && peertube-cli up -u "https://video.triplea.fr" -U rajah -p "monmotdepasse" -f '/media/sf_Demoscene/Amiga/Algorithm & Onslaught - Amigaluscious.mp4' -n 'Algorithm & Onslaught - Amigaluscious' -t 'Amiga' -L en -l 7 -c 4
...

La liste totale pour Migouze, avec quotes à corriger parfois. Mon compte n’ayant qu’une chaine, pas besoin de la déclarer. Il faut chercher dans l’API Rest les infos pour les codes licence, langage, catégorie.

$ peertube-cli up --help
Usage: upload [options]

Options:
  -n, --video-name                 Video name
  -c, --category        Category number
  -l, --licence          Licence number
  -L, --language          Language ISO 639 code (fr or en...)
  -t, --tags                       Video tags
  -N, --nsfw                             Video is Not Safe For Work
  -d, --video-description   Video description
  -P, --privacy          Privacy
  -C, --channel-name       Channel name
  --no-comments-enabled                  Disable video comments
  -s, --support                 Video support text
  --no-wait-transcoding                  Do not wait transcoding before publishing the video
  --no-download-enabled                  Disable video download
  -v, --verbose                 Verbosity, from 0/'error' to 4/'debug' (default: "info")
  -u, --url                         Server url
  -U, --username               Username
  -p, --password                  Password
  -b, --thumbnail         Thumbnail path
  -v, --preview             Preview path
  -f, --file                       Video absolute file path
  -h, --help                             display help for command

L’upload est assez rapide, mais je ne sais pas si c’est direct ou s’il passe par la voie https (auquel cas, apache2 puis nginx travaillent et encaissent des dizaines de Mo).

Par contre, gros souci : ce client bogue au 16ième upload (problème d’identification), je ne sais pas s’il y a quelque chose à configurer dans le serveur PeerTube, si ça a été corrigé plus tard. Ce qui fait que j’ai passé 2-3 semaines à effectuer les uploads 15 par 15.
[Note ultérieure : il suffit en fait d’intercaler quelques pauses, un sleep de 10 secondes entre chaque « peertube up » permet de lubrifier le dialogue entre client et serveur]

Ce qui au final n’est pas si handicapant que ça, les CPUs moulinent bien et chauffent à chaque import car ils réencodent et produisent les formats basse qualitay. Donc de temps en temps, ça repose l’i5 hexacoeur. Et cela m’a permis de faire ce qu’on appelle de la curation de contenu : corriger quelques coquilles sur les noms des groupes et des oeuvres, de supprimer quelques doublons, de changer de dossier/machine, et aussi, à ma grande honte, de rechercher in extremis certaines vidéos en meilleure qualité.

Ben oui, proposer des Farbrausch en 360p, c’est un crime puni par 30 gobages de Flanby.