How to run Fedivision

The Fedivision Song Contest was a popular event among amateur musicians on the Fediverse. It ran from 2021 to 2024, with musicians from all over the Fediverse writing songs to compete for the glory of winning a contest no one else has ever heard of. These notes are for posterity, and a cautionary tale for anyone else thinking of running a similar contest.

Origins of Fedivision

Fedivision was the brainchild of @TQ and @zatnosk in May 2021. The world was still coming to terms with a pandemic, and a lot of folks were stuck at home. To while away the time, they started a lighthearted contest among local instances, modelled on the concurrent Eurovision Song Contest: compose and record a new song, put it online for other Fediverse users to listen to, and vote for the most popular. In the first year, fewer than 30 songs were submitted, but the contest has grown in popularity and scale, with 72 entries in 2024.

I answered the call for assistance in 2023, stepping in to the role of administrative assistant and file host. This was the first year after the monumental explosion that the Fediverse underwent in the late 2022 exodus from Twitter. These are my notes from helping to run the contest for the years 2023-2024.

Federation is hard

For the first three years, Fedivision was run from the home instances of its operators, weirder.earth, mastodon.art, and (from 2023) old.mermaid.town. mastodon.art is sizeable, but it has strict limitations on federation, blocking some of the largest flagship instances, while weirder.earth is quite a bit smaller, and old.mermaid.town has only a handful of users. This meant that getting the message about Fedivision out to the general Fediverse was challenging. Federation is on a post-by-post basis, so we needed to rely on Word of Boost to get the contest details out to musicians. Even so, not everyone heard about it in time. Hitting every time zone was always a challenge.

In 2024, I spun up a dedicated instance at the perfectly-named fedi.vision, running the lightweight Python-based Fediverse software Takahē. Having our own instance meant that we were free to open up federation to the flagship instances, and we were no longer at risk of defederation due to the actions of a user or moderator on the home instances of the organizers.

Takahē worked fairly well. It was happy to run in a virtual machine in 1 GB of RAM, which is half of what I’ve been able to run Mastodon in. It boasts a “Mastodon-compatible” API so it works, mostly, with clients and (as described later) the vote-counting bot. There were some federation issues with Misskey-fork varieties of Fediverse servers, which broke direct communication between fedi.vision and some contestants. In those cases, I used my own account to message them. (There has since been an update to Takahē which purports to fix Misskey federation, but development of the software has stalled and I don’t expect there to be any more releases.)

I spent most of February 2024 spamming announcements from the @announce account, boosting from my own account (with 2500 followers) and cajoling my followers to boost throughout the world’s time zones. By the end of the contest, @announce had 831 followers.

“Hashtags help federation” is one of the most persistent myths on the Fediverse. The truth is that posts federate the same whether they contain a hashtag in them or not. What a hashtag does do is help users to find matching posts that have already federated to their instance. That might be useful on large instances, or on music-focussed instances with a higher-than-usual density of users who care about Fedivision. Smaller instances just won’t see those posts, unless users there follow @announce or see a boost from a user who does.

What hashtags do help with is muting. It was abundantly clear that there are users who don’t care one bit about Fedivision. Giving these users something concrete to match and filter is just being a good citizen.

Tip: Use both and hashtags in every post. The former because it gives people something to filter on year-over-year, and the latter because it automatically sunsets last year’s posts with their own hashtag for people searching.

I love WordPress. I hate WordPress. I love

From the start, Fedivision has had a website, running on the blogging software WordPress. I love how WordPress lets you write without much distraction, but it’s pretty heavyweight when all you need is a few web pages.

We used Ninja Forms as the form upload plugin where contestants posted their entries. Ninja Forms probably has a lot of features that could have made our lives easier, but we were always under too much time pressure to experiment. The important thing is that it could deliver us a CSV file with all the form data in it, which we could load into Excel or Numbers or process with Perl.

The website is also where listeners go to listen to the songs during the voting period. Embedding a media player in a WordPress page should be easy, right? We tried so many of them, and the one we settled on in 2023 (Able Player) was a compromise of sorts too. While it has a “song playlist” mode, it’s more suited to video than audio, and the “lyrics” display is really just subtitles, which need timestamps for every line. It was far too cumbersome and time-consuming, so we just included the lyrics in a <div> downpage.

Tip: Maybe a static site is a better choice, especially since many of the pages are generated from boilerplate templates.

