Hub audio local Windows pour streamers : mixeur intelligent par application, extension navigateur, bridge local, sans driver, sans compte, sans telemetrie.
StreamVolume Guard Hub regroupe la version desktop Windows et l'extension navigateur dans un seul dossier propre, sans melanger leurs codes.
Version actuelle : alpha testable, pas encore V1 stable.
- YouTube peut etre controle via
BrowserGainquand le navigateur et le site exposent un signal exploitable. - TikTok, Spotify Web ou Deezer Web peuvent rester en
ObserveOnly,Unknown,skippedouno-signalselon le navigateur et le site. - Quand le controle fin navigateur n'est pas possible, le fallback attendu est le volume Windows global du navigateur via
WindowsSessionVolume. Sortie globaleobserve le mix final Windows en lecture seule, mais ne modifie jamais le volume master.- OBS reste une securite finale manuelle avec ses meters,
Application Audio Capture,CompressoretLimiter.
- Liste les sessions audio Windows exposees par le systeme.
- Controle le volume Windows par application quand Windows le permet.
- Affiche les sous-sources navigateur quand l'extension peut les observer.
- Applique
BrowserGaindans l'onglet/source web quand le signal est exploitable. - Utilise
WindowsSessionVolumecomme fallback pour les sources web non controlables directement. - Propose les profils
Calme,StandardetFort. - Limite l'auto-calibration a des corrections ponctuelles pour eviter les mouvements continus du fader.
- Affiche
Sortie globaleavec RMS, pic recent, etatSafe/Risky/Silent/Unknownet peripherique de sortie. - Signale
global_output.unknown_activesi du son sort du PC sans source connue active dans les listes. - Propose
Stream Safepour revenir vite a une configuration prudente : Auto actif + cible Standard. - Propose un
Mode test guideet unGuide OBSdirectement dans l'app desktop. - Fournit Panic, exclusions, mode observation, logs locaux et rapports copiables.
- Pas de driver audio maison.
- Pas de compresseur studio global.
- Pas de traitement audio sample par sample cote desktop.
- Pas de modification automatique du volume master Windows par
Sortie globale. - Pas de compte utilisateur.
- Pas de cloud sync.
- Pas de tracker ou telemetrie.
- Pas d'envoi automatique de logs.
- Pas de promesse de controle sur une source
ObserveOnlyouUnknown. - Pas de lecture automatique des scenes ou meters OBS dans cette alpha.
Construire une version hybride locale pour streamers :
apps/desktopcontrole les sessions audio Windows comme un melangeur intelligent et observe la sortie globale Windows en lecture seule ;apps/browser-extensionsert de base pour identifier et equilibrer les sous-sources web comme YouTube, TikTok ou Spotify Web quand le navigateur le permet ;packages/protocoldefinit le contrat entre desktop, extension et bridge local ;docsgarde les decisions produit, checklists et specs ;toolscontient les scripts utiles de lancement, build et packaging local.
apps/
desktop/ App Windows .NET/WPF
browser-extension/ Extension navigateur MV3 reprise de l'ancien projet
packages/
protocol/ Contrat desktop <-> extension <-> bridge local
docs/ Specs, plans, checklists
tools/ Scripts utiles
.github/ CI, templates GitHub, source du project board
Pour utiliser le package testeur :
- Windows 10 ou Windows 11 ;
- un navigateur Chromium conseille pour l'alpha : Chrome, Brave ou Edge ;
- droits utilisateur normaux pour lancer une app locale et charger une extension non empaquetee.
Pour lancer depuis le repo source :
- .NET SDK 8 ;
- Node.js pour les tests extension/protocole ;
- PowerShell ;
- Windows, car le desktop utilise les sessions audio Windows.
La regle produit est simple : toute source disponible doit etre classee par origine et surface de controle. Windows couvre les applications exposees comme sessions audio ; l'extension couvre les sous-sources navigateur quand elle peut agir dans l'onglet/site. Les sources observees mais non controlables restent visibles.
Voir : docs/hybrid-architecture.md.
| Surface | Peut modifier le son ? | Exemple |
|---|---|---|
WindowsSessionVolume |
Oui | Brave, Firefox, VLC, Discord, Spotify desktop |
BrowserGain |
Oui | Onglet YouTube controlable par l'extension |
ObserveOnly |
Non | Source visible mais non controlable directement |
Unknown |
Non garanti | Source pas encore classee de facon fiable |
Sortie globale |
Non | Mesure lecture seule du mix final Windows |
Une source ObserveOnly ou Unknown n'est pas un echec cache : c'est une limite affichee honnetement pour eviter de promettre un controle impossible.
Le desktop affiche aussi un dashboard Couverture : Direct, Fallback Windows, Action requise, Limite et Inconnu. Ce score ne promet pas un controle magique ; il indique combien de sources sont securisables directement, via fallback Windows, ou apres une action utilisateur comme Proteger l'onglet actif.
App desktop seule : voit les sessions audio Windows, affiche les applications qui produisent du son, permet le controle manuel, applique les profils Calme/Standard/Fort sur le melangeur Windows, gere Auto actif, exclusions, Panic, logs locaux, snapshots de diagnostic et Sortie globale en lecture seule. Elle peut equilibrer Brave, Firefox, VLC, Discord ou Spotify desktop au niveau application, mais elle ne peut pas separer deux onglets dans le meme navigateur sans l'extension.
Extension seule : voit les medias web dans le navigateur quand le site et le navigateur le permettent, protege un onglet, mesure le niveau, applique BrowserGain si la source est controlable, ou affiche ObserveOnly/Unknown si elle ne peut pas agir. Elle reste utilisable en Mode autonome, sans compte, sans cloud et sans envoyer d'audio brut. Si une source web demande le fallback Windows mais que le desktop est ferme, l'extension doit rester stable en observation, garder le bouton visuellement actif, et le diagnostic doit expliquer que l'app desktop est necessaire pour bouger le volume Windows du navigateur.
App + extension via bridge local : le desktop expose la cible et l'etat via 127.0.0.1:47841, l'extension envoie les sous-sources et logs sanitizes, et les deux evitent de se battre. Si une source navigateur est vraiment controlable par BrowserGain et locked, l'extension devient prioritaire pour les corrections automatiques fines ; sinon le desktop peut revenir au volume Windows global du navigateur, surtout quand une seule page joue. Un changement volontaire de cible peut aussi appliquer un fallback Windows rapide pour que l'action soit effective tout de suite.
Le dashboard Couverture resume l'etat reel : Direct pour WindowsSessionVolume ou BrowserGain, Fallback Windows quand le parent navigateur est controlable globalement, Action requise quand l'onglet doit etre protege, et Limite / Inconnu quand le Hub doit rester honnete.
Le bloc Sortie globale sert aussi de filet de diagnostic : si le mix Windows est actif mais que les sessions Windows et sous-sources navigateur visibles restent silencieuses, le rapport peut afficher global_output.unknown_active. Cela ne modifie pas le volume master ; c'est une alerte pour chercher une application, une capture OBS ou une source systeme non expliquee.
- Vision hybride :
docs/hybrid-architecture.md - Cahier couche desktop :
docs/desktop-v1-cahier-des-charges.md - Checklist testeur :
docs/tester-checklist.md - Notes alpha testeur :
docs/release-notes/v0.1.0-alpha.1.md - Setup securite OBS :
docs/obs-stream-safety-setup.md - Protocole commun :
packages/protocol/README.md - GitHub Project direct : https://github.com/users/Fredo0xJtl/projects/1
- GitHub Project docs :
.github/project/README.md
Testable aujourd'hui :
- protocole
browser_source_observed; - bridge local durci sur
127.0.0.1:47841; GET /health,GET /global-target,POST /browser-sourceetPOST /extension-log;- logs locaux groupes par
runIdettestSessionId; - rapport lisible copiable avec
Copier logs; - validation stricte de
isControllable; - config locale Auto, exclusions, cible globale et token bridge optionnel ;
- UI de controlabilite Windows/navigateur ;
- statut de liaison
App seule/Extension connectee; - monitor
Sortie globalelecture seule ; - verrou de calibration automatique one-shot ;
- calibration navigateur
BrowserGainprioritaire quand le signal est exploitable ; - packaging testeur Windows reproductible.
Points a garder en tete :
- si
BridgeTokenest defini,/browser-source,/extension-loget/global-targetexigentX-StreamVolume-Guard-Token; /healthreste ouvert pour le diagnostic local ;- Chrome, Brave et Edge commencent par
media-htmlquand un lecteur web est accessible ; tabCapturesert d'upgrade generique simedia-htmlreste muet alors que l'onglet est audible ;- une source
ObserveOnly,Unknown,skippedouno-signaldoit rester honnete dans l'UI ; - les colonnes
RaisonetActionguident vers rechargement, reprotection, fallback Windows ou OBS ; Sortie globalemesure RMS/pic/etat du mix final Windows, sans modifier le volume master et sans enregistrer d'audio brut.
Tableau direct :
https://github.com/users/Fredo0xJtl/projects/1
Page Projects du repo :
https://github.com/Fredo0xJtl/StreamVolume-Guard-Hub/projects
GitHub Projects v2 garde une URL canonique sous le compte Fredo0xJtl,
mais ce tableau est lie au repo Fredo0xJtl/StreamVolume-Guard-Hub.
Les fichiers de base pour l'onglet GitHub Projects sont dans :
.github/project/
Ils decrivent le board recommande, les labels, le backlog importable et la checklist de pre-release. A chaque changement produit, test reel, packaging ou release, mettre a jour .github/project/backlog.csv et .github/project/release-checklist.md en meme temps que le CHANGELOG.md.
- Recuperer ou generer
StreamVolumeGuardHub-Tester-v0.1.38.zip. - Extraire le zip.
- Si Windows bloque le zip ou l'executable, faire clic droit,
Proprietes, puis cocherDebloquersi l'option existe. - Double-cliquer sur
Lancer StreamVolume Guard Hub Desktop.cmd. - Charger l'extension depuis le dossier
browser-extensiondu package. - Ouvrir l'app et verifier que
Sources Windows,Sources navigateur,Sortie globaleet le statut bridge sont visibles.
cd "D:\Codex\StreamVolume Guard Hybride"
dotnet build "apps\desktop\StreamVolumeGuard.Desktop.sln" -nr:false
dotnet run --project "apps/desktop/src/StreamVolumeGuard.App/StreamVolumeGuard.App.csproj"Puis charger l'extension depuis :
D:\Codex\StreamVolume Guard Hybride\apps\browser-extension
Au premier lancement, le desktop demarre en mode observation. Ensuite, l'etat Auto actif, la cible voulue et les exclusions sont restaures depuis %LOCALAPPDATA%\StreamVolumeGuard\config.json.
La langue de l'app desktop suit la langue systeme au demarrage : interface francaise si Windows est en francais (fr, fr-FR, fr-CA, etc.), interface anglaise pour toutes les autres langues. Les logs techniques restent stables et lisibles pour le debug.
Quand Auto actif est active, le desktop applique une correction automatique par source active, puis verrouille cette source pour eviter de bouger le volume en continu pendant la lecture. Les profils pilotent directement le volume du melangeur Windows : Calme vise environ 40%, Standard environ 70%, et Fort environ 100%. Le verrou se rearme apres silence durable, disparition de la session, ou changement de cible globale.
Le slider personnalise peut descendre jusqu'a environ 15% du melangeur Windows. Les corrections Auto, y compris safety-spike, ne descendent pas sous la cible active : environ 40% en Calme, 70% en Standard, 100% en Fort, ou 15% au minimum personnalise. Panic reste l'action d'urgence separee.
Sons systeme Windows est traite comme une source speciale anti-pic : l'app peut le baisser avec Auto/Panic s'il devient trop fort, mais elle ne le remonte pas automatiquement avec Standard ou Fort. Les notifications et alertes courtes restent donc visibles dans le diagnostic sans etre boostees inutilement.
Apres lancement :
Sources Windowsdoit etre visible ;Sources navigateurdoit etre visible ;Sortie globaledoit afficher un etat ou une erreur loopback claire ;- le bridge doit indiquer
127.0.0.1:47841ou une erreur claire ; - sans extension connectee, le desktop doit indiquer
App seule; - apres chargement extension et activite navigateur, le desktop peut passer a
Extension connectee.
Si rien ne s'affiche, lancer une source audio simple comme VLC, YouTube ou Spotify desktop, puis cliquer Rafraichir.
Depuis PowerShell :
cd "D:\Codex\StreamVolume Guard Hybride"
$ErrorActionPreference = "Stop"
function Run-Step($cmd, $argsList) {
& $cmd @argsList
if ($LASTEXITCODE -ne 0) { throw "$cmd failed with exit code $LASTEXITCODE" }
}
Run-Step node @("packages/protocol/tests/protocol.test.js")
Run-Step node @("apps/browser-extension/tests/unit.test.js")
Run-Step node @("--check", "apps/browser-extension/audio/browser-gain-calibration.js")
Run-Step node @("--check", "apps/browser-extension/audio/normalizer.js")
Run-Step node @("--check", "apps/browser-extension/bridge/client.js")
Run-Step node @("--check", "apps/browser-extension/background.js")
Run-Step node @("--check", "apps/browser-extension/content.js")
Run-Step node @("--check", "apps/browser-extension/offscreen/offscreen.js")
Run-Step node @("--check", "apps/browser-extension/popup/popup.js")
Run-Step node @("--check", "apps/browser-extension/options/options.js")
Run-Step dotnet @("run", "--project", "apps/desktop/tests/StreamVolumeGuard.Tests/StreamVolumeGuard.Tests.csproj")
Run-Step dotnet @("build", "apps/desktop/StreamVolumeGuard.Desktop.sln", "-nr:false")Pour generer un dossier testeur sans demander d'ouvrir la solution .sln :
powershell -ExecutionPolicy Bypass -File "tools\package-tester.ps1"Le package est genere dans :
artifacts\tester\StreamVolumeGuardHub-Tester
Une archive locale est aussi generee :
artifacts\tester\StreamVolumeGuardHub-Tester-v0.1.38.zip
Un checksum SHA256 est genere a cote :
artifacts\tester\StreamVolumeGuardHub-Tester-v0.1.38.zip.sha256.txt
Ce dossier et ce zip contiennent le desktop publie, l'extension navigateur a charger en mode developpeur, un launcher, un raccourci logs, un README court et une checklist courte. artifacts/ reste un dossier genere ignore par Git.
Le desktop publie est self-contained win-x64 : le testeur n'a pas besoin d'installer le SDK ou le runtime .NET pour lancer l'app depuis le package. Cette alpha n'est pas encore signee avec un certificat Windows ; SmartScreen peut donc afficher un avertissement tant qu'un certificat de signature n'est pas ajoute.
Le zip GitHub de l'alpha n'est pas signe avec un certificat public. Windows peut donc afficher Windows a protege votre ordinateur, Editeur inconnu ou bloquer le fichier parce qu'il vient d'Internet. Ce n'est pas un bug de StreamVolume Guard Hub.
Pour un test local :
- Clic droit sur le zip telecharge ou sur
StreamVolumeGuard.App.exe. - Ouvrir
Proprietes. - Si l'option existe, cocher
Debloquer, puisAppliquer. - Extraire le zip si ce n'est pas deja fait.
- Lancer
Lancer StreamVolume Guard Hub Desktop.cmd. - Si SmartScreen apparait, cliquer
Informations complementaires, puisExecuter quand meme.
Ne pas desactiver SmartScreen globalement. Pour reduire cette friction en beta publique, le chemin prevu est Microsoft Store readiness apres les tests reels et la stabilisation V1. Pour les zips GitHub publics sans Store, il faudra plus tard une signature Windows reconnue.
- SmartScreen bloque le zip ou l'exe : debloquer le fichier dans
Proprietes, puis relancer. - Le desktop ne voit aucune source : lancer une app qui produit du son, verifier le melangeur Windows, puis cliquer
Rafraichir. - Le bridge ne demarre pas : verifier qu'aucune autre instance n'utilise
127.0.0.1:47841. - L'extension reste en
Mode autonome: verifier que le desktop est ouvert, puis rouvrir le popup ou cliquerCopier diagnosticpour forcer un nouveau health check local. - L'extension affiche
App connecteealors que la fenetre desktop est fermee : rouvrir le popup ou cliquerCopier diagnostic. Le bridge doit etre coupe quand la fenetre desktop se ferme ; si127.0.0.1:47841repond encore, une ancienne instance doit etre fermee depuis le Gestionnaire des taches. - L'onglet reste
ObserveOnlyouno-signal: ce n'est pas forcement un bug ; utiliser le fallback Windows global ou OBS selon le cas. - La popup indique
Controle via Windows (standalone): l'extension est encore active en observation, mais elle ne peut pas bouger le volume Windows tant que l'app desktop est fermee. - Les logs sont necessaires : cliquer
Nouveau test, reproduire le cas, puisCopier logs.
Dossier a selectionner depuis le repo source :
D:\Codex\StreamVolume Guard Hybride\apps\browser-extension
Dossier a selectionner depuis le package testeur :
browser-extension
- Ouvrir
chrome://extensions. - Activer
Mode developpeur. - Cliquer
Charger l'extension non empaquetee. - Selectionner le dossier
apps\browser-extensiondepuis le repo, oubrowser-extensiondepuis le package testeur. - Ouvrir le popup StreamVolume Guard Hub et verifier
Mode autonomeouApp connectee.
- Ouvrir
brave://extensions. - Activer
Mode developpeur. - Cliquer
Charger l'extension non empaquetee. - Selectionner le dossier
apps\browser-extensiondepuis le repo, oubrowser-extensiondepuis le package testeur. - Ouvrir le popup StreamVolume Guard Hub et verifier
Mode autonomeouApp connectee.
- Ouvrir
edge://extensions. - Activer
Mode developpeur. - Cliquer
Charger l'extension non empaquetee. - Selectionner le dossier
apps\browser-extensiondepuis le repo, oubrowser-extensiondepuis le package testeur. - Ouvrir le popup StreamVolume Guard Hub et verifier
Mode autonomeouApp connectee.
Firefox est un chemin de test temporaire pour cette alpha, pas le navigateur principal valide. Le manifest courant est MV3 et utilise des APIs comme tabCapture/offscreen, dont le comportement peut differer ou etre refuse.
- Ouvrir
about:debugging#/runtime/this-firefox. - Cliquer
Charger un module complementaire temporaire. - Selectionner
manifest.jsondans le dossierapps\browser-extensiondepuis le repo, oubrowser-extension\manifest.jsondepuis le package testeur. - Tester le popup si Firefox accepte le manifest.
- Si Firefox refuse le chargement ou si la capture audio ne fonctionne pas, utiliser Chrome, Brave ou Edge pour l'alpha.
Safari et Firefox Android ne sont pas fournis dans le package Hub. Safari demanderait une conversion et un packaging separes sur macOS/Xcode. Firefox Android demandera une validation dediee plus tard. Pour v0.1.38, utiliser Chrome, Brave ou Edge pour la validation principale.
Tester une source a la fois avant les combinaisons :
- YouTube navigateur.
- TikTok navigateur.
- Spotify Web ou Deezer Web.
- VLC ou lecteur local.
- Discord.
- Spotify desktop si disponible.
- OBS avec meters visibles, en observation manuelle.
- Combinaisons navigateur + app Windows.
Pour chaque source, verifier :
- la source apparait dans le desktop ou la limite est claire ;
originest visible ;controlSurfaceest visible ;statusest comprehensible ;isControllablecorrespond a la vraie surface de controle ;Sortie globalebouge quand du son joue et tend versSilentquand tout est en pause ;- les logs restent locaux et ne contiennent pas d'audio brut.
Checklist complete : docs/tester-checklist.md.
Logs locaux :
%LOCALAPPDATA%\StreamVolumeGuard\logs
Config locale :
%LOCALAPPDATA%\StreamVolumeGuard\config.json
Le bouton Copier logs copie un rapport lisible de la session de test courante.
Les logs ne doivent pas contenir :
- audio brut ;
- samples ;
- buffers PCM ;
- URL complete ;
- historique de navigation ;
- message Discord ;
- scene OBS ;
- token bridge ;
- donnee de compte utilisateur.
En controle Windows global, un navigateur compte comme une seule source audio. Si une musique de fond et une video jouent dans le meme Firefox/Brave/Chrome sans BrowserGain exploitable, le slider Windows du navigateur bouge les deux ensemble. Pour garder la musique plus forte ou plus stable qu'une video web, utiliser si possible deux sources Windows separees, par exemple Spotify desktop ou VLC pour la musique et le navigateur pour la video. Une source exclue reste en controle manuel via son slider dans l'app ; les autres sources non exclues peuvent rester gerees par Auto actif.
Le controle fin par onglet depend du navigateur et du site. Quand l'extension annonce une source BrowserGain avec un niveau exploitable et Calibration=locked, elle devient prioritaire pour cette sous-source navigateur. Si la source reste measuring, ObserveOnly, Unknown ou skipped, l'app doit l'afficher honnetement avec une raison lisible et revenir au controle Windows global seulement quand c'est acceptable, notamment quand une seule page web joue ou quand l'utilisateur vient de changer la cible. Les nouveaux etats needs-user-action, restricted et unsupported indiquent respectivement qu'il faut cliquer pour proteger l'onglet, que la page bloque la capture, ou que le navigateur ne supporte pas la capture d'onglet. Si le signal navigateur est inexploitable, le Hub ne promet pas BrowserGain : il propose de recharger, reproteger, utiliser le fallback Windows ou securiser la source dans OBS.
Limites a surveiller en alpha :
- plusieurs onglets dans le meme navigateur peuvent bouger ensemble ;
BrowserGaindepend du navigateur, du site et du signal disponible ;- une capture
tab-capturepeut etre audible cote navigateur mais resterno-signalcote Web Audio ; media-htmlpeut detecter un media sans pouvoir le controler ;Sortie globaleaide a voir le mix final, mais ne compresse pas le son ;- OBS n'est pas lu automatiquement ;
- le package Windows n'est pas encore signe.
StreamVolume Guard Hub n'est pas un compresseur studio global. Il organise les sources, expose ce qui est controlable, calibre les volumes Windows/navigateur quand c'est possible et garde les limites visibles. Pour securiser le son final du stream contre les pics internes d'une video, d'un jeu ou d'une app, la V1 recommande OBS comme derniere couche de protection.
La procedure conseillee est de capturer les applications separement dans OBS quand c'est possible, puis d'ajouter les filtres natifs OBS : Compressor sur les sources a risque et Limiter en dernier filtre. Voir docs/obs-stream-safety-setup.md.
Priorites actuelles :
- tests reels YouTube, TikTok, Spotify Web, Deezer Web, Discord, VLC et OBS ;
- validation du package testeur depuis un dossier propre ;
- stabilisation V1 apres retours testeur ;
- enrichissement du diagnostic local si les tests reels montrent encore des zones floues ;
- Microsoft Store readiness plus tard, sans soumission automatique.
Pour un bug ou un retour testeur, fournir autant que possible :
- Windows utilise ;
- navigateur utilise ;
- source testee : YouTube, TikTok, Spotify Web, VLC, Discord, OBS, autre ;
origin,controlSurface,statusetisControllablevisibles dans l'app ;- etat
Sortie globale; - action faite : observation,
Auto actif, changement de profil, Panic, exclusion ; - rapport copie avec
Copier logs.
Ne pas coller d'informations sensibles : URL complete privee, token bridge, messages Discord, donnees de compte ou extrait audio.
Ne pas recoller desktop et extension dans le meme code. La bonne architecture est hybride, pas fusionnee : chaque app garde son role, et le partage passe par packages/protocol.
Le projet doit pouvoir etre repris sans connaitre l'historique des conversations. Avant d'ajouter une grosse fonction, verifier que le changement garde des responsabilites separees, des tests localisables et des documents publics a jour.
Ne pas remettre dans ce repo propre :
bin/obj/dist/build/out/release-assets/release/releases/graphify-out/.graphify/node_modules/
MIT. Voir LICENSE.