riley's inner mechanisms

Turning a new leaf.

May 15, 2026

Here we are once again, yet another blog created by yours truly. I've gone through so many different designs and systems for blogging, that this isn't even a surprising post for me to be making.

While it's been through numerous iterations, when I originally made my website I intended for it to be a place to share my thoughts, the things that I'm working on, or guides for my own or other people's convenience. But truth be told, writing isn't an easy thing to do. It doesn't come naturally to everyone and certainly not to me. Not to mention, the blog itself consists of a bunch of manually organized and written markdown files, which is creates an additional barrier to entry. Combined, these both make it fairly difficult to get the ball rolling on writing blog posts in general.

But today, I'm turning a new leaf. Literally. From now on, my blog will now be hosted on and written here on Leaflet instead of being a manually maintained Astro site. This should enable me to quickly write about the things that I want to share.

Why pick Leaflet?

Allow me to nerd out for a little bit, because for as much as the internet loves to clown on Bluesky users, I've genuinely found myself loving the ecosystem of apps that's grown around it, or I guess more specifically, the AtProtocol.

Having one identity that's tied to the domain name I already use, that you could even transfer to a different self-hosted server, is very powerful. Now look, I'm not going to pretend to fully understand how the AtProtocol even works, but having one single identity power various different experiences, from a social network like Bluesky, to a Git platform like Tangled.

One of those platforms, is Leaflet. It's a publishing platform similar to something like Substack or Medium, but powered by the AtProtocol instead. Meaning that the platform has a lot of potential integrations with not only Bluesky, but the whole ecosystem built around it.

Maybe I'm just a nerd, but I think that's pretty cool. That, and it's also pretty easy to setup and use. So, it'll be my blog platform for the foreseeable future. But who knows, maybe I'll change my mind and migrate to somewhere else.

Old blog posts.

While we're here, I've gone ahead and taken the liberty of recreating most of the best blog posts from my old website as subposts here. Just so that they're still accessible. That being said, if you know how to browse Git history, you can view all the old blog in my website's repo.

How I made Elgato Wave Link even better.
This post was originally created on August 24th, 2024
A couple years ago, I upgraded my microphone from a FIFINE T669, to one of Elgato's esteemed Wave:3 microphones. At the time, I simply just wanted a better way to manage audio and the ability to hear myself when using headphones. Elgato's microphone provided a solution to both of these problems, with their Wave Link software. Their software allows you to create virtual audio devices so that you can easily manage different types of audio sources, like a browser, music, games, or the rest of the system. All with the added benefit of having direct integration into the Stream Deck.

How I made Elgato Wave Link even better.

This post was originally created on August 24th, 2024

A couple years ago, I upgraded my microphone from a FIFINE T669, to one of Elgato's esteemed Wave:3 microphones. At the time, I simply just wanted a better way to manage audio and the ability to hear myself when using headphones. Elgato's microphone provided a solution to both of these problems, with their Wave Link software. Their software allows you to create virtual audio devices so that you can easily manage different types of audio sources, like a browser, music, games, or the rest of the system. All with the added benefit of having direct integration into the Stream Deck.

Now, while I have my own gripes with Elgato's software - especially as of late. Don't even get me started with how awful the Stream Deck has become with their new website to download plugins,but it's pretty powerful software... when it works.

But I had a small gripe that I wanted to address.

Controlling audio.

There are a few different ways that I could manage audio with my microphone. I could either have their software open and make adjustments when needed. Or, I could map buttons on my Stream Deck to control different inputs or outputs.

And while the Stream Deck is still my primary way of controlling audio, there is a few things that the entire experience still lacks.

  1. 1.

    Whenever you adjusting the audio, you have to look away from the screen to see what the audio level you're changing is.

  2. 2.

    Buttons don't really have small, precise controls as opposed to something like a fader or dial.

  3. 3.

    When used for small controls, it takes far longer than I want to reach a desired volume.

  4. 4.

    It relies on both Elgato's Wave Link and Stream Deck software functioning.

My gripes with everything.

In November of 2022, Elgato had released a new product called the “Stream Deck+” which was essentially an 8 button Stream Deck, but as a bonus, it included 4 knobs/dials that could be assigned to all sorts of different tasks. They could control your brush size and hardness in Photoshop, control the brightness of Elgato's other lighting products,or in my case, control the volumes of inputs or outputs in Wave Link.

The problem was, that it costs $200.

I'm a broke guy in the middle of nowhere, just out of high school with a few college credits to his name. I could not afford to spend $200 on it, despite how much easier it would make controlling audio.

That, and it still had the issue of not having an on-screen overlay for when the volume changes for an input or output. So you'd still have to look down at the device to see what the audio level is, and adjust accordingly until you've hit the volume level you like. This is especially infuriating when controlling the volume of the output, which is the equivalent of changing your computer's volume.

