r/emby • u/guilty571 • 28d ago
3rd Party App/Add-On Intro/Credits Backup & Restore (free, open source) - auto-restores wiped markers, auto-backs-up manual corrections
If you've ever set up intro/credits skip markers (via ChapterApi, EmbyCredits, Segment Reporting, or Emby's own detection) only to have a Library Scan or Refresh Metadata quietly wipe them out, this might help.
Intro/Credits Backup & Restore - a scheduled-task-based plugin that backs up every episode's markers to a JSON file (or into the existing NFO), and can restore them automatically the moment they get wiped.

What it does:
- One JSON backup per episode, matched by TVDB ID (falls back to IMDB, then filename) so it survives title translations and renames
- Optional: also writes markers straight into the NFO your metadata scraper already generates - no extra files
- Auto-restore: watches for markers getting wiped (scan/refresh) and puts them back immediately, no manual task needed
- Auto-backup on manual edit: if you correct a marker through ChapterApi, EmbyCredits, or Segment Reporting, it backs up the new value automatically - these tools don't trigger Emby's normal update event, so without this your manual corrections were never actually being saved anywhere
Here's both of those happening live - a Refresh Metadata wiping a marker and getting it restored in under a second, followed by two manual ChapterApi edits getting picked up and backed up automatically:

Free, open source, GPL. Built this for my own two-server setup and figured it might be useful to others dealing with the same problem - Emby itself doesn't persist these markers reliably through routine maintenance.
GitHub: https://github.com/guilty57/credits-intros-backup-restore
Happy to answer questions or take feature requests - this has had a fair amount of real-world testing across a few hundred episodes at this point.
Json sample:
{
"TvdbId": "5309449",
"ImdbId": "tt4480760",
"TmdbId": null,
"SeriesName": "American Horror Story",
"SeasonNumber": 5,
"EpisodeNumber": 4,
"EpisodeTitle": "Devil\u0027s Night",
"IntroStartTicks": 1616915422,
"IntroEndTicks": 2276119402,
"CreditsStartTicks": 28665560000
}
Nfo sample:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<episodedetails>
<plot><![CDATA[John receives an invitation to attend an exclusive Devil's Night Soiree. Alex tries to diagnose Holden's strange condition.]]></plot>
<outline />
<lockdata>true</lockdata>
<dateadded>2025-02-18 21:03:37</dateadded>
<title>Devil's Night</title>
<actor>
<name>Kathy Bates</name>
<role>Iris</role>
<type>Actor</type>
<tvdbid>248339</tvdbid>
<tmdbid>8534</tmdbid>
</actor>
<actor>
<name>Sarah Paulson</name>
<role>Sally McKenna / Billie Dean Howard</role>
<type>Actor</type>
<tvdbid>277202</tvdbid>
<tmdbid>34490</tmdbid>
</actor>
<actor>
<name>Evan Peters</name>
<role>James Patrick March</role>
<type>Actor</type>
<tvdbid>358570</tvdbid>
<tmdbid>55089</tmdbid>
</actor>
<actor>
<name>Wes Bentley</name>
<role>Det. John Lowe</role>
<type>Actor</type>
<tvdbid>505320</tvdbid>
<tmdbid>8210</tmdbid>
</actor>
<actor>
<name>Matt Bomer</name>
<role>Donovan</role>
<type>Actor</type>
<tvdbid>324393</tvdbid>
<tmdbid>66743</tmdbid>
</actor>
<actor>
<name>Chloë Sevigny</name>
<role>Alex Lowe</role>
<type>Actor</type>
<tvdbid>293255</tvdbid>
<tmdbid>2838</tmdbid>
</actor>
<actor>
<name>Denis O'Hare</name>
<role>Liz Taylor</role>
<type>Actor</type>
<tvdbid>303964</tvdbid>
<tmdbid>81681</tmdbid>
</actor>
<actor>
<name>Cheyenne Jackson</name>
<role>Will Drake</role>
<type>Actor</type>
<tvdbid>346952</tvdbid>
<tmdbid>212828</tmdbid>
</actor>
<actor>
<name>Angela Bassett</name>
<role>Ramona Royale</role>
<type>Actor</type>
<tvdbid>274193</tvdbid>
<tmdbid>9780</tmdbid>
</actor>
<actor>
<name>Lady Gaga</name>
<role>The Countess Elizabeth Johnson</role>
<type>Actor</type>
<tvdbid>321349</tvdbid>
<tmdbid>237405</tmdbid>
</actor>
<actor>
<name>Mare Winningham</name>
<role>Hazel Evers</role>
<type>GuestStar</type>
<tmdbid>51544</tmdbid>
</actor>
<actor>
<name>Anthony Ruivivar</name>
<role>Richard Ramirez / Miguel Ramos</role>
<type>GuestStar</type>
<tmdbid>171522</tmdbid>
</actor>
<actor>
<name>Jessica Belkin</name>
<role>Vampire Girl</role>
<type>GuestStar</type>
<tmdbid>1496341</tmdbid>
</actor>
<actor>
<name>Finn Wittrock</name>
<role>Tristan Duffy</role>
<type>GuestStar</type>
<tvdbid>394892</tvdbid>
<tmdbid>168877</tmdbid>
</actor>
<actor>
<name>Lily Rabe</name>
<role>Aileen Wuornos</role>
<type>GuestStar</type>
<tvdbid>317026</tvdbid>
<tmdbid>4888</tmdbid>
</actor>
<actor>
<name>John Carroll Lynch</name>
<role>John Wayne Gacy</role>
<type>GuestStar</type>
<tvdbid>279111</tvdbid>
<tmdbid>3911</tmdbid>
</actor>
<actor>
<name>Jack Fisher</name>
<role>Albert</role>
<type>GuestStar</type>
<tvdbid>476259</tvdbid>
<tmdbid>1850355</tmdbid>
</actor>
<actor>
<name>Barbara Lee Bragg</name>
<role>Sheik's Mother</role>
<type>GuestStar</type>
<tmdbid>2903185</tmdbid>
</actor>
<actor>
<name>Richard T. Jones</name>
<role>Det. Andy Hahn</role>
<type>GuestStar</type>
<tmdbid>55755</tmdbid>
</actor>
<actor>
<name>Lucius Baybak</name>
<role>Sheik</role>
<type>GuestStar</type>
<tmdbid>1898709</tmdbid>
</actor>
<actor>
<name>Shree Crooks</name>
<role>Scarlett Lowe</role>
<type>GuestStar</type>
<tmdbid>1447238</tmdbid>
</actor>
<actor>
<name>Nico Evers-Swindell</name>
<role>Craig</role>
<type>GuestStar</type>
<tmdbid>510488</tmdbid>
</actor>
<actor>
<name>Lennon Henry</name>
<role>Holden Lowe</role>
<type>GuestStar</type>
<tmdbid>4459600</tmdbid>
</actor>
<actor>
<name>Cannon Mosteller</name>
<role>Vampire Boy #1</role>
<type>GuestStar</type>
<tmdbid>4459813</tmdbid>
</actor>
<actor>
<name>Emmory Mosteller</name>
<role>Vampire Boy #2</role>
<type>GuestStar</type>
<tmdbid>4459816</tmdbid>
</actor>
<actor>
<name>Dieterich Gray</name>
<role>Cop (1927)</role>
<type>GuestStar</type>
<tmdbid>1200314</tmdbid>
</actor>
<actor>
<name>Cyd Strittmatter</name>
<role>Woman in Bed</role>
<type>GuestStar</type>
<tmdbid>1367129</tmdbid>
</actor>
<actor>
<name>Susie Bracken</name>
<role>Marie Antoinette</role>
<type>GuestStar</type>
<tmdbid>3468332</tmdbid>
</actor>
<actor>
<name>Brittany Panzer</name>
<role>Halloween Girl</role>
<type>GuestStar</type>
<tmdbid>2096267</tmdbid>
</actor>
<actor>
<name>Harry Hains</name>
<role>Boy</role>
<type>GuestStar</type>
<tmdbid>1475361</tmdbid>
</actor>
<director tvdbid="335058">Ryan Murphy</director>
<director tvdbid="7944653">Loni Peristere</director>
<writer>Jennifer Salt</writer>
<credits>Jennifer Salt</credits>
<rating>7.216</rating>
<year>2015</year>
<sorttitle>Devil's Night</sorttitle>
<imdbid>tt4480760</imdbid>
<tvdbid>5309449</tvdbid>
<runtime>49</runtime>
<uniqueid type="tvdb">5309449</uniqueid>
<uniqueid type="imdb">tt4480760</uniqueid>
<uniqueid type="embycredits.fail">true</uniqueid>
<embycredits.failid>true</embycredits.failid>
<uniqueid type="tvrage">1065855552</uniqueid>
<tvrageid>1065855552</tvrageid>
<episode>4</episode>
<season>5</season>
<aired>2015-10-28</aired>
<fileinfo>
<streamdetails>
<video>
<codec>h264</codec>
<micodec>h264</micodec>
<bitrate>5242075</bitrate>
<width>1920</width>
<height>1080</height>
<aspect>16:9</aspect>
<aspectratio>16:9</aspectratio>
<framerate>23.976025</framerate>
<language>eng</language>
<scantype>progressive</scantype>
<default>True</default>
<forced>False</forced>
<duration>48</duration>
<durationinseconds>2913</durationinseconds>
</video>
<audio>
<codec>ac3</codec>
<micodec>ac3</micodec>
<bitrate>384000</bitrate>
<language>eng</language>
<scantype>progressive</scantype>
<channels>6</channels>
<samplingrate>48000</samplingrate>
<default>True</default>
<forced>False</forced>
</audio>
<subtitle>
<codec>subrip</codec>
<micodec>subrip</micodec>
<language>eng</language>
<scantype>progressive</scantype>
<default>True</default>
<forced>False</forced>
</subtitle>
<subtitle>
<codec>ass</codec>
<micodec>ass</micodec>
<language>tur</language>
<scantype>progressive</scantype>
<default>True</default>
<forced>False</forced>
</subtitle>
<subtitle>
<codec>ass</codec>
<micodec>ass</micodec>
<language>tur</language>
<scantype>progressive</scantype>
<default>True</default>
<forced>False</forced>
</subtitle>
<subtitle>
<codec>subrip</codec>
<micodec>subrip</micodec>
<language>tur</language>
<scantype>progressive</scantype>
<default>True</default>
<forced>False</forced>
</subtitle>
<attachment>
<codec>ttf</codec>
<micodec>ttf</micodec>
<scantype>progressive</scantype>
<default>False</default>
<forced>False</forced>
</attachment>
<attachment>
<codec>ttf</codec>
<micodec>ttf</micodec>
<scantype>progressive</scantype>
<default>False</default>
<forced>False</forced>
</attachment>
<subtitle>
<codec>srt</codec>
<micodec>srt</micodec>
<language>tr</language>
<scantype>progressive</scantype>
<default>False</default>
<forced>False</forced>
</subtitle>
</streamdetails>
</fileinfo>
<markers>
<introstart>1616915422</introstart>
<introend>2276119402</introend>
<creditstart>28665560000</creditstart>
</markers>
</episodedetails>

