Cover Request lets viewers pick from a setlist you build in advance, then you sing them in order. Unlike the song system, here the video is just backing music (you're the act), and the screen can overlay per-line karaoke lyrics.
What it solves
The fiddly part of a singing stream is "what can they request, in what order, and where do the lyrics go." Cover Request folds all three into one place: you decide which songs are singable, viewers can only pick from those, requests line up into a running order you advance one at a time, and the lyrics ride on an OBS widget, visible to viewers and doubling as your teleprompter.
Getting started
- Add songs you can sing on the Song List tab; a title alone is enough to start.
- Want karaoke lyrics? Open the lyrics editor and add a timeline (below).
- Add the cover widget's OBS URL to your streaming software.
- Turn on the cover chat commands on the Commands page
(
!coverrequest/!cover/!coverlist: built-in commands start disabled; enabling one for the first time also brings its default alias,!cr), then set the per-viewer limit and reward binding. - Once viewers request, use the Queue tab and press "Next" to sing through them (if you want to sing something that isn't in your library, quick-add it right there).
Streamlabs Desktop, Meld and other streaming software that supports browser sources work too. To combine several widgets into a single source, use a Stream Overlay.
Four capability levels
How far each song goes is up to you, from zero effort to full karaoke:
- Title only: just a name; viewers can request it and you can sing it. No YouTube, no lyrics needed.
- + backing / guide: attach one YouTube URL each (either may be missing); the widget plays the audio for you.
- + static lyrics: a full lyric block on screen; it doesn't move, but it works as a teleprompter.
- + timed lines: lyrics light up line by line in time with the backing track. Full karaoke.
Where lyrics come from
The lyrics editor puts typing and timing on one screen. Fetching and importing are shortcuts, not the only way in:
- Fetch on add: tick the box while adding a song and the site matches title and artist against a community lyrics database (LRCLIB) exactly, showing you what it found before saving. An artist is required for the match.
- Fill a whole batch: “Fill in lyrics” on the library page runs through every song that has none (handy right after importing a whole list). It only fills what is empty, never overwrites, and can be stopped; press it again and it picks up the rest.
- Search online: look up a community lyrics database (LRCLIB) by title; popular songs often come back with a ready timeline. Use this to pick manually when the exact match finds nothing.
- Import a file: LRC, SRT or WebVTT (three common subtitle formats) as a starting point you then edit.
- Paste a block: copy a whole lyric from somewhere else and paste it in, one line per lyric line; time it later.
- Mark times while it plays: play the backing track and hit “Mark start” at the start of each line to stamp its time, the standard karaoke workflow.
- Type and nudge: every line can be typed by hand and its time adjusted step by step, plus a whole-song offset to line the lyrics up with the audio.
Besides a start time, each line can also carry an end time. Without one, a line stays lit until the next line takes over; with one, it clears as soon as it is sung, much cleaner across intros and long instrumental breaks. Exported to SRT or WebVTT these become the subtitle cue times, and WebVTT keeps the ruby readings too.
Furigana (Japanese), Bopomofo/Pinyin (Chinese) and Hangul readings are all supported: select the
characters and type the reading in the editor, or write it inline as
|漢字《かんじ》, which renders as small text above the base characters.
Curating your list and sharing it
Every row on the song list page has a checkbox. Tick a few and a toolbar appears: you can
enable, disable (viewers cannot request it, but the song stays),
delete, or export the selection to a .cbcs file.
Select-all while a search is active selects exactly the search results.
The top line of a row is the title and artist; the line below it lays out what the song has as a row of small markers: backing track, guide track, lyrics, timed lyrics, then your own tags. Anything it lacks simply is not there, so one glance tells you which songs still need a backing track or lyrics. The action buttons (lyrics, edit, delete) stay hidden until you point at the row, where they take the place of those markers; phones and tablets have no pointer, so there the buttons are always shown. Clicking the song title opens the editor as well.
Give songs tags (like "anime", "ballad", "Japanese") and a row of tag buttons appears above the list: tap one to see only that tag, and it stacks with the search box. Your public cover page gets the same buttons so viewers can browse by category. A long library stays smooth, only the rows on screen are rendered.
Tags are added one at a time: type and press Enter to add one, click the x to drop it, up to 10 per song. Below the box you get the tags this library already uses; click one to add it, so the same category does not end up spelled two different ways and split in half.
The export carries the title, artist, backing and guide tracks, tags and lyrics, including the line-by-line timing you spent an evening marking. Hand the file to another streamer, they hit Import on their own song list, and it is in. One file can hold many songs. It is a compressed binary file, not something to hand-edit. On import, songs you already have (same title and artist) are skipped rather than overwritten, and if your library hits its limit the rest are skipped with a count. The enabled/disabled state does not travel with the file: imported songs are requestable right away; bulk-disable them if you are not ready.
This is not the same as settings backup/restore: a backup is a snapshot of the whole channel, this is a handful of songs packed up to share.
Each row also carries two numbers: Requests is how many times viewers asked for it (songs you add yourself from the dashboard don't count; otherwise your warm-up numbers would drown the signal), and Sung is how many times you actually finished it. Both are running totals: clearing the setlist or deleting sung rows does not reset them, because they track the song's history rather than tonight's count. The only thing that takes Sung back down is Previous, since that is Next in reverse. Use them to decide which songs deserve a backing track and lyrics, and which ones nobody actually asks for.
Backing and guide tracks
Each song can hold two YouTube tracks: a backing track (instrumental only) and a guide track (with a vocal to sing along to), or just one of them. The widget defaults to "audio only": the video is hidden, only the sound and lyrics show, which keeps the scene clean and works as a teleprompter; flip to "show video" if you want it visible. The sound comes out of the OBS widget, so it has to be in your scene and not muted.
Changing the key (transposing)
There is no key control on the site, and there won't be one. The backing track is played by YouTube's own player, which offers no pitch control, and we cannot reach its audio to process it; that is a browser security rule, not a missing feature.
Two things that do work:
- Put an already-transposed version in your song list. Plenty of backing-track channels upload +2 or -3 variants alongside the original; just paste that URL into the backing track field. Watch the lyric offset: different uploads have different intro lengths, so timings tuned against the original won't line up.
- Add a pitch-shift filter in OBS. Put a pitch shifter on the browser source running the cover widget. It only touches the backing track; your microphone is a separate track and stays untouched, which is exactly what a karaoke key control does.
Use our own plugin (the easy route)
ChiwaBots publishes an OBS audio filter plugin, cb-pitch-shift, built for exactly this: install it and it shows up in the source's Filters list, no VST involved. It transposes from -12 to +12 semitones, the tempo stays put, and 0 semitones is a straight bypass. It also adds a small dock, so changing the key mid-stream is one click instead of a trip through the filters window. Windows, macOS and Linux; needs OBS 31.1 or newer.
There is a link next to the source URL on the OBS Widget tab, or go straight to the latest release on GitHub (the downloads and the install steps for all three platforms are on that one page); it also has a page in the OBS forum resource section. It is free and open source, and it is a third-party plugin, not affiliated with the OBS Project.
Two things to know first. While it is active the audio is delayed by a constant ~60 ms and the video is not: inaudible for an audio-only backing track, but if that source also shows the video and lip sync matters to you, add a Render Delay filter to the same source to match. And the installers are not code-signed, so Windows shows an "unknown publisher" prompt the first time and macOS Gatekeeper blocks the package; the release page walks through both.
Or use somebody else's VST2 plugin
If you would rather not install ours: right-click the source → Filters → add a "VST 2.x Plug-in" audio filter. Three things to know up front, or it will look like OBS can't do this at all:
- OBS gives you the socket, not the plugin. Once you add the filter its dropdown is empty; you have to install a pitch-shift plugin yourself before anything shows up in that list.
- VST2 only, not VST3. Plenty of plugins now ship VST3 only; those will never appear in the list. Check for a VST 2.4 build before you download.
- Free ones do exist. Search results tend to be dominated by paid pro-audio brands, but there are free options that do the job, for example Auburn Sounds' Graillon 2, whose free edition includes pitch shifting and ships VST2.
Either way, tick "Control audio via OBS" first. By default a browser source sends its sound straight to your speakers; if OBS isn't handling the audio there is nothing for a filter to process; the filter is attached and the key is set, yet it silently does nothing. Turn it on from the source's right-click menu in the Audio Mixer; once it's on, the source shows up on a volume bar in the mixer; if you can see it there, its audio is going through OBS. (Our plugin's dock warns you when it detects this.)
One more note: how you obtain and use a backing track is your own licensing responsibility, the same as when you play the original backing track directly.
Controls while you sing
During a stream you mostly live on the Queue tab. Besides Previous/Next, it drives the backing track the widget is playing:
- Switch instrumental / guide: want a guide vocal for this one song? One click, no settings trip, and it picks up where you were instead of restarting.
- Play and Pause: two separate buttons. Stop the track while you talk, drink, or read chat.
- Volume: sets the volume of the OBS widget directly.
- Restart: botched it? Send the track back to 0:00; the lyrics jump to the first line too.
- Finish: marks the current song as sung without starting the next one. The pending list is untouched, the current slot just goes empty. The whole difference from "Next" in one line: Next starts the next song right away, Finish doesn't. Use it when you want to chat or take a break before picking what's next.
- Add a song yourself: warm-up numbers, or requests you got somewhere else, go straight from the library into the queue. For a song that isn't in your library yet, quick add takes just a title (artist optional). Either way you choose where it lands: Pending, Current, or Sung. Picking Current starts singing it right away (whatever was current before becomes sung automatically), picking Sung is for backfilling a song you forgot to mark. Neither one reshuffles the pending queue; the one exception is a song that was already sitting in it, in which case that row moves up rather than a duplicate appearing for you to clean up. A quick-added song does not join your requestable list by default: it shows on your screen and in the dashboard, but viewers can't request it; tick "Also add to the song list" if you want to keep it.
This page also shows a live view of the OBS widget, the same one your viewers see, but muted here (the sound only comes out of OBS), so you can see the current screen without switching to OBS.
One trade-off worth knowing: playback state is not stored on the server. The widget never starts playing on its own, and after OBS reconnects or the source is reopened it sits at "not playing" until you press play again; volume returns to its default too. In exchange, a button press always means "do this now" instead of replaying a state left on the server hours ago.
How viewers request
Cover commands are part of the same built-in command set as everything else on the site; you enable them, set aliases, permissions and cooldowns on the Commands page:
!coverrequest <song>: request a song from your setlist (default alias!cr, fewer keystrokes for viewers). When several songs share a title (different artists),!coverrequest title - artistpins the one you mean. The separator is a space-dash-space (-, so a hyphen inside a title is not split); without it the first matching song wins.!cover: answers with what you are singing right now. Info only: adding a song name does not request it; requesting goes through the command above.!coverlist: replies with the link to your public setlist page (chiwabots.com/@yourchannel/cover), where viewers can see what you are singing now, who is queued, and every song they can request; nobody has to copy titles off your screen.
You can also bind a channel points reward: whatever the viewer types when redeeming becomes the song they requested.
There is one more way in: turn on public page requests on the Settings tab (off by default) and logged-in viewers can request any song right on your public cover page with one tap, no chat command. Make it free, or charge points or bonus points per request (bonus points needs bonus points enabled and Pro), plus a per-viewer cooldown against spam. The limits, de-duplication and exempt roles are shared with command requests, so a public request takes a slot like any other and the same song can't be requested twice. A failed request (full, on cooldown, not enough balance) is never charged.
The OBS widget's five blocks
The widget has five sections you can toggle independently: Now Singing (large title + progress) and Current lyrics (per-line karaoke when the song has a timeline, a static block when it doesn't; you don't pick), plus three list blocks:
- Reserve: what you're singing next, i.e. the pending queue.
- Setlist: what you've already sung this stream, kept until you clear it.
- Song List: your requestable library, so viewers know what they can ask for.
Off by default: a library can hold hundreds of songs while OBS fits about a dozen,
and "+N" for the rest tells viewers nothing. Send them to your public cover page for the full list
(that's exactly what
!coverlistreplies with). Turn it on if you do want it on screen.
Those three headings default to the English terms the karaoke-stream scene already uses, so viewers recognise them in any language; all four headings can be changed to whatever you want, and clearing one hides that block's heading entirely. Title and lyrics are separate toggles: for a pure teleprompter, turn off "Now Singing" and keep the lyrics.
The title and lyrics at the top take a set height (the lyric height is the number of lyric lines you choose, and the line being sung scrolls to the middle); the remaining height is split evenly between whichever list blocks are on. Those blocks have two more knobs:
- Order: drag them on the settings page to decide what sits on top (or on the left, when they're side by side).
- Blocks per row: one column (stacked), two, or three. Two by default: an OBS source is usually wide but not tall, so side by side fits more than stacking; anything that doesn't fit wraps to the next row.
Two more switches are off by default: Show artist (adds the original artist next to the title) and Show list numbers (position in Reserve, running count in Setlist). Space on OBS is tight, so each line goes to the song title unless you say otherwise. When a list overflows it scrolls on its own, pauses at the bottom and jumps back up; speed and pause length are both adjustable (set the speed to 0 to turn it off and go back to "+N").
Font, font size, lyric lines, panel padding and colors are all adjustable, and the settings page shows a live preview as you go. The widget fills the whole OBS source, so if you want breathing room, raise the panel padding.
To put the lyrics somewhere else on screen (say, along the bottom edge over your gameplay), turn on Detach lyrics under "Advanced layout": the lyrics split off into their own block, and a 16:9 editor lets you drag the box and its corners to size and place it, while everything else (video, now singing, lists) stays in the main panel. This splits one OBS source into two blocks rather than adding a second widget, so there is no risk of two backing tracks playing at once. When using this mode, set this OBS source to a full 16:9 frame so the editor coordinates line up with what you see.
Common misconceptions
- This isn't the song system, and you can run both at once. The song system plays YouTube videos for viewers and drops them once played; Cover Request has viewers pick from your setlist, you sing, and the video is only backing. Their data and widgets are entirely separate.
- Sung songs don't disappear on their own. "Next" just marks the current song as sung and moves it to the widget's Setlist block, where it stays until you press "Clear", so viewers can see what you've sung this stream. You can clear only the sung ones or the whole thing.
- Fetched lyrics are editable, and obscure songs can be typed from scratch. Search and import save time but aren't required; you can fix typos, line breaks and censored words on fetched lyrics, and originals or arrangements can be written line by line yourself.
- Readings usually have to be added by hand. Community databases and LRC/SRT carry plain characters only, so furigana/readings are added manually; only a format like WebVTT can carry them natively.
- Your library is private. The setlist you build is yours alone to see and use; there's no shared cross-channel public library.
- The widget plays the backing track, not your voice. It plays the backing/guide audio and overlays lyrics; your singing goes through your own microphone into the stream, separate tracks in OBS.
Settings
Your own cover library; viewers can only request songs from here.
Choose how viewers request covers from your extension panel.
The text below is taken from the in-app help, so it stays in sync with the actual interface.
| Setting | What it does |
|---|---|
| No songs yet | Add a few songs so viewers have something to request. A title on its own is enough. |
| Artist | Optional; the original artist, used for display and search. |
| Auto-fetch lyrics | On save, match the title and artist exactly against LRCLIB and store the lyrics if found. An artist is required. |
| Tags | Up to 10. Used to search and group this list, and viewers can browse your public list by tag. |
| Enable cover requests | Let viewers request songs from your song list. Runs alongside the Song Requests module; both can be on at once. |
| Custom reward name | Bind a channel points reward by its exact title (leave empty to disable). |
| Queue limit | Max songs waiting to be sung. |
| Per-viewer limit | Max pending requests per viewer. |
| Allow requests from the public page | When on, logged-in viewers can pick and request songs right on your public cover page, no command needed. Off by default. |
| Pricing | Free, or charge points or bonus points per request. Bonus points needs bonus points enabled and Pro. |
| Cost each | How much each request costs (in the currency above). Set 0 for free. |
| Per-viewer cooldown (sec) | Minimum seconds between one viewer's requests. Set 0 for none. |
| Default track | Which track loads first for each song. |
| Presentation | Audio only shows lyrics over the sound (doubles as a teleprompter); video also shows the clip. |
| Font | Leave empty for the widget default. |
| Font size | Base size for lyrics and the lists. |
| "Now singing" font size | Size of the title and artist. |
| Lyric lines shown | How many timed lines are visible at once; the line being sung scrolls to the middle. |
| Panel margin | Padding inside the background. |
| List section layout | Whether the list blocks stack vertically or sit side by side. This arranges the blocks themselves, not the columns inside each list. |
| Show artist | Adds the artist next to the song title in Now Singing and on every list row. |
| Show list numbers | Positions in Reserve and Setlist. Song List is your library, so it has no numbers. |
| List auto-scroll | Pixels per second the lists scroll when they overflow; 0 turns it off. While on, the full list scrolls by instead of being cut with "+N". |
| Hold at end (seconds) | How long to pause on the last line before jumping back to the top; the same pause applies after jumping back. |
| Detach lyrics | Makes the lyrics a separate block you can place anywhere; everything else (video, now singing, lists) stays in the main panel. |
Chat commands
These are the default command names; they can be renamed or given aliases in the dashboard.
!coverrequest— Request a song from the streamer's cover setlist (default alias !cr).!cover— Show which song is being covered right now (info only, never requests).!coverlist— List the cover songs viewers can request right now.
Other notes
- Viewers request from your own cover song list, with backing-track playback and a karaoke lyrics widget
- Cover requests are mainly triggered by the chat command !coverrequest (built-in commands are off by default). It's currently disabled, so viewers typing it in chat won't get a response.
- Both tracks are optional. Look up fetches the video details for you to confirm and replaces the field with the video ID.
- Roles exempt from the request limits above.
- When off, viewers can't request covers from the panel (the list still shows).
- How viewers pay to request a cover from the panel.
- Automatically refunded if the request fails.
- Pick which blocks appear on the widget. Leave a heading empty and that block gets no heading.
- "Now Singing" and the lyrics stay at the top; drag ⠿ to reorder the three list blocks below them.
- Set this OBS source to a full 16:9 frame so the editor coordinates below line up with what you see.
- Drag a box to move it, drag a corner to resize. Coordinates are a percentage of the frame; changes show live in the preview above.
- A theme only changes the styling: borders, corners, how headings and lists look. Your colors, text sizes and spacing stay as you set them.
Other settings
These settings have no additional help text in the dashboard; only their names are listed here.
- Cover request command isn't enabled
- Select all
- Enable
- Disable
- Export
- Delete
- Clear selection
- Import share file
- Import a song list
- Import failed
- This is not a cover song list file, or its contents were altered.
- This file comes from a newer version of ChiwaBots.
- Add song
- Title
- Tracks
- Content
- Requests
- Sung
- Requestable
- Searching for lyrics…
- No exact match; the song will be saved without lyrics.
- Couldn't fetch lyrics; please try again later.
- Fill in lyrics
- Stop
- Look up
- Already used:
- Lyrics
- Live lyrics
- All
- Request rules
- Custom channel point reward
- Playback
- List display
- Text and lyrics
- Colors and panel
- Widget theme
- Public page requests
- Advanced layout
- Viewers exempt from limits
- Free
- Points
- Bonus points
- Enable panel cover requests
- Cover request currency
- Bits
- Points per request
- Bits amount
- Accompaniment
- Guide vocal
- Audio only
- Show video
- Widget zones
- Drag to reorder
- Now Singing
- Current lyrics
- Reserve (up next)
- Setlist (sung this stream)
- Song List (your library)
- Lyrics alignment
- Video width
- Video position
- (no heading)
- Text color
- Highlight color
- Dimmed color
- Background color
- Main panel
- One column (stacked)
- Two columns (side by side)
- Three columns (side by side)
- Left
- Center
- Right
- Reserve
- Setlist
- Song List
- Classic
- Minimal
- Card
- Neon
- Glass
- Restore defaults