So, I took matters into my own hands.

So what's the idea?

To preface, I have a Keychron V1 mechanical keyboard that comes with a dial, and more importantly, QMK. If you don't know what QMK is, it essentially allows you to globally reprogram your keyboard without having to have a piece of software eating up resources (cough cough Razer Synapse…) running in the background.

Here's the plan. I would have a small Python script that would listen to when the keys F13 F14 or F15 are pressed, and then either adjust the volume or toggle the mute of the output device. Using a tool called VIA to help reprogram the dial on my keyboard so that moving or clicking the dial would show up as hitting one of these keys.

While there technically are keyboards out there that have F13-F24 keys, they are rare and most software doesn't utilize them anyway.

Now, most GOOD keyboard manufacturers should have a small amount of on-board storage so that you could replicate the exact same thing I did, but results my vary. The next thing that I needed to figure out, was how to communicate with the Wave Link software so that I could control it.

The brutal research.

My first instinct was to check Elgato's website for any developer resources. Maybe they had an SDK or API that I could hook into.

Nope. Their website only has documentation on how to create a Stream Deck plugin with the Stream Deck's SDK. There was no mention of Wave Link anywhere on their documentation website. So I decided to turn to the community to see if there was an unofficial way of communicating with Elgato's software.

As it turns out, sort of. In a Reddit thread that I discovered, someone mentioned that Wave Link keeps an open WebSocket port. They also mentioned a small project on GitHub called the “ElgatoWaveLinkSDK” but it was abandoned, with the latest commit being in September of 2022. That, and the fact the project was in C#, a programming language that I do not know.

So I had to take matters into my own hands. So my first instinct was to check and see if there was a way to debug Stream Deck plugins. And sure enough, there is!

As it turns out, at least in Windows, you can add a key to the registry editor in Windows to enable a web interface to debug Stream Deck plugins! You can see the instructions on how to enable it for yourself here. Once you have it enabled, you simply navigate to localhost:23654 and you will see a blinding white page with each plugin you have installed listed.

From here, we simply click on the one labelled com.elgato.wavelink and you will see a new page load with developer tools that look identical to Chrome's developer tools. Even if you're using Firefox, like me! Then we'll navigate over to the network tab, and hit Ctrl + R to reload the page and start recording network activity. Once we have the long list of things being loaded by the page, we are looking for WebSockets. So, near the top of the developers tools, next to where the “filter” search box is, we're going to tick the “WS” button - which stands for WebSocket.

Boom. We have two WebSocket connections it establishes. One is to a WebSocket on port 28196 - which after inspecting looks like it handles changing the icon on each key of the Stream Deck. The other is on port 1824 - bingo.

The WebSocket was sending out data every time the audio levels changed in real time, whenever the volume would change, or when basically any piece of information would change. And if you press a button on the Stream Deck, like one that would increase volume, you can see what data it sends to the WebSocket to change the volume.

Now all that I needed to do, was make the script.

The boring coding part.

So here's the rundown. This script needs to connect to the WebSocket, and listen to the messages it receives. Through this, we can keep track of whatever the current volume is, or if the output is muted. Then, we have a global hotkey for the keys we previously remapped on the dial to F13 F14 and F15 so that when one of these buttons is pressed, it will increase the volume by a predetermined step, or decrease the volume, or toggle mute.

Which in and of itself, isn't incredibly difficult to do. It's simply a game of sending the correct information, and correctly interpreting the information we get back.

After much trial and error and having to use pynput to properly handle global hotkeys, I finally got the basic functionality working. If I turned the dial clockwise, it would increase the volume. If I turned the volume counter-clockwise, it would decrease the volume.And if I clicked the dial in, it would toggle mute.

So yeah, that solved one problem. But what about that overlay thing you were talking about?

This was actually the most annoying part if I'm being completely honest. Most of my UI design experience is entirely in web design. I have no clue how to create a proper native GUI, let alone a volume overlay. So, it was back to the lab.

I ended up using tkinter to create the GUI because of how simple it is, and the fact that it's built-in to Python. One less dependency to add to the project. And I got it working!

Now whenever I turn the knob, the output volume changes, and you can see a quick popup of whatever the volume is set to! The overlay also displays the volumes of inputs whenever I change them on my Stream Deck. As a matter of fact, if you remove the hotkeys from the program, it functions entirely as a way to see your volume changes in real time.

And here it is in action.

And the best part, anyone can use it!

I'll be completely blunt, I'm not a fantastic programmer by any stretch of any degree. But, given how little information exists regarding how to interface with Elgato's Wave Link software, I figured I would make the script open source so that anyone can inspect and modify it for their own use.

And you can check it out right now, on my GitHub.

I think that it's important to show that with enough know-how, perseverance, and creativity, you can solve almost any problem that you can think of. And while we're at it, thanks for reading.

