Skip to content

v1.5.0 — Encoding failure visibility + MKV stream fix, Stability, performance & polish

Latest

Choose a tag to compare

@HeartBtz HeartBtz released this 23 Feb 20:45
· 17 commits to main since this release

Stabilité & Performance

CUDA VRAM decode

Les frames décodées restent en mémoire GPU grâce à -hwaccel_output_format cuda, au lieu d'être copiées en RAM système. Élimine les OOM kills sur les machines avec peu de RAM (ex. 8 Go avec 2 workers simultanés).

Protection SIGKILL

Chaque job traque son retry_count en base. Après un SIGKILL (OOM kernel), le job est relancé avec un backoff exponentiel (10s → 20s → 40s). Au bout de 3 tentatives, il passe en erreur au lieu de boucler indéfiniment.

Isolation GPU

CUDA_VISIBLE_DEVICES isole chaque worker sur un GPU physique. -hwaccel_device est toujours 0 dans le contexte isolé — plus de CUDA_ERROR_INVALID_DEVICE.

Ordre de boot

app.listen() s'exécute avant encoder.start(). Si le port est déjà pris → crash immédiat et propre, sans toucher aux jobs en base.

EADDRINUSE

Message d'erreur clair et exit propre au lieu d'un crash silencieux en boucle.

Empreinte mémoire réduite

probesize / analyzeduration passés de 50M à 20M pour ffprobe.


Gestion des processus

Un seul gestionnaire

L'installeur choisit systemd (préféré) ou PM2 (fallback pour conteneurs/WSL) — jamais les deux en même temps. Élimine le conflit dual-manager qui causait des boucles de restart (EADDRINUSE).

Nettoyage automatique

Quand systemd est choisi, l'instance PM2 existante est supprimée automatiquement.


Refactoring

  • Extraction de modules — encoder.js monolithique découpé en ffprobe.js (wrapper ffprobe & analyse des streams), ffmpeg-args.js (construction des arguments HW/SW), webhook.js (notifications Discord & HTTP)
  • 42 catch blocks vides corrigés — chaque erreur est maintenant loggée ou gérée explicitement
  • Audit qualité complet — race conditions, gestion d'erreurs, fiabilité SSE, validation d'entrées

Corrections de bugs

Fix Détail
clearFinished Le bouton "vider" supprime maintenant correctement les jobs done/error/cancelled
enqueueBatch Prévention des doublons et vérification du skip-flag corrigées
Throttle progress Les updates SSE sont limitées à 1/s par job (réduit la charge navigateur)
Refresh bibliothèque Auto-refresh après la fin du pipeline scan/enrich
i18n Clés manquantes et formes plurielles corrigées
Logging Niveaux structurés, plus d'erreurs avalées silencieusement
Race condition GPU Pré-verrouillage du device dans processQueue() avant le fork ffmpeg

Polish

  • README — Réécriture complète : badge v1.5.0, arbre d'architecture à jour, systemd comme gestionnaire principal, changelog v1.5.0, API Reference en <details> repliable
  • install.sh — ProtectSystem=strict → full (permet la lecture des médias hors du répertoire app), sortie en anglais, commentaire d'en-tête corrigé
  • Dockerfile — THUMB_DIR ajouté aux variables d'environnement par défaut
  • .dockerignore — Screenshots/ exclu du build Docker

Commits

Hash Description
0e312fd feat: crash recovery, pause/resume, cancel encoding, force-kill, i18n
fa97ebf refactor: split encoder.js → ffprobe.js, ffmpeg-args.js, webhook.js; ESLint
fbd4a10 fix: audit — library refresh, i18n, logging
bad955f fix: SIGKILL infinite retry loop + GPU device race
5faab6d fix: -hwaccel_device=0, CUDA_VISIBLE_DEVICES isolation
571055d fix: -hwaccel_output_format cuda (VRAM decode)
ecd8fac fix: EADDRINUSE graceful handling
37bb063 fix: bind port BEFORE encoder.start()
8aeb0ec fix: install.sh — single process manager
9cc97be v1.5.0: rewrite README, polish ancillary files

Mise à jour

cd /opt/Encodium
git pull
npm install --production
sudo systemctl restart encodium    # ou: pm2 restart encodium

Ou simplement : bash install.sh (idempotent).