Index: src/routes/admin-audio.js
===================================================================
--- src/routes/admin-audio.js	(revision 432831c4da84544aa40fc90ff67963b13ddfa657)
+++ src/routes/admin-audio.js	(revision 757eea0f0fb2b5d64e5994b1d837799550788fb4)
@@ -96,5 +96,5 @@
   const rows = db.prepare(`
     SELECT t.id, t.title, t.artist, t.album, t.duration, t.cover_url,
-           t.position, t.created_at, t.downloadable, t.fedi_open, m.filename, m.size, m.mime_type
+           t.position, t.created_at, t.downloadable, m.filename, m.size, m.mime_type
     FROM audio_tracks t
     LEFT JOIN media m ON m.id = t.media_id
@@ -288,18 +288,4 @@
 });
 
-// Federate-the-file (fedi_open) per track on/off. When on, this track's audio file is shared
-// as a real AS2 Audio attachment + served ungated → it plays inline in EVERY fediverse client
-// (incl. the Mastodon apps), but the file is downloadable. Off (default) = gated, web-player only.
-router.post('/:id/fedi-open', requireGod, (req, res) => {
-  const site = res.locals.site;
-  if (!site) return res.status(404).send('Site required');
-  const row = db.prepare('SELECT fedi_open FROM audio_tracks WHERE id = ? AND site_id = ?').get(req.params.id, site.id);
-  if (row) {
-    db.prepare('UPDATE audio_tracks SET fedi_open = ? WHERE id = ? AND site_id = ?')
-      .run(row.fedi_open ? 0 : 1, req.params.id, site.id);
-  }
-  res.redirect('/admin/audio');
-});
-
 router.post('/:id/delete', requireGod, (req, res) => {
   const site = res.locals.site;
@@ -494,7 +480,4 @@
     fields.push('downloadable = ?'); values.push(body.downloadable ? 1 : 0);
   }
-  if (Object.prototype.hasOwnProperty.call(body, 'fedi_open')) {
-    fields.push('fedi_open = ?'); values.push(body.fedi_open ? 1 : 0);
-  }
   if (Object.prototype.hasOwnProperty.call(body, 'credit')) {
     fields.push('credit = ?'); values.push(String(body.credit || '').trim() || null);
Index: src/views/pages/admin-audio.ejs
===================================================================
--- src/views/pages/admin-audio.ejs	(revision 432831c4da84544aa40fc90ff67963b13ddfa657)
+++ src/views/pages/admin-audio.ejs	(revision 757eea0f0fb2b5d64e5994b1d837799550788fb4)
@@ -83,6 +83,4 @@
         var _aaudDlOn     = t('aaud.dl_on');
         var _aaudDlOff    = t('aaud.dl_off');
-        var _aaudFediOn   = t('aaud.fedi_on');
-        var _aaudFediOff  = t('aaud.fedi_off');
         var _aaudDelete   = t('aaud.delete');
         var _aaudCopy     = t('aaud.copy_click');
@@ -123,7 +121,4 @@
                         style="<%= t.downloadable ? 'color:var(--accent,#6b8f71)' : 'opacity:.5' %>">⬇</button>
               <% } %>
-              <button type="button" class="ax-icon-btn" data-track-fedi data-id="<%= t.id %>" data-on="<%= t.fedi_open ? '1' : '0' %>"
-                      aria-label="<%= t.fedi_open ? _aaudFediOn : _aaudFediOff %>" title="<%= t.fedi_open ? _aaudFediOn : _aaudFediOff %>"
-                      style="<%= t.fedi_open ? 'color:var(--accent,#6b8f71)' : 'opacity:.5' %>">🌐</button>
               <form action="/admin/audio/<%= t.id %>/delete" method="post" data-confirm="<%= _aaudDelConfirm %>" class="ax-track-delete">
                 <button type="submit" class="ax-icon-btn ax-icon-btn-danger" aria-label="<%= _aaudDelete %>" title="<%= _aaudDelete %>">🗑</button>
@@ -1009,29 +1004,4 @@
     });
   });
-
-  // Fediverse-share (fedi_open) toggle — AJAX, no page reload (mirrors the download toggle).
-  document.querySelectorAll('[data-track-fedi]').forEach(btn => {
-    btn.addEventListener('click', async () => {
-      if (btn.disabled) return;
-      const want = btn.dataset.on === '1' ? 0 : 1;
-      btn.disabled = true;
-      try {
-        const res = await fetch('/admin/audio/api/' + btn.dataset.id, {
-          method: 'POST',
-          headers: { 'Content-Type': 'application/json' },
-          body: JSON.stringify({ fedi_open: !!want }),
-        });
-        if (!res.ok) throw new Error('HTTP ' + res.status);
-        btn.dataset.on = String(want);
-        btn.style.color = want ? 'var(--accent,#6b8f71)' : '';
-        btn.style.opacity = want ? '1' : '.5';
-        btn.title = want ? '<%= t('aaud.fedi_on') %>' : '<%= t('aaud.fedi_off') %>';
-      } catch (e) {
-        alert('<%= t('aaud.change_failed') %>: ' + (e.message || e));
-      } finally {
-        btn.disabled = false;
-      }
-    });
-  });
 })();
 </script>
