kopia lustrzana https://github.com/Podcastindex-org/podcast-namespace
				
				
				
			
		
			
				
	
	
		
			1684 wiersze
		
	
	
		
			70 KiB
		
	
	
	
		
			Markdown
		
	
	
			
		
		
	
	
			1684 wiersze
		
	
	
		
			70 KiB
		
	
	
	
		
			Markdown
		
	
	
| # RSS Namespace Extension for Podcasting (Tag Specification)
 | ||
| A wholistic RSS namespace for podcasting that is meant to synthesize the fragmented world of podcast namespaces. As 
 | ||
| elements are canonized, they will be added to this document so developers can begin implementation. The 
 | ||
| specifications below are considered locked and the team will prioritize backward compatibility. We are operating 
 | ||
| under the [Rules for Standards-Makers](http://scripting.com/2017/05/09/rulesForStandardsmakers.html).
 | ||
| 
 | ||
| The namespace for this extension is `https://podcastindex.org/namespace/1.0`. Clients which recognize this namespace 
 | ||
| must also recognize `https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md` as identical. The 
 | ||
| suggested tag prefix for use in XML is `podcast`, but clients should support alternate prefixes for this namespace. 
 | ||
| If your application generates RSS feeds and you implement one or more elements below, you will need to link this 
 | ||
| document in your XML:
 | ||
| 
 | ||
| ```xml
 | ||
| <rss version="2.0" xmlns:podcast="https://podcastindex.org/namespace/1.0">
 | ||
| ```
 | ||
| 
 | ||
| <br><br>
 | ||
| 
 | ||
| # Table of Contents
 | ||
| - [Transcript](#transcript)
 | ||
| - [Locked](#locked)
 | ||
| - [Funding](#funding)
 | ||
| - [Chapters](#chapters)
 | ||
| - [Soundbite](#soundbite)
 | ||
| - [Person](#person)
 | ||
| - [Location](#location)
 | ||
| - [Season](#season)
 | ||
| - [Episode](#episode)
 | ||
| - [Trailer](#trailer)
 | ||
| - [License](#license)
 | ||
| - [Alternate Enclosure](#alternate-enclosure)
 | ||
|   - [Source](#source)
 | ||
|   - [Integrity](#integrity)
 | ||
| - [Guid](#guid)
 | ||
| - [Value](#value)
 | ||
|   - [Value Recipient](#value-recipient)
 | ||
| - [Medium](#medium)
 | ||
| - [Images](#images)
 | ||
| - [Live Item](#live-item)
 | ||
|   - [Content Link](#content-link)
 | ||
| - [Social Interact](#social-interact)
 | ||
| - [Block](#block)
 | ||
| - [Txt](#txt)
 | ||
| - [Remote Item](#remote-item)
 | ||
| - [Podroll](#podroll)
 | ||
| - [Update Frequency](#update-frequency)
 | ||
| - [Podping](#podping)
 | ||
| - [Value Time Split](#value-time-split)
 | ||
| - [Chat](#chat)
 | ||
| 
 | ||
| <br><br>
 | ||
| 
 | ||
| # Podcast Tags
 | ||
| Each tag below exists in the podcast namespace within the specified parent. All attributes are required unless 
 | ||
| explicitly specified as optional. Anywhere the url of a hyper-text based resource is specified, it must be given as 
 | ||
| `https:` and not `http:`.
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Transcript
 | ||
| `<podcast:transcript>`<br><br>
 | ||
| This tag is used to link to a transcript or closed captions file. Multiple tags can be present for multiple 
 | ||
| transcript formats.
 | ||
| 
 | ||
| Detailed file format information and example files are [here](../transcripts/transcripts.md).
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<item>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **url (required):** URL of the podcast transcript.
 | ||
| 
 | ||
|  - **type (required):** Mime type of the file such as `text/plain`, `text/html`, `text/vtt`, `application/json`, 
 | ||
|    `application/x-subrip`
 | ||
| 
 | ||
|  - **language (optional):** The language of the linked transcript. If there is no language attribute given, the 
 | ||
|    linked file is assumed to be the same language that is specified by the RSS `<language>` element.
 | ||
| 
 | ||
|  - **rel (optional):** If the rel="captions" attribute is present, the linked file is considered to be a closed 
 | ||
|    captions file, regardless of what the mime type is.  In that scenario, time codes are assumed to be present in 
 | ||
|    the file in some capacity.
 | ||
| 
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:transcript url="https://example.com/episode1/transcript.html" type="text/html" />
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:transcript url="https://example.com/episode1/transcript.vtt" type="text/vtt" />
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:transcript 
 | ||
|         url="https://example.com/episode1/transcript.json" 
 | ||
|         type="application/json" 
 | ||
|         language="es" 
 | ||
|         rel="captions" 
 | ||
| />
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:transcript url="https://example.com/episode1/transcript.srt" type="application/x-subrip" rel="captions" />
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Locked
 | ||
| `<podcast:locked>`<br><br>
 | ||
| This tag may be set to `yes` or `no`. The purpose is to tell other podcast hosting platforms whether they are 
 | ||
| allowed to import this feed. A value of `yes` means that any attempt to import this feed into a new platform should 
 | ||
| be rejected.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Single
 | ||
| 
 | ||
| ### Node value
 | ||
|   The node value must be "yes" or "no".
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **owner (optional):** The owner attribute is an email address that can be used to verify ownership of this feed 
 | ||
|    during move and import operations. This could be a public email or a virtual email address at the hosting 
 | ||
|    provider that redirects to the owner's true email address.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:locked>yes</podcast:locked>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:locked owner="email@example.com">no</podcast:locked>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Funding
 | ||
| `<podcast:funding>`<br><br>
 | ||
| This tag lists possible donation/funding links for the podcast. The content of the tag is the recommended string to 
 | ||
| be used with the link.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Node value
 | ||
|   This is a free form string supplied by the creator which they expect to be displayed in the app next to the 
 | ||
| link.  Please do not exceed `128 characters` for the node value or it may be truncated by aggregators.
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **url (required):** The URL to be followed to fund the podcast.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:funding url="https://www.example.com/donations">Support the show!</podcast:funding>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:funding url="https://www.example.com/members">Become a member!</podcast:funding>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Chapters
 | ||
| `<podcast:chapters>`<br><br>
 | ||
| Links to an external file (see example file) containing chapter data for the episode. See the [jsonChapters.md](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/jsonChapters.md) file for a description of
 | ||
| the chapter file syntax. And, see the [example.json](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/example.json) example file for a real world example.
 | ||
| 
 | ||
| Benefits with this approach are that chapters do not require altering audio files, and the chapters can be edited 
 | ||
| after publishing, since they are a separate file that can be requested on playback (or cached with download). JSON 
 | ||
| chapter information also allows chapters to be displayed by a wider range of playback tools, including web browsers 
 | ||
| (which typically have no access to ID3 tags), thus greatly simplifying chapter support; and images can be retrieved 
 | ||
| on playback, rather than bloating the filesize of the audio. The data held is compatible with normal ID3 tags, thus 
 | ||
| requiring no additional work for the publisher.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<item>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Single
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **url (required):** The URL where the chapters file is located.
 | ||
|  - **type (required):** Mime type of file - JSON prefered, 'application/json+chapters'.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:chapters url="https://example.com/episode1/chapters.json" type="application/json+chapters" />
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Soundbite
 | ||
| `<podcast:soundbite>`<br><br>
 | ||
| Points to one or more soundbites within a podcast episode. The intended use includes episodes previews, 
 | ||
| discoverability, audiogram generation, episode highlights, etc. It should be assumed that the audio/video source of 
 | ||
| the soundbite is the audio/video given in the item's [`<enclosure>`](https://cyber.harvard.edu/rss/rss.html#ltenclosuregtSubelementOfLtitemgt) element.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<item>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Node value
 | ||
|   This is a free form string from the podcast creator to specify a title for the soundbite.  If the podcaster 
 | ||
| does not provide a value for the soundbite title, then leave the value blank, and podcast apps can decide to use the 
 | ||
| episode title or some other placeholder value in its place.  Please do not exceed `128 characters` for the node 
 | ||
| value or it may be truncated by aggregators.
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **startTime (required):** The time where the soundbite begins
 | ||
|  - **duration (required):** How long is the soundbite (recommended between 15 and 120 seconds)
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:soundbite startTime="73.0" duration="60.0" />
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:soundbite startTime="1234.5" duration="42.25">Why the Podcast Namespace Matters</podcast:soundbite>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Person
 | ||
| `<podcast:person>`<br><br>
 | ||
| This element specifies a person of interest to the podcast.  It is primarily intended to identify people like hosts, 
 | ||
| co-hosts and guests.  Although, it is flexible enough to allow fuller credits to be given using the roles and groups 
 | ||
| that are listed in the [Podcast Taxonomy Project](https://podcasttaxonomy.com/)
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>` (for a podcast) or `<item>` (for an individual episode)
 | ||
| 
 | ||
| It is suggested that `<channel>` is always populated, and `<item>` is populated where needed for an individual 
 | ||
| episode. Where present, people information in `<item>` wholly replaces all information from the `<channel>`.
 | ||
| 
 | ||
| Publishers are expected to use the `podcast:person` element in the `<channel>` parent to set the _regular_ people 
 | ||
| involved in the podcast: the detail that would be expected to be seen in an overview of the show.
 | ||
| 
 | ||
| Publishers are expected to use the `podcast:person` in the `<item>` parent to **replace** all existing information 
 | ||
| for an individual episode.
 | ||
| 
 | ||
| #### For example: _Terry and June_
 | ||
| 
 | ||
| The fictional podcast _Terry and June_ is normally hosted by Terry Scott and June Whitfield. Within `<channel>`, 
 | ||
| Terry Scott and June Whitfield are listed as the hosts. A podcast directory, or podcast app, should show Terry Scott 
 | ||
| and June Whitfield as the hosts of this show.
 | ||
| 
 | ||
| For one episode, _Terry and June_ was hosted by Reginald Marsh and June Whitfield (Terry was away). In this case, 
 | ||
| the `<item>` for this episode should contain Reginald Marsh and June Whitfield as the hosts of this episode. A 
 | ||
| podcast app, when playing this episode, should show only Reginald Marsh and June Whitfield as the hosts of this 
 | ||
| episode. Because people information in `<item>` replaces all existing people information in `<channel>`, Terry Scott 
 | ||
| should not be visible as a host of this episode.
 | ||
| 
 | ||
| #### For example: _Big Daddy_
 | ||
| 
 | ||
| The fictional podcast _Big Daddy Interviews_ is hosted by Big Daddy, a wrestler. Within `<channel>`, Big Daddy is 
 | ||
| listed as the host. A podcast directory, or podcast app, should show Big Daddy as the host of this show.
 | ||
| 
 | ||
| For one episode, _Big Daddy Interviews_ had a guest of Sid James. In this case, the `<item>` for this episode should 
 | ||
| contain Sid James as a guest, **and** Big Daddy as the host of this episode. Because people information in `<item>` 
 | ||
| replaces all existing people information in `<channel>`, Big Daddy should be re-stated as the host of this episode.
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Node value
 | ||
|   This is the full name or alias of the person. This value cannot be blank.  Please do not exceed `128 
 | ||
| characters` for the node value or it may be truncated by aggregators.
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **role:** (optional) Used to identify what role the person serves on the show or episode. This should be a 
 | ||
|    reference to an official role within the Podcast Taxonomy Project list (see below). If `role` is missing then 
 | ||
|    "host" is assumed.
 | ||
|  - **group:** (optional) This should be a reference to an official group within the Podcast Taxonomy Project list. 
 | ||
|    If `group` is not present, then "cast" is assumed.
 | ||
|  - **img:** (optional) This is the url of a picture or avatar of the person.
 | ||
|  - **href:** (optional) The url to a relevant resource of information about the person, such as a homepage or 
 | ||
|    third-party profile platform. Please see the [example feed](https://github.com/Podcastindex-org/podcast-namespace/blob/main/example.xml) for possible choices of what to use here.
 | ||
| 
 | ||
| The `role` and `group` attributes are case-insensitive.  So, "Host" is the same as "host", and "Cover Art Designer" 
 | ||
| is the same as "cover art designer".
 | ||
| 
 | ||
| The full taxonomy list is [here](https://github.com/Podcastindex-org/podcast-namespace/blob/main/taxonomy.json) as a 
 | ||
| json file.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:person 
 | ||
|         href="https://example.com/johnsmith/blog" 
 | ||
|         img="http://example.com/images/johnsmith.jpg"
 | ||
| >John Smith</podcast:person>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:person 
 | ||
|         role="guest" 
 | ||
|         href="https://www.imdb.com/name/nm0427852888/" 
 | ||
|         img="http://example.com/images/janedoe.jpg"
 | ||
| >Jane Doe</podcast:person>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:person 
 | ||
|         role="guest" 
 | ||
|         href="https://www.wikipedia/alicebrown" 
 | ||
|         img="http://example.com/images/alicebrown.jpg"
 | ||
| >Alice Brown</podcast:person>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:person 
 | ||
|         group="writing" 
 | ||
|         role="guest" 
 | ||
|         href="https://www.wikipedia/alicebrown" 
 | ||
|         img="http://example.com/images/alicebrown.jpg"
 | ||
| >Alice Brown</podcast:person>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:person 
 | ||
|         group="visuals" 
 | ||
|         role="Cover Art Designer" 
 | ||
|         href="https://example.com/artist/beckysmith"
 | ||
| >Becky Smith</podcast:person>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Location
 | ||
| `<podcast:location>`<br><br>
 | ||
| This tag is intended to describe the location of editorial focus for a podcast's content (i.e. "what place is this 
 | ||
| podcast about?").  The tag has many use cases and is one of the more complex ones.  You are **highly encouraged** to 
 | ||
| read the full [implementation document](https://github.com/Podcastindex-org/podcast-namespace/blob/main/location/location.md) before starting to code for it.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<item>` or `<channel>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Single
 | ||
| 
 | ||
| ### Node Value
 | ||
|   This is a free-form string meant to be a human readable location.  It may conform to conventional location 
 | ||
| verbiage (i.e. "Austin, TX"), but it shouldn't be depended on to be parseable in any specific way.  This value 
 | ||
| cannot be blank.  Please do not exceed `128 characters` for the node value or it may be truncated by aggregators.
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **geo:** (recommended) This is a latitude and longitude given in ["geo" notation](https://github.com/Podcastindex-org/podcast-namespace/blob/main/location/location.md#geo-recommended) (i.e. "geo:30.2672,97.7431").
 | ||
|  - **osm:** (recommended) The Open Street Map identifier of this place, given using the OSM notation (i.e. "R113314")
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:location geo="geo:30.2672,97.7431" osm="R113314">Austin, TX</podcast:location>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:location geo="geo:33.51601,-86.81455" osm="R6930627">Birmingham Civil Rights Museum</podcast:location>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:location geo="geo:-27.86159,153.3169" osm="W43678282">Dreamworld (Queensland)</podcast:location>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Season
 | ||
| `<podcast:season>`<br><br>
 | ||
| This element allows for identifying which episodes in a podcast are part of a particular "season", with an optional 
 | ||
| season name attached.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<item>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Single
 | ||
| 
 | ||
| ### Node Value
 | ||
|   The node value is an integer, and represents the season "number".  It is required.
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **name:** (optional) - This is the "name" of the season.  If this attribute is present, applications are free to 
 | ||
|    **not** show the season number to the end user, and may use it simply for chronological sorting and grouping 
 | ||
|    purposes.
 | ||
| 
 | ||
| Please do not exceed `128 characters` for the name attribute.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:season>5</podcast:season>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:season name="Race for the Whitehouse 2020">3</podcast:season>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:season name="Egyptology: The 19th Century">1</podcast:season>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:season name="The Yearling - Chapter 3">3</podcast:season>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Episode
 | ||
| `<podcast:episode>`<br><br>
 | ||
| This element exists largely for compatibility with the `season` tag.  But, it also allows for a similar idea to what 
 | ||
| "name" functions as in that element.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<item>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Single
 | ||
| 
 | ||
| ### Node Value
 | ||
|   The node value is a decimal number.  It is required.
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **display:** (optional) - If this attribute is present, podcast apps and aggregators are encouraged to show its 
 | ||
|    value instead of the purely numerical node value.  This attribute is a string.
 | ||
| 
 | ||
| The episode numbers are decimal, so numbering such as `100.5` is acceptable if there was a special mini-episode 
 | ||
| published between two other episodes.  In that scenario, the number would help with proper chronological sorting, 
 | ||
| while the `display` attribute could specify an alternate special "number" (a moniker) to display for the episode in 
 | ||
| a podcast player app UI.
 | ||
| 
 | ||
| Please do not exceed `32 characters` for the display attribute.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:episode>3</podcast:episode>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:episode>315.5</podcast:episode>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:episode display="Ch.3">204</podcast:episode>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:episode display="Day 5">9</podcast:episode>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Trailer
 | ||
| `<podcast:trailer>`<br><br>
 | ||
| This element is used to define the location of an audio or video file to be used as a trailer for the entire podcast 
 | ||
| or a specific season.  There can be more than one trailer present in the channel of the feed.  This element is 
 | ||
| basically just like an [`<enclosure>`](https://cyber.harvard.edu/rss/rss.html#ltenclosuregtSubelementOfLtitemgt) 
 | ||
| with the extra `pubdate` and `season` attributes added.
 | ||
| 
 | ||
| If there is more than one trailer tag present in the channel, the most recent one (according to its `pubdate`) 
 | ||
| should be chosen as the preview by default within podcast apps.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Node Value
 | ||
|   The node value is a string, which is the title of the trailer. It is required. Please do not exceed `128 
 | ||
| characters` for the node value or it may be truncated by aggregators.
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **url:** (required) This is a url that points to the audio or video file to be played. This attribute is a string.
 | ||
|  - **pubdate:** (required) The date the trailer was published. This attribute is an RFC2822 formatted date string.
 | ||
|  - **length:** (recommended) The length of the file in bytes. This attribute is a number.
 | ||
|  - **type:** (recommended) The mime type of the file. This attribute is a string.
 | ||
|  - **season:** (optional) If this attribute is present it specifies that this trailer is for a particular season 
 | ||
|    number. This attribute is a number.
 | ||
| 
 | ||
| If the `season` attribute is present, it must be a number that matches the format of the `<podcast:season>` tag. So, 
 | ||
| for a podcast that has 3 published seasons, a new `<podcast:trailer season="4">` tag can be put in the channel to 
 | ||
| later be matched up with a `<podcast:season>4<podcast:season>` tag when it is published within a new `<item>`.
 | ||
| 
 | ||
| #### Examples
 | ||
| ```xml
 | ||
| <podcast:trailer 
 | ||
|         pubdate="Thu, 01 Apr 2021 08:00:00 EST" 
 | ||
|         url="https://example.org/trailers/teaser" 
 | ||
|         length="12345678" 
 | ||
|         type="audio/mp3
 | ||
| ">Coming April 1st, 2021</podcast:trailer>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:trailer 
 | ||
|         pubdate="Thu, 01 Apr 2021 08:00:00 EST" 
 | ||
|         url="https://example.org/trailers/season4teaser" 
 | ||
|         length="12345678" 
 | ||
|         type="video/mp4" 
 | ||
|         season="4"
 | ||
| >Season 4: Race for the Whitehouse</podcast:trailer>
 | ||
| 
 | ||
| (later matches with)
 | ||
| 
 | ||
| <podcast:season name="Race for the Whitehouse">4</podcast:season>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## License
 | ||
| `<podcast:license>`<br><br>
 | ||
| This element defines a license that is applied to the audio/video content of a single episode, or the audio/video of 
 | ||
| the podcast as a whole.  Custom licenses must always include a url attribute.  Implementors are encouraged to read 
 | ||
| the license tag companion [document](https://github.com/Podcastindex-org/podcast-namespace/blob/main/proposal-docs/license/license.md) for a more complete picture of
 | ||
| what this tag is intended to accomplish.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>` or `<item>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Single
 | ||
| 
 | ||
| ### Node Value
 | ||
|   The node value must be a lower-cased reference to a license "identifier" defined in the [SPDX License List](https://spdx.org/licenses/) file if the license being used is a well-known, public license.  Or, if it is a custom
 | ||
| license, it must be a free form abbreviation of the name of the license as you reference it publicly. Please do not 
 | ||
| exceed `128 characters` for the node value or it may be truncated by aggregators.
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **url:** (optional) This is a url that points to the full, legal language of the license being referenced.  This 
 | ||
|    attribute is optional for well-known public licenses.  For new, or custom licenses it is required.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:license>cc-by-4.0</podcast:license>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:license url="https://example.org/mypodcastlicense/full.pdf">my-podcast-license-v1</podcast:license>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Alternate Enclosure
 | ||
| `<podcast:alternateEnclosure>`<br><br>
 | ||
| This element is meant to provide different versions of, or companion media to the main [`<enclosure>`](https://cyber.harvard.edu/rss/rss.html#ltenclosuregtSubelementOfLtitemgt) file.  This could be an audio only version of a video
 | ||
| podcast to allow apps to switch back and forth between audio/video, lower (or higher) bitrate versions for bandwidth 
 | ||
| constrained areas, alternative codecs for different device platforms, alternate URI schemes and download types such 
 | ||
| as IPFS or WebTorrent, commentary tracks or supporting source clips, etc.
 | ||
| 
 | ||
| This is a complex tag, so implementors are highly encouraged to read the companion [document](https://github.com/Podcastindex-org/podcast-namespace/blob/main/proposal-docs/alternateEnclosure/alternateEnclosure.md) for a
 | ||
| fuller understanding of how this tag works and what it is capable of.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<item>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Node Value
 | ||
|   The node value must be one or more `<podcast:source>` elements that each define a uri where the media file 
 | ||
| can be downloaded or streamed.  A single, optional `<podcast:integrity>` element may also be included to allow for 
 | ||
| file integrity checking.
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **type:** (required) Mime type of the media asset.
 | ||
|  - **length:** (recommended) Length of the file in bytes.
 | ||
|  - **bitrate:** (optional) Average encoding bitrate of the media asset, expressed in bits per second.
 | ||
|  - **height:** (optional) Height of the media asset for video formats.
 | ||
|  - **lang:** (optional) An [IETF language tag (BCP 47)](https://en.wikipedia.org/wiki/BCP_47) code identifying the 
 | ||
|    language of this media.
 | ||
|  - **title:** (optional) A human-readable string identifying the name of the media asset. Should be limited to 32 
 | ||
|    characters for UX.
 | ||
|  - **rel:** (optional) Provides a method of offering and/or grouping together different media elements. If not set, 
 | ||
|    or set to "default", the media will be grouped with the enclosure and assumed to be an alternative to the 
 | ||
|    enclosure's encoding/transport. This attribute can and should be the same for items with the same content encoded 
 | ||
|    by different means. Should be limited to 32 characters for UX.
 | ||
|  - **codecs:** (optional) An [RFC 6381](https://tools.ietf.org/html/rfc6381) string specifying the codecs available 
 | ||
|    in this media.
 | ||
|  - **default:** (optional) Boolean specifying whether or not the given media is the same as the file from the 
 | ||
|    enclosure element and should be the preferred media element. The primary reason to set this is to offer 
 | ||
|    alternative transports for the enclosure. If not set, this should be assumed to be false.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <enclosure url="https://example.com/file-0.mp3" length="43200000" type="audio/mpeg" />
 | ||
| 
 | ||
| <podcast:alternateEnclosure type="audio/mpeg" length="43200000" bitrate="128000" default="true" title="Standard">
 | ||
|     <podcast:source uri="https://example.com/file-0.mp3" />
 | ||
|     <podcast:source uri="ipfs://someRandomMpegFile" />
 | ||
| </podcast:alternateEnclosure>
 | ||
| 
 | ||
| <podcast:alternateEnclosure type="audio/opus" length="32400000" bitrate="96000" title="High quality">
 | ||
|     <podcast:source uri="https://example.com/file-high.opus" />
 | ||
|     <podcast:source uri="ipfs://someRandomHighBitrateOpusFile" />
 | ||
| </podcast:alternateEnclosure>
 | ||
| 
 | ||
| <podcast:alternateEnclosure type="audio/aac" length="54000000" bitrate="160000" title="High quality AAC">
 | ||
|     <podcast:source uri="https://example.com/file-proprietary.aac" />
 | ||
|     <podcast:source uri="ipfs://someRandomProprietaryAACFile" />
 | ||
| </podcast:alternateEnclosure>
 | ||
| 
 | ||
| <podcast:alternateEnclosure type="audio/opus" length="5400000" bitrate="16000" title="Low bandwidth">
 | ||
|     <podcast:source uri="https://example.com/file-low.opus" />
 | ||
|     <podcast:source uri="ipfs://someRandomLowBitrateOpusFile" />
 | ||
| </podcast:alternateEnclosure>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:alternateEnclosure type="audio/mpeg" length="2490970" bitrate="160707.74">
 | ||
|     <podcast:source uri="https://example.com/file-0.mp3" />
 | ||
|     <podcast:source uri="ipfs://QmdwGqd3d2gFPGeJNLLCshdiPert45fMu84552Y4XHTy4y" />
 | ||
|     <podcast:source uri="https://example.com/file-0.torrent" contentType="application/x-bittorrent" />
 | ||
|     <podcast:source uri="http://example.onion/file-0.mp3" />
 | ||
| </podcast:alternateEnclosure>
 | ||
| 
 | ||
| <podcast:alternateEnclosure type="video/mp4" length="10562995" bitrate="681483.55" height="1080">
 | ||
|     <podcast:source uri="https://example.com/file-1080.mp4" />
 | ||
|     <podcast:source uri="ipfs://QmfQKJcp2xdByEt8mzWr1AJUhwvb9rdWPoacvdq2roDhgh" />
 | ||
|     <podcast:source uri="https://example.com/file-1080.torrent" contentType="application/x-bittorrent" />
 | ||
|     <podcast:source uri="http://example.onion/file-1080.mp4" />
 | ||
| </podcast:alternateEnclosure>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Source
 | ||
| `<podcast:source>`<br><br>
 | ||
| This element defines a uri location for a `<podcast:alternateEnclosure>` media file.  It is meant to be used as a 
 | ||
| child of the `<podcast:alternateEnclosure>` element. At least one `<podcast:source>` element must be present within 
 | ||
| every `<podcast:alternateEnclosure>` element.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<podcast:alternateEnclosure>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **uri:** (required) This is the uri where the media file resides.
 | ||
|  - **contentType:** (optional) This is a string that declares the mime-type of the file. It is useful if the 
 | ||
|    transport mechanism is different than the file being delivered, as is the case with a torrents.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:alternateEnclosure type="video/mp4" length="7924786" bitrate="511276.52" height="720">
 | ||
|     <podcast:source uri="https://example.com/file-720.mp4" />
 | ||
|     <podcast:source uri="ipfs://QmX33FYehk6ckGQ6g1D9D3FqZPix5JpKstKQKbaS8quUFb" />
 | ||
|     <podcast:source uri="https://example.com/file-720.torrent" contentType="application/x-bittorrent" />
 | ||
|     <podcast:source uri="http://example.onion/file-720.mp4" />
 | ||
| </podcast:alternateEnclosure>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Integrity
 | ||
| `<podcast:integrity>`<br><br>
 | ||
| This element defines a method of verifying integrity of the media given either an [SRI-compliant integrity string](https://www.w3.org/TR/SRI/) (preferred) or a base64 encoded PGP signature.  This element is optional within a
 | ||
| `<podcast:alternateEnclosure>` element.  It allows to ensure that the file has not been tampered with.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<podcast:alternateEnclosure>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Single
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **type:** (required) Type of integrity, either "sri" or "pgp-signature".
 | ||
|  - **value:** (required) Value of the sri string or base64 encoded pgp signature.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:alternateEnclosure type="video/mp4" length="7924786" bitrate="511276.52" height="720">
 | ||
|     <podcast:source uri="https://example.com/file-720.mp4" />
 | ||
|     <podcast:source uri="ipfs://QmX33FYehk6ckGQ6g1D9D3FqZPix5JpKstKQKbaS8quUFb" />
 | ||
|     <podcast:integrity type="sri" value="sha384-ExVqijgYHm15PqQqdXfW95x+Rs6C+d6E/ICxyQOeFevnxNLR/wtJNrNYTjIysUBo" />
 | ||
| </podcast:alternateEnclosure>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Guid
 | ||
| `<podcast:guid>`<br><br>
 | ||
| This element is used to declare a unique, global identifier for a podcast. The value is a UUIDv5, and is easily 
 | ||
| generated from the RSS feed url, with the **protocol scheme and trailing slashes stripped off**, combined with a 
 | ||
| unique "podcast" namespace which has a UUID of `ead4c236-bf58-58c6-a2c6-a6b28d128cb6`. Tools like [this one](https://www.uuidtools.com/v5) can help generate these values by hand. Or, language libraries like [this one](https://github.com/sporkmonger/uuidtools) in Ruby are widely available. Specifically for podcasts, [this tool from RSS Blue](https://tools.rssblue.com/podcast-guid) can help generate a GUID by hand.
 | ||
| 
 | ||
| A podcast gets assigned a podcast:guid once in its lifetime using its current feed url (at the time of assignment) 
 | ||
| as the seed value. That GUID is then meant to follow the podcast from then on, for the duration of its life, even if 
 | ||
| the feed url changes. This means that when a podcast moves from one hosting platform to another, its podcast:guid 
 | ||
| should be discovered by the new host and imported into the new platform for inclusion into the feed.
 | ||
| 
 | ||
| Using this pattern, podcasts can maintain a consistent identity across the open RSS ecosystem without a central 
 | ||
| authority.
 | ||
| 
 | ||
| **Tips:**
 | ||
| * All podcasts in the Podcast Index have already been assigned a GUID; but if one exists in the RSS feed, that value 
 | ||
|   is canonical.
 | ||
| * You can programmatically spot a GUID: it is 36 characters long, and contains four hyphen characters.
 | ||
| * Be aware that Amazon Music also uses separate UUIDv5 identifiers within their podcast directory, which are 
 | ||
|   calculated differently and unrelated to this specification. 
 | ||
| * The following regular expression (regex) will match a GUID:
 | ||
| ```re
 | ||
| [0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}`
 | ||
| ```
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Single
 | ||
| 
 | ||
| ### Node Value
 | ||
|   The node value is a UUIDv5 string.
 | ||
| 
 | ||
| ### Examples
 | ||
| Example GUID for feed url `mp3s.nashownotes.com/pc20rss.xml`:
 | ||
| ```xml
 | ||
| <podcast:guid>917393e3-1b1e-5cef-ace4-edaa54e1f810</podcast:guid>
 | ||
| ```
 | ||
| 
 | ||
| Example GUID for feed url `podnews.net/rss`:
 | ||
| ```xml
 | ||
| <podcast:guid>9b024349-ccf0-5f69-a609-6b82873eab3c</podcast:guid>
 | ||
| ```
 | ||
| 
 | ||
| ### Guid-enabled fast-follow share links
 | ||
| 
 | ||
|   The `podcast:guid` value above enables podcasters to produce a link that can share a podcast on a variety of 
 | ||
| different platforms.
 | ||
| 
 | ||
|   The format of the link is `https://(a podcast website link)#fastfollow-(type):(a podcast guid)`
 | ||
| 
 | ||
|   `type` is currently `podcast`, but may be extended in future.
 | ||
| 
 | ||
|   A working example is https://podnews.net/podcast/i8xe9/listen#fastfollow-podcast:9b024349-ccf0-5f69-a609-6b82873eab3c or the QR code given below.
 | ||
| 
 | ||
|   
 | ||
| 
 | ||
|   When scanned on a mobile phone's camera app, this link will go to the specified podcast website. Behavior of 
 | ||
| this website is up to the creator: some may use a default homepage, others may sniff the useragent and open a 
 | ||
| default podcast app on a device. In the working example, above, an iPhone user may be taken to Apple Podcasts; an 
 | ||
| Android user may be taken to Google Podcasts; and another device will be given a page with a player.
 | ||
| 
 | ||
|   When scanned on a QR code reader inside a podcast app, like [CurioCaster](https://curiocaster.com/), the app 
 | ||
| can parse the `podcast:guid` value from the URL, allowing the podcast to be opened within the application.
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Value
 | ||
| `<podcast:value>`<br><br>
 | ||
| This element designates the cryptocurrency or payment layer that will be used, the transport method for transacting 
 | ||
| the payments, and a suggested amount denominated in the given cryptocurrency.
 | ||
| 
 | ||
| This element can exist at either the `<channel>` or `<item>` level.  When it exists at the `<item>` level, it should 
 | ||
| be treated as an "override" of whatever is defined at the `<channel>` level.
 | ||
| 
 | ||
| This is a complex tag, so implementors are HIGHLY encouraged to read the companion [document](https://github.com/Podcastindex-org/podcast-namespace/blob/main/value/value.md) for a complete understanding of how
 | ||
| this tag works and what it is capable of.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>` or `<item>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Node Value
 | ||
|   The node value must be one or more `<podcast:valueRecipient>` elements.
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **type:** (required) This is the service slug of the cryptocurrency or protocol layer.
 | ||
|  - **method:** (required) This is the transport mechanism that will be used.
 | ||
|  - **suggested:** (optional) This is an optional suggestion on how much cryptocurrency to send with each payment.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:value
 | ||
|     type="lightning"
 | ||
|     method="keysend"
 | ||
|     suggested="0.00000005000"
 | ||
| ></podcast:value>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Value Recipient
 | ||
| `<podcast:valueRecipient>`<br><br>
 | ||
| The `valueRecipient` tag designates various destinations for payments to be sent to during consumption of the 
 | ||
| enclosed media.  Each recipient is considered to receive a "split" of the total payment according to the number of 
 | ||
| shares given in the `split` attribute.
 | ||
| 
 | ||
| This element may only exist within a parent `<podcast:value>` element.
 | ||
| 
 | ||
| There is no limit on how many `valueRecipient` elements can be present in a given `<podcast:value>` element.
 | ||
| 
 | ||
| This is a complex tag, so implementors are HIGHLY encouraged to read the companion [document](https://github.com/Podcastindex-org/podcast-namespace/blob/main/value/value.md) for a complete understanding of how this tag works
 | ||
| and what it is capable of.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<podcast:value>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **name** (recommended) A free-form string that designates who or what this recipient is.
 | ||
|  - **customKey** (optional) The name of a custom record key to send along with the payment.
 | ||
|  - **customValue** (optional) A custom value to pass along with the payment. This is considered the value that 
 | ||
|    belongs to the `customKey`.
 | ||
|  - **type** (required) A slug that represents the type of receiving address that will receive the payment.
 | ||
|  - **address** (required) This denotes the receiving address of the payee.
 | ||
|  - **split** (required) The number of shares of the payment this recipient will receive.
 | ||
|  - **fee** (optional) If this attribute is not specified, it is assumed to be false.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:value type="lightning" method="keysend" suggested="0.00000015000">
 | ||
|   <podcast:valueRecipient
 | ||
|       name="Alice (Podcaster)"
 | ||
|       type="node"
 | ||
|       address="02d5c1bf8b940dc9cadca86d1b0a3c37fbe39cee4c7e839e33bef9174531d27f52"
 | ||
|       split="40"
 | ||
|   />
 | ||
|   <podcast:valueRecipient
 | ||
|       name="Bob (Podcaster)"
 | ||
|       type="node"
 | ||
|       address="032f4ffbbafffbe51726ad3c164a3d0d37ec27bc67b29a159b0f49ae8ac21b8508"
 | ||
|       split="40"
 | ||
|   />
 | ||
|   <podcast:valueRecipient
 | ||
|       name="Carol (Producer)"
 | ||
|       type="node"
 | ||
|       address="02dd306e68c46681aa21d88a436fb35355a8579dd30201581cefa17cb179fc4c15"
 | ||
|       split="15"
 | ||
|   />
 | ||
|   <podcast:valueRecipient
 | ||
|       name="Hosting Provider"
 | ||
|       type="node"
 | ||
|       address="03ae9f91a0cb8ff43840e3c322c4c61f019d8c1c3cea15a25cfc425ac605e61a4a"
 | ||
|       split="5"
 | ||
|       fee="true"
 | ||
|   />
 | ||
| </podcast:value>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Medium
 | ||
| `<podcast:medium>`<br><br>
 | ||
| The `medium` tag tells an application what the content contained within the feed IS, as opposed to what the 
 | ||
| content is ABOUT in the case of a category.  This allows a podcast app to modify it's behavior or UI to give a 
 | ||
| better experience to the user for this content.  For example, if a podcast has 
 | ||
| `<podcast:medium>music</podcast:medium>` an app may choose to reset playback speed to 1x and adjust it's EQ settings 
 | ||
| to be better for music vs. spoken word.
 | ||
| 
 | ||
| Accepted medium names are curated within a list maintained by the community as new mediums are discovered over time. 
 | ||
| Newly proposed mediums should require some level of justification to be added to this list. One may argue and/or 
 | ||
| prove use of a new medium even for only one application, should it prove different enough from existing mediums to 
 | ||
| have meaning.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Single
 | ||
| 
 | ||
| ### Node Value
 | ||
| The node value is a string denoting one of the following possible values:
 | ||
| - `podcast` (default) - Describes a feed for a podcast show. If no `medium` tag is present in the channel, this 
 | ||
|   medium is assumed.
 | ||
| - `music` - A feed of music organized into an "album" with each item a song within the album.
 | ||
| - `video` - Like a "podcast" but used in a more visual experience.  Something akin to a dedicated video channel like 
 | ||
|   would be found on YouTube.
 | ||
| - `film` - Specific types of videos with one item per feed. This is different than a `video` medium because the 
 | ||
|   content is considered to be cinematic; like a movie or documentary.
 | ||
| - `audiobook` - Specific types of audio with one item per feed, or where items represent chapters within the book.
 | ||
| - `newsletter` - Describes a feed of curated written articles.  Newsletter articles now sometimes have an spoken 
 | ||
|   version audio enclosure attached.
 | ||
| - `blog` - Describes a feed of informally written articles.  Similar to `newsletter` but more informal as in a 
 | ||
|   traditional blog platform style.
 | ||
| 
 | ||
| ### List Mediums
 | ||
| In addition to the above mediums, each medium also has a counterpart "list" variant, where the original medium name 
 | ||
| is suffixed by the letter "L" to indicate that it is a "List" of that type of content. For example, `podcast` would 
 | ||
| become `podcastL`, `music` would become `musicL`, `audiobook` would become `audiobookL`, etc.
 | ||
| 
 | ||
| There is also a dedicated list medium for mixed content:
 | ||
| - `mixed` - This list medium type describes a feed of `<podcast:remoteItem>`'s that point to different remote medium 
 | ||
|   types.  For instance, a single list feed might point to music, podcast and audiobook items in other feeds.  An 
 | ||
|   example would be a personal consumption history feed.
 | ||
| 
 | ||
| A "list" medium feed should not be expected to have regular `<item>`'s,`<podcast:liveItem>`'s, or any future 
 | ||
| similar new item type. Rather, a "List" feed is intended to exclusively contain one or more `<podcast:remoteItem>`'s,
 | ||
| allowing one to reference a feed by its `<podcast:guid>` and the guid of an item.
 | ||
| 
 | ||
| ### Examples
 | ||
| Example use for a standard "podcast" feed:
 | ||
| ```xml
 | ||
| <podcast:medium>podcast</podcast:medium>
 | ||
| ```
 | ||
| 
 | ||
| Example use for a "music" feed:
 | ||
| ```xml
 | ||
| <podcast:medium>music</podcast:medium>
 | ||
| ```
 | ||
| 
 | ||
| Example use for a "music" playlist feed:
 | ||
| ```xml
 | ||
| <rss xmlns:podcast="https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
 | ||
|     <channel>
 | ||
|         <title>Picking the Hits 2.0!</title>
 | ||
|         <description>All the hits played on the Podcasting 2.0 show.</description>
 | ||
|         <link>https://podcastindex.org</link>
 | ||
|         <language>en-US</language>
 | ||
|         <pubDate>Wed, 07 Jun 2023 04:30:38 GMT</pubDate>
 | ||
|         <image>
 | ||
|             <url>https://example.com/images/pci_avatar-massive.jpg</url>
 | ||
|         </image>
 | ||
| 
 | ||
|         <podcast:guid>3f2a8e4e-263a-51aa-9d3d-0d71f82a1564</podcast:guid>
 | ||
|         <podcast:medium>musicL</podcast:medium>
 | ||
|         <itunes:image>https://example.com/images/pci_avatar-massive.jpg</itunes:image>
 | ||
| 
 | ||
|         <podcast:value type="lightning" method="keysend" suggested="0.00000005000">
 | ||
|             <podcast:valueRecipient name="podcaster" type="node" address="036557ea56b3b86f08be31bcd2557cae8021b0e3a9413f0c0e52625c6696972e57" split="99" />
 | ||
|             <podcast:valueRecipient name="hosting company" type="node" address="036557ea56b3b86f08be31bcd2557cae8021b0e3a9413f0c0e52625c6696972e57" split="1" />
 | ||
|         </podcast:value>
 | ||
| 
 | ||
|         <podcast:remoteItem
 | ||
|                 feedGuid="ff519475-6e90-5231-91a0-37d092088d88"
 | ||
|                 feedUrl="https://media.rss.com/joemartinmusic/feed.xml"
 | ||
|                 itemGuid="e75771b1-e8d4-4133-9392-c579822247d9"
 | ||
|                 medium="music"
 | ||
|         />
 | ||
|         
 | ||
|         <podcast:remoteItem
 | ||
|                 feedGuid="47081700-bd65-511f-b535-f545f3cd660c"
 | ||
|                 feedUrl="https://player.wavlake.com/feed/d1ed0ec9-21a8-4eda-b2c9-b17c8019a7e8"
 | ||
|                 itemGuid="7b03666e-b323-499d-93a7-ca51ce627ffd"
 | ||
|                 medium="music"
 | ||
|         />
 | ||
| 
 | ||
|        <podcast:remoteItem
 | ||
|                feedGuid="483dde8e-7e94-59a7-8eb0-2b0dc64a87bd"
 | ||
|                feedUrl="https://player.wavlake.com/feed/1dd1bbd8-1084-4fdc-9788-dddaa62fbc6a"
 | ||
|                itemGuid="8501fb64-a6a3-475a-8b10-9c746f0fe579"
 | ||
|                medium="music"
 | ||
|        />
 | ||
| 
 | ||
|        <podcast:remoteItem
 | ||
|                feedGuid="b40ffcf7-2c48-5cfe-8daa-b65d766b2c25"
 | ||
|                feedUrl="https://www.wavlake.com/feed/92b04241-97f5-4ff7-be11-cf45f70812e7"
 | ||
|                itemGuid="9a48aab8-6da6-4cc1-9951-5b049c333580"
 | ||
|                medium="music"
 | ||
|        />
 | ||
|     </channel>
 | ||
| </rss>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Images
 | ||
| `<podcast:images>`<br><br>
 | ||
| This tag, when present, allows for specifying many different image sizes in a compact way at either the episode or 
 | ||
| channel level.  The syntax is borrowed from the HTML5 [srcset](https://html.spec.whatwg.org/multipage/images.html#srcset-attributes) syntax.  It allows for describing multiple image sources with width and pixel hints directly
 | ||
| in the attribute.  Although the HTML5 `srcset` attribute allows relative urls, absolute urls are required in this 
 | ||
| tag - since the feed url may not represent an appropriate base url for relativization.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>` or `<item>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Single
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **srcset** (required) A string that denotes each image url followed by a space and the pixel width, with each one 
 | ||
|    separated by a comma.  See the example for a clear view of the syntax.
 | ||
| 
 | ||
| ### Examples
 | ||
| Example of specifying four different image sizes:
 | ||
| ```xml
 | ||
| <podcast:images
 | ||
|     srcset="https://example.com/images/ep1/pci_avatar-massive.jpg 1500w,
 | ||
|             https://example.com/images/ep1/pci_avatar-middle.jpg 600w,
 | ||
|             https://example.com/images/ep1/pci_avatar-small.jpg 300w,
 | ||
|             https://example.com/images/ep1/pci_avatar-tiny.jpg 150w"
 | ||
| />
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Live Item
 | ||
| `<podcast:liveItem>`<br><br>
 | ||
| The `liveItem` tag is used for a feed to deliver a live audio or video stream to podcast apps.  It takes the same 
 | ||
| format as a standard `<item>` episode tag, and all tags that are allowed as children of a normal `<item>` are also 
 | ||
| allowed as children of `<podcast:liveItem>`.  Note that "allowed" is not the same as "supported".  So, just like a 
 | ||
| normal `<item>`, you cannot depend on all apps to support all tags within `<podcast:liveItem>`, especially when the 
 | ||
| function of the tag is not obvious.  For instance, including an `<itunes:duration>` tag in a live item is probably a 
 | ||
| waste of time since apps will not know what to do with that value in the context of live media.
 | ||
| 
 | ||
| This tag will also make use of the [podping](https://podping.cloud) notification network.  A podping notification 
 | ||
| SHOULD be sent out by the host when the live stream starts, to let apps know.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Node Value
 | ||
| All tags that are valid as children of a standard `<item>` tag are also valid as children here.
 | ||
| 
 | ||
| When specifying the audio/video source, the [`<podcast:alternateEnclosure>`](#alternate-enclosure) tag is highly 
 | ||
| encouraged since it gives the broadest coverage of possible stream types and is explicit in it's communication of 
 | ||
| what transport protocol and media codecs are being used. In addition to [`<podcast:alternateEnclosure>`](#alternate-enclosure), a standard [`<enclosure>`](https://cyber.harvard.edu/rss/rss.
 | ||
| html#ltenclosuregtSubelementOfLtitemgt) should also be given as a fallback to support podcast apps that don't yet 
 | ||
| implement [`<podcast:alternateEnclosure>`](#alternate-enclosure). 
 | ||
| 
 | ||
| Regardless of which enclosure tag is used, feed 
 | ||
| owners must be conscious of the fact that choosing a non-mainstream streaming protocol/codec will limit the number 
 | ||
| of apps that can play the content.  For that reason, it's highly recommended to use only the two most widely 
 | ||
| supported protocols (mp3 and mp4/h.264) to ensure compatibility with the broadest number of apps on various 
 | ||
| platforms.  Choosing a streaming format that is outside of this narrow list might exclude many apps from playing 
 | ||
| your content.  As broader adoption of HLS, Opus, etc. becomes apparent, this recommendation will change to include 
 | ||
| newer formats.
 | ||
| 
 | ||
| The [`<podcast:contentLink>`](#content-link) tag is also required to be present, to ensure that listeners have a 
 | ||
| fallback option in case their chosen app cannot play the given content stream directly.  In most instances this will 
 | ||
| just be a link to an HTML page that can play the live stream.  Such a page can reside on the podcaster's own website,
 | ||
| a page provided by their hosting company or a third party platform they have chosen to use.  Podcasters who live 
 | ||
| stream to multiple platforms at once can also use the [`<podcast:contentLink>`](#content-link) tag to provide links 
 | ||
| to those other platforms.
 | ||
| 
 | ||
| A robust, well-written `<podcast:liveItem>` tag will include all three of:  [`<podcast:alternateEnclosure>`](#alternate-enclosure), [`<enclosure>`](https://cyber.harvard.edu/rss/rss.html#ltenclosuregtSubelementOfLtitemgt)
 | ||
| and [`<podcast:contentLink>`](#content-link) to ensure the broadest interopability with podcast apps.
 | ||
| 
 | ||
| The function of `<guid>` within a live item tag is the same as it is within a regular item.  If the `<guid>` of a 
 | ||
| `<podcast:liveItem>` changes, it MUST be considered a new stream by podcast apps.
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **status** (required) A string that must be one of `pending`, `live` or `ended`.
 | ||
|  - **start** (required) A string representing an ISO8601 timestamp that denotes the time when the stream is intended 
 | ||
|    to start.
 | ||
|  - **end** (recommended) A string representing an ISO8601 timestamp that denotes the time when the stream is intended 
 | ||
|    to end.
 | ||
| 
 | ||
| The `start` and `end` attributes denote when the live stream "should" start and end.  But, real life dictates that 
 | ||
| those times might not be adhered to.  Apps are therefore encouraged not to rely solely on those times as anything 
 | ||
| more than an approximation.  The canonical way to know if a stream has started is with the `status` attribute.  If 
 | ||
| `status` is "live" then the stream has started.
 | ||
| 
 | ||
| ### Examples
 | ||
| A complete example:
 | ||
| ```xml
 | ||
| <podcast:liveItem status="live" start="2021-09-26T07:30:00.000-0600" end="2021-09-26T09:30:00.000-0600">
 | ||
|     <title>Podcasting 2.0 Live Show</title>
 | ||
|     <description>A look into the future of podcasting and how we get to Podcasting 2.0!</description>
 | ||
|     <link>https://example.com/podcast/live</link>
 | ||
|     <guid isPermaLink="true">https://example.com/live</guid>
 | ||
|     <author>John Doe (john@example.com)</author>
 | ||
|     <podcast:images srcset="https://example.com/images/live/pci_avatar-massive.jpg 1500w,
 | ||
|         https://example.com/images/live/pci_avatar-middle.jpg 600w,
 | ||
|         https://example.com/images/live/pci_avatar-small.jpg 300w,
 | ||
|         https://example.com/images/live/pci_avatar-tiny.jpg 150w"
 | ||
|     />
 | ||
|     <podcast:person href="https://www.podchaser.com/creators/adam-curry-107ZzmWE5f"
 | ||
|                     img="https://example.com/images/adamcurry.jpg">Adam Curry</podcast:person>
 | ||
|     <podcast:person role="guest" href="https://github.com/daveajones/" 
 | ||
|                     img="https://example.com/images/davejones.jpg">Dave Jones</podcast:person>
 | ||
|     <podcast:person group="visuals" role="cover art designer" 
 | ||
|                     href="https://example.com/artist/beckysmith">Becky Smith</podcast:person>
 | ||
|     <podcast:alternateEnclosure type="audio/mpeg" length="312" default="true">
 | ||
|         <podcast:source uri="https://example.com/pc20/livestream" />
 | ||
|     </podcast:alternateEnclosure>
 | ||
|     <enclosure url="https://example.com/pc20/livestream?format=.mp3" type="audio/mpeg" length="312" />
 | ||
|     <podcast:contentLink href="https://youtube.com/pc20/livestream">YouTube!</podcast:contentLink>
 | ||
|     <podcast:contentLink href="https://twitch.com/pc20/livestream">Twitch!</podcast:contentLink>
 | ||
|     <podcast:contentLink href="https://example.com/html/livestream">Listen Live!</podcast:contentLink>
 | ||
| </podcast:liveItem>
 | ||
| ```
 | ||
| 
 | ||
| A bare bones example:
 | ||
| ```xml
 | ||
| <podcast:liveItem status="live" start="2021-09-26T07:30:00.000-0600" end="2021-09-26T09:30:00.000-0600">
 | ||
|     <title>Podcasting 2.0 Live Stream</title>
 | ||
|     <guid>e32b4890-983b-4ce5-8b46-f2d6bc1d8819</guid>
 | ||
|     <enclosure url="https://example.com/pc20/livestream?format=.mp3" type="audio/mpeg" length="312" />
 | ||
|     <podcast:contentLink href="https://example.com/html/livestream">Listen Live!</podcast:contentLink>
 | ||
| </podcast:liveItem>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Content Link
 | ||
| `<podcast:contentLink>`<br><br>
 | ||
| The `contentLink` tag is used to indicate that the content begin delivered by the parent element can be found at an 
 | ||
| external location instead of, or in addition to, being delivered directly to the tag itself within an app.  In most 
 | ||
| instances it is used as a fallback link for the user to use when the app itself can't handle a certain content 
 | ||
| delivery directly.
 | ||
| 
 | ||
| For instance, perhaps a podcast feed specifies a `<podcast:liveItem>` to deliver a live stream to apps.  The feed 
 | ||
| may also give a `<podcast:contentLink>` pointing to YouTube and Twitch versions of the live stream as well, just in 
 | ||
| case the listener uses an app that doesn't fully support live streaming content.
 | ||
| 
 | ||
| Currently this tag is only indicated for use in the `<podcast:liveItem>` tag.  In the future, its use will be expanded.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<podcast:liveItem>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Node Value
 | ||
| The node value is a free form string meant to explain to the user where this content link points and/or the nature 
 | ||
| of it's purpose.
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **href** (required) A string that is the uri pointing to content outside of the application.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:contentLink href="https://youtube.com/blahblah/livestream">Live on YouTube!</podcast:contentLink>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:contentLink href="https://twitter.com/statuses/somepost">Chat on Twitter!</podcast:contentLink>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Social Interact
 | ||
| `<podcast:socialInteract>`<br><br>
 | ||
| The `socialInteract` tag allows a podcaster to attach the url of a "root post" of a comment thread to an episode.  
 | ||
| This "root post" is treated as the canonical location of where the comments and discussion around this episode will 
 | ||
| take place.  This can be thought of as the "official" social media comment space for this episode.  If a protocol 
 | ||
| such as "activitypub" is used, or some other protocol that allows programmatic API access, these comments can be 
 | ||
| directly pulled into the app, and replies can be posted back to the thread from the app itself.
 | ||
| 
 | ||
| If multiple `socialInteract` tags are given for an `<item>`, the `priority` attribute is strongly recommended to 
 | ||
| give the app an indication as to which comments to display first.
 | ||
| 
 | ||
| This tag can also be used as a signal to platforms and apps that the podcaster does not want public comments shown 
 | ||
| alongside this episode.  For this purpose a `protocol` value of "disabled" can be specified, with no other 
 | ||
| attributes or node value present.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<item>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Attributes
 | ||
| - **uri** (required) The uri/url of root post comment.
 | ||
| - **protocol** (required) The [protocol](/socialprotocols.txt) in use for interacting with the comment root post.
 | ||
| - **accountId** (recommended) The account id (on the commenting platform) of the account that created this root post.
 | ||
| - **accountUrl** (optional) The public url (on the commenting platform) of the account that created this root post.
 | ||
| - **priority** (optional) When multiple socialInteract tags are present, this integer gives order of priority.  A 
 | ||
|   lower number means higher priority.
 | ||
| 
 | ||
| 
 | ||
| Example (simple):
 | ||
| ```xml
 | ||
| <podcast:socialInteract 
 | ||
|         uri="https://podcastindex.social/web/@dave/108013847520053258" 
 | ||
|         protocol="activitypub" 
 | ||
|         accountId="@dave" 
 | ||
| />
 | ||
| ```
 | ||
| 
 | ||
| Example (complex):
 | ||
| ```xml
 | ||
| <podcast:socialInteract
 | ||
|         priority="1"
 | ||
|         uri="https://podcastindex.social/web/@dave/108013847520053258" 
 | ||
|         protocol="activitypub" 
 | ||
|         accountId="@dave" 
 | ||
|         accountUrl="https://podcastindex.social/web/@dave" 
 | ||
| />
 | ||
| <podcast:socialInteract 
 | ||
|         priority="2" 
 | ||
|         uri="https://twitter.com/PodcastindexOrg/status/1507120226361647115" 
 | ||
|         protocol="twitter" 
 | ||
|         accountId="@podcastindexorg" 
 | ||
|         accountUrl="https://twitter.com/PodcastindexOrg" 
 | ||
| />
 | ||
| ```
 | ||
| 
 | ||
| Example (disabled):
 | ||
| ```xml
 | ||
| <podcast:socialInteract protocol="disabled" />
 | ||
| ```
 | ||
| 
 | ||
| * For **activitypub**, Mastodon or Pleroma's posting API returns a URI (a fully-formed URL with a GUID in it), and a 
 | ||
|   URL (the HTML page where the comment lives). While both of these are acceptable values for the `uri` field 
 | ||
|   referenced in the `socialInteract` specification, we'd recommend using the URI value.
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Block
 | ||
| `<podcast:block>`<br><br>
 | ||
| This element allows a podcaster to express which platforms are allowed to publicly display this feed and its 
 | ||
| contents. In its basic form, it is a direct drop-in replacement for the `<itunes:block>` tag, but allows for greater 
 | ||
| flexibility by the inclusion of the `id` attribute and by including multiple copies of itself in the feed.
 | ||
| 
 | ||
| Platforms should not ingest a feed for public display/use if their slug exists in the `id` of a `yes` block tag, or 
 | ||
| if an unbounded `yes` block tag exists (meaning block all public ingestion).  Conversely, if a platform finds their 
 | ||
| slug in the `id` of a `no` block tag, they are free to ingest that feed for public display/usage.
 | ||
| 
 | ||
| In plain language, the sequence of discovery an ingesting platform should use is as follows:
 | ||
| 
 | ||
|  1. Does `<podcast:block id="[myslug]">no</podcast:block>` exist in this feed?  Safe to ingest.
 | ||
|  2. Does `<podcast:block id="[myslug]">yes</podcast:block>` exist in this feed?  Do not ingest.
 | ||
|  3. Does `<podcast:block>yes</podcast:block>` exist in this feed?  Do not ingest.
 | ||
| 
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Attributes
 | ||
|  - **id** (optional) A single entry from the [service slug list](https://github.com/Podcastindex-org/podcast-namespace/blob/main/serviceslugs.txt).
 | ||
| 
 | ||
| ### Node value
 | ||
|   The node value must be "yes" or "no".
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <!-- This means "block everything" -->
 | ||
| <podcast:block>yes</podcast:block>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <!-- This means "block nothing" (same as not present) -->
 | ||
| <podcast:block>no</podcast:block>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <!-- This means "block only google and amazon" -->
 | ||
| <podcast:block id="google">yes</podcast:block>
 | ||
| <podcast:block id="amazon">yes</podcast:block>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <!-- This means "block every platform _except_ google and amazon" -->
 | ||
| <podcast:block>yes</podcast:block>
 | ||
| <podcast:block id="google">no</podcast:block>
 | ||
| <podcast:block id="amazon">no</podcast:block>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Txt
 | ||
| `<podcast:txt>`<br><br>
 | ||
| This element holds free-form text and is modeled after the DNS "[TXT](https://en.wikipedia.org/wiki/TXT_record)" 
 | ||
| record.  It's meant to allow for usages that might be niche or otherwise not rise to the level of needing a 
 | ||
| dedicated tag.  Just like TXT records in DNS allowed for new things like [SPF](https://en.wikipedia.
 | ||
| org/wiki/Sender_Policy_Framework#Implementation) to evolve, this tag can allow novel techniques to be created and 
 | ||
| sandboxed without a formalization process.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>` or `<item>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Attributes
 | ||
| - **purpose** (optional)  A service specific string that will be used to denote what purpose this tag serves. This 
 | ||
|   could be something like "example.com" if it's a third party hosting platform needing to insert this data, or 
 | ||
|   something like "verify", "release" or any other free form bit of info that is useful to the end consumer that 
 | ||
|   needs it. The free form nature of this tag requires that this attribute is also free formed. This value should not 
 | ||
|   exceed `128 characters`.
 | ||
| 
 | ||
| ### Purposes
 | ||
| The following are a list of strings known to be in common use. This list is in no way exhaustive. As new purposes 
 | ||
| come into common use, this list will be updated by the community to reflect that.
 | ||
| 
 | ||
| - `verify` - The node value is expected to contain a string that is given by a third party platform to a podcaster 
 | ||
|   in order to prove that they are the owner of the feed and are in control of it. This is meant to replace the need 
 | ||
|   for emails to exist in feeds. See example section below.
 | ||
| 
 | ||
| ### Node value
 | ||
|     This is a free form string. Please do not exceed `4000 characters` for the node value or it may be 
 | ||
| truncated by aggregators.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:txt>naj3eEZaWVVY9a38uhX8FekACyhtqP4JN</podcast:txt>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:txt purpose="verify">S6lpp-7ZCn8-dZfGc-OoyaG</podcast:txt>
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:txt purpose="release">2022-10-26T04:45:30.742Z</podcast:txt>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Remote Item
 | ||
| `<podcast:remoteItem>`<br><br>
 | ||
| This element provides a way to "point" to another feed or an `<item>` in another feed in order to obtain some sort 
 | ||
| of data that the other feed or feed item has.  This allows a podcast app to know where to go and fetch the data 
 | ||
| being requested.  What data is being requested is determined by the parent item.  For instance, if the parent item 
 | ||
| is a `<podcast:podroll>` element, then the remote feed's `<channel>` metadata is needed.
 | ||
| 
 | ||
| Using the `feedGuid` attribute is the preferred way to address a remote feed since, but there are times when an app 
 | ||
| may not have access to a list of resolvable `<podcast:guid>`'s.  In that case, it can be beneficial to include the 
 | ||
| `feedUrl` attribute for those cases as a fallback.  If both are present and the app is capable the `feedGuid` should 
 | ||
| be resolved and used.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>` or `<podcast:podroll>` or `<podcast:valueTimeSplit>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Attributes
 | ||
| - **feedGuid** (required) The `<podcast:guid>` of the remote feed being pointed to.
 | ||
| - **feedUrl** (optional) The url of the remote feed being pointed to.
 | ||
| - **itemGuid** (optional) If this remote item element is intended to point to an `<item>` in the remote feed, this 
 | ||
|   attribute should contain the value of the `<guid>` of that `<item>`. 
 | ||
| - **medium** (optional) If the feed being pointed to is not of medium type 'podcast', this attribute should contain 
 | ||
|   it's `<podcast:medium>` type from the [list](#medium) of types available in this document. The reason this is 
 | ||
|   helpful is to give the app a heads up on what type of data this is expected to be since that may affect the way it 
 | ||
|   approaches fetch and display.
 | ||
| 
 | ||
| ### Examples
 | ||
| ```xml
 | ||
| <podcast:remoteItem feedGuid="917393e3-1b1e-5cef-ace4-edaa54e1f810" />
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:remoteItem
 | ||
|     feedGuid="917393e3-1b1e-5cef-ace4-edaa54e1f810"
 | ||
|     itemGuid="asdf089j0-ep240-20230510"
 | ||
| />
 | ||
| ```
 | ||
| 
 | ||
| ```xml
 | ||
| <podcast:remoteItem
 | ||
|     feedGuid="917393e3-1b1e-5cef-ace4-edaa54e1f810"
 | ||
|     feedUrl="https://feeds.example.org/917393e3-1b1e-5cef-ace4-edaa54e1f810/rss.xml"
 | ||
|     itemGuid="asdf089j0-ep240-20230510"
 | ||
|     medium="music"
 | ||
| />
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Podroll
 | ||
| `<podcast:podroll>`<br><br>
 | ||
| This element allows for a podcaster to include references to one or more podcasts in it's `<channel>` as a way of 
 | ||
| "recommending" other podcasts to their listener.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Single
 | ||
| 
 | ||
| ### Node value
 | ||
|   The node value must be one or more `<podcast:remoteItem>` elements.
 | ||
| 
 | ||
| ### Example
 | ||
| ```xml
 | ||
| <podcast:podroll>
 | ||
|     <podcast:remoteItem feedGuid="29cdca4a-32d8-56ba-b48b-09a011c5daa9" />
 | ||
|     <podcast:remoteItem feedGuid="396d9ae0-da7e-5557-b894-b606231fa3ea" />
 | ||
|     <podcast:remoteItem feedGuid="917393e3-1b1e-5cef-ace4-edaa54e1f810" />
 | ||
| </podcast:podroll>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Update Frequency
 | ||
| `<podcast:updateFrequency>`<br><br>
 | ||
| This element allows a podcaster to express their intended release schedule as structured data and text.
 | ||
| 
 | ||
| ### Parent
 | ||
| `<channel>`
 | ||
| 
 | ||
| ### Count
 | ||
| Single
 | ||
| 
 | ||
| ### Node value
 | ||
| The node value is a free-form string, which might be displayed alongside other information about the podcast. Please 
 | ||
| do not exceed `128 characters` for the node value or it may be truncated by aggregators.
 | ||
| 
 | ||
| ### Attributes
 | ||
| * **complete (optional):** Boolean specifying if the podcast has no intention to release further episodes. If not 
 | ||
|   set, this should be assumed to be false.
 | ||
| * **dtstart (optional):** The `date` or `datetime` the recurrence rule begins as an [ISO8601-fornmatted](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) string. If the
 | ||
|   `rrule` contains a value for `COUNT`, then this attribute is required. If the `rrule` contains a value for `UNTIL`,
 | ||
|   then the value of this attribute must be formatted to the same date/datetime standard.
 | ||
| * **rrule (recommended):** A recurrence rule as defined in [iCalendar RFC 5545 Section 3.3.10](https://www.rfc-editor.org/rfc/rfc5545#section-3.3.10).
 | ||
| 
 | ||
| ### Examples
 | ||
| Recreating most of Apple Podcasts Connect’s “Update Frequency” values is easily achieved:
 | ||
| ```xml
 | ||
| <podcast:updateFrequency rrule="FREQ=DAILY">Daily</podcast:updateFrequency>
 | ||
| 
 | ||
| <podcast:updateFrequency rrule="FREQ=WEEKLY">Weekly</podcast:updateFrequency>
 | ||
| 
 | ||
| <podcast:updateFrequency rrule="FREQ=WEEKLY;INTERVAL=2">Biweekly</podcast:updateFrequency>
 | ||
| 
 | ||
| <podcast:updateFrequency rrule="FREQ=MONTHLY">Monthly</podcast:updateFrequency>
 | ||
| 
 | ||
| <podcast:updateFrequency rrule="FREQ=MONTHLY;INTERVAL=2">Bimonthly</podcast:updateFrequency>
 | ||
| 
 | ||
| <podcast:updateFrequency rrule="FREQ=MONTHLY">Monthly</podcast:updateFrequency>
 | ||
| 
 | ||
| <podcast:updateFrequency rrule="FREQ=YEARLY">Yearly</podcast:updateFrequency>
 | ||
| ```
 | ||
| 
 | ||
| However, greater precision can be easily communicated:
 | ||
| ```xml
 | ||
| <podcast:updateFrequency rrule="FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR">Every weekday</podcast:updateFrequency>
 | ||
| 
 | ||
| <podcast:updateFrequency rrule="FREQ=WEEKLY;BYDAY=MO,WE">Every Monday and Wednesday</podcast:updateFrequency>
 | ||
| 
 | ||
| <podcast:updateFrequency rrule="FREQ=WEEKLY;BYDAY=FR;BYMONTHDAY=13">Every friday the 13th</podcast:updateFrequency>
 | ||
| 
 | ||
| <podcast:updateFrequency rrule="FREQ=YEARLY;BYDAY=+4TH;BYMONTH=11">
 | ||
|     Every year on American Thanksgiving
 | ||
| </podcast:updateFrequency>
 | ||
| ```
 | ||
| 
 | ||
| Limited-run podcasts can indicate when they’ll go on hiatus by setting an UNTIL date or a COUNT:
 | ||
| ```xml
 | ||
| <podcast:updateFrequency rrule="FREQ=WEEKLY;INTERVAL=2;BYDAY=MO;COUNT=10" dtstart="2023-08-28T00:00:00.000Z">
 | ||
|     Every other Monday for 10 episodes starting on Aug 28, 2023
 | ||
| </podcast:updateFrequency>
 | ||
| 
 | ||
| <podcast:updateFrequency rrule="FREQ=WEEKLY;UNTIL=2023-12-31T00:00:00.000Z;BYDAY=MO">
 | ||
|     Every Monday until Dec 31, 2023
 | ||
| </podcast:updateFrequency>
 | ||
| ```
 | ||
| 
 | ||
| Podcasts currently on hiatus can indicate their intention to resume production by setting a DTSTART value in the future:
 | ||
| ```xml
 | ||
| <podcast:updateFrequency dtstart="2025-01-01T00:00:00.000Z" rrule="FREQ=WEEKLY">
 | ||
|     Weekly, starting in 2025
 | ||
| </podcast:updateFrequency>
 | ||
| ```
 | ||
| 
 | ||
| Complete podcasts with no intention to release further episodes:
 | ||
| ```xml
 | ||
| <podcast:updateFrequency complete="true">That’s all folks!</podcast:updateFrequency>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Podping
 | ||
| `<podcast:podping>`<br><br>
 | ||
| This element allows feed owners to signal to aggregators that the feed sends out
 | ||
| [`Podping`](https://github.com/Podcastindex-org/podping) notifications when changes are made to it, reducing the 
 | ||
| need for frequent speculative feed polling.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<channel>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Single
 | ||
| 
 | ||
| ## Examples
 | ||
| ```xml
 | ||
|  <podcast:podping usesPodping="true"/>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Value Time Split
 | ||
| `<podcast:valueTimeSplit>`<br><br>
 | ||
| This element allows different value splits for a certain period of time. It is a combination of the concept of 
 | ||
| <podcast:soundbite> and <podcast:remoteItem> where a start time and a duration is supplied with alternative value 
 | ||
| recipients. The alternative value recipients are not required to be remote, as the recipients may not have an RSS 
 | ||
| feed/item of their own to reference.
 | ||
| 
 | ||
| The `<podcast:valueTimeSplit>` element allows time-based changes of value recipient information during playback of a 
 | ||
| feed's enclosure content.
 | ||
| 
 | ||
| This can either contain one or more `<podcast:valueRecipient>` tags *or* exactly one `<podcast:remoteItem>` tag. If 
 | ||
| a `<podcast:remoteItem>` tag is present, the `remotePercentage` attribute can be defined to control how much the 
 | ||
| remote value block's `<podcast:valueRecipient>` tags will receive as a whole on top of the default, non-fee 
 | ||
| `<podcast:valueRecipient>` tags.
 | ||
| 
 | ||
| If the remote value block contains any `<podcast:valueTimeSplit>` tags, they should be ignored even if the 
 | ||
| `remoteStartTime` indicates it's in a position that would invoke them. When referencing a remote value block, only 
 | ||
| the root level block splits should be used and any `<podcast:valueTimeSplit>` children are to be ignored.
 | ||
| 
 | ||
| Fees from the default `<podcast:valueRecipient>` tags should remain to be calculated before anything is taken out 
 | ||
| from `<podcast:valueTimeSplit>`.
 | ||
| 
 | ||
| ### Parent
 | ||
|   `<podcast:value>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Multiple
 | ||
| 
 | ||
| ### Node Value
 | ||
|   A single `<podcast:remoteItem>` element OR one or more `<podcast:valueRecipient>` elements.
 | ||
| 
 | ||
| ### Attributes
 | ||
| - `startTime` (required) - The time, in seconds, to stop using the currently active value recipient information and 
 | ||
|   start using the value recipient information contained in this element.
 | ||
| - `duration` (required) - How many seconds the playback app should use this element's value recipient information 
 | ||
|   before switching back to the value recipient information of the parent feed.
 | ||
| - `remoteStartTime` (optional) - The time in the remote item where the value split begins.  Allows the timestamp to 
 | ||
|   be set correctly in value metadata.  If not defined, defaults to 0.
 | ||
| - `remotePercentage` (optional) - The percentage of the payment the remote recipients will receive if a 
 | ||
|   `<podcast:remoteItem>` is present.  If not defined, defaults to 100.  If the value is less than 0, 0 is assumed.  
 | ||
|   If the value is greater than 100, 100 is assumed.
 | ||
| 
 | ||
| ### Example (Remote Item)
 | ||
| ```xml
 | ||
| <rss xmlns:podcast="https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md" version="2.0">
 | ||
|    <channel>
 | ||
|       <title>Metal Showcase</title>
 | ||
|       <description>A great playlist of my favorite metal tracks.</description>
 | ||
|       <link>https://example.com/rss-metal-showcase.xml</link>
 | ||
|       <language>en</language>
 | ||
|       <pubDate>Fri, 21 Apr 2023 18:56:30 -0500</pubDate>
 | ||
|       <podcast:medium>music</podcast:medium>
 | ||
|       <item>
 | ||
|          <title>Special interview with Torcon VII</title>
 | ||
|          <otherTagsHere>...</otherTagsHere>
 | ||
|          <podcast:value type="lightning" method="keysend">
 | ||
|             <podcast:valueRecipient name="Alice (Podcaster)" type="node" address="02d5c1bf8b940dc9cadca86d1b0a3c37fbe39cee4c7e839e33bef9174531d27f52" split="95" />
 | ||
|             <podcast:valueRecipient name="Hosting Provider" type="node" address="03ae9f91a0cb8ff43840e3c322c4c61f019d8c1c3cea15a25cfc425ac605e61a4a" split="5" fee="true" />
 | ||
| 
 | ||
|             <podcast:valueTimeSplit startTime="60" duration="237" remotePercentage="95">
 | ||
|                <podcast:remoteItem itemGuid="https://podcastindex.org/podcast/4148683#1" feedGuid="a94f5cc9-8c58-55fc-91fe-a324087a655b" medium="music" />
 | ||
|             </podcast:valueTimeSplit>
 | ||
| 
 | ||
|             <podcast:valueTimeSplit startTime="330" duration="53" remoteStartTime="174" remotePercentage="95">
 | ||
|                <podcast:remoteItem itemGuid="https://podcastindex.org/podcast/4148683#3" feedGuid="a94f5cc9-8c58-55fc-91fe-a324087a655b" medium="music" />
 | ||
|             </podcast:valueTimeSplit>
 | ||
|          </podcast:value>
 | ||
|       </item>
 | ||
|    </channel>
 | ||
| </rss>
 | ||
| ```
 | ||
| 
 | ||
| ### Example (Locally Specified)
 | ||
| ```xml
 | ||
| <rss xmlns:podcast="https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md" version="2.0">
 | ||
|    <channel>
 | ||
|       <title>Cool Pod</title>
 | ||
|       <description>This is a cool pod</description>
 | ||
|       <link>https://example.com/rss-cool-pod.xml</link>
 | ||
|       <language>en</language>
 | ||
|       <pubDate>Fri, 21 Apr 2023 18:56:30 -0500</pubDate>
 | ||
|       <podcast:medium>podcast</podcast:medium>
 | ||
|       <item>
 | ||
|          <title>Adam Hates the word "pod" (and I do, too)</title>
 | ||
|          <otherTagsHere>...</otherTagsHere>
 | ||
|          <podcast:value type="lightning" method="keysend">
 | ||
|             <podcast:valueRecipient name="Alice (Podcaster)" type="node" address="02d5c1bf8b940dc9cadca86d1b0a3c37fbe39cee4c7e839e33bef9174531d27f52" split="95" />
 | ||
|             <podcast:valueRecipient name="Hosting Provider" type="node" address="03ae9f91a0cb8ff43840e3c322c4c61f019d8c1c3cea15a25cfc425ac605e61a4a" split="5" fee="true" />
 | ||
| 
 | ||
|             <podcast:valueTimeSplit startTime="63" duration="388">
 | ||
|                <podcast:valueRecipient name="Alice (Podcaster)" type="node" address="02d5c1bf8b940dc9cadca86d1b0a3c37fbe39cee4c7e839e33bef9174531d27f52" split="85" />
 | ||
|                <podcast:valueRecipient name="Jimbob (Guest)" type="node" address="02dd306e68c46681aa21d88a436fb35355a8579dd30201581cefa17cb179fc4c15" split="10" />
 | ||
|             </podcast:valueTimeSplit>
 | ||
| 
 | ||
|             <podcast:valueTimeSplit startTime="367" duration="246">
 | ||
|                <podcast:valueRecipient name="Alice (Podcaster)" type="node" address="02d5c1bf8b940dc9cadca86d1b0a3c37fbe39cee4c7e839e33bef9174531d27f52" split="85" />
 | ||
|                <podcast:valueRecipient name="Bobjim (Guest)" type="node" address="032f4ffbbafffbe51726ad3c164a3d0d37ec27bc67b29a159b0f49ae8ac21b8508" split="10" />
 | ||
|             </podcast:valueTimeSplit>
 | ||
|          </podcast:value>
 | ||
|       </item>
 | ||
|    </channel>
 | ||
| </rss>
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| <br><br><br><br><!-- Tag block -->
 | ||
| ## Chat
 | ||
| `<podcast:chat>`<br><br>
 | ||
| This element allows a podcaster to attach information to either the `<channel>`, `<item>` or `<podcast:liveItem>` about 
 | ||
| where the "official" chat for either the podcast or a specific episode or live event is to be found.  Just like 
 | ||
| `<podcast:socialInteract>` functions for social media, the `<podcast:chat>` tag will function for ephemeral chat. 
 | ||
| There are many protocols in use across the internet for chat based communication.  This tag is meant to be flexible 
 | ||
| enough to adapt to whichever protocol the podcaster wants to use.
 | ||
| 
 | ||
| This element's presence at a particular level governs how it should be treated.  If found at the `<item>` or 
 | ||
| `<podcast:liveItem>` level, this should be treated as the information for that specific episode, overriding what is 
 | ||
| at the `<channel>` level.  If this tag is found at the `<channel>` level, it would be considered the chat for the entire 
 | ||
| podcast and is recommended to be an "always on" chat room experience.
 | ||
| 
 | ||
| If a podcast has an "always on" style chat service it is recommended to link that at the `<channel>` level and do not
 | ||
| use the `<podcast:chat>` tag at the `<item>` or `<podcast:liveItem>` level.
 | ||
|  
 | ||
| ### Parent
 | ||
|   `<channel>` or `<item>` or `<podcast:liveItem>`
 | ||
| 
 | ||
| ### Count
 | ||
|   Single
 | ||
| 
 | ||
| ### Attributes
 | ||
| - `server` (required) The fqdn of a chat server that serves as the "bootstrap" server to connect to.
 | ||
| - `protocol` (required) The [protocol](chatprotocols.txt) in use on the server.
 | ||
| - `accountId` (recommended) The account id of the podcaster on the server or platform being connected to.
 | ||
| - `space` (optional) Some chat systems have a notion of a chat "space" or "room" or "topic". This attribute will serve
 | ||
|   that purpose.
 | ||
| 
 | ||
| ### Example (IRC):
 | ||
| ```xml
 | ||
| <podcast:chat 
 | ||
|     server="irc.zeronode.net" 
 | ||
|     protocol="irc" 
 | ||
|     accountId="@jsmith" 
 | ||
|     space="#myawesomepodcast" 
 | ||
| />
 | ||
| ```
 | ||
| 
 | ||
| ### Example (XMPP):
 | ||
| ```xml
 | ||
| <podcast:chat 
 | ||
|     server="jabber.example.com"
 | ||
|     protocol="xmpp"
 | ||
|     accountId="jsmith@jabber.example.org" 
 | ||
|     space="myawesomepodcast@jabber.example.org" 
 | ||
| />
 | ||
| ```
 | ||
| 
 | ||
| ### Example (Nostr):
 | ||
| ```xml
 | ||
| <podcast:chat 
 | ||
|     server="relay.example.com" 
 | ||
|     protocol="nostr" 
 | ||
|     accountId="npub1pvdw7mm7k20t9dn9gful8n5xua5yv8rmgd9wul88qq5dxj80lpxqd39r3u"
 | ||
|     space="#myawesomepodcast_episode129" 
 | ||
| />
 | ||
| ```
 | ||
| 
 | ||
| ### Example (Matrix):
 | ||
| ```xml
 | ||
| <podcast:chat 
 | ||
|     server="example.com"
 | ||
|     protocol="matrix"
 | ||
|     accountId="@bob:example.com"
 | ||
|     space="#general:example.com" 
 | ||
| />
 | ||
| ``` |