curl, Perl and ffmpeg

When there were only one or two dozen entries, it was perfectly reasonable to hand-edit the WordPress pages, paste the lyrics in, convert files by hand. By 2024, there were six dozen entries, and hand-editing no longer scaled.

Submissions came through the Ninja Forms WordPress plugin, which could export its entries as a CSV file, one entry per row. I wrote a lot of throwaway Perl scripts starting use CSV; to process this file. Perl has a templating toolkit built in, so I was able to generate almost the entire WordPress landing page source from boilerplate in one go, with titles, links to artists’ social accounts, lyrics, and so on.

Fetching the music files should have been easy, but the Fediverse has earned its stereotype of being full of rugged free-as-in-speech anticapitalist individualists, and entrants managed to find every possible anticapitalist way to send us the files. There were Soundcloud links. There were Dropbox links. There were Bandcamp links. There were Faircamp links. There were cryptpad links. There were links to the artist’s own NAS where I had to make an appointment for the artist to turn on their firewall redirection rule while I downloaded the file.

It should have been possible for me to pull all of these files down with curl, but many of them required me to visit a web page in a GUI to find the “Download File” button. Soundcloud required me to create an account before it deigned to show me the Download button. Sheesh.

Tip: Perhaps a file upload web interface is the way to go. But to stem abuse, this needs all kinds of safeguards, and would probably have ended in each entrant having to create an account, and this seemed contrary to the whole Fediverse vibe. This is an unsolved problem.

As we wanted as many listeners as possible to be able to play back the entries, I converted every entry to MP3. Some entries came that way, notably Soundcloud which thinks 128 kbps is an appropriate bitrate. But most came as WAV, or FLAC, or OGG, or some other format that needed to be converted. I became quite the expert at writing ffmpeg command lines. These, again, all had to be done by hand on the command line because every entry resisted scripting due to specific file naming or other exceptions.

Tip: Make everyone swallow their pride and supply MP3 files, no exceptions. If I can run ffmpeg, so can you.

I hate S3. I love S3. I hate

In its second year, the contest grew big enough that a new problem emerged: rate limiting. The song files were uploaded onto the Dropbox account of one of the organizers, and the WordPress page pointed to them. This rapidly maxed out Dropbox’s download limit for the user was exceeded, and no one, not even the organizers, could access the files.

Luckily, one of us still had them in a local directory, and @alderwick stepped up to provide hosting at extremely short notice.

Starting in 2023, I instead put the files onto an Amazon S3-compatible storage bucket. Bucket storage is optimized for few writes and many reads, and we never hit a rate-limiting problem again. But S3 is not a file system, and there were annoyances with permissions and file naming, particularly as people have a habit of being clever and putting URL-special characters into their artist names and song titles. But we got there.

Bus factor

This preparatory work took ages to complete, particularly in 2024 when there were 72 entries. I worked on the entries every night as more came in. All up, setting up before the contest opened took me probably 30 hours of my free time. Each entry needed to be listened to, vetted for hate speech or dog whistles, the explanatory text provider by the entrant tidied up, links checked, DM conversations made with entrants, corrections made to their mistyped Fedi handles, resubmissions because the file was corrupted or the entry longer than our four-minute limit, etc. etc. And this doesn’t count the work that my colleagues did. It would be fair to say that we all verged on burnout.

Tip: Running any event is, first and foremost, a People-bound project. Like a gas, it will expand to fill the available volume. You can always put more time into the event, and when you do, you are spread even thinner.

I made advertisements for Fedivision! Two radio spots that appeared on constant rotation on Radio Free Fedi, earworms both of them, I bet you can still hear Pooper Scooper as you read this. I didn’t even have the time to field my own entry in 2024, so my winning 2023 entry went undefended.

While we had offers to help, the fact was that training new helpers would have taken more time than doing the work ourselves. So we pushed through.

On air

The preparation work took about a week after submissions closed. In 2024 we even teamed up with Radio Free Fedi, who graciously popped up a temporary station playing entries back-to-back in about a four-hour cycle. We flipped the switch, and…

It all worked. By 2023 we’d worked out all of the likely technical hiccups and everyone was able to listen to the entries almost hitch-free. I switched from technical support mode to evangelism mode, spamming the hashtags with posts, to the irritation of some who needed to learn how to filter their feed. I listened to all of the songs, again, and posted something nice about all of them over the space of about three days. I probably spent another fifteen hours of spare time managing the event during voting week.

