Logo

TWITCH SUBATHON

A fully customizable and fully featured Subathon for Twitch.

  • Customize time additions for every event
  • Set your own goals
  • Reliable and precise tracking with automatic backups
  • Supported Events:
    • Subs
      • Prime
      • Tier 1
      • Tier 2
      • Tier 3
    • Bits
    • Donations
      • Kofi
      • Streamlabs
      • StreamElements
      • Fourthwall
      • Tipeeestream
    • Charity Donations
    • Follows
    • Raids
    • Channel Points
    • Loyalty Points
TWITCH SUBATHON – tawmae Cover Image
This extension requires a .dll file (TawmaeUI.dll) to run. You will be asked to have it automatically downloaded from my GitHub Repository to your Streamer.bot directory when you open the Settings UI, but you can also manually download it here. You can use tools like JetBrains dotPeek to inspect the file’s content.
BROWSER SOURCE URL
https://tawmae.xyz/overlays/twitch-subathon
ACTION IMPORT
Loading...
Never import actions from untrusted sources. Want to know what you are importing? Paste the import code in here (Decoder made by TakeJoshyy).
SETUP

1. Copy the Action Import text from above into your clipboard.

2. In Streamer.bot, click the Import button at the top of the window. Paste the text into the Import String section and press Import at the bottom.

3. Now head to the Commands tab and look for the imported commands. Then rightclick the group and select Group -> Enable All.

4. In the [TWITCH SUBATHON] #0 - Settings action, rightclick the Test trigger and hit Test Trigger to open the Settings UI once. This makes sure that the .dll file has been downloaded and is up to date.

If you don't have my .dll in your Streamer.bot directory already, it will ask you to automatically download it. If you wish to manually place it there, you can to that here.

5. Go into the Servers/Clients -> WebSocket Server tab. Check Auto Start WebSocket Server, leave Address at 127.0.0.1 and the Port at 8080. You can set a password if you want, just make sure to leave Enforce All Requests unchecked. Start the server.

Here you can check in real-time if your Websocket server is up and running:

6. Copy the Browser Source URL from above into your clipboard.

7. In OBS, create a new Browser Source, name it whatever you want. Then paste the copied URL into URL and preferably set the Width and Height to your OBS canvas size. You can make the widget bigger in the Settings UI instead of scaling it and making it blurry.

And then you're done! And since it came up a lot: for donations to contribute, you need to connect the donation platform of your choice with Streamer.bot (Kofi, Streamelements, Fourthwall etc). Once it's connected to Streamer.bot, the Subathon widget will pick donations up automatically.
Pog Clap
Important Note: If you want to have the browser source in multiple scenes, don’t create a second browser source. This can and will cause errors. Instead, use nested scenes or source clones.

COMMANDS

!subathonStart

Start the subathon.

!subathonPause

Pause the subathon timer.

!subathonUnpause

Resume the subathon timer.

!subathonAddTime [Duration]

Manually add time (e.g., 30, 5m, 1h).

!subathonRemoveTime [Duration]

Manually remove time from the timer.

!subathonAddEvent [Event] [Amount]

Manually increase event counts (subs, bits, etc.).

Examples:
!subathonAddEvent prime 1 → +1 Prime Sub
!subathonAddEvent sub 3 → +3 Tier 1 Subs
!subathonAddEvent t2 1 → +1 Tier 2 Sub
!subathonAddEvent t3 2 → +2 Tier 3 Subs
!subathonAddEvent bits 500 → +500 Bits
!subathonAddEvent donations 5 → +$5.00 donation equivalent
!subathonAddEvent follow 1 → +1 Follow
!subathonAddEvent cpr 1 → +1 Channel Point Redeem (whitelisted reward)
!subathonAddEvent raid 35 → Raid counted with 35 viewers
!subathonAddEvent lp 1000 → +1000 Loyalty Points contributed

!subathonRemoveEvent [Event] [Amount]

Manually decrease event counts when correcting mistakes.

Examples:
!subathonRemoveEvent prime 1 → -1 Prime Sub
!subathonRemoveEvent sub 2 → -2 Tier 1 Subs
!subathonRemoveEvent t2 1 → -1 Tier 2 Sub
!subathonRemoveEvent t3 1 → -1 Tier 3 Sub
!subathonRemoveEvent bits 500 → Remove 500 Bits worth of time
!subathonRemoveEvent donations 3 → Remove $3.00 donation equivalent
!subathonRemoveEvent follow 1 → Remove 1 Follow contribution
!subathonRemoveEvent cpr 1 → Remove 1 Channel Point Redeem contribution
!subathonRemoveEvent raid 20 → Remove raid counted as 20 viewers
!subathonRemoveEvent lp 1000 → Remove 1000 Loyalty Points contribution

!subathonContributePoints [Amount]

Spend Loyalty Points to add time.

SETTINGS UI

The Settings UI allows for some (HUGE) customization.



The General Settings allow to set the starting time, the visible time format as well as your currency for donations.

The 'Added Time' tab lets you define which Twitch events are included to contributing time and how many seconds they add.

'Appearance' allows to change.. well.. the appearance. Crazy, right? Font, color, shape, icons and images. Have fun!

The 'Rotator' tab allows you to define the rotator box (the one between countdown and goals). It displays the current event counts and allows you to add some neat custom texts to rotate through!

In 'Goals' you can define your goals (if you want any). Goals are tied to their events (all sub tiers combine to just 'subs'). If you want a general goal, you can choose 'No Icon'. All event-tied ones auto complete once the goal is reached.