❤️

Stop putting your documentation on Discord.
This post was originally created on October 15th, 2024.
Have you ever tried to access a service, or wanted to try out a new technology, but the only way to get proper documentation or support is through a Discord server? Doesn't it drive you insane?

Stop putting your documentation on Discord.

This post was originally created on October 15th, 2024.

Have you ever tried to access a service, or wanted to try out a new technology, but the only way to get proper documentation or support is through a Discord server? Doesn't it drive you insane?

In all honesty, this is a major key point in why I wanted to maintain a blog of sorts, and also why I wanted to write this. In my opinion, I think that any public facing forum, blog, or documentation website would be a better place to put information rather than a Discord server.

So let's highlight some of the key pain points about doing this, and why developers or project managers should stop relying on Discord for these things.

And I think it can be boiled down to 4 key points, that are all intertwined.

  1. 1.

    An account.

  2. 2.

    Privacy.

  3. 3.

    Accessibility.

  4. 4.

    Readibility.

1: It's locked behind an account.

First and foremost, I think that this is genuinely one of the biggest problems about using Discord specifically as a platform for documentation - not so much as for a support method.

In order to access the information that you need, you are required to have a Discord account. And for some people, they might already have a Discord account and wouldn't care to go ahead and join a new server. But for a lot of people, this is an unnecessary barrier of entry.

While documentation in the programming realm is often intended for power users that know how to understand it, it should always be publicly available to help preserve the information being presented, and to not waste developers time. Countless numbers of major services keep their documentation open so that developers can quickly and easily focus on what matters - actually doing their job.

When you lock everything behind a third-party account and service, you are obstructing the information that you need to present and introduce an additional step that makes reading that documentation harder for developers. Which leads me to the next point.

2: People deserve privacy.

In a day and age where security breaches are incredibly common, why should you require someone to make an account just to access information that should be publicly and easily accessible?

By default, Discord shares your game activity and enables rich presence in some productivity applications to not only other users of the service, but more importantly, to advertisers. The reason Discord is able to operate and afford the billions upon billions of messages, images, voice and video calls, and host millions of servers for free, is purely because they are able to sell a massive amount of your data.

And listen, if I'm being completely honest, I personally don't care. I already made the mistake of giving plenty of platforms far more information than they actually need.

But you should avoid platforms like this and value your privacy when you can, and especially if you're just trying to see documentation for something, it's entirely unnecessary to use a platform like Discord.

(not to mention, Discord is completely closed source)

3: It's awful for accessibility.

If you're already a Discord user, you probably know how to navigate the app and how servers work. But to a new user, it is a nightmare to use. I recommend this video from Juxtopposed that highlights (and fixes) some of the weird design decisions that might be difficult for a new user to understand.

Discord's inherent focus as a chatting platform makes it very confusing to a user who isn't familiar with it. That isn't to say that they haven't made strides into making it work better for a wider audience and for something like documentation. For example, back in 2022 when they released forum channels - which as it sounds, behaves a lot like a forum. But it still has the same design philsophy as a chat channel.

4: It's usually bad documentation, anyway.

Listen, I'm not trying to be rude to the people who maintain the documentation in these Discords, but often times - it just sucks.

One of the key advantages to using a proper website that was designed with documentation in mind, is that it's formatted in a way that makes sense to navigate. A Discord server simply cannot accommodate for this layout.

Take for example, the documentation for Astro - the framework that holds this very website together.

Notice how it displays a sidebar with various categories and pages - this is similar to Discord. But do you notice what their documentation has that Discord lacks?

A table of contents - see the “On this page” sidebar when you navigate to a specific page.

Being able to quickly navigate and jump to different sections based upon what specific information you need to access is very important for a developer. Let's say, for example, there was an API endpoint that you needed to use, finding it would be much harder if you can't immediately navigate to it based on context. If you were using Discord, you'd have to use Discord's search function to find what you're looking for manually. Assuming the Discord server is well-maintained, and laid out in a way that makes it easy to search.

Not that any of this is Discord's fault. Discord is intended to be a chat platform where you interact with and see what everyone else is up to. It doesn't really work as well for documents.

It's great for communities!

I'm not saying that you shouldn't use Discord at all, in fact I have used Discord for almost a decade now, and even have my own server. I just think you should use it for what it's intended for - a chat platform.

Discord is a great place to have a conversation with other developers, or with your own team, users or customers. It's a great place and a great idea to have your own server or be involved in others to discuss ideas, ask questions, and get feedback on your or others work.

If you run a project, your users will love the ability to interact with the developers and other users to see how they utilize your product, and how you can improve it. I would actually argue that Discord is one of the best places to have a conversation with your users, and that you should use it for that.

It provides a sense of connection and community that helps both users and developers feel like they're communicating and working together. Like their feedback and ideas are actually being heard and considered. In a time where companies are often more focused on selling and making record profits, having a community of users and developers who are actually interacting with each other is a great way to build trust and loyalty.

