9th June 2025
This blog post is a reformatted and edited version of a thread I originally posted to Bluesky during the final day of Prevent-A-Thon 5. For likes, comments, and quote posts, see the original thread: https://bsky.app/profile/nickrpgreen.com/post/3lr526amwms2s
VODs for the marathon can be found on the Prevent-A-Thon website. (Video below to be updated to PAT5 once available)
I was on my final tech staff shift for @preventathon.bsky.social, over C$2,700 raised for Little Warriors at that time, and still plenty more speed runs to go. So here's the tech thread I wrote! I'm going to talk about what's gone well, what's gone not so well, and heap so much praise on PAT!
For those unfamiliar, I joined Prevent-A-Thon's staff this year. I was a runner for PAT3; runner, restreamer and host for PAT4; and now Tech Staff and runner for PAT5. I ran Klonoa 2: Lunatea's Veil as part of Thursday's opening block, a speedrun I adore and love showcasing for marathons.
I've been developing a user friendly marathon stream package for about a year now called Speedrun Tools UK. The development of this package formed the basis for my tech staff audition, and the PAT team agreed they wanted to use it for PAT5, replacing their previous system.
I don't want to go over everything about the package here, so to learn more about it, check out the website. There's also a blog post of the tech thread I did following @speed4.bsky.social's Speed4 TLC marathon in February, which was STUK's marathon debut. I did also talk about STUK's involvement during my Klonoa 2 run (below left). @alaracutie.bsky.social interviewed me as part of Saturday's daily spotlight where I talked further about what STUK is and my development of it (below right).
Having said that, A LOT has changed since Speed4 TLC. Going into that marathon, I was expecting the package to be close to finished, but following it there has been so much more development, most of which I've posted about here on Bluesky. I'm definitely much closer to public release now though.
So PAT5. This marks the first time the package has been exported and is not running on my PC, which was the case for Speed4 TLC. For PAT5, the restream PC is hosted by @cubsrule21.bsky.social, with restreamers and tech accessing via Parsec. I'm pleased to say the export worked great.
We did however have one issue that we only realised the cause of on Saturday. Cub's PC's CPU was through the roof and was really struggling to keep up. We cut the preview streams to NodeCG but it was still bad, with the CPU regularly hitting 80-90%, all from OBS. Saturday, Cubs realised it was because the stream encoding was also being handled by the CPU (x264) instead of using the NVENC encoder on his NVIDIA GPU. This is because the stream OBS was developed on my PC which has an AMD GPU, so I can't save it with NVENC selected.
Getting the graphics updated to match PAT's style was a doddle. The package uses a variables stylesheet - you declare colours, fonts, borders and other style choice there, and it updates everything. Needed some other minor tweaks, but it was 90% complete just from the variables sheet.
For 99% of the marathon, the game layouts have behaved and feedback suggests people have loved the new look. The only minor errors I can recall were the images below. I like that PAT keeps it simple, it's not overload on the eyes and keeps the focus on the game and runner.
The one area that's had the biggest bit of praise though is the game cover being shown on the intermission screen - loads of people have commented on the Discord server that they love the look of it. This is something I've always wanted in past marathons, so was top of my list for my own design.
One massive update since Speed4 TLC is the ominbar, which has been displaying data from tracker.preventathon.com. This is GDQ's marathon/donation tracker and pulls the donation total, incentives, bidwars, prizes and milestones. It also grabs the runs from speedcontrol to show what's coming next.
Whilst you can do tests beforehand, this is the first time the omnibar has been used live with a GDQ Tracker, so the first time it's properly had to deal with stuff opening and closing. It has been the biggest cause of problems this marathon, but I think they've now been fixed.
There's been a couple of times that it's done weird stuff that can't really be explained. Such as one point where a run taking place the following day said it was "in 24 hours" when it should've been closer to 12. It never happened again, and I have no idea why it happened.
But the biggest problem has been the GDQ Tracker integration. Bid Wars have been fine, but we had loads of issues where both Incentives and Milestones failed to disappear after they'd been closed or hidden. They'd just stay on it, usually not showing complete. Both Cubs and I had to apply numerous fixes and Cubs wrote an SQL script for us to run manually to scrub the entries from the replicant. The package has a bundle dedicated to grabbing the data from the Tracker API and keeping a replicant, which wasn't deleting closed incentives. Cub's SQL script worked, but then we found the omnibar was still storing the information and not updating, even though it should've been reading the replicant and seeing it empty. Final updates to circumvent this went in before the final day, and seemed to work fine.
Milestones are a bit different, because they don't ever close, they stick around forever. So we have had to delete/hide milestones from the tracker once they've been hit, so I need to work out a better system. I don't want them to hide the moment they're hit, as I want to see it at 100% on stream.
That's it for what you saw on stream. Behind the scenes, things were pretty good. We had to make adjustments as we went along because figuring out workflows with the system was a bit of a work in progress. PAT has some different ways of doing things to what I had intended, so we adapted.
The way audio is handled is completely different from Speed4 TLC, where we had all audio come from the runner's stream. PAT needs producers and tech to have god mics (heard in Discord but not on stream) which can't be done with all audio coming from the runner, so the config changed a few weeks ago.
When STUK ships publicly, both methods will be supported. Both have their merits and their drawbacks but I'd definitely say that have comms come through Discord makes things a bit more complicated, due to having to delay sync every run. Twitch isn't always stable so can shift about. There's definitely some work to do here to make the delay sync better, especially for races where you're having to manage more streams. We did get to a point where the amount of render delay being added to just the Local OBS timer during a race was causing it to slow and then spring back.
Also, as per last week's Bluesky post (opposite), I made an update to tweak the layout of the stream source panel to make it more streamlined and every time I tried to update PAT's version, something broke. It only finally got a working update on the final day of the marathon!
The PAT staff have asked if I could look at a couple of further functions for the future (one of which I've already made), such as a video time remaining display, and I've got some further tweaks I want to make. But I'm really comfortable with where the package is now at. This weekend has been a very much needed test run for STUK.
I am super grateful to have been brought on to Prevent-A-Thon's staff. Working with this team has been such a fun experience and the marathon has been amazing. I already knew quite a few peeps from past marathons, but getting the chance to meet new people too has been awesome.
I'm especially grateful to our head organizer @selcouthmind.bsky.social and tech lead @cubsrule21.bsky.social for putting their faith in me and STUK, letting me completely change out their existing tech for mine and for their advice and support along the way.
In addition, I wouldn't be here without @alaracutie.bsky.social. Alara was my host for my MGS3 run at PAT3 and then volunteered for Pixel Perfect back when I was the lead organiser for it. We've worked on several marathons together now and she is absolutely the catalyst for me joining PAT now.
STUK's development has been directly impacted by stuff I've picked up from PAT and the GDQ Tracker implementation in particular would likely not have happened without Cub's guidance on it. Of course the marathon has also helped me find all the bugs that needed fixing!
This is an amazing organisation, and as of this marathon has raised over C$11k for Little Warriors, a Canadian charity focused on the awareness, prevention and treatment of child sexual abuse. The marathon may be over, but you can still donate.
STUK is nearly ready for public release. I've got some tweaks to make, some admin docs to update (it comes with a whole Google Drive of scheduling, games committee and runner forms to help you out), and the admin guide needs completing. Plenty to do, so no date to confirm yet.
There are a couple of other marathons who have access to current builds as they approached me about using it. I hope they do well with it and I'll do my best to support them as best I can. Whilst I love volunteering for events, I can't be everywhere and do still have a job and family to prioritise.
What I will share though, is I'm planning to host my own marathon to celebrate the public release and show off how easy STUK will be to use. The fun part? 12 hours, no intermission lasting more than 2 minutes, and I am the ONLY STAFF - host, restream, setup, social media. I will do it all baby!
That's how confident I am of STUK's ease of use and effectiveness. This is very early stages of planning right now, I have no eta. But if you'd like to be the first to hear about it, especially if you want to submit a run, follow me on Bluesky or join my Discord server. Finally, if you'd like to directly support the development of Speedrun Tools UK, I also have a Ko-Fi set up. This has been hundreds of hours of works, with many more still to go, so any support for that is highly appreciated. You can catch me on my Twitch stream every Tuesday and Thursday from 8pm UK time. This week I'm practicing Jade Cocoon and MGS3 ready for Speedromizer next weekend!
Upon completion of the original thread, it was time for me to crash. The joy of being British and working with a Canadian team is I'm always five hours ahead of everyone else. So I'd been up till 2am since the Thursday. But I'm used to late nights, so it doesn't bother me. Thought I might sneak in a Teamfight Tactics before I slept. Pushing Emerald!
Turned out to be a bad call - came 7th.