Simple Sound Control version history - 3 versions
Simple Sound Control by nrek
Simple Sound Control version history - 3 versions
Be careful with old versions! These versions are displayed for testing and reference purposes.You should always use the latest version of an add-on.
Latest version
Version 0.2.4
Released May 13, 2026 - 169.25 KBWorks with firefox 140.0 and laterChrome now prefers Tab Capture for non-100% tab volume by default. The popup attempts the whole-tab audio path before sending content-script volume updates, so sites like Reddit and YouTube are less likely to have their own media controls pinned, fought, or routed through a fragile per-element path. If Chrome permission is denied or Tab Capture is unavailable, SSC falls back to the existing content-script behavior.
Content-script volume is skipped when Tab Capture successfully owns the tab audio path. Returning to 100% still sends a neutral content-script update so any fallback-path holds can be released.Source code released under MIT License
Older versions
Version 0.2.3
Released May 12, 2026 - 168.06 KBWorks with firefox 140.0 and laterFixed
Reddit (and other no-CORS MSE players) no longer go silent at non-100% SSC. Reddit's video element loads media via MSE (blob: URL) without crossorigin="anonymous". Per the Web Audio spec, calling createMediaElementSource on a cross-origin element that hasn't opted into CORS taints the source — the call succeeds but the node outputs silence for the rest of the element's life. The content script now gates Web Audio routing on a canRouteViaWebAudio(el) check: elements that would taint (cross-origin without crossorigin, or blob: / data: URLs without crossorigin) skip createMediaElementSource entirely and run on the el.volume fallback path with the existing volumechange enforcer. YouTube (crossorigin="anonymous" set) is unaffected and still uses the gain-node path. Audio is audible and attenuated at SSC < 100% on Reddit instead of vanishing.
InvalidStateError from createMediaElementSource falls back to el.volume instead of going inert. Previously, if the page's own player attached its MediaElementSource to a media element before SSC (Chrome throws InvalidStateError on the second attach for the same element), SSC marked the element routeFailed and gave up — the slider became a no-op for that element. Now we promote the element into the volume-fallback path on InvalidStateError, so SSC still attenuates against page-driven el.volume writes via the enforcer.
Fallback elements are no longer pinned at SSC's last attenuation when SSC returns to 100%. Previously, applyVolumeFallback short-circuited at 100% — so an element that had el.volume = 0.2 written for SSC=20% stayed at 0.2 until the page next wrote the property (which, on Reddit, only happens if the user moves Reddit's own slider). The content script now snapshots el.volume on entry to the fallback path and refreshes the snapshot whenever the enforcer detects a page-driven write. On the SSC → 100% transition (and on passthrough entry — see below) we write the snapshot back, so the element ends up at the page's most recent intent rather than at SSC's last value.
Tab Capture mode no longer double-attenuates fallback-path elements. Previously, engaging Tab Capture while SSC was non-100% on a fallback site (Reddit, Meet, etc.) left a residual el.volume = SSC% written by the content script; the captured stream was then re-attenuated by the offscreen GainNode, so 0.2 × offscreen_gain came out instead of the user-set level. Entering passthrough now releases each fallback element's el.volume back to its snapshot before the offscreen chain takes over, restoring the documented Tab Capture composition (page_intent × offscreen_gain) regardless of whether the element was routed via Web Audio or via the fallback path. The enforcer continues to record page-driven el.volume writes during passthrough (without re-asserting) so per-participant volume changes in Meet etc. are captured for the next release.Source code released under MIT License
Version 0.2.0
Released May 1, 2026 - 163.99 KBWorks with firefox 140.0 and latertap into GainNode rather than volume adjustments to help mute or louden; rather than attempt to set the volume for the tab directly (philosophical adjustment, functionally better)Source code released under MIT License