But not for code.

I hope that this helps sums up some of my gripes with a trend that I've seen becoming more prevalent recently. I think it's important to remember that Discord is not the best place for document things, and that you should use a proper website for that.

Obviously, there are different use cases for either. Maybe it's a project in it's infancy that just needs a little bit of documentation, but in my opinion, you should eventually move to a proper, publicly available website for that.

Use Discord to help build your community and engage with your userbase - like it's intended to be used. And if you're looking for documentation, use a proper website.

And hey, thanks for reading!

❤️

Last.FM has the worst API I've ever seen.
This post was originally created on November 17th, 2024.
Recently, I got started working on a new project that I've been meaning to work on for quite some time. The whole purpose of this project was to create a new Twitch extension that would, if available, display your currently playing song as well as a few previously played songs. I would get this information via Last.FM.

Last.FM has the worst API I've ever seen.

This post was originally created on November 17th, 2024.

Recently, I got started working on a new project that I've been meaning to work on for quite some time. The whole purpose of this project was to create a new Twitch extension that would, if available, display your currently playing song as well as a few previously played songs. I would get this information via Last.FM.

Last.FM is a scrobbling service for your music. Essentially, what it does is it connects either directly to your Spotify account or it analyzes the media playing on your device of choice to help catalogue all of the music that you've listened to. Think of it similar to how Spotify does their "Spotify Wrapped" event at the end of every year to recap your music taste. Last.FM essentially does this, but whenever you want the information.

A long standing issue.

Now, this isn't my first time utilizing Last.FM's API. Back in the very end of 2022, like the very very end... like December 31st of 2022, I had made a widget for streamers that would allow them to display their currently playing song when it changes. Just like what I'm trying to do now, I used the Last.FM API to fetch this information.

And it worked fine almost the entire time. The problem was, occasionally it would display the incorrect song. I initially thought this was just a skill issue and I somehow managed to screw things up, until I realized that occasionally the song it would display, I had never listened to ever. It was a difficult problem to troubleshoot because of how inconsistent the issue was, but it was still consistent enough that it became an issue that I needed to fix.

After some rigorous troubleshooting, I found out that occasionally the Last.FM API will simply return the information for the wrong user. And apparently, even to this day, this is still a long standing issue that hasn't been fixed.

Check out this website. This is an unofficial website that (arguably, better) documents the Last.FM API and the issues that can occur when using it, and one of the four bugs that are on a dedicated page, talks about how the API can sometimes just return data from a completely different user.

And this isn't the only place where people have complained about this, you can see threads on Reddit, and even Last.FM's own support forum of people complaining about this specific issue.

  • Reddit - the (sad) state of last.fm for developers

  • Last.FM Support Forums - API sometimes returning data for different users

Now, you may notice that in the support forums, supposedly a fix for this was released. I, personally, cannot confirm nor deny if this is the case anymore, but I've still seen people complain about this issue. And to be honest, this issue even existing in the first place is a huge dent for any developer who wants to interface with the service.

Their API is different than the website?

I suppose we should get to the entire point of me writing this, and that's how their API just refuses to serve data that the regular website would display without any issues.

Let me explain. There is one API endpoint that I would always want to call when making my Twitch extension. And that is user.getRecentTracks. This endpoint returns the specified user's previously playing songs, as well as their currently playing one, if available.

The problem was, when I called the user.getRecentTracks endpoint, I noticed that the response returned an empty string for the album cover images.

You may also notice that there is no ID returned for the album itself. This is where I started to notice a problem. No matter what song I played, the API refused to send me these properties. Which didn't make sense to me. If I check on their website, everything appears fine.

This is when I noticed the discrepancy between the data the website displays, and the data the API returns. The website can totally tell what album the song belongs to, and displays the album art image without any problem.

Me being a nerd, I decided to do some troubleshooting. When I had originally played these songs, I was using a third-party YouTube Music client that supported Last.FM scrobbling. Maybe that was the problem? So, I opened Spotify and started streaming a couple songs to see how the API would respond. Bingo.

Whenever Spotify is used - likely only for Spotify Premium subscribers - all of the information is returned correctly. The website still displayed the correct information regardless of what client was used, but when using Spotify, it looks like the API actually returns the necessary data needed for developers.

This discrepancy, where the website can display information that is entirely missing from their own API, is very frustrating. I intentionally picked using the Last.FM API as opposed to using Spotify's API directly so that I could support more users instead of just relying on a single music streaming platform. By limiting myself to only Spotify, I also turn away potential users who would've used the Twitch extension if it supported platforms like TIDAL, or YouTube Music.

Which is disappointing to see, and I hope Last.FM will address and fix this problem at some point.

Oops, no images! (again)

