mirror of
https://github.com/nostr-protocol/nips.git
synced 2025-12-09 08:38:50 +00:00
Compare commits
6 Commits
simple-cha
...
podcasts
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f1ee425b7 | ||
|
|
f3a2356484 | ||
|
|
c9b3abfa3c | ||
|
|
383eb594b4 | ||
|
|
4a171cb0a8 | ||
|
|
996ef45605 |
7
18.md
7
18.md
@@ -20,9 +20,10 @@ reposted.
|
||||
|
||||
## Quote Reposts
|
||||
|
||||
Quote reposts are `kind 1` events with an embedded `e` tag
|
||||
(see [NIP-08](08.md) and [NIP-27](27.md)). Because a quote repost includes
|
||||
an `e` tag, it may show up along replies to the reposted note.
|
||||
Quote reposts are `kind 1` events with an embedded `q` tag of the note being
|
||||
quote reposted. The `q` tag ensures quote reposts are not pulled and included
|
||||
as replies in threads. It also allows you to easily pull and count all of the
|
||||
quotes for a post.
|
||||
|
||||
## Generic Reposts
|
||||
|
||||
|
||||
80
54.md
Normal file
80
54.md
Normal file
@@ -0,0 +1,80 @@
|
||||
NIP-54
|
||||
======
|
||||
|
||||
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:
|
||||
|
||||
- they depend on a URL and that is hard for most people, so podcasters tend to use service providers that can
|
||||
- charge money -- which isn't a bad thing per se but it turns out that with a Nostr-native podcast feed protocol it would be much simpler to host feeds and infinitely cheaper to host the media, so the ecosystem could be more decentralized
|
||||
- seal them into their walled gardens (like Spotify has been doing), slowly turning a previously open ecosystem into a centralized system captured by big corporations
|
||||
- censor podcasters and prevent them from migrating (on Nostr this wouldn't be a problem even if a relay banned someone as moving to other relays would be trivial as long as the podcaster held their key and podcast clients could easily discover the new relay URLs)
|
||||
- they can only be loaded in full, with no pagination or filtering of any kind, which means that
|
||||
- the sync process in normal RSS clients is slow and cumbersome (which also nudges people into using centralized solutions)
|
||||
- this has also led to the creation of broken schemes like [Podping](https://podping.org/), which wouldn't be necessary in a Nostr-native podcast feed
|
||||
- It's impossible to reference a single episode directly (since it only exists as a member in the full RSS list of episodes), this means there is no way to share a podcast episode with friends or on social media, so people tend to share links to centralized platforms or to YouTube videos of the same podcast content, which is an antipattern
|
||||
- they cannot be interacted with in any way: listeners cannot "like" or comment or signal that they have listened to the episode, which is also another factor in the push towards centralized closed platforms: better analytics and insights and possibilities of engagement with the public
|
||||
|
||||
## Event definitions
|
||||
|
||||
### Podcast Profile
|
||||
|
||||
Podcasts have their own key and their own [NIP-01](01.md) `kind:0` profile, but with a tag `["type", "podcast"]` that can be used to signal that they have podcast episodes published.
|
||||
|
||||
### Podcast Episodes
|
||||
|
||||
Podcast episodes are `kind:54` with some tags:
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"id": "55807e7d5cd90d0303d7dce7397f996fdbaed8697903f326c7cf8ad999b9de3d",
|
||||
"pubkey": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
|
||||
"kind": 54,
|
||||
"created_at": 1700682555,
|
||||
"tags": [
|
||||
["title", "<episode title>"],
|
||||
["image", "<optional episode image>"],
|
||||
["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>"]
|
||||
],
|
||||
"content": "<markdown content (or what is supported in RSS feeds content nowadays?)>",
|
||||
"sig": "...",
|
||||
}
|
||||
```
|
||||
|
||||
### Podcast Comments
|
||||
|
||||
These are normal text comments like `kind:1`, but specific for podcast episodes.
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"id": "606f6c703f04c70806a5c2830e3853bd83c44985b1f282a070ba894add3724b0",
|
||||
"pubkey": "b2c5d5bf69d14d35c25fa47d5c67896b13394136734065a371c5bf2c62f905d2",
|
||||
"kind": 55,
|
||||
"created_at": 1700682556,
|
||||
"tags": [
|
||||
["e", "55807e7d5cd90d0303d7dce7397f996fdbaed8697903f326c7cf8ad999b9de3d"],
|
||||
],
|
||||
"content": "<plain text content>",
|
||||
"sig": "...",
|
||||
}
|
||||
```
|
||||
|
||||
(It's unclear if it's best to use this or a generic kind for commenting on stuff that isn't `kind:1`.)
|
||||
|
||||
### Reactions (likes), zaps and reposts
|
||||
|
||||
These work normally according to their own NIPs.
|
||||
|
||||
### To be added:
|
||||
|
||||
- "read" events, signaling that a user has listened to a given podcast, perhaps just use https://github.com/nostr-protocol/nips/pull/933
|
||||
@@ -206,6 +206,7 @@ Please update these lists when proposing NIPs introducing new event kinds.
|
||||
| `l` | label, label namespace | annotations | [32](32.md) |
|
||||
| `L` | label namespace | -- | [32](32.md) |
|
||||
| `m` | MIME type | -- | [94](94.md) |
|
||||
| `q` | event id (hex) | relay URL | [18](18.md) |
|
||||
| `r` | a reference (URL, etc) | petname | |
|
||||
| `r` | relay url | marker | [65](65.md) |
|
||||
| `t` | hashtag | -- | |
|
||||
|
||||
Reference in New Issue
Block a user