[Bug]: Possible issue with podcast chapters and manually downloaded episodes #3257

Open
opened 2026-04-25 00:14:33 +02:00 by adam · 9 comments
Owner

Originally created by @badnetmask on GitHub (Mar 8, 2026).

What happened?

I could see the podcast episode chapters when I played the episode after it was downloaded automatically during scheduled refresh. But deleting the episode then manually downloading it again does not bring the chapters.

What did you expect to happen?

I would expect to have chapters.

Steps to reproduce the issue

  1. Podcast episode was automatically downloaded during scheduled feed refresh.
  2. I played the episodes, and I could see the chapters.
  3. I deleted the episode from the server, went into "Find episodes", downloaded the same episode again.
  4. The episode plays, but there are no chapters

Audiobookshelf version

2.32.1

How are you running audiobookshelf?

Docker

What OS is your Audiobookshelf server hosted from?

Linux

If the issue is being seen in the UI, what browsers are you seeing the problem on?

Other (list in "Additional Notes" box)

Logs


Additional Notes

The problem happens both in the web UI (Chrome) and the Android Audiobookshelf official app (v0.12.0-beta).

Originally created by @badnetmask on GitHub (Mar 8, 2026). ### What happened? I could see the podcast episode chapters when I played the episode after it was downloaded automatically during scheduled refresh. But deleting the episode then manually downloading it again does not bring the chapters. ### What did you expect to happen? I would expect to have chapters. ### Steps to reproduce the issue 1. Podcast episode was automatically downloaded during scheduled feed refresh. 2. I played the episodes, and I could see the chapters. 3. I deleted the episode from the server, went into "Find episodes", downloaded the same episode again. 4. The episode plays, but there are no chapters ### Audiobookshelf version 2.32.1 ### How are you running audiobookshelf? Docker ### What OS is your Audiobookshelf server hosted from? Linux ### If the issue is being seen in the UI, what browsers are you seeing the problem on? Other (list in "Additional Notes" box) ### Logs ```shell ``` ### Additional Notes The problem happens both in the web UI (Chrome) and the Android Audiobookshelf official app (v0.12.0-beta).
adam added the bug label 2026-04-25 00:14:33 +02:00
Author
Owner

@nichwall commented on GitHub (Mar 8, 2026):

What was the podcast link and episode? Did the episodes get removed from the file by the RSS feed (meaning if you use ffprobe on the downloaded file, do any chapters show up)?

@nichwall commented on GitHub (Mar 8, 2026): What was the podcast link and episode? Did the episodes get removed from the file by the RSS feed (meaning if you use ffprobe on the downloaded file, do any chapters show up)?
Author
Owner

@badnetmask commented on GitHub (Mar 9, 2026):

This is the RSS feed. The episode was 645. The chapters are provided by the "podcast:chapters" tag. It was automatically downloaded by the scheduled task, and I was able to see the chapters. Today I click on the X next to the episode, selected "Hard Delete" then "Remove". Then I went to the magnifying glass, find the episode, selected to download, and now it doesn't have the chapters.