Somewhat similar to the issues I was having, other users were having a problem where the Last.FM API would just return placeholder images.

In this instance, the API endpoint in question was user.getTopTracks. This endpoint is used to get the specified user's top tracks of all time, or for other time periods. This information could be useful for a developer to integrate into their own project, whether it's a widget, website, or whatever.

Here's a snippet of what the API still, to this day, returns.

Do you notice something wrong in this API response? Maybe... a string that keeps repeating in each response? Yeah. The API would keep returning various sizes of this placeholder image: https://lastfm.freetls.fastly.net/i/u/300x300/2a96cbd8b46e442fc41c2b86b821562f.png

And just like before, multiple people have complained about this not working.

  • Last.FM Support Forums - No images on tracks received using user.gettoptracks

  • Last.FM Support Forums - Issue with cover art when getting top tracks?

The first post originates from March of 2022, and the second post being as recent as September of 2024. And today, this problem STILL EXISTS. A staff member had even replied to the first post in 2022, and said the following:

"This is by design, artist images cannot be retrieved by the api."

Which is misleading, because we aren't retrieving artist images, we need the album art images - which are literally included in the API response? Even if that's what the staff member meant to say, why is this information even being returned if it's not intended to be there in the first place?

Which leads me to believe that this is just another long-running issue with Last.FM's API.

In conclusion.

Last.FM has the worst API I've ever seen. From incorrect responses, to inconsistencies, to just plain broken, it sucks.

As a developer (an amateur one, at that), I understand that maintaining these codebases are not easy. Especially when you begin operating at such a large scale. But when the entire purpose of your platform is to provide information, you should do a far better job than what we are currently working with.

And the reality is, there isn't really a good alternative to Last.FM. Because outside of Last.FM's API, their platform is pretty good, works well, and has easy to digest information. Which just makes it all the more obnoxious when they refuse to fix longstanding issues that should've been a decently high priority.

I hope I don't have to work their API again any time soon. But maybe one day they'll get around to fixing it. API v3, maybe?

Either way, thank you for reading.

❤️

Who am I?
This post was originally created on January 23rd, 2025, and updated on March 2nd, 2025.
I suppose this is a quite a bombshell of a post, especially compared to all of the posts before this one. I usually talk about technology, or other things that I'm interested in. But, as I stated in my bringing back the blog post, I always intended for this website, or at least the blog aspect of it, to be a place where I can get vulnerable and personal about things. And this post is no different.

Who am I?

This post was originally created on January 23rd, 2025, and updated on March 2nd, 2025.

I suppose this is a quite a bombshell of a post, especially compared to all of the posts before this one. I usually talk about technology, or other things that I'm interested in. But, as I stated in my bringing back the blog post, I always intended for this website, or at least the blog aspect of it, to be a place where I can get vulnerable and personal about things. And this post is no different.

I've been meaning, and trying to write a post like this for a very long time. It's honestly very interesting how easily I can write about the topics that I'm heavily invested into, like technology, but writing a personal piece like this one has been a heavy struggle. I mean, seriously. This post has been in the oven since before I even resurrected the blog.

So, yeah. Bare with me, this post is going to be a difficult one for me to write.

Am I socially anxious?

For as long as I can remember, I've always thought that I wasn't socially anxious. But as time has gone on, I've entirely convinced myself that not only was I wrong, I was far worse than I could have ever expected. I began to question how bad my social anxiety really was.

The real indicator was the fact that I started to notice a weird pattern in how I would behave.

Whenever I was hanging out with other people, any social anxiety that I had would disappear. It was as if I never even had social anxiety. If I was with other people, I would be the one to step up and talk to the teacher, to the cashier, to whoever. If something needed to get done, I would make sure it would get done as long as there was other people around. In school, if we were in a group project, I would be the first one to try and break the ice, or be the one to crack a joke to someone even if I've never talked to them before.

But whenever I'm by myself, I just can't bring myself to do these things. I'll make a conscious effort to try and skip these things. If a self checkout is available, I'd rather check out my items by myself than talk to someone else. Even if it would end up being more of a hassle. Like for example, let's say I had a problem with my bank. My first instinct isn't to call the bank and try to resolve the problem, my first thought is to check their website and see if there's a way to solve the problem, or send a support email. I'll intentionally go out of my way to avoid talking to someone else.

It's like there's a barrier in my head that I've put up. If I'm comfortable around someone, it's like my anxiety just disappears. But whenever I'm by myself I just can't let my guard down and I'll try my hardest to avoid any social confrontation.

I mean seriously, just the other day I ended up having a 20 or so minute conversation with an employee at Barnes & Noble. I was tense at first because it was someone that I didn't know, and I didn't want to talk to anyone. But once I had let my guard down, I was yapping up a storm. Was it because we ended up talking about topics that I actually had interests in? I don't get it.

