Tech Volunteer Guide
For events taking commentary/host mics from Discord instead of through the runner's stream
For events taking commentary/host mics from Discord instead of through the runner's stream
Thank you for volunteering as a restreamer at an upcoming event. The restreamers run the stream by using the broadcast package to control the action. If you've got experience with other marathon setups that use NodeCG, you'll feel right at home, and hopefully find your experience even easier than usual!
You'll organise and work alongside runners, hosts and setup volunteers, with all expected to follow your instructions. You will work under a producer and be expected to follow their instructions. You will control the stream's OBS through an online portal. Your general workflow is as follows:
Receive already set-up runners and commentators from the setup volunteer to start their run
Ensure the runner, host and commentators are audio-balanced and ready to start
Transition to the game scene and start the timer when ready
Be on hand to
display and hide any warning messages
respond to any issues or changes
make run-specific adjustments
Communicate with the live host through Discord chat. Unless agreed otherwise, you shouldn't be speaking on stream as that is the host's responsibility
Stop the timer, then send the current run to intermission when it's finished, running a charity video if requested
All voice communications during the stream take place on Discord:
🔊GREEN ROOM: anyone involved in the event can join this room and chat, but is reserved for preparing runners, commentators, and hosts.
🔊LIVE ROOM: staff, tech and hosts can join this room, this is where the stream takes place. You or your setup volunteer will need to move runners and commentators into this room when ready.
🔊HOST/TECH ROOM: this is a room that only yourself and hosts will have access to. You can hop into this room to listen to the stream in time with the stream delay - this allows you to listen out for signals from the host and runners at the right time. You won't be able to hear the intermission music, this is deliberate to avoid too much noise. Hosts also use this channel to speak to the audience during intermission - you won't have permission to speak in this channel (unless you're also a host), so don't worry about needing to mute yourself.
If you've been on tech for a marathon before, you'll likely be familiar with NodeCG. Capable of a lot of functions, primarily it acts as a web-based interface for remotely controlling an OBS instance. You will have been provided a link on Discord to access the one for your marathon. You'll be asked to log in with Discord, as your role in the Discord server grants access. If you cannot log in, please contact a staff member or @NickRPGreen.
You'll need to use the first three main tabs across the top left of the workspace. The Settings tab and the tabs on the top right of the workspace are to be ignored, please don't touch them.
On each tab, you'll have a bunch of different controls. Hovering over the bar at the top of each will allow you to collapse and move them; you're welcome to do this and reorder the controls as you wish; this won't affect the display for other users. You can also zoom the page in and out to make the controls easier to manage.
The Main Workspace is used to manage the current run and to change over to the next run. This will be the tab you spend most of your time on, using the following controls:
Run Player
This is useful for looking at the information about any run in the marathon. They're all displayed in schedule order and you can click on the arrow on the right to see more details. You won't need to click on any of the play buttons, switching to the next run is automated elsewhere.
Preview/Program
This is a live feed of the Sync Scene, OBS Preview, and OBS Program. Sync is used to monitor each player's delay sync with OBS. Preview can be used to check on edits or changes, whilst Program is being streamed to Twitch. If either feed isn't displaying anything, please ping a tech staff member.
Live Switch
This is where the majority of the action takes place. If you have a Stream Deck or similar device, this works much the same way, as they are simply programmable buttons that perform certain actions. Whilst the timer is running, most scene switch buttons are disabled to avoid accidentally switching whilst a run is in progress. Whilst each button appears self-explanatory, there are a couple of extra actions taking place on each.
Start Run: The main "Start The Next Run" button, press this when everyone is ready to start. Upon pressing, OBS will:
- immediately unmute the Discord Out Audio (see audio later about how audio works), so the host and commentators will immediately be heard on stream.
- start a local recording, which is what we use to upload to YouTube.
- after a short delay, switch to the Game Layout scene that matches the Game Layout code in the run's details, and also unmute the Runner's Game Out and Runner's Mic Out Audio.
Intermission: To go to intermission only after a run has ended. As you can probably work out, this does the opposite of the previous buttons. Upon pressing, OBS will:
- switch to the Intermission scene; during the transition, NodeCG will also automatically progress to the next run.
- set the OBS Preview to the scene the next runner will be using
- mute the Runner's Mic Out and Game Out Audio, and the Discord Out Audio, meaning you are free to talk in the LIVE channel without it going to the stream.
- stop the local recording
- switch the Runner Stream Source to the next runner, as per the number in the player's Stream code in the run details
Charity Video from Run: Does the same as the Intermission button but instead switches to the Video scene. This plays a random video about the charity and once the video ends, OBS will automatically switch back to Intermission. This should be used if the Intermission needs some time padding out, or it's been a while since a video was last played. Don't use this if we're behind and need to get the next run started quickly. Do not use this button if you've already gone to Intermission.
Charity Video from Intermission: This goes to the Video scene but without the audio changes, moving the run along or changing the Runner Stream Source. Use this if you've already gone to Intermission and then it's decided that a charity video should be played.
Opening: Go to the Opening scene. Staff will handle going to this scene.
Closing: If the last run of the day has concluded, press this to go to the Closing scene after you've gone to Intermission.
Tech Issue: If you have to advise the Host that there is a tech issue and we need to go to Intermission to resolve it, you should inform your producer. They will have a "god mic" meaning they'll be able to talk to the runner/comms/host without being heard on stream. Once everyone is ready you should pause the timer and the host will announce that there is an issue and we'll be right back; you should then press the Tech Issue Start button. This will go to intermission and mute the audio, but it won't stop the recording. At this point, you can jump into the 🔊LIVE Discord channel to talk to the host and runner. Once the issue is over, press the Tech Issue Over button to continue the run - don't forget to unpause the timer as well.
Warning Message
This toggles a warning message that appears at the top of the game feed for each player. This is useful for warning viewers of flashing lights, disturbing content or any other moments you'd want to warn of. The drop down displays several pre-set messsages you'll be able to show. Simply select the appropriate message from the drop-down and when you next press the show warning button, that message will show.
The button turns green when the message is showing and the current state of the warning message will persist between runs and refreshing sources. Multiplayer runs will produce a button for each player, with the warning message only appearing over that player's feed. You are able to display different messages over each player - changing the dropdown option won't change any messages currently being displayed.
Twitch Control
This shows the information being sent to Twitch to update the Stream Title and Game Category, including tagging the runners in the Title. This should all be automated and should only be edited in case of an error. If your producer advises that you should run ads during an intermission, click the appropriate time on the panel to start running ads.
Timer
This controls the timer that is displayed on the stream. Whilst active, most of the other controls are disabled.
From left to right the buttons are:
Play/Pause: The runner or commentator will likely do a countdown and you will click this when they say go. Whilst the timer is running, this switches to Pause, which is only needed if there's an issue.
Reset: Only used if there is a false start or something happens that causes the runner to restart.
Stop: When the runner calls time, click stop.
Forfeit: For the setup we have, this does the same as Stop, so isn't used.
Undo: When you push stop, the timer continues in the background. If you or the runner make a mistake and press Stop too early, the Undo button will continue the timer at the correct current time.
During a race, each runner will have their own individual Stop, Forfeit and Undo buttons, used as each runner finishes.
After a run, when you transition to Intermission, the timer will automatically reset ready for the next run.
Remember: always take instructions to start/stop from the runner from what you see on NodeCG, not from the runner on Discord. This way the delay of their stream matches when you start and stop the timer.
This has some additional control for OBS and is likely your first port of call if there are any issues:
Preview/Program: Identical to the Preview/Program area on the Main Workspace.
Scene Selection: A manual override for the Preview and Program scenes. Changing the program scene is automated and you should only change it here in an emergency. The preview scene will automatically update to the next runner's scene when you first go to intermission, and will switch to whatever was on the program scene when the scene changes. You likely won't need to change the preview scene manually, but it's useful to have just in case.
Runner Stream Source: This is where the URL for the runner's stream is managed. Every runner will stream to a dummy Twitch channel which starts https://twitch.tv/speedruntoolsukstream. The key adds 1-4 to the end of that URL. The key is updated to the next runner automatically when the run updates, but if the runner's feed isn't showing on the preview during intermission, you can manually change to a different URL key here. Clicking the eye icon will open that Twitch stream in a separate browser window. The delay field is used to add delay to each runner's feed - this is explained later.
Output Status: This shows whether the stream is live and whether a recording is in session. If you're the first/last Tech of the day, you may be asked to Start/Stop the stream. Recording is automated elsewhere and should only be toggled in an emergency.
Live Audio Monitor: This shows all of the outputs of the current scene, all of which can be muted/unmuted and raised and lowered. The display above shows what you'd see during a single player run. During a run, the runner's game and mic come from their stream - they send their gameplay audio down one stereo channel and their mic down the other. This keeps them synced with their game and webcam.
To ensure we can audio balance during the intermission, the runner's Game and Mics audio have two sources each. The "Mon" (monitor) sources can only be heard by OBS and are not sent to the stream. You'll be able to hear and adjust these during the intermission.
The commentators and host are all captured via Discord. If the host ever needs to talk during the Intermission, everyone else will need to be quiet. Before the run starts you will need to check the stream machine's Discord to ensure the runner is muted, otherwise they'll be captured twice.
The "Out" sources are what is sent to the stream. These must remain muted during the intermission and will be unmuted automatically when the next run starts. Once you've balanced the monitor sources, you should adjust the corresponding out sources to match them.
The Music output is the music player that plays during Intermission. You won't be able to hear it, that would be too distracting. It shouldn't ever need adjusting, but can be just in case.
As a general rule of thumb for balancing:
gameplay and music should normally peak at the top of the green area, with only loud sound ever peaking into the yellow
the runner, host and commentators should normally peak at the top of the yellow area, with only loud moments peaking into the red
Runners and commentators will have already been audio-balanced by the setup volunteer so that their output levels are correct. Don't ask them to adjust any further unless you think there's an issue on their end. You need to ensure that the output levels here are balanced correctly - if the runner's audio is always balanced the same way, you likely won't need to change the levels here.
If you're doing tech for a multiplayer run, you'll only see Player 1's audio during Intermission, and you'll always start with Player 1's audio when the run starts. Once the run goes live, any additional players' Out audio should remain muted, but you can use the Mon audio to balance it ready. Game audio can be swapped between runners if one player gets ahead in a race. Obviously this means any additional runners' mics won't be present - you should trust that your setup volunteer balanced them correctly, and you'll be able to make any quick adjustments once the scene has changed.
It's worth noting, because HTML and CSS are funky, the Audio Monitor works best when your page is shown at 100% zoom. Zooming in or out can cause it to warp or look odd.
The Run Editor is where the run details are entered that will show on stream. All of these details should already be prepared and shouldn't need any manual entry unless changes are required. To do this, click on the Edit Run button (third circular button under the details) which will open up the Edit Run panel. Do not use any of the other buttons under the run info.
You shouldn't need to make any changes as the Setup Volunteer will go through these details and update them with the runner before they're handed over to you. You should also avoid making any changes to current run, either during the run, or the Intermission before it starts. Making changes to the run whilst at Intermission will cause the Intermission screen to refresh with the new details - even if they're details that aren't shown on the Intermission screen. Making changes to the current run whilst at a run scene will refresh the screen, but you're able to change other runs without any refreshing.
Notes about these fields:
Region isn't used and can be ignored - it doesn't matter if there's already information there.
Released can be used (you can also leave it blank) and should contain a four-digit year, unless the runner is running multiple games back-to-back.
Game (Twitch) should match Game unless the game's name isn't a registered Twitch category. If this is the case, this should have already been replaced, but it's worth checking with the runner in case they recommended a different category.
System can be used (you can also leave it blank).
Estimate must be used for any games, but can be ignored for interviews and setup blocks if preferred.
Setup Time must be filled in, but can be set to 0:00:00 if desired.
Layout Code must match the Layout Code shown on the runner's stream overlay - see below.
Team Name, YouTube, and Country Code are not used and can be ignored - it doesn't matter if there's already information there.
Name isn't used, the runner is shown on stream from the Twitch entry.
Pronouns can be left blank if a participant does not want any displayed. Pronouns are always shown on stream in lowercase.
Stream is the numbered version of "speedruntoolsukstream#" that the run should be streaming to. This must contain a single digit from 1-4.
Cam determines whether the runner has the webcam area shown on the layout. Any text, including leaving it blank, counts as yes. The webcam area will only hide if "no" is entered.
If the run is a race, there'll be a separate team at the bottom for each racer. In a solo run, there will just be one entry.
The other panels in the Runs tab shouldn't really be needed, though the Player Layout panel can be used to quickly swap race names around if the runners have set up in a different order than what has been entered. If you're on tech for a relay, a Staff member will help you through the Relay Control.
It's important to remember that every source, including the stream itself, is running with a delay - what you see in the previews in NodeCG is four seconds later than what you can hear on Discord. Whenever you need to take a cue from the comms (start/stop the timer; the host is ready to finish), it should always be done by either taking a visual cue from the stream, or audio cues from the stream machine. Do not take your cues from Discord audio.
Before you can get the next run started, you'll need to end the current run. Listen out for the runner's instruction to hit the stop button on the timer. The runner and host should then wrap up their comms.
Your producer should let you and the host know that you plan to go to a charity video during the intermission. Once the host has declared they're ready to finish, hit the corresponding button on the Live Switch Panel. Do not join the 🔊LIVE voice channel until you've gone to intermission and ensured that the mics are cold (this should be automatic, but always best to double-check).
It's usually polite to wait for the current runners to leave the 🔊LIVE voice channel, but if they're taking too long, feel free to ask them to jump out or into the 🔊GREEN ROOM, especially if we're behind schedule.
Runners and commentators cannot enter the 🔊LIVE voice channel freely, you'll need to drag them in from the 🔊GREEN ROOM. Check the OBS Preview to ensure the runner's stream is showing correctly on the correct scene and make the final adjustments.
Because the runners are streaming to Twitch, there will of course be a delay for their stream coming through to OBS. To ensure everyone is synced up, the Discord audio from the commentators needs delay adding to it. Checking the Sync preview on NodeCG will show the current times of each stream.
Using the Local OBS Delay field on the Runner Stream Source panel, use the arrows on the input field to add delay to the local OBS until the timers are as close as you can get them (they don't need to be perfect). The arrows increment the delay field by 5 - this adds 50ms of delay. The max delay value is 500 - this is 5 seconds of delay.
When it comes to multiplayer runs, you'll also need to add delay to one of the runners. Work out which runner is ahead (which one's timer is higher) and add delay to that player until it roughly matches the timer for the slower runner - then add delay to the local OBS.
You need to do a final audio check - the setup volunteer will have balanced the audio with the runner, but you now need to check that it looks right on our end using the Mon sources on the Live Audio Monitor:
Get the runner to play a particularly noisy section of the game - they should be peaking at the top of the green area on the audio monitor (occasional louds noises going into the orange is fine). If they aren't peaking here and the setup volunteer confirms they definitely are on their OBS, adjust the level on the Audio Monitor until they are.
Ask each person, in turn, to say a few words and check that each person is peaking at the top of the orange area. If they need adjusting, ask them to adjust their own audio levels first, and then if still needed adjust the levels on the stream machine's Discord. This is done by right-clicking on a speaker and using the User Volume in the menu shown on the right. If the host wasn't present at the setup, they'll need their audio balancing again.
If you've made any adjustments to the Mon sources, copy those adjustments to the Out sources.
Check with the runner exactly when the timer should start and finish, and ask them to give you a rough idea of what should be happening about five minutes before the end of the run. This gives you a better idea of when you need to be ready on the timer. Also double check whether you'll need to display any warning messages during the run - the runner's advice on this will be advised on the tech sheet, so go over that with the runner to make sure you're happy with it.
When everyone is ready and you're happy to start, ask the host to give a clear countdown once you've left the channel. Listen to the audio on the stream machine and press the "Start Run" button once the host's countdown has ended. The mics should instantly unmute so that the host can start their introduction. After a short delay, the scene will switch and the game audio will unmute. The delay is intended so that the host starts taking before and during the transition, which makes things flow better.
Once everyone on the stream is talking, keep an eye on the audio levels and adjust if necessary, you should see the "Out" inputs unmute automatically. If only one person is too loud or quiet, ping that person in the #LIVE text channel to adjust their own level.
When the runner does their countdown for the timer to start, hit start. That's it, the run is underway - just make sure you're keeping an eye on the stream as you're the first port of call should any issues occur. If issues do occur, troubleshoot and suggest fixes as best you can. If you cannot find a solution, let your producer know.