Here you can edit some (or most) of the texts that are on the overlay :)

Chat Responses, as usual. Mostly error responses, but feel free to edit all of these too! And also as always: a single hyphen to skip the message entirely.

The Advanced tab has some serious gourmet shit in there. But I'd suggest to leave the toggle switches as they are. The most important part here are the backups, in case you ever want to go back because you messed up (definitely not me!)

CUSTOM TRIGGERS

Under Custom → TWITCH SUBATHON you will find triggers that fire on certain occastions and provide some juicy variables.


Finished / Ended Manually

Fires when the countdown reaches 00:00:00.

Available variables:

  • startedAt_Unix(long) Unix timestamp when the subathon started.
  • endedAt_Unix(long) Unix timestamp when the subathon ended.
  • startedAt_local(string) Local timestamp when the subathon started.
  • endedAt_local(string) Local timestamp when the subathon ended.
  • baseSeconds(int) Base duration at the start.
  • addedSecondsTotal(int) Total seconds added during runtime.
  • plannedTotalSeconds(int) Final total seconds planned.
  • elapsedSeconds(int) Total seconds elapsed.
  • remainingSecondsAtFinish(int) Remaining seconds when finished (usually 0).
  • baseFormatted(string) Base time formatted (hh:mm:ss).
  • addedFormatted(string) Added time formatted.
  • elapsedFormatted(string) Total elapsed time formatted.
  • plannedTotalFormatted(string) Planned total formatted.
  • pauseCount(int) Number of pauses.
  • pauseTotalSeconds(int) Total paused duration in seconds.
  • pauseTotalFormatted(string) Total paused duration formatted.
  • subs(int) Total subs.
  • primesubs(int) Total Prime subs.
  • t1subs(int) Tier 1 subs.
  • t2subs(int) Tier 2 subs.
  • t3subs(int) Tier 3 subs.
  • bits(int) Total bits counted.
  • donations(int) Total donations counted.
  • follows(int) Total follows.
  • raids(int) Total raids.
  • channelPoints(int) Total channel point redeems counted.
  • loyaltyPoints(int) Total loyalty points counted.
  • secondsAdded_primesubs(int) Seconds added from Prime subs.
  • secondsAdded_t1subs(int) Seconds added from Tier 1 subs.
  • secondsAdded_t2subs(int) Seconds added from Tier 2 subs.
  • secondsAdded_t3subs(int) Seconds added from Tier 3 subs.
  • secondsAdded_bits(int) Seconds added from Bits.
  • secondsAdded_donations(int) Seconds added from Donations.
  • secondsAdded_follows(int) Seconds added from Follows.
  • secondsAdded_channelPoints(int) Seconds added from Channel Point redeems.
  • secondsAdded_loyaltyPoints(int) Seconds added from Loyalty points.

Time Added

Fires whenever an event adds time.

Available variables:

  • eventKey(string) The source type of the event (e.g. subs, bits, donations, etc.).
  • addedSeconds(int) Seconds added from this specific event.
  • addedFormatted(string) Added time formatted (hh:mm:ss).
  • addedCount(int) The number of units in this event (e.g. 42 donations, 3 subs, 500 bits).
  • totalCount(int) Total accumulated count for this event type.
  • currentTimestamp(string) Current formatted time on the timer at the moment of addition (hh:mm:ss).
  • currentSeconds(int) Current remaining seconds on the timer at the moment of addition.

Goal Completed

Fires when a goal reaches its required count.

Available variables:

  • goalName(string) The display name of the completed goal.
  • goalCount(int) The final total count that triggered the completion.
  • goalType(string) The contribution category of the goal (e.g. subs, bits, donations, etc.).

FAQ & EXAMPLES

Does the time stop when the overlay is not active?

No, the time is handled purely by Streamer.bot. The overlay just adapts to the data that Streamer.bot provides. If you want to pause it, make sure to actually use the pause action in Streamer.bot. For automatic safety pauses, see below.

Does the Subathon timer automatically pause when I stop streaming?

Yes, if "Only Add Time When Live" is enabled (which it is by default). This famously called 'Safety Pause' pauses your Subathon for you, if you either close Streamer.bot or your stream goes offline. It will not auto-resume though, so remember to unpause :)

Can I restore progress if something breaks?

Yes. Automatic backups are created regularly every 15 minutes while the Subathon is active and if you end the Subathon manually, if(!!) Backups are enabled (whjich they are by default). Backups are saved locally to your Streamer.bot directory into cute little textfiles :3

To restore:
1. Open the Settings UI and head into the Advanced tab.
2. Scrolldown, select a backup file.
3. Click the button on the left to restore from that point.

This will fully restore timer state and event counts.



Also all events are tracked for each day, regardless of whether you enabled them for the subathon or not. So there is always a backup of the backup to see how many subs, follows, donations etc you got in for the day. So you are always able to re-add them back to the timer, in case anything goes wrong.

Are goals like donations bits, channel points and loyalty points added proportionally?

Yes. So if 1000 loyalty points add 100 seconds and someone contributes 500, it'll add 50 seconds. Unless you have a minimum amount set.

What if an Iranian guy donates 100.000 Iranian Rial? Won't it break EVERYTHING?

CHILLLLL. Donations are automatically converted into your selected currency. So if an Iranian decides to donate 100.000 Rial, it'll add 2 dollars to your count.

CHANGELOG
Date Changes Version
November 09, 2025 Added scroll speed and pause duration to the Goals tab 1.0.1
November 08, 2025 Release 1.0.0