Tech Volunteer Guide
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!
General Duties
You'll organise and work alongside runners, hosts and setup volunteers, with all expected to follow your 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 respond to any issues or changes (e.g. runner details), or make run-specific adjustments (e.g. relay runner change)
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 time needs to be filled
Discord
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.
Introducing NodeCG
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. Ours is accessible at https://node.nickrpgreen.com. You'll be asked to log in with Twitch as your Twitch handle grants you 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.
Main Workspace
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 OBS Preview and Program scenes. Preview can be used to check on edits or changes, whilst Program is being streamed to Twitch. The two icons in the middle change colour to show that the stream is live and the recording is active. If either feed isn't displaying anything, please ping @NickRPGreen
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.
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 through them talking on NodeCG. This way the delay of their stream matches when we start and stop the timer.
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 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.
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 Runner's Mic Out Audio (see audio later about how audio works) meaning any talking in the STREAMING ROOM channel will be heard on the stream.
- start a local recording, which is what we use to upload to YouTube.
- after a five second 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 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's the OBS Preview to the scene the next runner will be using
- mute both the Runner's Mic Out and Game 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 detailsCharity 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 ping them on Discord first. 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. You or the host can jump into the πHost-Room to talk to the audience during the intermission if desired and let them know any information you wish to share. Once the issue is over, press the Tech Issue Over button to continue the run - don't forget to unpause the timer as well.
OBS
This has some additional control for OBS, which for the most part is automated, but is likely your first port of call if there are any issues:
Preview/Program: Identical to the Preview/Program area on the Main Workspace.
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.Β
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. You can use the Preview scene to check the runner's stream looks correct during Intermission.
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 the Intermission. During a run, all of the stream audio comes from the player - they send their gameplay audio down one stereo channel and their mic, commentators and host down the other. This keeps everyone synced.
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 "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 Host Room is a separate Discord channel that a host can use to chat with viewers during the Intermission. This shouldn't need muting, as it'll only produce sound when there's a Host talking in there. You'll be able to hear the Host Room through the NodeCG preview.
The Music output is the music player that plays during Intermission. You won't be able to hear it through NodeCG, 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. Mic audio should only ever be swapped if there's an issue with Player 1's audio.
Runs
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.
Notes about these fields:
Region isn't used and can be ignored - it doesn't matter if there's already information there.
Released is used 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.
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 to what has been entered. If you're on tech for a relay, a Staff member will help you through the Relay Control.
Ending The Current Run
It's important to remember that all comms to the stream come through the runner's feed. That feed comes from a Twitch stream and will therefore be delayed from the live comms happening 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 listening to the stream in the πHOST/TECH ROOM, not by listening to Discord, nor by listening to the marathon's Twitch stream.
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. If you feel they're taking too long or we're behind, ping the host instructions to speed it up.Β
If the marathon is running on time, ping the host to let them know that you plan to go to a charity video during the intermission. If it's running behind, let them know we'll go to intermission instead. 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.Β
Preparing The Next Run
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 any final adjustments.Β
Audio Check
You also 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, and get them to adjust their own OBS slider or in-game volume until the audio is peaking at the top of the green area.
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 ask the runner to adjust their output levels on 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 either audio is too quiet and the runner can't turn it up any further, ask the runner to right-click on the source in OBS, click 'Filters', and add a 'Gain' filter. Ask them to adjust this filter until the volume is correct. It's better for them to be too loud as you can easily turn them down - if they're too quiet and you're already at max, you can't turn them up any further.
If you've made any adjustments to the Mon sources, copy those adjustments to the Out sources.
Ready to Start
If we're ahead of schedule and you haven't already played a charity video you can still do so to give the intermission time to play. The host can also jump into the πHOST ROOM to chat with the audience during the intermission. Ideally, you want to start the run at the time on the original schedule, but it doesn't hurt to start early rather than leave the audience on the intermission screen for ages.Β
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 in the πHOST/TECH ROOM 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 five seconds, 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 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, ping a Staff Member.