Releases: v8eta/clapparr
Release list
v1.3.0 — Clapparr
DVR NFO Generator is now Clapparr — the metadata slate for your DVR. New name, new clapperboard mark, same plugin.
- Plugin key changes
dvr_nfo_generator→clapparr(the key is the install folder name). Fresh installs just work; an existing install keeps working under the old key, or reinstall under the new one and re-enter settings. - 512×512 logo now ships in the plugin folder and shows on the Dispatcharr plugin card.
- Condensed registry-card README added under
registry/. - No behavioural change from v1.2.1. All 47 tests pass.
Old release URLs keep working — GitHub redirects the renamed repository.
v1.2.1
Documentation-verification pass against the Plex, Dispatcharr and autopulse sources.
- Secret fields are now masked. Dispatcharr supports
input_type: "password"on string fields (documented in Plugins.md); the Plex token and the extra webhook header were plain text inputs and are now masked. - Event timing confirmed against the official docs. Actions with an
eventslist are dispatched fromlog_system_event()on a separate gevent under uWSGI, but synchronously under Celery. Recording runs on a Celery worker, so the handler is called in-line with the recording task — the deadlock this plugin avoids by handing off to a thread is real, not theoretical. The same docs require any spawned thread to callclose_old_connections()in afinallyblock, which the waiter already did.
No behavioural change beyond the masking.
v1.2.0
Two fixes that both came out of testing rather than assumption.
Sidecars now match their directory's ownership
Dispatcharr's container runs as root, so every sidecar landed root-owned beside media belonging to the media user. Everything still reads, which is why this goes unnoticed — but tooling running as that user cannot later move or delete the sidecars it is meant to manage.
Each file the plugin writes now takes the ownership of the directory holding it. Best effort: it silently does nothing on an unprivileged container, a non-POSIX filesystem, or NFS with a squashed root.
Optional Plex artwork refresh
A Plex library scan re-reads episode NFOs but ignores a show's poster.jpg, so a changed poster is served stale indefinitely. Measured in both directions:
| Change | Path-scoped scan | PUT /library/metadata/{key}/refresh?force=1 |
|---|---|---|
Episode .nfo (title, summary) |
picked up | not needed |
Show poster.jpg |
ignored | required |
Set Plex base URL and Plex token and the plugin issues that refresh itself — once per show, and only when a poster was actually written. The show is matched by title across TV-type sections; an unmatched show is skipped with a log line rather than refreshing the wrong one. A new Refresh show artwork in Plex action sweeps the whole library on demand.
Leave both blank and the plugin never talks to Plex. The token is sent as a header, never in a URL, and is kept out of the log.
Tests
test_ownership_plex.py joins the suite — 12 cases covering ownership matching, the ratingKey lookup and its caching, token handling, unknown shows, unconfigured Plex, and an unreachable server. 47 tests across the three files.
v1.1.0
Adds a post-write webhook.
The plugin can now call a URL once per recording, after that recording's sidecars are written — so a scan relay such as autopulse can rescan just that path instead of the whole library. It fires only when something actually changed, so a no-op sweep over an already complete library does not spray the receiver.
- Placeholders
{path}{dir}{file}{show}; GET or JSON POST; optional extra header - Path-prefix rewrite, because Dispatcharr writes to its own container paths and the media server generally knows the file by another
- Credentials given in the URL are moved into an
Authorizationheader and stripped from the URL before the request is built, so they cannot surface in a success line or in aurllibexception - New Test the webhook action, to check the URL and rewrite against a real recording without waiting for one to finish
Example for autopulse:
http://user:pass@autopulse:2875/triggers/manual?path={path}
Scan vs metadata refresh (measured against Plex, correcting an earlier over-broad note): a path-scoped scan does re-read an episode .nfo, so the webhook alone keeps episode titles and summaries current. Show-level poster.jpg is the exception — a scan ignores it and it needs a forced per-item metadata refresh. That case is rare, since a show poster is fetched once.
v1.0.0
First release.
Writes Kodi/Plex NFO sidecars, posters and episode thumbnails for Dispatcharr DVR recordings, from metadata Dispatcharr already stores on the Recording.
<episodedetails>per recording,tvshow.nfoandposter.jpgper show, optional episode thumbnail- Runs automatically on
recording_end, plus manual Generate / Regenerate / Preview actions - Daily programmes with no EPG sub-title fall back to an air-date title (
Wednesday 19 August 2026) instead of repeating the show name - Guarded TVmaze artwork fallback for variant show titles, with word-prefix matching, a coverage threshold, and ambiguous ties refused
Install via the Dispatcharr plugin browser, or upload the ZIP under Plugins to Import.
Requires Dispatcharr v0.20.0+. Plex users: set the library agent to Plex TV Series Agent (NFO) — and note Plex takes the episode index from the filename, so recordings must be named with SxxExx.