Pushing P(eople Away).

This was one of the driving forces for me to finally suck it up and finish writing this whole thing.

Ever since I graduated, and especially in the past couple of months, I've noticed a "jealousy" that I have, for lack of a better term. I see everybody else around me, whether it's someone that I know personally, or just people online having these friend groups where everybody gets along, plays the games they want to play, and all enjoy each other's company.

I wish that I could have that. I wish I could join and fit in.

And yet, I also find myself struggling to join in these events, or join in the conversation. I don't understand why. I usually already know these people, I've heard their voices before and interacted with them before. But I just find it so difficult to feel like I'm really a part of anything. I don't want to seem like I'm inserting myself into these groups and forcing everyone to get along with me.

I feel like streaming plays an important role in allowing me to talk about topics with people that may or may not care about me or what I have to say, but being able to talk about the things that are on my mind is very important to me. And I'm very thankful and happy to see whenever people show up and listen to me. So I return the favor and try to listen to what other people have to say, whether it's through a chatroom, Discord, or through their own streams.

But it all goes back to the "jealousy" thing. I'll start to feel like I'm not good enough, like I'm not likable, and eventually I'll want to stop streaming altogether.

So I fall back to my tried and true habit of pushing people away. I start talking to everyone less and less, until eventually it all subsides. Then I'm all alone.

I'm a failure.

This has got to be one of the biggest things that has been constantly eating away at me, and no matter what I do, I can't escape the thought.

I think that I'm a failure. And I think a lot of the people around me think the same.

Back when I was in elementary school, I was very interested in electronics and technology. To this day, I still am as I'm sure you already know. At the time I had made nothing but straight A's. Everybody had big expectations of me. Everyone thought that I would amount to be this genius that would go on to change the world. My teachers, other classmates, my own family, they really saw a potential in me. It wouldn't help that in intermediate school (an uncommon in-between of elementary and middle school), I was accepted into a club for people with high academics and future potential.

For the most part, my grades were fine and would continue to be. My English grade wasn't always the best because I hated the work involved with it, but people really saw potential in me - at least in STEM fields.

Speaking of, I would eventually go on to tour one of the STEM schools in my district, the Nesbitt Discovery Academy. At the time, I was really in awe of the entire place. It was nothing like any other school I'd seen. Enrolling in the school featured plenty benefits, it featured plenty of clubs that I would've been interested in, it was really an opportunity that I should've took.

But I didn't want to lose my friends. So nothing ever happened.

Fast forward to now. I missed out on almost the entirety of high school because of a pandemic. I was stuck at home doing remote work, which I would begin to procrastinate on heavily, until my grades also sank. I moved during the pandemic, which meant I missed out signing up for driver education. And come senior year, when I had to return to in-person school, I started to fully realize how much I missed out on.

I never kept any of the friends that I held on to.

I felt, and still feel like a complete failure. Stuck at home every single day with income, no ability to drive, I just feel completely useless. Plenty of people had high expectations of me, hell, I had high expectations in myself. And I can't help but think that everyone else around me thinks the same.

Yet, here I am.

Being alive.

There's no beating around the bush with this one. I just want to be entirely transparent and say it how it is.

I have often pondered on how life would be if I was no longer around.

Death is an interesting thing, because of how little we really know. There's no way to tell what happens after we die or how it feels to die. It's the type of thing that you'll eventually experience for yourself at some point, so why worry about it now?

I'm sure some people can relate to this, but when you get to a point where you feel like life has lost all of it's meaning, you begin to wonder what death offers.

I'm in this constant loop of feeling like I'm a socially-inept, worthless failure and feeling like things would be better if I were to just end it all. But I fear death. Not as a concept, because it's inevitable, but I just don't want to know how it truly feels to die until my time comes.

Life has so much potential to provide happiness. I have no words to describe how life changing seeing Porter Robinson, an artist that I've enjoyed listening to for years, and experiencing the emotion behind his lyrics, jamming out and just forgetting everything, being around people who share the same love for his music.

I want to go places, I want to do things, I want to go to more concerts, I want to waste all of my money on useless anime figures, I want to experience things I've never experienced.

So it's really hard on me. The feeling of wanting to die, but still holding on.

And I know deep down that I could never actually do something like that. Not now. Consistently, every time that I'm not home, I know that my cat is always sitting there waiting for me. Before I lived where I do now, she would wait at the window next to the front door until I got off the bus. And even now, she'll either sit at my window waiting to see me walk by so that she can run to the door, or she's already sitting at the door waiting.

And I cannot imagine a day where she just keeps waiting, but I never show up.

Make fun of me all you want, but this cat means the world to me. During my senior year, I came home from school one day and didn't see her waiting for me anywhere. I tried to look for her but I didn't find her. I started looking in places that didn't even make sense to look, I called my mom, I called anyone I could to see if they knew where she was. She had gone missing, and I fell apart.