There was a real party festival feel all over Music Fediverse in the week that voting was open. Musicians were discovering each other and forging new connections despite the annoyances of federation. The spontaneity and comradeship was a wonder to behold.

The people have spoken

Fedivision was created as a contest in the style of Eurovision. While the voting system wasn’t the same as Eurovision’s byzantine scheme, the contest was always destined to have a winner. This was actually my least favourite part of the whole thing, because someone (several someones) would get zero votes, and there wasn’t really any way to sugar coat that.

Voting was handled by a custom bot that @zatnosk wrote: it would receive any mention and increment a counter for the mentioned entry. It had extra logic to detect ballot-stuffing and allowed accounts to change their vote up until closing.

Until 2023, each Fediverse account could vote only for one entry. In 2024, with 72 entries, we changed the system so that votes could be lodged for up to three entries. This required extra logic in the bot to ensure that the votes were actually for different songs. To independently verify the vote, I wrote a SQL query to read the Takahē database directly; it returned the same order of results.

Tip: Spend the time to scrutineer the malformed votes. If you can determine intent from the vote, count it.

The results announcement, while it was in the middle of the night for me because of time zones, was a party event. In 2024, Radio Free Fedi sprouted a live chat-simulcast of the countdown. The tension was electric.

Winding down

Fedivision was always imagined as an ephemeral event. Some submissions were finished songs, and some of them were hastily assembled and perhaps only demo quality. So, a few weeks after the contest is over, we wipe the S3 store and put the WordPress site into hibernation. The first contest in 2021 was so ephemeral that even the list of entrants was lost to posterity. For 2022 to 2024, we still had information about all of the entries, and put up directories of the entries and links to the artists’ social and web presences, so that people coming along later could find other music by the entrants, perhaps even a cleaned-up release of their entry.

The future of Fedivision

72 entries was, frankly, a lot. Played end to end, the 2024 submissions ran to four hours. That’s a big commitment to ask of listeners. So what to do? We three organizers discussed this a lot.

We considered splitting the contest into a Fedivision for Songs, and a Fedivision for Instrumentals. That would have about split the field in two. But it meant running the event twice a year, and annually was already work enough.

We considered a semifinal-final structure, but deciding who would advance from the finals would require either several rounds of voting, lengthening the contest, or someone (us? an independent panel?) picks the finalists from the field, which we didn’t like because, well, who are we to decide? Either way, four hours of music is still four hours.

In the end, we all agreed that the Fediverse is just too big now for a contest like Fedivision, and it was time to put the format to rest.

We acknowledge that this decision is going to disappoint many people on the Fediverse. To those thinking of offering to take over the running of the contest: this is not an option. I hope that this blog post both puts into perspective the enormous time commitment that running an event like Fedivision takes, as well as imparts the understanding that the contest was designed for a smaller Fediverse that just doesn’t exist any more.

Fedivision’s legacy

It’s amazing to me that despite all my spamming before and during Fedivision, and with all the boosting from my followers, still so many musicians admitted that they’d never heard of the contest. Posts just don’t travel that far in the Fediverse; it’s a feature of the protocol.

2024 was a year of significant change for me and the other Fedivision organizers, for Radio Free Fedi, and for a lot of the musicians that I’ve become friends with over the course of the three years I’ve been involved with the contest. I am grateful to all of you for the connections I’ve forged and keen to make new ones using other discovery mechanisms that are surfacing in 2025.

If you participated in Fedivision in any of its four years, as an entrant, or as a listener, or as a voter: thank you. You helped to make the Fediverse a very special place, and I hope you’ll hold the memory of Fedivision in your hearts.

So, haul on the jib!

Comments

2 responses to “How to run Fedivision”

  1. Luke

    One door closes, another door opens. It sounds like not only was it a glorious competition but you also had a lot of fun tinkering with the production side of it. Thanks for your work and best of luck on the next adventure!

  2. @blog @TQ @zatnosk @announce @alderwick Thank you all for the spectacular effort you put in, to make Fedivision happen in the first place. A quick reminder to people who see this post, check the #fediplay hashtag for what people are listening to and their opinions on it.

Leave a Reply

Your email address will not be published. Required fields are marked *