Merch Message Reader v2 & new API
January 26, 2026
at
6:02 PM
Hey y'all! Been a while since I made a news post, but I've been busy with college stuff so haven't had a ton of time to work on stuff.
But I have something that I've been excited about for a while that I'm finally ready to fully release.
New Merch Message Reader!
The
Merch Message Reader has been mostly rewritten to have some much needed improvements:
Better (and cheaper) OCR
The OCR tool I use has been changed from a cloud-based one to a fully local one. This means that not only does it no longer cost me anything to run the merch message reader (which made it possible for me to experiment with the changes below) but it also appears to be slightly more accurate in most situations.
Automatic and LIVE message reading
With the old reader, I would have to manually run a script on my laptop after the show ended, which it would then download the vod, then extract frames from it, then read those frames.
Each of these steps happened after each other and was pretty slow, which on top of me needing to start it manually, lead to a sometimes long delay before merch messages showed up on whenplane.
These issues should no longer apply!
The reader is now running and ready 24/7, waiting for a ping from the
Floatplane Watcher that they have started streaming. Once it gets this ping, it starts watching and reading the stream
in nearly real time. In the past few shows, merch messages have shown up on whenplane 10-15 seconds after being shown on the Floatplane stream, which means it often shows up on Whenplane before it's even shown at all on the Youtube stream.
I might be able to reduce this delay even more at some point, but probably only by a few seconds.
To watch merch messages live, just go to the
Merch Messages Reader Page after the show starts, or follow the normal link that is on the show's
history page (which is the same way you would normally view Merch Messages for a specific show). The page for the show will update live as new merch messages are read.
Pre-show Messages
As mentioned previously, the Merch Message Reader now reads from the Floatplane stream. This means that merch messages that were displayed during the pre-show will also be read by the reader. Obviously i'm not making a video of the preshow available, but you will be able to see the screenshot of the merch message like normal.
Because the show is read live, I don't need to wait for the Floatplane VOD to be published (which usually takes an hour at minimum, and occassionally days) which is one of the main reasons I didn't use floatplane VODs in the MM reader before. I have also processed every previous WAN show FP VOD with merch messages to add these pre-show messages, as well as merch messages displayed at the top:
Top Merch Messages
Whenplane now checks both the top and bottom of the screen for Merch Messages. This might not seem super exciting, but this means that Whenplane should now be able to read almost all Merch Messages that are displayed on screen.
The only part that Whenplane still does not read is the outro scroll that occasionally happens if there are a LOT of merch messages in a show. I might set it up to read this eventually (I have a theory on how to do it) but it's not a very high priority since it doesn't happen often and with the main usecase of Whenplane's MM reader being to find when your MM was shown and if there was a reply, the outro scroll isn't too hard to read yourself. I might do it eventually for people searching for and already answered question, but it probably won't be anytime super soon.
As I mentioned previously, I ran the new Merch Message reader on all previous WAN shows that have merch messages, so a bunch of old merch messages that weren't shown on Whenplane before (due to only being shown at the top of the screen) are available now.
New Merch Messages Reader Show Page
The page where the Merch messages are actually displayed has also had a massive overhaul, and IMO it looks WAAAY better and is actually mobile friendly. The old page was originally made as just a "look I can read from the database" type page, and for some reason I never went back and updated it.
The new page also has timestamped links to both Youtube and Floatplane VODs. The old page didn't have Floatplane links because when I originally made it, Floatplane didn't have timestamp links.
The timestamps are based on the Floatplane VOD (since thats where the merch messages are read from) so the Youtube links may be slightly off (since theyre calculated by subtracting the preshow length from the time, and this may not be exact), but they should be within a few seconds. Let me know if its more than a few seconds off.
Let me know if you notice any issues!
I tried to check for any issues when I could, but the new reader, as of writing, has read and indexed 67,281 total individual messages and replies across 221 shows, so I'm not able to check every single one.
If you notice any issues, please
let me know ASAP!
API Change: Alternate show times are no longer hard-coded!
Something that people have been asking for for a while is a way to get the alternate start time of shows. Whenplane did keep track of these times, but they were hard-coded into Whenplane's code with no easy way to fetch them.
These alternate start time are now no longer hard-coded and availabe to fetch with a new endpoint:
/api/alternateStartTimes
This endpoint provides a JSON array, where each element has an original show date (in the format of YYYY/MM/DD) and then a few other elements to adjust the date/time of the show for that date.
Here is the Typescript type definition for each element of the array returned by the endpoint:
type AlternateTimeRow = {
/** The date of the show (e.g., 2026/01/23) */
date: string,
/** The number of days to add to the show date (if it gets moved a day) e.g., 1 for 1 day later, -1 for 1 day earlier */
days?: number | null,
/** The hour of the show (24h format, in Vancouver time) */
hour: number | null,
/** The minute of the show (in Vancouver time) */
minute: number | null
}
As with other endpoints, please make sure to set a User-Agent that identifies you or your service, with either contact info or enough info for me to Google/find you so I can contact you if you send too many requests.
Make sure to take care in the number of requests you send to Whenplane, especially with this endpoint since it won't change very often at all.
The endpoint will automatically rate-limit you, but even if you aren't ratelimited I may still block you if you are unnecessarily sending requests.
I regularly block bots that spam Whenplane. Having a way for me to contact you (in your user-agent) lets us find a better way to achive what you want instead of me just blocking you.
You don't have to, but you can always
reach out to me if you have any questions about the API or want to make sure you aren't sending too many requests.