Skip to content

NIP-F4: podcasts#1093

Merged
fiatjaf merged 6 commits into
masterfrom
podcasts
May 28, 2026
Merged

NIP-F4: podcasts#1093
fiatjaf merged 6 commits into
masterfrom
podcasts

Conversation

@fiatjaf
Copy link
Copy Markdown
Member

@fiatjaf fiatjaf commented Feb 28, 2024

text: https://github.com/nostr-protocol/nips/blob/podcasts/F4.md

These are mostly ideas and if someone has better ones I'm ready to change everything.

@alexgleason
Copy link
Copy Markdown
Member

@daveajones is building ActivityPub podcast integration with Lightning. Nostr integration would be more seamless with Lightning.

@mterenzio
Copy link
Copy Markdown

mterenzio commented Feb 28, 2024 via email

@daveajones
Copy link
Copy Markdown

Please don't try to replace RSS. It's been tried many times and always fails. The latest example was JSONfeed. It's like trying to replace HTML. Big waste of labor.

Better to do what @fiatjaf mentioned and keep RSS but utilize the <podcast:socialInteract> and/or <podcast:chat> tags to hook into Nostr. Both are purposely flexible enough to accommodate any social protocol. There is a Nostr example in the <podcast:chat> documentation already.

@mterenzio
Copy link
Copy Markdown

Please don't try to replace RSS.

I agree with this 120% . But not sure it's a fair description of what is being proposed. Relays do a lot more than accommodate social interaction IMHO

Copy link
Copy Markdown
Member

@staab staab left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like this, with some minor changes. I think we're slowly discovering a common pattern for linking to non-native media types.

Edit: I agree with what was said above. RSS should not be replaced, but maybe mirrored/enhanced by bridging it to nostr.

Comment thread F4.md Outdated
["title", "<episode title>"],
["image", "<optional episode image>"],
["description", "<a brief description>"],
["audio", "https://.../", "<optional_media_type>"], // can be specified multiple times
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest imeta instead, since it can contain more metadata. Users might want to download a lower-fidelity version of the episode for example.

Comment thread F4.md Outdated
["description", "<a brief description>"],
["audio", "https://.../", "<optional_media_type>"], // can be specified multiple times
["t", "<optional tag>"], // can be specified multiple times
["alt", "<optional NIP-31 short description for displaying in incompatible clients>"]
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are some other fields in #1043 that might be worth adding (creator, website, duration, published_at). If they're useful for music publishers, they're probably useful for podcast publishers. But they can be added later too.

In particular, I think an i tag (or whatever) referring to the RSS version's GUID would be useful for linking duplicate content across protocols. Single-letter, because you might want to find an event by guid.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might it not be better to add (website, creator) as tags to the Kind 0 event?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, because a single pubkey might publish events on behalf of multiple creators (e.g. wavlake). Website should also be more than a domain name, maybe that's the wrong word.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reason I made the suggestion is because according to the 'podcast profile' section, a podcast indicates it's info, so I assume each podcast might have their own profile.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ideally yes, but wavlake currently publishes everything under the same key. Maybe it would be better to use a separate key for each creator even if you're publishing on behalf of someone else, but we probably shouldn't force that here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see.

Copy link
Copy Markdown
Contributor

@KotlinGeekDev KotlinGeekDev Feb 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As for Wavlake, does some form of delegation make sense, ideally in the manner of @alexgleason 's mostr?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I think use of the proxy tag could be appropriate here, although I don't think it needs to be in the spec.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got it.

