moderation

plyr.fm November 30, 2025
Source

plyr.fm, being a media host, beckons in 2 obvious forms of liability:

so... some form of moderation is strictly necessary.

but.. how should i do it? if things go well, it can't all just be me manually listening to every upload (as much as i enjoy this today!)

#1 copyright infringement - audd.io is a thing

... its basically exactly what i need: a black box that takes audio and returns potential copyright matches with a confidence score.

but... its kinda expensive ngl, esp for really long tracks, like this:

We count requests to the enterprise endpoint as 1 request per 12 seconds of audio.

just this track would be 895 requests (= 179 * 60 / 12), where $5/mo indie tier allots 1k requests (and charges $5 for each subsequent 1k requests). so $4.50 to moderate this track with Audd

it's not that bad given the scale I operate at now, but doesn't seem scalable if this app did well and hundreds of people started using it.

but, in lieu of something better, I'm going to use audd.io for now

learning from ozone

ozone (bluesky's labeling service) seems to establish that "moderation" is generally a 2-phase process consisting of:

so, i built an ATProto labeler that emits copyright-violation labels for tracks that are flagged by Audd.

https://moderation.plyr.fm/ External Link • moderation.plyr.fm

these labels are:

so, not "BOOM! your track is deleted bc this random pattern matcher said i should" but "hey, sounds like you maybe uploaded t swift? i might have to circle back if someone emails me about this"

upload completes
       │
       ▼
┌──────────────┐     ┌─────────────────┐     ┌─────────────┐
│   backend    │────▶│   moderation    │────▶│  AuDD API   │
│ (background) │     │   service       │     │             │
│              │◀────│                 │◀────│             │
└──────────────┘     └─────────────────┘     └─────────────┘
       │                    │
       │                    │ if flagged
       ▼                    ▼
┌──────────────┐     ┌─────────────────┐
│ copyright_   │     │  ATProto label  │
│ scans table  │     │  emission       │
└──────────────┘     └─────────────────┘

uploaded tracks that match copyrighted material (according to Audd) will be flagged in the authenticated user's portal:

and my moderation service exposes a little admin panel i can use to review flagged items (this is what i think Ozone UI would do for me)

we'll see how well this goes in practice!

i am not certain that architecturally i have the right pattern yet. it may be the case that i want to use Ozone directly, but i figured re-creating this wheel wouldn't be the worst yak shaving exercise.

#2 problematic cover art

this is in some ways easier, in others more fuzzy.

this works fine:

https://gist.github.com/zzstoatzz/8975282e4e6751482165fc20b5d2f536 External Link • gist.github.com

but it's flaky and i have no idea what the policy should actually be.

ideally I could use this, but i applied for access and they denied me (i might try again later).

this aspect requires more time and thought from me.

what's next

as ever, I am very open to questions, comments or suggestions!

Discussion in the ATmosphere

Loading comments...