Skip to content

Releases: v8eta/clapparr

v1.3.0 — Clapparr

Choose a tag to compare

@v8eta v8eta released this 20 Aug 10:24

DVR NFO Generator is now Clapparr — the metadata slate for your DVR. New name, new clapperboard mark, same plugin.

  • Plugin key changes dvr_nfo_generatorclapparr (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

Choose a tag to compare

@v8eta v8eta released this 20 Aug 08:44

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 events list are dispatched from log_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 call close_old_connections() in a finally block, which the waiter already did.

No behavioural change beyond the masking.

v1.2.0

Choose a tag to compare

@v8eta v8eta released this 20 Aug 08:37

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

Choose a tag to compare

@v8eta v8eta released this 20 Aug 07:59

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 Authorization header and stripped from the URL before the request is built, so they cannot surface in a success line or in a urllib exception
  • 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

Choose a tag to compare

@v8eta v8eta released this 20 Aug 07:38

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.nfo and poster.jpg per 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.