That night of sleep was the worst in my life. Not only could I not sleep, but when I finally did, I had the most heartbreaking dream of all time. It was as if I had just gotten up in the morning the next day, and got ready for school - cat still missing. But whenever I opened the door to go wait for the bus, she was just sitting there on the porch waiting for someone to open the door.

Then my alarm to actually wake up went off. It was all a dream.

So, who am I?

See what I did there? I reused the page title as a section to highlight how important this part is. Because it is. And I wanted to save it for the people who actually took the time to read through this whole thing.

The truth is, personal identity is a very nuanced and touchy subject to talk about. I had originally published this section, but then later changed my mind and removed it. But with commit history, and this site being open sourced, people have already seen what I originally said. So, I've decided to properly update it and include this section.

Over my lifetime, and even now, I've struggled to make connections with people. This made me start to question myself, my thoughts, my personality, my image. I started to ask myself "Who am I?"

Listen, there's no beating around the bush with this one. I've come to the conclusion that I'm bisexual.

When you have years upon years of untethered, unrestricted internet access, you are bound to find out things about yourself that you may never have known. The internet is a very powerful tool for that.

And I know that anyone who's read this far, or even knows about this website doesn't care, and is happy that I'm who I want to be. But in this modern age where everything is so connected and radicalized, to the point where the pure existence of a LGBTQ+ person is considered "controversal" - it's difficult to open up about subjects like this.

I've long had a safety net of people around me who wouldn't care about my orientation, gender, or anything else. They just saw me, for me. They would see anyone else, for who they are. And not everyone is lucky enough to have that. And even then, it's still difficult to talk about these things. Despite me writing this publicly for the people who know me digitally, I still haven't come out to anybody else.

Thanks for reading.

So, yeah. That's how I feel about everything. I've really wanted to just have this out there for so god damn long.

I'm sorry, I know that this post has been all over the place, and is probably not written very well. Like I've said, I've really struggled with writing this for many months. I've shed plenty of tears in the number of times I've repeated writing, deleting, and rewriting this post.

And hey, especially this time, thanks for taking the time to read this.

❤️

The curious case of Affinity.
This post was originally created on November 9th, 2025.
As most of us all know, Adobe had held the industry standard for practically any form of professional multimedia work. Photos, videos, audio, motion graphics, all of these are have their own editing product created by Adobe and are largely used as by the entire creative field.

The curious case of Affinity.

This post was originally created on November 9th, 2025.

As most of us all know, Adobe had held the industry standard for practically any form of professional multimedia work. Photos, videos, audio, motion graphics, all of these are have their own editing product created by Adobe and are largely used as by the entire creative field.

Now, I would be oblivious to say that their ecosystem doesn't have any benefit. The interoperability between each piece of software, like being able to import an After Effects composition directly into a Premiere Pro timeline is very powerful and quickens the production pipeline by requiring one less render to wait for and then add to the timeline.

However, Adobe has been, and should still be criticized for their shady business tactics. From their "annual plan, but paid monthly" to their "wait, no! please don't leave, here's a hefty discount!" to just their plain monopoly on the industry. A lot of people have been attempting to leave or rely less on the Adobe suite of products. And I am no different.

I needed to get away from Adobe.

During my long and treacherous quest to get away from the chokehold of Adobe products, I've attempted to replace almost every Adobe app with a comparable alternative. For the most part, this journey has been honestly been very successful.

As a "professional" video editor, I primarily used most of the multimedia related Adobe products. So while I can't recommend alternatives to everything, you can see my specific replacements here:

  • Video editing: Premiere Pro, replaced with DaVinci Resolve Studio.

  • Photo editing: Photoshop, replaced with Affinity Photo 2.

  • Motion graphics: After Effects, replaced with Cavalry.

  • Audio editing: Audition, replaced with Audacity.

The one that I specifically want to highlight in this post today is my Photoshop alternative, Affinity Photo.

Before I learned how to use Photoshop, my program of choice was a piece of software called paint.net - and no, it's not a website despite the name. With the addition of community made plugins, it was fairly comparable photo editor.

But it had one glaring flaw. It edited photos destructively.

You might be asking yourself what that means. It's pretty simple. Destructive photo editing means that once you apply a change, it is permanently applied to the image and can't be undone. Let's say on one layer you had imported an image. If you added a drop shadow, it is now a part of that layer. You can't go back and remove the drop shadow from the image. Whereas nondestructive photo editing allows you to go back and remove the drop shadow at any point.

They got me.

As time went on, my need for a nondestructive photo editor grew, so I sucked it up and decided to learn how to use Photoshop.

Now unlike most people, who may sail the seven seas for a copy of any Adobe product, I was naive and utilized my student discount to properly pay for the entire Adobe suite of products. At the time, I thought I had got a really good deal compared to the retail price of the subscription.