@badnetmask commented on GitHub (Mar 9, 2026): [This is the RSS feed](https://linuxunplugged.com/rss). The episode was 645. The chapters are provided by the "podcast:chapters" tag. It was automatically downloaded by the scheduled task, and I was able to see the chapters. Today I click on the X next to the episode, selected "Hard Delete" then "Remove". Then I went to the magnifying glass, find the episode, selected to download, and now it doesn't have the chapters.
Author
Owner

@nichwall commented on GitHub (Mar 9, 2026):

Thanks for the additional information.

I was unable to recreate this issue using the automatic episode download (set it to download 15 episodes to make sure I included that episode). The automatically downloaded episode did not include chapters. I then deleted the episode and manually downloaded it using the Find Episodes menu, which also did not have chapter information.

Are you sure you had chapter data available and it was not just the chapter track being visible at full episode duration (due there being no chapter information)?

Screenshot from Android below.
Screenshot_20260308-192326.png

I do see the chapter information in the RSS feed as a link, but I don't think the server downloads chapter information from a separate URL. I could be wrong, I don't listen to podcasts so I may be missing something there.

@nichwall commented on GitHub (Mar 9, 2026): Thanks for the additional information. I was unable to recreate this issue using the automatic episode download (set it to download 15 episodes to make sure I included that episode). The automatically downloaded episode did not include chapters. I then deleted the episode and manually downloaded it using the Find Episodes menu, which also did not have chapter information. Are you sure you had chapter data available and it was not just the chapter track being visible at full episode duration (due there being no chapter information)? Screenshot from Android below. ![Screenshot_20260308-192326.png](https://github.com/user-attachments/assets/c243f622-98ad-47ec-abe2-fb1fc82965df) I do see the chapter information in the RSS feed as a link, but I don't think the server downloads chapter information from a separate URL. I could be wrong, I don't listen to podcasts so I may be missing something there.
Author
Owner

@nichwall commented on GitHub (Mar 9, 2026):

Copying and pasting some relevant information here in case it is helpful in the future (excluding the description and such because it is a lot of text that makes it harder to read).

<item>
  <podcast:episode>635</podcast:episode>
  <itunes:episode>635</itunes:episode>
  <title>635: The Texas Linux Fest Special</title>
  <link>https://linuxunplugged.com/635</link>
  <guid isPermaLink="false">08a0780e-c979-41e1-bdd1-016fca89a405</guid>
  <pubDate>Sun, 05 Oct 2025 19:25:37 -0700</pubDate>
  <author>Jupiter Broadcasting</author>
  <enclosure url="https://rss.art19.com/episodes/ad5a7d39-f386-4e84-8ff8-4261ea432b26.mp3?rss_browser=BAhJIgljdXJsBjoGRVQ%3D--435795d5c850773aaa4739d968bd77a1dfd6f301" length="86444408" type="audio/mpeg"/>
  <itunes:episodeType>full</itunes:episodeType>
  <itunes:author>Jupiter Broadcasting</itunes:author>
  <itunes:subtitle>
    Our cross-continent race to Texas Linux Fest culminates into fantastic meat, meetups, and more.
  </itunes:subtitle>
  <itunes:duration>01:30:02</itunes:duration>
  <itunes:explicit>no</itunes:explicit>
  <description>
    <p>Our...</p>
  </description>
  <itunes:keywords>
    Jupiter Broadcasting, Linux Podcast, Linux Unplugged, open source, Texas Linux Fest, TXLF, race to Texas, race, meetup, Texas Tracker, Dawarich, live tracker, Moose vs Bogfoot, Moose FTW, Chainguard, meshSidecar, Fake Boost, fake sats, Config Confessions, Buc-ees Boost, isd, systemd, Dustin Kirkland
  </itunes:keywords>
  <content:encoded>
    <p>Our ...</p>
  </content:encoded>
  <itunes:summary>
    <p>Our...</p>
  </itunes:summary>
  <podcast:chapters url="https://feeds.jupiterbroadcasting.com/chapters/lup/08a0780e-c979-41e1-bdd1-016fca89a405.json" type="application/json"/>
  <podcast:person group="cast" role="host" href="https://chrislas.com" img="https://www.jupiterbroadcasting.com/images/people/chris.jpg">Chris Fisher</podcast:person>
  <podcast:person group="cast" role="host" href="https://www.jupiterbroadcasting.com/hosts/wes" img="https://www.jupiterbroadcasting.com/images/people/wes.jpg">Wes Payne</podcast:person>
  <podcast:person group="cast" role="host" href="https://www.jupiterbroadcasting.com/hosts/brent/" img="https://www.jupiterbroadcasting.com/images/people/brent.jpg">Brent Gervais</podcast:person>
  <podcast:person group="Audio Post-Production" role="Audio Editor" href="https://linktr.ee/drewofdoom" img="https://www.jupiterbroadcasting.com/images/people/drew-devore.jpg">Drew DeVore</podcast:person>
  <podcast:transcript type="text/vtt" language="en-us" rel="captions" url="https://feeds.jupiterbroadcasting.com/transcripts/lup/08a0780e-c979-41e1-bdd1-016fca89a405.vtt"/>
  <podcast:transcript type="application/x-subrip" language="en-us" rel="captions" url="https://feeds.jupiterbroadcasting.com/transcripts/lup/08a0780e-c979-41e1-bdd1-016fca89a405.srt"/>
</item>

The relevant chapter section:

<podcast:chapters url="https://feeds.jupiterbroadcasting.com/chapters/lup/08a0780e-c979-41e1-bdd1-016fca89a405.json" type="application/json"/>

Which provides the following JSON

{"version":"1.1.0","author":"Jupiter Broadcasting","title":"635: The Texas Linux Fest Special","podcastName":"LINUX Unplugged","chapters":[{"startTime":0,"title":"Intro"},{"startTime":100,"title":"Texas Trackin'"},{"startTime":1684,"title":"The Tide Turns"},{"startTime":2148,"title":"Fest-ivities"},{"startTime":3310,"title":"Blowing Out the Candles"},{"startTime":3729,"title":"Cross-Country Caravan"},{"startTime":3944,"title":"Shout-outs"},{"startTime":5146,"title":"Pick"},{"startTime":5299,"title":"Outro"}]}
@nichwall commented on GitHub (Mar 9, 2026): Copying and pasting some relevant information here in case it is helpful in the future (excluding the description and such because it is a lot of text that makes it harder to read). ```xml <item> <podcast:episode>635</podcast:episode> <itunes:episode>635</itunes:episode> <title>635: The Texas Linux Fest Special</title> <link>https://linuxunplugged.com/635</link> <guid isPermaLink="false">08a0780e-c979-41e1-bdd1-016fca89a405</guid> <pubDate>Sun, 05 Oct 2025 19:25:37 -0700</pubDate> <author>Jupiter Broadcasting</author> <enclosure url="https://rss.art19.com/episodes/ad5a7d39-f386-4e84-8ff8-4261ea432b26.mp3?rss_browser=BAhJIgljdXJsBjoGRVQ%3D--435795d5c850773aaa4739d968bd77a1dfd6f301" length="86444408" type="audio/mpeg"/> <itunes:episodeType>full</itunes:episodeType> <itunes:author>Jupiter Broadcasting</itunes:author> <itunes:subtitle> Our cross-continent race to Texas Linux Fest culminates into fantastic meat, meetups, and more. </itunes:subtitle> <itunes:duration>01:30:02</itunes:duration> <itunes:explicit>no</itunes:explicit> <description> <p>Our...</p> </description> <itunes:keywords> Jupiter Broadcasting, Linux Podcast, Linux Unplugged, open source, Texas Linux Fest, TXLF, race to Texas, race, meetup, Texas Tracker, Dawarich, live tracker, Moose vs Bogfoot, Moose FTW, Chainguard, meshSidecar, Fake Boost, fake sats, Config Confessions, Buc-ees Boost, isd, systemd, Dustin Kirkland </itunes:keywords> <content:encoded> <p>Our ...</p> </content:encoded> <itunes:summary> <p>Our...</p> </itunes:summary> <podcast:chapters url="https://feeds.jupiterbroadcasting.com/chapters/lup/08a0780e-c979-41e1-bdd1-016fca89a405.json" type="application/json"/> <podcast:person group="cast" role="host" href="https://chrislas.com" img="https://www.jupiterbroadcasting.com/images/people/chris.jpg">Chris Fisher</podcast:person> <podcast:person group="cast" role="host" href="https://www.jupiterbroadcasting.com/hosts/wes" img="https://www.jupiterbroadcasting.com/images/people/wes.jpg">Wes Payne</podcast:person> <podcast:person group="cast" role="host" href="https://www.jupiterbroadcasting.com/hosts/brent/" img="https://www.jupiterbroadcasting.com/images/people/brent.jpg">Brent Gervais</podcast:person> <podcast:person group="Audio Post-Production" role="Audio Editor" href="https://linktr.ee/drewofdoom" img="https://www.jupiterbroadcasting.com/images/people/drew-devore.jpg">Drew DeVore</podcast:person> <podcast:transcript type="text/vtt" language="en-us" rel="captions" url="https://feeds.jupiterbroadcasting.com/transcripts/lup/08a0780e-c979-41e1-bdd1-016fca89a405.vtt"/> <podcast:transcript type="application/x-subrip" language="en-us" rel="captions" url="https://feeds.jupiterbroadcasting.com/transcripts/lup/08a0780e-c979-41e1-bdd1-016fca89a405.srt"/> </item> ``` The relevant chapter section: ``` <podcast:chapters url="https://feeds.jupiterbroadcasting.com/chapters/lup/08a0780e-c979-41e1-bdd1-016fca89a405.json" type="application/json"/> ``` Which provides the following JSON ```json {"version":"1.1.0","author":"Jupiter Broadcasting","title":"635: The Texas Linux Fest Special","podcastName":"LINUX Unplugged","chapters":[{"startTime":0,"title":"Intro"},{"startTime":100,"title":"Texas Trackin'"},{"startTime":1684,"title":"The Tide Turns"},{"startTime":2148,"title":"Fest-ivities"},{"startTime":3310,"title":"Blowing Out the Candles"},{"startTime":3729,"title":"Cross-Country Caravan"},{"startTime":3944,"title":"Shout-outs"},{"startTime":5146,"title":"Pick"},{"startTime":5299,"title":"Outro"}]} ```
Author
Owner

@badnetmask commented on GitHub (Mar 9, 2026):

Here's a screenshot from episode 646 (which was automatically downloaded by the scheduler).
Screenshot_20260308-223218.png

@badnetmask commented on GitHub (Mar 9, 2026): Here's a screenshot from episode 646 (which was automatically downloaded by the scheduler). ![Screenshot_20260308-223218.png](https://github.com/user-attachments/assets/dfc7e4cb-7683-4055-b212-0fcfd078b8e0)
Author
Owner

@nichwall commented on GitHub (Mar 9, 2026):

Thanks for the screenshot. I am not seeing that on server v2.32.1

@nichwall commented on GitHub (Mar 9, 2026): Thanks for the screenshot. I am not seeing that on server v2.32.1
Author
Owner

@badnetmask commented on GitHub (Mar 9, 2026):

Well, not sure what else I can say, other than that's the version I'm running (as stated in the original report).

@badnetmask commented on GitHub (Mar 9, 2026): Well, not sure what else I can say, other than that's the version I'm running (as stated in the original report).
Author
Owner

@badnetmask commented on GitHub (Mar 9, 2026):

So, episode 657 was downloaded by the scheduler overnight, and even though the chapters tag is in the feed, there are no tags in ABS.

I looked at the episode history, and episode 654 (Feb, 15) was the last one which ABS detected the chapters correctly, then 655 (Feb, 22) doesn't have them.

I updated the docker image from 2.31.0 to 2.32.1 on Dec 27, so I don't really know what could have changed after that.

@badnetmask commented on GitHub (Mar 9, 2026): So, episode 657 was downloaded by the scheduler overnight, and even though the chapters tag is in the feed, there are no tags in ABS. I looked at the episode history, and episode 654 (Feb, 15) was the last one which ABS detected the chapters correctly, then 655 (Feb, 22) doesn't have them. I updated the docker image from 2.31.0 to 2.32.1 on Dec 27, so I don't really know what could have changed after that.
Author
Owner

@badnetmask commented on GitHub (Mar 20, 2026):

Update: I have another podcast for which a new episode was auto-downloaded today, and the chapters work.
https://bitflip.show/rss.xml
When I initially downloaded episode 1 manually, I did not have chapters, but this morning episode 2 was automatically downloaded by the scheduler, and the chapters are working.
So there is some inconsistency between the auto download and the manual download.

@badnetmask commented on GitHub (Mar 20, 2026): Update: I have another podcast for which a new episode was auto-downloaded today, and the chapters work. https://bitflip.show/rss.xml When I initially downloaded episode 1 manually, I did not have chapters, but this morning episode 2 was automatically downloaded by the scheduler, and the chapters are working. So there is some inconsistency between the auto download and the manual download.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/audiobookshelf#3257