Un système complet d'overlay pour Twitch avec intégration EventSub, animations en temps réel et statistiques de stream.
This readme is also available in English.
- 🚀 Fonctionnalités
- 📦 Installation
- ⚙️ Configuration
- 🔧 Configuration Twitch
- 🌐 Tunnel Webhook (ngrok)
- 🚛 Intégration TruckyApp
- 🏃♂️ Lancement
- 📹 Overlays OBS
- 🧪 Tests
- 📷 Preview/Gallerie
- 🎨 Personnalisation
- 🛠️ Développement
- ❗ Dépannage
- Nouveaux followers avec animations
- Nouveaux abonnés et renouvellements
- Cadeaux d'abonnements (sub gifts)
- Raids entrants avec effet spéciaux
- Donations de bits avec confettis
- Queue d'alertes pour éviter les chevauchements
- Page de démarrage : Compte à rebours avant stream
- Page principale : Statistiques en temps réel + alertes
- Page de fin : Écran de fin de stream
- Animations CSS avancées avec particules
- Responsive design pour tous les écrans
- Nombre de followers
- Nombre d'abonnés
- Spectateurs actuels
- Mise à jour automatique via WebSocket
- Node.js 18+ (Télécharger)
- npm (inclus avec Node.js)
- Compte Twitch
- ngrok (intégré) ou installation manuelle optionnelle (Télécharger)
"Run your pre-release versions or internal apps on ngrok. Free forever."
git clone https://github.com/yazouv/ElectrumOverlay.git
cd electrum-overlaynpm installcp src/config/config.example.js src/config/config.jselectrum-overlay/
├── 📁 src/
│ ├── 📁 config/
│ │ └── config.js # Configuration backend (sensible)
│ ├── 📁 routes/
│ │ └── api.js # API routes principales
│ └── 📁 services/
│ ├── EventSubManager.js # Gestion EventSub
│ ├── TwitchAuth.js # Authentification Twitch
│ ├── WebhookHandler.js # Traitement webhooks
│ └── StreamStatsManager.js # Statistiques stream
├── 📁 public/
│ ├── index.html # Overlay principal
│ ├── starting.html # Page de démarrage
│ ├── ending.html # Page de fin
│ ├── 📁 js/
│ │ ├── config.js # Configuration frontend (public)
│ │ ├── overlay-common.js # Fonctions communes
│ │ ├── index.js # Logique page principale
│ │ ├── starting.js # Logique démarrage
│ │ └── ending.js # Logique fin
│ └── 📁 css/
│ ├── overlay-common.css # Styles communs
│ ├── index.css # Styles page principale
│ ├── starting.css # Styles démarrage
│ └── ending.css # Styles fin
├── package.json
├── server.js # Serveur principal
├── ConfigOBS.json # Configuration OBS
Le système utilise deux fichiers de configuration séparés :
Le WEBHOOK_SECRET est un secret cryptographique utilisé pour sécuriser les webhooks Twitch EventSub. Vous devez le générer vous-même :
// Dans Node.js (console ou script)
const crypto = require('crypto');
const webhookSecret = crypto.randomBytes(32).toString('hex');
console.log('WEBHOOK_SECRET:', webhookSecret);Caractéristiques importantes :
- 32 caractères minimum (64 caractères en hexadécimal recommandés)
- Aléatoire et unique pour votre application
- Ne jamais partager ou committer dans Git
- Utilisé pour vérifier que les webhooks proviennent bien de Twitch
N'oubliez pas de configurer les conditions pour certains événements dans src/config/config.js (ligne 50-51) :
"condition": {
"broadcaster_user_id": "197983290", // Votre User ID
"moderator_user_id": "197983290" // Même User ID pour être modérateur
}Important : Remplacez "197983290" par votre propre User ID Twitch obtenu à l'étape suivante.
✅ PUBLIC - Peut être partagé
- Allez sur Twitch Developers Console
- Cliquez sur "Enregistrer votre application"
- Remplissez les informations :
- Nom :
Mon Overlay Twitch - URL de redirection OAuth :
http://localhost:8080/auth-callback - Catégorie :
Application Integration - Type de client : Confidentiel
- Nom :
- Cliquez sur "Créer"
- Notez votre Client ID et Client Secret et mettez le dans le
src/config/config.js
- Récuperez votre User ID sur : StreamWeasels
- Mettez le dans le
public/js/config.js> OVERLAY_CONFIG.twitch.broadcasterId - Mettez le aussi dans
src/config/config.js> twitch.BROADCASTER_ID
- Démarrez le serveur :
npm start - Allez sur
http://localhost:8080/auth-url - Autorisez l'application
- Le token sera affiché dans la console
- Mettez le dans
src/config/config.js> twitch.USER_ACCESS_TOKEN
- Allez sur Twitch Token Generator
- Sélectionnez les scopes nécessaires
- Générez le token
- Mettez le dans
src/config/config.js> twitch.USER_ACCESS_TOKEN
Les webhooks EventSub nécessitent une URL HTTPS publique. ngrok est intégré et activé par défaut dans ElectrumOverlay :
Le système démarre automatiquement ngrok et configure l'URL webhook. Dans src/config/config.js :
"ngrok": {
"ENABLED": true, // ngrok activé par défaut
},Avantages :
- ✅ Configuration automatique
- ✅ Pas besoin de gérer manuellement ngrok
- ✅ URL webhook mise à jour automatiquement
Si vous préférez gérer ngrok manuellement, désactivez le mode automatique :
Dans src/config/config.js :
"ngrok": {
"ENABLED": false, // Désactiver ngrok automatique
},- Téléchargez depuis ngrok.com
- Ou via npm :
npm install -g ngrok
# Dans un terminal séparé
ngrok http 8080Ngrok va afficher quelque chose comme :
Forwarding https://abcdefgijkl.ngrok-free.app -> http://localhost:8080
Dans src/config/config.js :
WEBHOOK_URL: "https://abcdefgijkl.ngrok-free.app/eventsub"- L'URL ngrok change à chaque redémarrage (version gratuite)
- Pensez à mettre à jour la configuration après chaque redémarrage
ElectrumOverlay inclut une intégration TruckyApp activée par défaut pour les streameurs de simulation de camion :
L'intégration TruckyApp récupère automatiquement vos statistiques de jeu. Dans src/config/config.js :
"trucky": {
"enable": true, // TruckyApp activé par défaut
"USER_ID": "90694", // Remplacez par votre ID utilisateur Trucky
},Fonctionnalités :
- ✅ Récupération automatique des données utilisateur
- ✅ Affichage du dernier job effectué
- ✅ Statistiques de compagnie (si applicable)
- ✅ Intégration seamless avec les overlays
- Allez sur TruckyApp
- Connectez-vous à votre compte
- Allez dans votre profil
- L'ID utilisateur se trouve dans l'URL :
https://truckyapp.com/user/[VOTRE_ID]
Dans src/config/config.js, remplacez "90694" par votre ID :
"trucky": {
"enable": true,
"USER_ID": "VOTRE_ID_TRUCKY",
},Si vous ne jouez pas aux jeux de simulation de camion, vous pouvez désactiver cette fonctionnalité :
Dans src/config/config.js :
"trucky": {
"enable": false, // Désactiver TruckyApp
"USER_ID": "90694",
},Note : Même désactivée, cette configuration n'affecte pas les autres fonctionnalités du système.
Le système démarre automatiquement ngrok par défaut. Si ngrok est activé :
- Démarrer le serveur :
npm start- Accéder aux overlays :
- Principal :
http://localhost:8080 - Démarrage :
http://localhost:8080/starting.html - Fin :
http://localhost:8080/ending.html - Pause :
http://localhost:8080/pause.html
- Principal :
Si vous avez désactivé ngrok (mode manuel) :
- Démarrer ngrok (terminal 1) :
ngrok http 8080-
Mettre à jour l'URL webhook dans
src/config/config.js -
Démarrer le serveur (terminal 2) :
npm start- Accéder aux overlays :
- Principal :
http://localhost:8080 - Démarrage :
http://localhost:8080/starting.html - Fin :
http://localhost:8080/ending.html - Pause :
http://localhost:8080/pause.html
- Principal :
npm start # Démarrer le serveur
npm run dev # Mode développement (nodemon)
npm run clean # Nettoyer les abonnements EventSub
npm run setup # Assistant de configuration
npm run config # Mettre à jour la configurationUtilisez le fichier ConfigOBS.json pour configurer les overlays dans OBS :
Celui-ci contient les scènes préconfigurées pour les overlays, avec les sources nécessaires.
-
Installer Twitch CLI :
-
Configurer :
twitch configure- Tester les événements :
# Test follow
twitch event trigger channel.follow --to-user-id=197983290 --from-user-id=123456
# Test subscription
twitch event trigger channel.subscribe --to-user-id=197983290 --user-id=123456
# Test raid
twitch event trigger channel.raid --to-user-id=197983290 --from-user-id=123456
# Test bits
twitch event trigger channel.cheer --to-user-id=197983290 --user-id=123456# Test webhook directement
curl -X POST http://localhost:8080/eventsub \
-H "Content-Type: application/json" \
-d '{
"subscription": {
"type": "channel.follow",
"version": "1"
},
"event": {
"user_name": "TestUser",
"user_display_name": "TestUser"
}
}'Ecran de démarrage
Ecran de pause
Ecran de fin
Dans public/js/config.js :
theme: {
primary: '#3b82f6', // Couleur principale
secondary: '#10b981', // Couleur secondaire
accent: '#f59e0b', // Couleur d'accent
background: '#1f2937', // Fond
text: '#f9fafb' // Texte
}alerts: {
types: {
follow: {
icon: '<i class="fas fa-heart"></i>', // Icône
title: 'NOUVEAU FOLLOW', // Titre
gradient: 'linear-gradient(...)', // Dégradé
border: '#3b82f6', // Couleur bordure
defaultMessage: 'Merci pour le follow !' // Message par défaut
}
}
}Dans public/css/overlay-common.css :
/* Animation d'apparition des alertes */
.alert-container.show {
animation: slideInFromTop 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
/* Animation de particules */
.particle {
animation: particleFloat 3s infinite ease-in-out;
}Dans public/js/config.js :
panels: {
followers: {
enabled: true, // Activer/désactiver
position: 'top-left', // Position
updateInterval: 5000, // Intervalle de mise à jour (ms)
animationDuration: 300 // Durée animation (ms)
}
}npm run devLe serveur redémarre automatiquement lors des modifications.
-
services/: Services métierEventSubManager.js: Gestion des abonnements EventSubTwitchAuth.js: Authentification TwitchWebhookHandler.js: Traitement des webhooksStreamStatsManager.js: Statistiques en temps réel
-
routes/: Routes Expressapi.js: API principaleapi-fixed.js: API avec données fixes
-
config/: Configurationconfig.js: Configuration sensible backend
-
js/: Scripts JavaScriptconfig.js: Configuration publiqueoverlay-common.js: Fonctions partagéesindex.js,starting.js,ending.js: Logique par page
-
css/: Styles CSSoverlay-common.css: Styles partagés- Page-specific CSS files
GET / // Page principale
GET /starting.html // Page de démarrage
GET /ending.html // Page de fin
GET /auth // Authentification Twitch
GET /auth-callback // Callback OAuth
POST /eventsub // Webhooks EventSub
GET /api/stream-stats // Statistiques de stream en json
GET /api/stream-stats-html // Statistiques de stream en html// Côté client
socket.on('alert', (data) => {
// Nouvelle alerte reçue
});
socket.on('stats-update', (data) => {
// Mise à jour des statistiques
});
// Côté serveur
wss.broadcast('alert', alertData);
wss.broadcast('stats-update', statsData);Cause : Port déjà utilisé
Solution : Changer le port dans config.js ou arrêter le processus
Cause : URL ngrok incorrecte ou expirée
Solution :
1. Vérifier que ngrok fonctionne
2. Mettre à jour WEBHOOK_URL dans config.js
3. Redémarrer le serveur
Cause : Configuration EventSub ou WebSocket
Solution :
1. Vérifier les logs serveur
2. Tester avec Twitch CLI
3. Vérifier les scopes du token
Cause : Access token expiré
Solution : Générer un nouveau token d'accès
# Tester la configuration
npm run config# Lister les abonnements actifs
curl -X GET 'https://api.twitch.tv/helix/eventsub/subscriptions' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID'# Supprimer tous les abonnements
npm run cleanActiver les logs dans public/js/config.js :
debug: {
enabled: true, // Activer les logs debug
websocket: true, // Logs WebSocket
alerts: true, // Logs alertes
api: true // Logs API
}- Ouvrir F12 → Console
- Vérifier les erreurs JavaScript
- Voir les messages WebSocket
- Les logs s'affichent dans le terminal
- Format :
[TIMESTAMP] [LEVEL] Message
# Tester l'API stats
curl http://localhost:8080/api/stats
# Tester le webhook
curl -X POST http://localhost:8080/eventsub \
-H "Content-Type: application/json" \
-d '{"test": true}'- Vérifier les logs pour identifier l'erreur
- Consulter la documentation Twitch : EventSub Guide
- Nettoyer et recommencer :
npm run cleanpuis redémarrer
MIT License - Voir le fichier LICENSE pour plus de détails.
Les contributions sont les bienvenues ! Veuillez :
- Fork le projet
- Créer une branche pour votre fonctionnalité
- Commiter vos changements
- Pousser vers la branche
- Ouvrir une Pull Request
🎮 Bon streaming ! 🚀