What I didn't know, is that I just paid for a yearly contract, but paid monthly.

Now you might be thinking, isn't that just paying for it monthly? And you would be partially correct. You do pay for the subscription each month, however Adobe locks you in to committing to pay for the subscription each month for a year. And if you decide you don't want to pay for Adobe anymore, you will be hit with a cancellation fee of varying magnitude depending on how long you have left in your contract.

So I was stuck paying for Adobe until my contract ended. Needless to say, I went searching for an alternative.

My love for Affinity Photo 2.

That's when I did some searching, and found that a lot of people were recommending a piece of software called Affinity Photo. Created by a company named Serif, it looked like an ideal alternative. A professional-grade nondestructive photo editor, capable of opening .psd files. And the best part was, it was a one time payment.

So I tried their 30 day free trial and fell in love.

Now look, I'm a firm believer that you should pay for software that you find use out of, but I also understand that for many people (myself included), a large upfront cost is a barrier of entry that a subscription model or "sailing the seven seas" may look like the better option. And I don't blame you.

But I really felt like there was value in having a proper professional grade alternative to Photoshop, that you actually owned and didn't have to continue paying for perpetually, unlike Adobe.

As time went on, I ended up sticking with Affinity Photo for quite some time. Fun fact - every single blog post on this website had a thumbnail created in Affinity Photo.

Wait, what are they doing?

In March of 2024, Canva announced that it would acquire Serif, the company behind the Affinity suite of products. Canva is a website that allows the average person to participate in graphic design.

Now I'll be honest, when the news came out, my heart sank. Generally speaking, any time a company who's product I use is acquired, I immediately become skeptical. But in response to a lot of people's skepticism, Canva announced that it would make four pledges to the community regarding Affinity.

  1. 1.
    "We are committed to fair, transparent and affordable pricing, including the perpetual licenses that have made Affinity special."
  2. 2.
    "We will double down on expanding Affinity's products through continued investment in Affinity as a standalone product suite."
  3. 3.
    "We will provide Affinity free for schools and nonprofits."
  4. 4.
    "We are committed to listening and being led by the design community at every step in this journey."

Now while this helped to calm fears, a lot of people, myself included, still raised an eyebrow to this.

But to be honest, for quite some time, nothing happened. As a matter of fact, I entirely forgot about the fact that Canva bought Serif.

"Creative Freedom Is Coming"

Or that was the case up until last month, or October.

Affinity's website, storefront, and forum had been completely paused, instead presenting everyone with a landing page that said in giant letters "Creative Freedom Is Coming" and saying that "creative freedom is just around the corner. October 30."

And of course, like clockwork, every single user began to panic. Did Affinity become the thing they sought out to destroy? Are they going subscription based? What happens to all of the products we paid for?

Even I had my own worries about the news.

This Bluesky post is not available...

Affinity wasn't doing itself any justice either, on the everything app Affinity kept responding to comments of people's worries and concerns with nondescript generic answers.

https://twitter.com/Affinity/status/1974087612672377080

But all that we could do is wait.

They made it free?!

You heard that heading right, on October 30th they had announced a change that shocked many people, myself included.

Affinity had gone completely free! Along with that, their entire creative suite which consisted of Photo, Designer, and Publisher were all condensed into one single app simply titled "Affinity" where you can switch freely between raster, vector and layout related image editing.

Now, of course, I would be completely oblivious if I didn't mention the glaring concern. If Affinity is now free, what's the catch? Will Canva train on our work to train and power their AI? Is Canva selling user data? How can Canva reasonably afford to keep Affinity free?

Supposedly according to Canva, they will be doing NONE of that. While you will need a Canva account to login, all of the base functionality is and will always remain that way. Canva has amassed over 28 million paying customers with $3.5 billion in annual revenue. And they claim that this is enough to sustain developing professional grade software for free.

My main concern is how long this realistically lasts for. While Canva is not a publicly traded company, things can change. At any point things could change. Canva could become a publicly traded company, at which point they are obligated to appease shareholders. Will they start their "cash grab" then? It's anybodies guess.

The state of privacy.

The truth is, this concern exists for a lot of pieces of software and a lot of digital goods.

I've been using computers for far longer than I should considering how old I am. I have seen first hand many products shift from being one time purchases, where you actually owned the thing you were paying for, to perpetually paid subscription models where they reserve the right to revoke your "license" at any point.

Digital ownership, among many other things, are in very sad state and it's important to note when these things happen. While I will continue to use Affinity until it no longer fits my purpose, huge changes like these often have bad consequences. Regardless of if it's long term or short term.

But we'll have to see how things pan out.

And hey, thanks for reading.

❤️

Farewell; a faithful goodbye to streaming.

riley's inner mechanisms

hi. i'm a video editor and occasional web dev. often found working on and never finishing multiple things