NIPs nostr improvement proposals

NIP-F4 - Podcasts

Table of Contents

Podcasts

draft optional

This NIP defines how podcast episodes can be fetched from relays. It's intended to fit easily into existing podcast players.

Rationale

RSS feeds are great, but they have some problems that are solved by moving feeds from RSS URLs to multiple Nostr events, one for each episode:

Concept

The idea is that each podcast is its own Nostr keypair. This is simple and allows podcasts to combine their podcasting presence with a normal kind:0/kind:1 microblogging presence.

It also allows podcasts to have shared ownership (via MuSig2 or just common agreements between friends) and to change that ownership over time (again, based on human trust over handling of key material).

Event definitions

Podcast Metadata

Podcast metadata is stored in kind:10154 replaceable events. This event contains the show-level information that podcast clients need to display the podcast.

Similar information may exist in the kind:0 profile for the podcast, but podcast-specific clients should be able to read directly from kind:10154 and ignore kind:0 entirely.

{
"id": "...",
"pubkey": "<podcast-pubkey>",
"kind": 10154,
"created_at": 1700682555,
"tags": [
["title", "<podcast-title>"],
["image", "<podcast-cover-image-URL>"],
["description", "<podcast-description>"],
["website", "<podcast-website-URL>"], // optional, multiple
["p", "<podcast-author-pubkey>", "<role>"] // optional, multiple
],
"content": "",
"sig": "..."
}

<role> is optional, can be "host", "cohost" or "editor".

Authored Podcasts

The p tag in kind:10154 shouldn't be blindly trusted as implying authorship, since any podcast can falsely claim anyone to be their author, so before it is displayed as information by clients it must be checked against an equivalent counter-claim by the podcast authors themselves.

This is the kind:10164 event. Here podcast authors can list the public keys of the podcasts they author.

{
"id": "...",
"pubkey": "<user-pubkey>",
"kind": 10064,
"created_at": 1700682555,
"tags": [
["p", "<podcast-pubkey-1>"],
["p", "<podcast-pubkey-2>"]
],
"content": "",
"sig": "..."
}

Clients can also use this to discover all podcasts authored by a given user.

Podcast Episodes

Podcast episodes are kind:54 events authored by the podcast public key directly.

{
"id": "...",
"pubkey": "<podcast-pubkey>",
"kind": 54,
"created_at": 1700682555,
"tags": [
["title", "<episode title>"],
["image", "<optional episode image>"],
["description", "<a brief description>"],
["audio", "<audio-url>", "<optional_media_type>"], // can be specified multiple times
// ...other important fields to be specified here later after further discovery
],
"content": "<markdown content>",
"sig": "...",
}

Favorite podcasts

See NIP-51 for the description of a kind:10054 event in which any user can list the podcasts they publicly advertise to listening to, as a soft recommendation.