OBS Media Source is the loop engine — not Twitch
On a typical Twitch setup the chain is: file → OBS source → stream mix → Twitch. Twitch receives whatever OBS sends. Infinite background music means configuring the source correctly and feeding it a file that can restart without a discontinuity.
Configure Media Source for a bed
- In OBS: Sources → + → Media Source.
- Uncheck “Local File” only if you know you need a URL; for beds, use a local seamless file.
- Check Loop.
- Optional: Restart playback when source becomes active if you hide/show the source between scenes and want a predictable downbeat (know that restart will expose a bad seam instantly).
- Set audio monitoring / tracks so the bed is in the stream mix but not feeding your headset twice unless you want that.
VLC Video Source is the alternative when you need a playlist. Same seam rule applies to every item in that playlist.
Why streamers hear a gap at the “loop”
- File ends with padded silence from an MP3 export.
- Loop unchecked — OBS finishes the file and sits on the last frame/silence.
- Scene switch recreates the source and starts from sample 0 against a loud intro.
Prepare the bed with Loop Music so the restart is silent, then keep Loop enabled.
Levels while you talk
A perfect seam at −3 dB under speech still ruins the stream. Duck the bed (sidechain/compressor or manual riding) so commentary wins. Seamless looping fixes the join; gain staging fixes intelligibility.
Click still there with Loop on? Diagnose the click.