Canimus: yet another federation/syndication approach

Would it require the use of the specific musicbrainz IDs? While supporting musicbrainz metadata is a good thing I don’t think it should be required.

Also I’d still like to see a fully-formed example feed that shows how to represent, say, one album with three tracks, including the media source for those tracks.

no you don’t need a mbid. You can use mb ns without using mbid.

What you ask would take me a lot of time so i just asked a llm. You should check if it properly follow md ns :

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:mmd="http://musicbrainz.org/ns/mmd-2.0#">

  <channel>
    <title>Example Music Feed</title>
    <link>https://example.com/music</link>

    <item>
      <title>Example Album – Demo Artist</title>
      <guid>https://example.com/release/album-1234</guid>

      <mmd:metadata>
        <mmd:release id="https://example.com/release/album-1234">
          <mmd:title>Example Album</mmd:title>

          <mmd:artist-credit>
            <mmd:name-credit>
              <mmd:artist id="https://example.com/artist/demo-artist">
                <mmd:name>Demo Artist</mmd:name>
              </mmd:artist>
            </mmd:name-credit>
          </mmd:artist-credit>

          <mmd:medium-list count="1">
            <mmd:medium>
              <mmd:track-list count="3">

                <!-- Track 1 -->
                <mmd:track id="https://example.com/track/1">
                  <mmd:position>1</mmd:position>
                  <mmd:title>First Track</mmd:title>

                  <mmd:recording id="https://example.com/recording/1">
                    <mmd:title>First Track</mmd:title>

                    <mmd:relation-list target-type="url">
                      <mmd:relation
                        id="https://cdn.example.com/audio/track1.mp3"
                        type="streaming music">
                        <mmd:target>
                          https://cdn.example.com/audio/track1.mp3
                        </mmd:target>
                      </mmd:relation>
                    </mmd:relation-list>

                  </mmd:recording>
                </mmd:track>

                <!-- Track 2 -->
                <mmd:track id="https://example.com/track/2">
                  <mmd:position>2</mmd:position>
                  <mmd:title>Second Track</mmd:title>

                  <mmd:recording id="https://example.com/recording/2">
                    <mmd:title>Second Track</mmd:title>

                    <mmd:relation-list target-type="url">
                      <mmd:relation
                        id="https://cdn.example.com/audio/track2.mp3"
                        type="streaming music">
                        <mmd:target>
                          https://cdn.example.com/audio/track2.mp3
                        </mmd:target>
                      </mmd:relation>
                    </mmd:relation-list>

                  </mmd:recording>
                </mmd:track>

                <!-- Track 3 -->
                <mmd:track id="https://example.com/track/3">
                  <mmd:position>3</mmd:position>
                  <mmd:title>Third Track</mmd:title>

                  <mmd:recording id="https://example.com/recording/3">
                    <mmd:title>Third Track</mmd:title>

                    <mmd:relation-list target-type="url">
                      <mmd:relation
                        id="https://cdn.example.com/audio/track3.mp3"
                        type="streaming music">
                        <mmd:target>
                          https://cdn.example.com/audio/track3.mp3
                        </mmd:target>
                      </mmd:relation>
                    </mmd:relation-list>

                  </mmd:recording>
                </mmd:track>

              </mmd:track-list>
            </mmd:medium>
          </mmd:medium-list>
        </mmd:release>
      </mmd:metadata>

    </item>
  </channel>
</rss>```

Thank you, that is helpful as a point of comparison. Having examples is helpful when it comes to guiding people towards an implementation, and can often be a lot more concise than talking in the abstract.

Do you envision these feeds also having pagination, so that clients can backfill past content? Atom has a pagination extension in the form of RFC 5005 and that could be adapted to RSS as well.

I focused on short feeds, since funkwhale relies on activityPub for big collections. We don’t plan to implement a “global feed” but it could be discussed ofc.
Thanks for the RFC it’s interesting

An example of how to do a music collection as an ActivityPub feed would also be helpful as a point of comparison.