Understanding OBS

understanding obs


This page is important because understanding how and why OBS Classic works will help you better troubleshoot, customize and leave you ultimately less frustrated.

Local Sources vs Global Sources

Inside of scene you can have zero to many sources. Sources can be many different things capturing a window, an image, a web page, a video, etc... But no matter what the source is actually of. It's either a Local source or a Global source, here are some of the basic characteristics of the differences.

Local Source

  • The source will refresh every time you open a scene
  • You can have the same source have different properties in multiple scenes
  • To force refresh the source by clicking the check box off / on

Global Source

  • The source will load one time at the start of the stream
  • It will have the same properties in every scene it's in
  • It will not refresh if you switch scenes
  • To force refresh the source is a bit cumbersome

By default, when you add a new source to a scene it will by default be a local source. Which isn't a bad thing necessarily, but if you have the same local source in two different scenes and you switch scenes. You'll see on the stream that it does a resfresh / reloads it. Verses if you used a global source, there would be no refresh at all.

You can see this if you switch between two scenes of mine which are virtually the same- Waiting_Prior_Background and Waiting_Prior_TF2. You can see that when you switch between the two scenes, the Logo / Production Avatars / Game Title does not refresh, but the scoreboard does. This is because on both scenes, everything is a global source except for the scoreboard.

How can you tell the difference in OBS? Well if you take a look at this atrocious looking image I created below. You can see next to each sources checkbox is a little line. If there is a vertical line next to it. That means it's a global source, if it's blank then it's a local source.


Why does this matters?

The main reason why this matters is because with the CLR browser it loads a webpage. This means that if you make a change to that webpage and save the file. It will not change inside of OBS until you refresh the page. Just like in a normal web browser. This matters for the scoreboard webpage, since this will be changed during the game. The production avatars, game title, teams, etc... Are less likely to change during the actual cast.

So making the sources which are less likely to change into global sources. Makes them easier to add into new obs scenes, since you only need to create them one time. Also gives a more professional look to the stream since you don't see these odds reloads happen on the scene.

The reason why the scoreboard is done in a local scene rather than in a global scene is because it'll change several times through out the game. You could make it global and go through the force refresh process, but that can be wonky at times and cumbersome to do in the middle of a production. Verses the way we handle it right now is that we switch from Match_TF2 -> Match_TF2_ScoreRefresh Or vice-versa.

And since the TF2 and production logo's are both global sources. The only thing that refreshes on the page is the scoreboard. Since the scoreboard is a local source it will refresh on entering the scene. This allows us to "easily" update the score with minimal hassle inside.

Is this the best solution for the scoreboard?

No. Not at all. For this particular case, it'd be better to use AJAX on the scoreboard webpage to automatically update the score if the date modified on the setupfile.json has been changed, but I'm not super familiar with jquery/javascript and using ajax. I decided to keep it simple and get working solution.

Productions of a higher level definitely use more complex setups then this. Most high levelTF2 productions use http://nodecg.com/ which is a really awesome tool, but I've never actually dedicated the time to learn nor set it up.

How to force refresh a global source?

So lets say you are in the middle of a cast and you add in a new production person to the crew. You update the setup file, but it's not changing in obs. What you need to do is to force refresh the CLR browser page. There's a few different ways to do this, but the quickest way I've found is to open up the properties of the CLR source. Change the Opacity by a tiny bit and click OK. This will reload the source and will display the new production person and since this is a global source. It will also change anywhere where you use that source.

How to force refresh a local source?

Click the check box off and on. You could also exit and re-enter scene.