@ -173,10 +173,8 @@ link. Please do not exceed `128 characters` for the node value or it may be tru
<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.
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
@ -207,8 +205,7 @@ requiring no additional work for the publisher.
`<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.
the soundbite is the audio/video given in the item's [`<enclosure>`](https://cyber.harvard.edu/rss/rss.html#ltenclosuregtSubelementOfLtitemgt) element.
### Parent
`<item>`
@ -292,8 +289,7 @@ characters` for the node value or it may be truncated by aggregators.
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.
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".
@ -363,7 +359,7 @@ verbiage (i.e. "Austin, TX"), but it shouldn't be depended on to be parseable in
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 (i.e. "geo:30.2672,97.7431").
- **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
@ -531,8 +527,7 @@ later be matched up with a `<podcast:season>4<podcast:season>` tag when it is pu
`<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
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
@ -542,8 +537,7 @@ what this tag is intended to accomplish.
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
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.
@ -565,14 +559,12 @@ exceed `128 characters` for the node value or it may be truncated by aggregators
<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
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
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
@ -681,8 +673,7 @@ every `<podcast:alternateEnclosure>` element.
<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
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
@ -711,10 +702,7 @@ This element defines a method of verifying integrity of the media given either a
`<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.
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
@ -764,8 +752,7 @@ different platforms.
`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.
A working example is https://podnews.net/podcast/i8xe9/listen#fastfollow-podcast:9b024349-ccf0-5f69-a609-6b82873eab3c or the QR code given below.
@ -788,8 +775,7 @@ 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 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
@ -828,8 +814,7 @@ 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
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
@ -1000,8 +985,7 @@ Example use for a "music" playlist feed:
## 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
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.
@ -1052,8 +1036,7 @@ All tags that are valid as children of a standard `<item>` tag are also valid as
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.
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
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
@ -1442,12 +1424,10 @@ do not exceed `128 characters` for the node value or it may be truncated by aggr
### 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
* **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).
* **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: