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

  • copyright infringement

  • illegal cover art images (who knows the possibilities πŸ₯΄)

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:

  • automatic labeling

  • subsequent / potential manual action by a human

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

plyr.fm moderation
This service provides content labels for plyr.fm, the music streaming platform on ATProto.
https://moderation.plyr.fm/

these labels are:

  • public (anyone can query them)

  • informational (as opposed to necessarily enforced)

  • reversible (false positives can be negated)

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

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

  • seeking and refining feedback on what's laid out above

  • exploring tooling and workflows for contesting labels

  • nailing down cover art moderation

  • exploring more cost-effective options for copyright matching

  • explore other forms of "illegal audio" to expose blind spots

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