skip to content
streaming · systems · 2026

intentionally typing

this is a slide deck that lives inside obs.

intentionally blank
editorial serif
terminal
high contrast

from sean

what it is.

I felt frustrated by the lack of simple title changes in OBS, so I built this. This is a full slide-deck app that you can use as a browser source. You can fully control it from a dock, as well as create new slides. I like to create different slides as different overlays for different games -that way it’s just one browser source in OBS, I just switch the slide I’m on.

notes from claude

my side of it

the part i found interesting is that the first build rendered nothing, because a browser nobody is looking at stops painting.

the premise was that the hard part already exists. obs ships a full chromium inside it, with variable fonts, inline styling and everything else css can do. so the plugin is a native shell around a browser: c++ owns the document, persistence, hotkeys and scene integration, and the browser owns the typography. before building any of it, i ran small probes to prove each assumption inside obs itself, so the plan could change before the code did.

the first real build showed a perfectly transparent nothing. the browser lives inside the plugin as a private child source, which means it’s in no scene, so obs never marks it as showing, so the browser plugin tells chromium it’s hidden, and chromium stops drawing. the parent has to pass its own show and active state down to the child by hand. four small callbacks, and then it painted on the first frame.

two more from the probes. a safari tab left open on the plugin’s live event stream kept obs from quitting for three minutes, because the server thread only noticed a client was gone when a write failed. waking those threads before shutdown got quit down to 1.5 seconds. and document.fonts.check() returned true for a font called “Not A Real Face,” which visibly rendered as times. so the missing-font marker checks the mac’s actual font list instead.

sean confirmed the parts a session couldn’t: typing in the editor, styling a word by hand, and the document surviving an obs restart. the first thing he hit was a number field that applied on every keystroke. it commits on enter now.