Unified Events
- Turn on the Streamer.bot WebSocket Server.
- Import the action “ZeMaxi - Unified Events”.
- Pick the platforms this browser source should count. Leave Twitch unchecked if the source is on a Twitch simulcast.
- Generate a URL for the layout you want. Change Show and generate again if you want the train, the clock, and the goals as separate browser sources.
- Add the dock if you want to pause the clock, add minutes, or reset a meter.
- For the skill tree, set Show to Skill tree, add your choices in the Choices editor (or use Edit as text), generate again, and add that URL as its own browser source (about 1920×700).
The same event values feed the train and the goals. A separate seconds table feeds the subathon clock. The end time is stored in the persisted global zmx.unified-events.state, so refreshing the browser source does not zero the clock.
Skill tree
The Choices editor saves as you type and refreshes the preview. When the customizer connects to Streamer.bot, it shows each choice's progress (decided, voting, ready, locked, sealed). A browser with no choices of its own yet starts from the ones the live overlay is running. Once you have edited them, your edits stay put, and if the overlay is running different choices the customizer says so and offers to load them. A decided choice keeps its chat word locked so its result is not lost. You can add choices mid-stream: edit, generate, and paste the new URL into OBS.
Tips from Ko-fi, StreamElements, Streamlabs, and Fourthwall add dollars toward the next point. Every time the total crosses the milestone, the room gets one skill point. Chat spends it with !skill plus a node name, then !skill plus an option (1, 2, or the option name). One ballot per person, and the last message counts. When the window ends, the leader wins. A tie keeps the first option on the line. If nobody voted, the same vote runs again (or set If nobody votes to First option wins). The dock's Close vote button always settles it. The other option is sealed, and so is anything that waited on it.
Voting XP: everyone starts with 10, and every $5 donated adds 1 more. A vote counts as the voter's Voting XP, so someone with 30 XP is still outvoted by four viewers who haven't donated (40). Donations from a charity page Streamer.bot cannot see: the broadcaster (or a mod) types !donate+ @name 50 in chat, or uses the box in the dock. !donate- name 50 takes it back off. Viewers type !xp (or !xp @name) to see Voting XP, and !votehelp for how it all works. Chat messages need the Streamer.bot WebSocket password, and can go out as the bot account (falling back to the broadcaster).
One-option choices: tick Only one option on a choice. When chat spends a point on it, it is given straight away with no second vote. The finale: set a choice's Opens to At the end. It stays locked until every other choice has been picked or sealed off, and spending a point on it unlocks every option on the tree, including the ones that lost a vote. The finale can also need a stream total before it opens (say $1,000). Any choice, the finale included, can cost more than one skill point: set Costs on it in the Choices editor. Chat can only vote on a choice once enough points are saved for it.
Showing and hiding: !tree show keeps the tree on screen until !tree hide (broadcaster and mods, or the dock's Show tree and Hide tree buttons). With Pop the tree up turned on, a donation or a vote brings it up by itself and it hides again after the set number of quiet seconds, never in the middle of a vote. Tick Start with the tree hidden to keep it off screen until then.
The header at the top of the tree takes turns (every 10 seconds by default) between the skill points and next-point bar, the overall donation goal with how many skill points are left to earn, and the donate message. You can change the timing, the overall goal, and the donate message's wording, or hide either slide. When a vote opens, the vote fills the whole header until it ends.
Votes wait for the streamer by default. !vote start opens the next vote, !vote start all runs every banked point back to back, !vote start horror-1 skips straight to that choice's two options, and !vote end settles the running vote now. The dock has Start vote and Start all buttons too. Set Start votes to automatic if you'd rather votes open as soon as a point is earned.
Only tips count by default. The customizer can give other events a value too (for example 0.01 per bit, 5 per sub, 1 per Super Chat dollar), and Twitch, YouTube, and Kick then feed the same total. Tiers and currencies are not converted, so treat those values as averages.
A node line is id | title | option A | option B | requires | icon A | icon B. The two icon names are optional. Leave requires blank to start unlocked. game opens after that node is spent. game:a opens only if option A won. Twelve nodes max. The dock can add one milestone, close the open vote, or reset the tree.
URL options: hideOptions=locked shows locked nodes as ???, hideOptions=unpicked also keeps open nodes as ??? until chat picks one, and legend=0 hides the key. The overlay scales to fit whatever size the browser source is.
Icons are from game-icons.net (CC BY 3.0) by Lorc, Delapouite and other artists. Lettering is Cinzel from Google Fonts.
When “Follow Twitch’s own hype train” is on, Twitch subs still add clock time and goal progress, and the train bar follows Twitch’s native train. YouTube and Kick always add to the train from the points table.