Adding labels to media with php2Bluesky

Someone mentioned to me that you can add labels to posts in Bluesky and I have to admit that I had not idea what they were referring to. Looking at them I can understand why I’d not come across them – I’d not had any need for them but what are labels?

Bluesky Labels

A Bluesky label is a tag you can add to your own post to warn others (and moderation tools) that your content may include things like nudity, violence, sexual content, or graphic imagery. They:

  • Enable users to filter or blur posts based on content type.
  • Help moderation services enforce content guidelines.
  • Give creators a way to self-declare content warnings.

At the time of writing labels that users can add to their posts are as follows:

Label ValueUI LabelExplanation
pornAdultExplicit/erotic sexual content
sexualSuggestiveMild or suggestive sexual themes
nudityNudityNon‑erotic or artistic nudity
graphic-mediaGraphic MediaViolent or graphic content
!no-unauthenticatedn/amakes the content inaccessible to logged-out users in applications which respect the label.

How Labels look

Here are some examples of what posts look like with those labels applied.

Nudity

Given that this is “supposed” to cover “artistic nudity” this does not hide the content, which I found a bit surprising. Instead you get a content warning label above the post content:

Graphic Content

Any post labeled “porn”, “sexual” or “graphic-media” will have it’s contents initially hidden from view. You can easily display the hidden content by clicking the grey bar:

Hidden Content

“!no-unauthenticated” is an interesting label as it’s only job is to prevent a post being seen by those not logged in to Bluesky. This looks as follows:

Viewing Labels

Clicking on the “x labels have been placed on this content” message opens up a new panel showing which labels have been attached to the post:

Adding Labels via php2Bluesky

In order to send labels with your post, and they apply at post level, not media, you need to either send a single item from the table above as a string or multiple items as an array. A new optional parameter has been added to php2Bluesky, $labels, which allows you to pass any necessary labels, for example:

$response = $php2Bluesky->post_to_bluesky($connection, 
                                          $text = "this is the text of your post", 
                                          $media = "https://www.spokenlikeageek.com/wp-content/uploads/2025/06/SCR-20250628-jzfa.png", 
                                          $link = '', 
                                          $alt = "Image of labels applied to a Bluesky post",
                                          $labels = "!no-unauthenticated");

Alternatively, you might do the following for multiple labels:

$response = $php2Bluesky->post_to_bluesky($connection, 
                                          $text = "this is the text of your post", 
                                          $media = "https://www.spokenlikeageek.com/wp-content/uploads/2025/06/SCR-20250628-jzfa.png", 
                                          $link = '', 
                                          $alt = "Image of labels applied to a Bluesky post",
                                          $labels = ["!no-unauthenticated", "porn", "sexual"]);

And that’s it – your’re all set. Download the latest version, with label support, from Github or update via composer if you are using it.

Leave a Reply

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