Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision ffb371c9ca5e604bafcaa70ff4da6cb5c673cf82)
+++ src/services/ActivityPubService.js	(revision 4d81de5db2cefacf9f554f61696388ca4fbb4a9d)
@@ -233,7 +233,13 @@
  * de kast, niet enable_audio_player -- die staat standaard aan en zegt niets.
  */
-function channelCategory(site) {
-  try {
-    return db.prepare('SELECT 1 FROM audio_tracks WHERE site_id = ? LIMIT 1').get(site.id) ? 'music' : null;
+export function channelCategory(site) {
+  try {
+    // ALLEEN opengezette tracks tellen. Eerst keek dit naar elke track, ook een
+    // gated -- en dan roept een site met uitsluitend afgeschermde muziek toch
+    // "hier is muziek" naar de hele fediverse. Dat botst met de regel die we
+    // overal aanhouden: een gesloten track is AFWEZIG, niet stilletjes
+    // aanwezig. Naar buiten toe is een kanaal zonder publieke muziek geen
+    // muziekkanaal.
+    return db.prepare('SELECT 1 FROM audio_tracks WHERE site_id = ? AND fedi_open = 1 LIMIT 1').get(site.id) ? 'music' : null;
   } catch { return null; }
 }
@@ -6039,5 +6045,5 @@
   AP_CONTEXT, getOrCreateKeys, apWants, sendAP, actorId, noteId, stripLeadingMentions,
   buildActor, buildNote, buildCreate, buildOutbox, buildFollowers, buildFollowing, buildFeatured,
-  channelUrls, timelineFields, guessMediaType,
+  channelUrls, channelCategory, timelineFields, guessMediaType,
   siteOpenTracks, openTrack, buildTrackAudio, buildTrackCollection, buildTrackCreate,
   buildPlaylistCollection, playlistOpenTracks, listPlaylistsAP, playlistLinkTags,
