Repository navigation
v1.5.0 — Encoding failure visibility + MKV stream fix, Stability, performance & polish
LatestStabilité & 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.jsmonolithique découpé enffprobe.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_DIRajouté 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 encodiumOu simplement : bash install.sh (idempotent).