I have a little Windows tray app called QuickAudioRecorder. You click once and it records your mic, your system audio or both. I mostly use it to record audio for my Anki flashcards.

Today I finally looked through its forks on GitHub. There are six of them. Two are just plain copies, but in the other four people had changed things, and one of them had even fixed a bug I didn’t know about.

With LLMs it’s easy now to adapt software to exactly what you need, so that part wasn’t too surprising. I was really glad that people pushed their forks to GitHub at all, though. The app is MIT licensed, which doesn’t make anyone share their changes, so they could have just kept them on their own PC.

So I spent the day trying to get the good parts back into the main project. I don’t really know if this is how you’re supposed to do it, but here’s what I did.

The PR that fixed a bug I didn’t know about

Metaphizik found out that if your mic gets unplugged in the middle of a recording, the whole recording is just gone, which is about the worst thing a recorder can do. They fixed it and opened a PR. The PR was written with AI, and the description said so and ended with “Feel free to reject.”

The fix itself was good, but it also came with some code that wasn’t needed (a timeout and two helper functions). My CONTRIBUTING.md even warns that AI PRs tend to do this. I didn’t ask for changes though, I just pushed a commit on top that cuts about 30 lines. While testing I also noticed that the tray icon still said “Recording” while the file was already being saved, so I fixed that in the same commit and merged it.

The ARM build

jadmthw had added a GitHub Actions workflow back in May that builds the app for Windows on ARM (like Snapdragon laptops). They never opened a PR for it, so I only found it now.

I copied their commits over with git cherry-pick, which keeps them as the author. Then I added one commit that moves the ARM build into my normal release workflow. Their version had to compile the MP3 encoder (lameenc) from source because in May there was no ready-made ARM package for it yet. Now there is one, so I could drop that step, and v1.3.0 ships an ARM exe.

Two forks I asked about

ColaIan built multi-track recording, so mic and system audio can be saved as separate files, which they had asked for in an issue a few months ago. Their fork has a lot of other changes in it too. They wrote that the code was messy and that I could just give it to my AI to clean up (which I found pretty funny). I asked them to open a PR with only the multi-track part, on top of the current version.

vaeccc translated the whole app into Chinese. My first thought was: what if this fork takes off on its own and everyone forgets about the original? Then again, I don’t speak Chinese, so I could never have done that part myself. So I opened an issue and asked if they want to bring the translation into the main repo.

Neither of them has answered yet. We’ll see.

The contributors list

I also wanted the README to show everyone who helped. First I tried contrib.rocks, which makes an image from GitHub’s contributor list. It only showed me :D

It turns out GitHub only counts commits whose email address is linked to an account, and Metaphizik’s wasn’t. People who only opened issues don’t count at all, even though six changes in v1.2.0 started as someone’s issue. So now it’s a simple HTML table that I keep by hand, with the people who wrote code at the top and a smaller row below for everyone who reported bugs or had ideas.

If you maintain a project and handle forks differently, I’d love to hear about it. I’m not sure I did it right.