Comment thread 54.md Outdated
}
```

(It's unclear if it's best to use this or a generic kind for commenting on stuff that isn't `kind:1`.)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If in doubt, create a new kind

@fiatjaf
Copy link
Copy Markdown
Member Author

fiatjaf commented Feb 28, 2024

It's been tried many times and always fails.

Can you give me some examples besides JSONFeed?

Maybe because all of the attempts didn't offer anything new, but were just syntax sugar?


In any case, Nostr is already trying to replace Twitter, Facebook, Wikipedia, blogs, Instagram, YouTube, Twitch. Is RSS so much more impossible than this?

@fiatjaf
Copy link
Copy Markdown
Member Author

fiatjaf commented Feb 28, 2024

Also, Atom has successfully replaced RSS (for a percent of the sites) in one of the most stupid moves of the entire internet: they literally made the exact same thing but with different names and got away with it and now every client has to support the two protocols forever, amazing.

The creation of Atom is only comparable to the creation of Deno: the thing that was invented by creator of Node to fix all the problems associated with Node, but after many years ended up in the exact same place as that.

@daveajones
Copy link
Copy Markdown

Can you give me some examples besides JSONFeed?

XMPP was going to kill RSS. Then AMP. But, what I meant was mostly API based services. Twitter is an example of an "RSS killer" because of their API back when it was fully open. Also YouTube. Spotify aimed to "move beyond the limitations" of RSS podcasting and have now given up that endeavor and re-embraced RSS by buying Megaphone. There is also an RSS 3.0 spec that never went anywhere.

Is RSS so much more impossible than this?

Nothing is impossible. 😉 Just unlikely enough to make it a big waste of time IMO.

Also, Atom has successfully replaced RSS...

RSS and ATOM are interchangeable in my mind. I use the term "RSS" as a catch-all to mean any static uri based XML feed of published items. I agree that ATOM was dumb.

Maybe because all of the attempts didn't offer anything new, but were just syntax sugar?

There is a $2 billion dollar podcasting industry built on the creation AND consumption of RSS feeds with years of know-how on both sides. It's not a question of technical merit. It's a question of inertia. RSS podcasting is a 2000 pound flywheel. It's just not going to change, because after all of the hours of dev work to switch to something new, you'll end up back with essentially the same thing at base level: publishing audio urls to a podcast app.

It took us 3 years of advocacy to get people to build new podcast features on top of the existing RSS. Getting them to replace RSS entirely would be a feat of evangelism to rival the New Testament. If you can pull it off, you'll have my eternal respect. But, I've been in the trenches of this for a long time now and I think there are bigger fish to fry. Sometimes the best format just doesn't win. HTTP, SMTP, etc. None of them are ideal, but they are all heavy flywheel's.

@mterenzio
Copy link
Copy Markdown

mterenzio commented Feb 28, 2024 via email

@fiatjaf
Copy link
Copy Markdown
Member Author

fiatjaf commented Feb 28, 2024

Getting them to replace RSS entirely would be a feat of evangelism to rival the New Testament.

I must say I laughed a lot from this line here, ahahah

I don't know, I agree with everything you said but I still think we can pull it off eventually, let's stop here for a while and give it more time and thought. I agree there are other areas that could be prioritized first and RSS is already good enough.

@mterenzio
Copy link
Copy Markdown

mterenzio commented Mar 2, 2024 via email

@mterenzio
Copy link
Copy Markdown

mterenzio commented Mar 6, 2024 via email

@fiatjaf
Copy link
Copy Markdown
Member Author

fiatjaf commented Mar 7, 2024

What is the use case?

@mterenzio
Copy link
Copy Markdown

mterenzio commented Mar 7, 2024 via email

@fiatjaf
Copy link
Copy Markdown
Member Author

fiatjaf commented Mar 7, 2024

Digests of articles people link to? I don't quite get it. Why not just reply to the notes that link to articles with a digest of these articles?

@mterenzio
Copy link
Copy Markdown

mterenzio commented Mar 7, 2024 via email

@staab
Copy link
Copy Markdown
Member

staab commented Mar 8, 2024

It might be a good idea to model this as closely as is reasonable after podcasting 2.0's spec

@blastshielddown
Copy link
Copy Markdown

it could be better to just keep using RSS but add Nostr for social interaction on top

This seems simpler.

A thought: NIP-84 (or "highlights") could be extended for a use case like this, when you want to reference something that has a relatively stable URI that is not a Nostr event but you want to enable interactions around it. For podcasts, you could point the r tag to the feed URL (or better yet, include the podcast UUID per the Podcasting 2.0 spec in a d or i tag). You also could include references to the episode and more granular details like timestamp in supplemental tags, to point clients to exactly the spot a user wants to share. The NIP-84 spec already makes some references to media so this would follow its original intent.

@MerryOscar
Copy link
Copy Markdown
Contributor

no matter what happens with this proposal or any other proposal that attempts to link nostr to rss - the simplest primitive that we should try and agree on is how to reliably reference podcasts in nostr events.

Because there are so many existing nips that are relevant to podcasts (nip01 notes, nip53 live events, nip38 statuses, nip58 badges, nip84 highlights) I think the easiest way to do this is with tags.

I outlined some options for this last year - and it seems the preferred approach was to use r tags to reference podcasts via the existing guids that are defined in the rss feed:

  "tags": [

	# podcast feed reference
        ["r", "podcast:guid:123"]

        # podcast episode reference
        ["r", "podcast:item:guid:1234"]
  ]

@pablof7z
Copy link
Copy Markdown
Member

I just skimmed a bit of this very funny discussion, here are my two sats:

comparing previous attempts to replace RSS for podcast distriibution with replacing it with nostr is not a good comparison:

Replacing with nostr is not simply a schema modification that might be simpler/saner/faster/more-extensible than RSS 2.0. A debatable marginal improvement over RSS.

Podcasts on nostr is not about the schema, is about the social graph and network effects of all other use cases. The schema changing is a mere byproduct but leveraging the rest of your social graph is an orders-of-magnitude improvement over RSS.

Publishing podcasting data as nostr events will lead to apps that fully leverage nostr instead of shoehorning some nostr coating on top of existing implementations.

All the use cases we're rebuilding on nostr seem like a Quixotesk pursuit at first, but that's the nature of overtaking any network effect.

@MerryOscar
Copy link
Copy Markdown
Contributor

@pablof7z

Podcasts on nostr is not about the schema, is about the social graph and network effects of all other use cases.

You still get the social graph and network effects if you use nostr as the social layer but keep rss as the hosting mechanism. If interacting with podcasts on nostr requires the audio to be hosted on nostr - then you don't get any network effects because 90% of the content is not hosted on nostr

If social features in a nostr podcast app only work for <10% of the shows then it's a terrible experience for users

If you can allow nostr social features to apply to any existing podcasts then you can provide a great experience that doesn't require any buy-in from the existing podcast industry - it just works out of the box

There are 400m+ podcast listeners that are using podcast apps with zero social features and nostr is a great solution for them - but if using these features only applies to a tiny subset of what they listen to then it's going to be pretty hard to get them to use it

We use r tags for linking to websites so why not use them to link to podcasts which are just xml websites

@mterenzio
Copy link
Copy Markdown

mterenzio commented Mar 18, 2024 via email

@fiatjaf fiatjaf changed the title draft NIP-54 for podcast publishing NIP-F4: podcasts May 15, 2026
@fiatjaf fiatjaf marked this pull request as ready for review May 15, 2026 20:25
@fiatjaf fiatjaf merged commit 06cccbc into master May 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants