Requests come in from Twitch chat and from channel point redemptions, either straight from Twitch or through OBS, and are found by searching for the text: on the hub the search starts at YouTube and the song joins the hub's own queue, and on the video player it is YouTube Music's search and its own queue as it always was. Nothing here is needed for the app to play music normally.
Switched off, nothing below connects and any queued requests stay where they are.
Read-only and anonymous, no login, no token, nothing to authorise. Chat is only read for messages that start with the trigger word. Those requests are also what a channel point redemption with no message of its own falls back to, for five minutes.
One named viewer, nobody else, can control playback by typing a phrase in chat. It rides the same anonymous chat connection as the requests above, so there is nothing to register and no account to sign in to: switching this on opens that connection by itself, using the Twitch chat channel above (or the redemptions channel, if that is the only one filled in). A public !skip is how a raid empties a stream's queue, which is why exactly one name is allowed. Each phrase is yours to choose: !skip, !pause and !play are where the list starts.
Nothing to register and nothing to sign in to: Twitch announces every redemption in the channel's chat, and this reads that line from Twitch's own chat page, held open in a hidden window, exactly as OBS's chat dock shows it. It needs no account, no Client ID and no OBS, and it works whether the channel is live or not. Show the chat page opens what the app is reading, which is the first thing to look at if a redemption does not arrive. Because it is Twitch's page, a Twitch redesign can break the reading, the log says so plainly when a line mentions a redemption it could not parse.
This is the one route that needs nothing from OBS, and nothing from the stream either: the subscription stays up while the channel is offline, so redemptions are caught the moment they arrive. Signing in uses Twitch's device code flow: create a free app at dev.twitch.tv/console/apps (any name, a Public client, redirect http://localhost), paste its Client ID above, then sign in and type the code shown at twitch.tv/activate. No client secret is used, and the sign-in is stored on this machine only, encrypted wherever Windows offers a key ring.
The viewer's message is what gets played; a reward that arrives with no message falls back to the song that viewer last asked for in chat. That is OBS's own WebSocket server: enable it in OBS first, then connect here. Redemptions are only reported by OBS's Twitch integration, the account it streams with (Settings → Stream → Twitch → Connect Account). The Twitch chat dock is the Twitch website and carries nothing to this app, and some OBS builds ship no Twitch integration to connect at all (obs-websocket 5.7.4, as bundled with OBS 32, is one), in which case the source below is the only one that can work.
The wait is seconds between one viewer's requests; 0 turns it off. A request that is refused is only written to the log, never sent to the player.
Clear unsent empties this list; Clear the queue empties YouTube Music's own queue instead, every track after the one playing, so nothing is skipped. Requests already handed over are marked removed, since YouTube no longer holds them.