Instaudio
Popular audio sharing website for audio producers, voice actors, etc, visited by over 5 million people over its lifetime.
Instaudio was an audio sharing website I built and ran from May 2013 until September 2019. It allowed uploading MP3, WAV, and OGG files of up to 15MiB in size each, with or without an account. It presented a simple player interface that worked well on mobile and desktop, visualized the audio in the form of a spectrogram, and had minimal ads (one banner). It never did any tracking of your data, nor showed any of all the other annoying popups and requests you see on so much of today’s web.
For this, it was well-loved among thousands of audio creators and gained a large userbase purely by word of mouth.
Conception
Instaudio started by my friend Derek’s suggestion to make a sort of “imgur for audio”. As I often work on music, I regularly liked to share MP3 snippets, as did he. Today, you can serve an MP3 file directly, and the web browser will automatically render a little audio player with controls for it; no problem. Back in early 2013 there was no widespread support for HTML5 audio yet, so this was all less straightforward.
I started by writing a small PHP script, and a Dropbox folder synced to my server. When visiting the url of an MP3 file in that folder, it would render a web page with a simple audio player interface, so you could play it right there. This was based around “SoundManager2”, a library that would play using native browser support or fall back to an Adobe Flash-based player otherwise. This worked out quite well, but only served my personal use.
Using what I’d learned working on the websites for DI.FM and its related brands, I built a proper website for it with the Ruby on Rails framework. It was initially launched in May 2013, with one very simple feature: upload an audio file, get a big shareable player interface for it. The homepage looked like this:
I introduced features such a simple search, “private” upload (longer id, not searchable), as well as the ability to add a description in markdown for your upload.
A favourite among many was the “Random audio” feature, which redirected you to a random (public) audio upload. A fun way to discover some cool things, but also a gateway to the plentiful weird stuff and jokes people put up.
User System
In March 2014, I released the user system. While you could still upload anonymously, the user system allowed for a better way to manage your uploads permanently.
The user system launched with social authentication support for Twitter and Facebook, forgot/reset password functionality, and the ability to delete your account. For the transactions emails related to the latter two, it was integrated with Postmark.
Fancy Spectrograms
In late 2014 I added a visual update: all new uploads got an auto-generated spectrogram for the backdrop of the player. I chosed spectrograms because I felt that waveforms were a bit over-done, spectrograms showed more information, and it was more technically challenging to implement. It also opened up the ability for people to sneak in “hidden” messages in their audio, that would become visible on the player page.
To make the spectrograms happen, I used a combination of ffmpeg
, sox
, imagemagick
, and bash scripting.
An example file shows it off with different harmonics doing a stepped frequency sweep:
The Hidden Side
From the very beginning I built an administration interface to allow deleting any uploads that break the rules (infringing on copyright etc). This quickly became necessary due to an influx of spam, just like any site allowing user contributions deals with.
While Instaudio didn’t store any personal not provided directly by its users when they made an account, it did store the IP address from which each audio file was uploaded. This allowed more easily bulk-deleting spam uploads from the same origin.
As the usership grew over the years, so did the amount of incoming spam. To help combat it, I integrated Akismet to automatically identify a lot of it. Later, I built tooling to connect multiple spam sources as “spam networks” by identifying overlap in IP addresses and user accounts used to post it. This allowed easily finding spam that for one reason or another flew under Akismet’s radar, and saved a lot of manual clicking around in the administration interface.
No spam was ever automatically deleted though; it was only ever automatically marked as spam—a flag visible in the admin interface—and I’d then manually clear it out, to prevent false positives sneaking in.
Towards the end, spam wasn’t the only big problem. An increasingly frustrating amount of people were uploading work that didn’t belong to them. Leaked* tracks from big name artists were very common, as were the takedown requests from organisations presenting those musicians’ rights. I always endeavoured to take down those entries as soon as I saw the takedown requests; almost always within 4 hours or so.
[*] I take that with a big grain of salt, given the sheer amount of supposedly “leaked” music being uploaded. That’s a can of speculative worms I won’t go into, though.
Closing it down
In the end, I received legal threats (moreso than the threatening tone of standard DMCA takedown requests) from those organisations, and I decided it was no longer worth it. Since I never ran more than a simple ad, the site was costing me a lot of money to keep up. I did not have the drive to turn it into an actual business.
Data export for registered users
I published a 2-month shut-down plan on the site, starting by disabling new uploads. 2 weeks in, I launched an export tool for registered users, which collected all their uploaded files and created a .ZIP archive for them to download, available for 48 hours after completion. The system also sent an email to notify when the archive was ready to download. Seeing as Instaudio ran on a single server, this worked in a queue-based system where only one export job would run at a time.
The export system was extensively tested before I released it. I made it keep detailed log files of the process to facilite quick identification of any issues if there ended up being hangups. It auto-detected whether a given a given job was taking longer than normal via scheduled tasks (cronjobs), and if so, would send me an email containing the log file for that job. This allowed me to immediately see what the problem might be. It did clog up a few times, and I also got a few false positives for very lengthy jobs were someone had over 900 uploads to their account.
Overall, the system held up really well; I believe a few hundred people ended up exporting their archives from the site.
Registered users would see this screen where they could pick what to include in their archive:
Archiving
A couple of people at the Internet Archive reached out to me about archiving all the public uploads. I had a concern about the bandwidth cost of this effort, given that the vast majority of files were served from Amazon S3. I estimated the cost to download them all, and as it happens, they managed to raise some donations to cover the cost; definitely not something I would’ve expected. I’m very grateful for this.
After that, I helped out, providing a list of all existing public upload IDs so they could crawl it without hitting a bunch of “not found” pages. All public uploads remain available on the Wayback Machine, and are playable.
Instaudio was an enjoyable journey. I loved seeing people find it useful and share their work, their jokes, and their Undertale covers, and so forth. It was with a heavy heart I decided to shut it down, but it’s generally been a relief to me—financially and mentally.
Technologies Used:
- Ruby on Rails
- HTML / ERB templating
- CSS / SCSS
- JavaScript / some jQuery
- SoundManager2 audio player library
- Postmark for transactional email delivery
- Ubuntu, hosted on Linode (whom are a fantastic host, by the way)
- Amazon AWS (S3) - storing uploads older than ~2 weeks
- /bin/bash (several odds and ends)
- ffmpeg, sox, imagemagick (Spectrogram image generation)
- nginx
- git
- mysql (through ActiveRecord in Ruby on Rails)
- Adobe Flash (briefly, for a Facebook newsfeed embeddable player)
- Omniauth for implementing social authentication (Facebook, Twitter)
- rake (several cronjobs and other tasks)
- ssh, tmux (general server admin)