All Articles

A Tale of Two Overlays

One of the elements that sets streams apart, like YouTube channels or Podcasts, is production value1. Things donā€™t have to look or sound perfect, but the level of care impacts how people perceive the work that you make, regardless of the quality of the content.

Most of the time, like many streamers on Twitch, my audience is just meā€¦ but during the Race Against Time, there are lots of folks watching, and I want it to look good šŸ‘Øā€šŸ³šŸ‘Œ

In terms of customizing your overlay, there is no shortage of ways you can do that: Streamlabs, StreamElements, Nerd Or Die and many, many other services can provide you with a complete overlay, alerts, and other widgets (often for free) that you can mix and match.

ā€¦And Iā€™m definitely no expert on how to make your stream look great, but I can tell you a tale of two overlays šŸ˜Ž

The Event Overlay

The main event, the 24h Chrono Trigger marathon, uses an overlay developed using NodeCG.2 NodeCG is a sort of toolkit that enables you to create broadcast graphicsā€¦ but it doesnā€™t do too much ā€˜heavy liftingā€™. It allows you to create dashboards, graphics, cue sound effects and generally keep a bunch of different data in sync, but it does that via codeā€¦ that you write.

Effectively, itā€™s the really DIY route for making your own super-customizable HTML overlay! šŸ˜…

To put that into perspective, it means that I coded a variety of components that allowed the overlay to receive updates from myself, Twitch, Tiltify (the donation service), and whatever else I felt like cobbling together.

The dashboard for the Race Against Time The dashboard for the main event

One of the screens for the main event

Although Iā€™m fascinated with Desert Bus and how they handle their stream setup, using NodeCG was inspired by Support Classā€™s Awesome Games Done Quick layout.3

Using NodeCG means you have ABSOLUTE POWER over how your different widgets look, and how they appearā€¦ but it also means that youā€™re probably writing them from scratch (styling, receiving events, etc.) šŸ¤·ā€ā™‚ļø

The Weekly Stream Overlay

For that same Twitch channel, I do a weekly stream, and it has a different design heavily inspired by the user interface from Nier: Automata.

The ā€œLoadingā€ screen

The main screen

By comparison, this layout is built using Streamlabs widgetsā€¦ mostly. I had to provide some custom CSS and animations for the chat and typing effect, and the loading screen is a plain HTML and CSS combined in OBS.

Learnings

Is there a reason to take one approach over the other? Should you even bother writing your own widgets?!

For the latterā€”unless youā€™re a huge nerd, like meā€”itā€™s probably not worth the effort of taking either approach. I mean, you get a ton of flexibility and can do so much cool stuff, but you could also invest all that time into the rest of your stream šŸ˜‚

But if you do decide write your own widgets, there are some advantages.

  • Writing your own widgets in Streamlabs makes it easy to iterate and test a new widgetā€”with the caveat that custom HTML, CSS, and javascript arenā€™t exactly documented
  • While you do have to write your own extensions to connect NodeCG to Twitch and other services, there are libraries to help with this
  • You can create your own custom dashboard to put everything you want to see during a stream in one placeā€¦ although this is now a lot easier in OBS via custom browser docks
  • You can migrate the HTML and CSS into NodeCG if you decide to take that route
  • You can learn a lot about server and web development šŸ˜…

In any case, the sky is the limit because itā€™s all HTML, CSS, and Javascript!

Also, since the web continues to get better and more impressive, that means that with some programming knowledge, you can do even more impressive things. For example, if youā€™re into gaming, you might have heard of shaders. I donā€™t know a ton about shaders4 but I do know that a fragment shader can be applied to every pixel in an imageā€¦ and since you can use shaders via WebGL, it means you can do all sorts of fancy things like this Gameboy Pixelizer! 5 6 šŸ˜²

Anyway, I mostly wanted to show off some of the cool things you can do with HTML and CSS and Twitch streams!7


  1. Iā€™ve never actually looked up what ā€˜production valueā€™ means; Iā€™ve just intuited it. Turns out it comes from the performing arts!ā†©
  2. ā€¦Technically, it was made using NodeCG, Preact, Parcel, NodeJS, and a variety of other small libraries šŸ¤£ā†©
  3. They used to have a video series explaining how it all worked, but it seems like those videos are no longer availablešŸ˜¢ā†©
  4. What little Iā€™ve learned has been heavily inspired by Julia Evansā€™ blog post and thinking about what I could do on stream.ā†©
  5. Earlier this week Iā€™d also come across this online Gameboy Camera example and I thought it was using WebGl tooā€¦ but nope, just regular olā€™ Javascript!ā†©
  6. Also, through the use of OBS shader extensions and technologies like this tool which can convert GLSL shaders to HLSL shaders, you can even write shaders that you can just use in OBS!ā†©
  7. I wanted to go more in-depth on NodeCG or the Race Against Time but I still need to collect my thoughts šŸ˜…ā†©