Why ordinary overlays break in Linux OBS
Two specific bugs that stop the pretty overlay you found elsewhere from working on your machine. I hit both of them the hard way.
The Browser Source gets no GPU on Linux
In the Linux build of OBS the browser source gets no hardware acceleration. getContext('webgl') returns null, and the acceleration toggle in the settings does not help on AMD, Nvidia or Intel. Any overlay drawn with shaders shows a black rectangle.
That is why WebGL is banned in Backdrops at the project-rule level. Everything is canvas 2D and CSS, deterministically. No "use a shader if WebGL is there, fall back if it isn't": two different results on two machines is not one picture, it is a lottery. One code path, one result everywhere.
CEF in Linux OBS silently ignores <audio>
A call to HTMLAudioElement.play() resolves without an error and without a sound - the mixer stays flat at zero (obs-browser issues #282 and #479). That is why TTS overlays and sound alerts are simply mute on Linux, and nothing in the logs tells you anything is wrong.
The fix is to change the playback path: AudioContext → decodeAudioData → AudioBufferSourceNode. OBS captures Web Audio just fine. That is how the speech in TwitchChat is done.
