From 88da7c72f0c9f0b4ef8ae0b89cf4f856637e64bd Mon Sep 17 00:00:00 2001 From: Quick <31828688+Quick104@users.noreply.github.com> Date: Mon, 31 Aug 2026 14:35:43 -0400 Subject: [PATCH 01/16] docs: standardize contribution guidance (#8) * docs: standardize contribution guidance * docs: address review feedback * docs: address review feedback --- .gitignore | 4 +++- AGENTS.md | 15 +++++++++++++++ CLAUDE.md | 1 + CONTRIBUTING.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 AGENTS.md create mode 120000 CLAUDE.md create mode 100644 CONTRIBUTING.md diff --git a/.gitignore b/.gitignore index d866a3c..3a0fc57 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,9 @@ logs/ .env.* !.env.example .DS_Store -.claude/ +# Local agent/tooling state +/.agents/ +/.claude/ .codex/ .cursor/ .worktrees/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..d8580aa --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,15 @@ +# Agent instructions + +Read [README.md](README.md) and [CONTRIBUTING.md](CONTRIBUTING.md) before working here; they define this repository's ownership, build, and validation rules. + +## Writing + +Give human-facing prose a final readability pass. Lead with the outcome, use concrete plain language and active voice, and cut filler, stock framing, repetition, and promotional claims. Preserve meaning, evidence, citations, uncertainty, and established terminology. Never rewrite exact quotations, commands, logs, identifiers, API names, or contractual language. Match the audience and use restrained formatting. + +## Pull requests + +- Never create a pull request unless the developer explicitly asks. +- Use a plain-language Conventional Commit title. In the body, explain the problem before the solution and end with the required AI disclosure, naming the exact model, harness, and tooling used. +- For UI changes, include before-and-after evidence and a video for motion or timing behavior. Upload pull-request evidence to GitHub; never commit PR-only assets such as `.github/pr-assets`. +- Keep one concern per pull request. If the description needs the word "also" for another change, split it. +- When babysitting a pull request, poll for checks and comments newer than the last push. Verify bot findings against the source, fix real issues, and dismiss false positives with a written reason. Stay quiet when nothing is new, and stop when the latest commit is green. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 120000 index 0000000..47dc3e3 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..09a93ad --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,49 @@ +# Contributing to the Silo Plugin Catalog + +The [Silo contribution guide](https://github.com/Silo-Server/.github/blob/main/CONTRIBUTING.md) +covers project-wide coordination, focused changes, evidence, AI disclosure, and +pull request expectations. Those requirements apply here; this guide adds the +catalog-specific workflow. + +## Before you start + +Open an [issue](https://github.com/Silo-Server/silo-plugins/issues) before +changing catalog schema, provenance rules, release ingestion, or automation. +Plugin implementation changes belong in the individual plugin repository; +plugin contract changes belong in +[`silo-plugin-sdk`](https://github.com/Silo-Server/silo-plugin-sdk). + +Release entries are normally generated from a plugin's published GitHub release +by the catalog workflows. Do not hand-edit checksums or release metadata to work +around a missing or incorrect upstream artifact. + +## Development setup + +Use the Go version declared in `go.mod`. The update command reads release assets +from GitHub, so use a real tagged release when testing ingestion and never place +tokens in command arguments, committed files, or logs. + +## Validate your change + +```sh +go test ./... +go vet ./... +go build ./... +gofmt -l . +``` + +`gofmt -l .` should print nothing. If it reports unrelated pre-existing drift, +none of the Go files touched by your change may appear in the output; do not add +to the output, and report what remains. For catalog output changes, inspect the +complete `manifest.json` diff and verify repository URLs, versions, platforms, +the checksum URL, capabilities, and presentation metadata against the source +release. The catalog stores a URL for `checksums.txt`, not the checksum values +themselves, so also confirm that the release asset exists and covers every +published binary. + +## Open the pull request + +Use a Conventional Commit title, explain the catalog or automation impact, and +paste the actual validation results. Read the +[AI-assisted contribution policy](https://github.com/Silo-Server/silo-server/blob/main/docs/ai-contributions.md) +and include its disclosure block. diff --git a/README.md b/README.md index 4fae131..b1f3c1e 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,11 @@ Catalog metadata and helpers for first-party Silo plugins. +Silo servers consume the generated `manifest.json` to discover approved plugin +releases, supported platforms, checksums, capabilities, and presentation +metadata. Source plugin repositories remain the authority for implementation +and release artifacts. + ## Catalog updates Plugin repositories should dispatch `plugin_release_published` after publishing @@ -12,6 +17,33 @@ call `repository_dispatch` on `Silo-Server/silo-plugins`. repositories are private, also set `CATALOG_SOURCE_TOKEN` in `silo-plugins` so the updater can read release metadata and the tagged `manifest.json`. +To exercise ingestion locally against an existing tagged release, pass the +repository in `owner/name` form and the exact release tag: + +```sh +go run ./cmd/update-catalog \ + -repo Silo-Server/silo-plugin-metadata-tmdb \ + -tag v1.2.23 +``` + +For a private source repository, provide `GITHUB_TOKEN` through your normal +secret-injection workflow. The command rewrites `manifest.json`; review or +discard that diff after the check. + +## Development + +```sh +go test ./... +go vet ./... +go build ./... +``` + +## Contributing + +Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request. Plugin +implementation changes belong in the source plugin repository; catalog schema +and automation changes belong here. + ## License `silo-plugins` is licensed under `Apache-2.0`. See [LICENSE](LICENSE). From 1512a477c063677c134196d2fef4f14f77f3ae62 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 02:49:08 +0000 Subject: [PATCH 02/16] chore: update catalog for Silo-Server/silo-plugin-metadata-audiobook@v0.1.5 --- manifest.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/manifest.json b/manifest.json index 70ac92d..5e98b33 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ { "manifest": { "plugin_id": "silo.audiobook-metadata", - "version": "0.1.4", + "version": "0.1.5", "silo_api_version": "v1", "supported_platforms": [ { @@ -47,16 +47,16 @@ } }, "repo_url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook", - "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.4/checksums.txt", + "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.5/checksums.txt", "binaries": { "darwin/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.4/plugin-darwin-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.5/plugin-darwin-arm64" }, "linux/amd64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.4/plugin-linux-amd64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.5/plugin-linux-amd64" }, "linux/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.4/plugin-linux-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.5/plugin-linux-arm64" } } }, From 11caaa543c2de43fe689f9620db0e033a0d0b601 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 03:26:47 +0000 Subject: [PATCH 03/16] chore: update catalog for Silo-Server/silo-plugin-metadata-audiobook@v0.1.6 --- manifest.json | 85 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 77 insertions(+), 8 deletions(-) diff --git a/manifest.json b/manifest.json index 5e98b33..e2e3a2e 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ { "manifest": { "plugin_id": "silo.audiobook-metadata", - "version": "0.1.5", + "version": "0.1.6", "silo_api_version": "v1", "supported_platforms": [ { @@ -24,7 +24,7 @@ "type": "metadata_provider.v1", "id": "audiobook-metadata", "display_name": "Audiobook Metadata", - "description": "Metadata provider for audiobook items. Wraps Audnexus, AudiMeta, iTunes, Audible, Storytel, BookBeat, Audioteka, and AudiobookCovers.", + "description": "Metadata provider for audiobook items. Searches Audnexus, Apple Books, and AudiobookCovers by default; Audible, Storytel, BookBeat, Audioteka, and AudiMeta can be enabled in the plugin settings.", "metadata": { "default_priority": { "audiobook": 2 @@ -32,11 +32,80 @@ } } ], + "global_config_schema": [ + { + "key": "sources", + "title": "Search sources", + "description": "Sources queried when identifying an audiobook by title. Every source still resolves an ID it already knows (ASIN or Apple Books ID), so disabling one only removes it from title searches.", + "json_schema": "{\"type\":\"object\",\"properties\":{\"audnexus\":{\"type\":\"boolean\"},\"itunes\":{\"type\":\"boolean\"},\"audiobookcovers\":{\"type\":\"boolean\"},\"audible\":{\"type\":\"boolean\"},\"storytel\":{\"type\":\"boolean\"},\"bookbeat\":{\"type\":\"boolean\"},\"audioteka\":{\"type\":\"boolean\"},\"audimeta\":{\"type\":\"boolean\"}},\"additionalProperties\":false}", + "admin_form": { + "fields": [ + { + "key": "audnexus", + "label": "Audnexus", + "description": "Public API over Audible's catalog. Returns narrators, series, and cover art; answers in well under a second.", + "control": 5, + "default_value": true + }, + { + "key": "itunes", + "label": "Apple Books", + "description": "Public iTunes Search API. Answers in about a second and has no narrator field.", + "control": 5, + "default_value": true + }, + { + "key": "audiobookcovers", + "label": "AudiobookCovers.com", + "description": "Cover art looked up by ASIN. Fills in a cover when the matched source has none.", + "control": 5, + "default_value": true + }, + { + "key": "audible", + "label": "Audible (scraper)", + "description": "Parses Audible search pages. Limited to six requests per minute.", + "control": 5, + "default_value": false + }, + { + "key": "storytel", + "label": "Storytel (scraper)", + "description": "Parses Storytel catalog pages. Limited to six requests per minute.", + "control": 5, + "default_value": false + }, + { + "key": "bookbeat", + "label": "BookBeat (scraper)", + "description": "Parses BookBeat catalog pages. Limited to six requests per minute.", + "control": 5, + "default_value": false + }, + { + "key": "audioteka", + "label": "Audioteka (scraper)", + "description": "Parses Audioteka catalog pages. Limited to six requests per minute.", + "control": 5, + "default_value": false + }, + { + "key": "audimeta", + "label": "AudiMeta", + "description": "The hosted API shut down in March 2026 and answers 403. Kept for self-hosted deployments.", + "control": 5, + "default_value": false + } + ], + "submit_label": "Save search sources" + } + } + ], "presentation": { "display_name": "Audiobook Metadata", "summary": "Fetch audiobook metadata and artwork from multiple book and audiobook sources.", - "description_markdown": "Matches audiobook items across Audnexus, AudiMeta, iTunes, Audible, Storytel, BookBeat, Audioteka, and AudiobookCovers. It combines those sources into metadata and artwork for Silo audiobook libraries.", - "setup_markdown": "Install the plugin and add **Audiobook Metadata** to the metadata provider chain for an audiobook library. The default sources need no plugin configuration; upstream availability and rate limits still apply.", + "description_markdown": "Matches audiobook items against Audnexus, Apple Books, and AudiobookCovers by default, with Audible, Storytel, BookBeat, Audioteka, and AudiMeta available as optional sources. It combines those sources into metadata and artwork for Silo audiobook libraries.", + "setup_markdown": "Install the plugin and add **Audiobook Metadata** to the metadata provider chain for an audiobook library. Audnexus, Apple Books and AudiobookCovers are searched by default; the scrapers can be switched on in the plugin settings.", "homepage_url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook", "source_url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook", "support_url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/issues", @@ -47,16 +116,16 @@ } }, "repo_url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook", - "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.5/checksums.txt", + "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.6/checksums.txt", "binaries": { "darwin/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.5/plugin-darwin-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.6/plugin-darwin-arm64" }, "linux/amd64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.5/plugin-linux-amd64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.6/plugin-linux-amd64" }, "linux/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.5/plugin-linux-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-audiobook/releases/download/v0.1.6/plugin-linux-arm64" } } }, From 81243ca9cb18b4092315c014710ca5f5012df6c0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 21 Sep 2026 17:49:50 +0000 Subject: [PATCH 04/16] chore: update catalog for Silo-Server/silo-plugin-markers-theintrodb@v0.1.2 --- manifest.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/manifest.json b/manifest.json index e2e3a2e..f1adcb3 100644 --- a/manifest.json +++ b/manifest.json @@ -928,7 +928,7 @@ { "manifest": { "plugin_id": "silo.theintrodb", - "version": "0.1.1", + "version": "0.1.2", "silo_api_version": "v1", "supported_platforms": [ { @@ -993,16 +993,16 @@ } }, "repo_url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb", - "checksums_url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.1/checksums.txt", + "checksums_url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.2/checksums.txt", "binaries": { "darwin/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.1/plugin-darwin-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.2/plugin-darwin-arm64" }, "linux/amd64": { - "url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.1/plugin-linux-amd64" + "url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.2/plugin-linux-amd64" }, "linux/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.1/plugin-linux-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.2/plugin-linux-arm64" } } }, From dd9499983694815d538673cea025c083b2c0f6d1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 23 Sep 2026 15:49:20 +0000 Subject: [PATCH 05/16] chore: update catalog for Silo-Server/silo-plugin-metadata-tvdb@v1.3.1 --- manifest.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/manifest.json b/manifest.json index f1adcb3..18ea6fe 100644 --- a/manifest.json +++ b/manifest.json @@ -1084,7 +1084,7 @@ { "manifest": { "plugin_id": "silo.tvdb", - "version": "1.2.24", + "version": "1.3.1", "silo_api_version": "v1", "supported_platforms": [ { @@ -1142,16 +1142,16 @@ } }, "repo_url": "https://github.com/Silo-Server/silo-plugin-metadata-tvdb", - "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-tvdb/releases/download/v1.2.24/checksums.txt", + "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-tvdb/releases/download/v1.3.1/checksums.txt", "binaries": { "darwin/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-tvdb/releases/download/v1.2.24/plugin-darwin-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-tvdb/releases/download/v1.3.1/plugin-darwin-arm64" }, "linux/amd64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-tvdb/releases/download/v1.2.24/plugin-linux-amd64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-tvdb/releases/download/v1.3.1/plugin-linux-amd64" }, "linux/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-tvdb/releases/download/v1.2.24/plugin-linux-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-tvdb/releases/download/v1.3.1/plugin-linux-arm64" } } }, From 56d192bb887cb4c714aaea292215acf947a46091 Mon Sep 17 00:00:00 2001 From: Quick <31828688+Quick104@users.noreply.github.com> Date: Thu, 24 Sep 2026 14:33:41 -0400 Subject: [PATCH 06/16] chore(deps): update the plugin SDK for rating sync (#10) * chore(deps): update the plugin SDK for rating sync The catalog decodes plugin manifests with the SDK it pins and discards fields it does not know. On v0.13.2 it would drop the watch-sync rating flags and the series media type from a plugin release, and the catalog entry would then advertise a plugin without them. Update to the SDK commit that adds them; bump to the v0.17.0 tag once it is released. Every existing catalog entry that validates on v0.13.2 still validates. Co-Authored-By: Claude Opus 5.5 (1M context) * chore(deps): build the catalog tool against SDK v0.17.0 Co-Authored-By: Claude Opus 5.5 (1M context) --------- Co-authored-by: Claude Opus 5.5 (1M context) --- go.mod | 12 ++++++------ go.sum | 54 ++++++++++++++++++++++++++++-------------------------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/go.mod b/go.mod index 90ec553..5ef587d 100644 --- a/go.mod +++ b/go.mod @@ -3,14 +3,14 @@ module github.com/Silo-Server/silo-plugins go 1.26.0 require ( - github.com/Silo-Server/silo-plugin-sdk v0.13.2 + github.com/Silo-Server/silo-plugin-sdk v0.17.0 google.golang.org/protobuf v1.36.11 ) require ( - golang.org/x/net v0.48.0 // indirect - golang.org/x/sys v0.39.0 // indirect - golang.org/x/text v0.32.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect - google.golang.org/grpc v1.75.1 // indirect + golang.org/x/net v0.55.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/text v0.37.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/grpc v1.82.1 // indirect ) diff --git a/go.sum b/go.sum index 1ab10f9..8d8db42 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ -github.com/Silo-Server/silo-plugin-sdk v0.13.2 h1:w7U0mmljVPauKfzRLNKusuiYFpuoEhuCSX4Hp3s9eRw= -github.com/Silo-Server/silo-plugin-sdk v0.13.2/go.mod h1:etqmxLTwjxpFH9goAjBDfNDoqHMv2/sqUXu8yx3hNfA= +github.com/Silo-Server/silo-plugin-sdk v0.17.0 h1:dHA4UbObMVIzAaLQC4clq1bSWuPaim88yptIRR5/f/M= +github.com/Silo-Server/silo-plugin-sdk v0.17.0/go.mod h1:abwsCEKuPAAgeAqpNGbwoaut2eQlC/Kj97u89Vvg9qM= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= @@ -10,29 +12,29 @@ github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= -go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= -go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= -go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= -go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= -golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= -golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= -golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= -golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= -golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE= +google.golang.org/grpc v1.82.1/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= From 1fd7e7cd33e4cdb29ea40842f4ccfea0f497f10d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 24 Sep 2026 19:49:31 +0000 Subject: [PATCH 07/16] chore: update catalog for Silo-Server/silo-plugin-metadata-mdblist@v0.1.0 --- manifest.json | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/manifest.json b/manifest.json index 18ea6fe..cdb5449 100644 --- a/manifest.json +++ b/manifest.json @@ -460,6 +460,92 @@ } } }, + { + "manifest": { + "plugin_id": "silo.mdblist", + "version": "0.1.0", + "silo_api_version": "v1", + "supported_platforms": [ + { + "os": "darwin", + "arch": "arm64" + }, + { + "os": "linux", + "arch": "amd64" + }, + { + "os": "linux", + "arch": "arm64" + } + ], + "capabilities": [ + { + "type": "metadata_provider.v1", + "id": "mdblist", + "display_name": "MDBList", + "description": "Aggregated ratings, Common Sense age rating, and certification. Enrichment only — never identifies an item.", + "metadata": { + "default_priority": { + "movie": 8, + "series": 8 + }, + "required_external_ids": [ + "imdb", + "tmdb" + ] + } + } + ], + "global_config_schema": [ + { + "key": "account", + "title": "MDBList Account", + "description": "MDBList API key. Without it the provider stays idle and contributes nothing.", + "json_schema": "{\"type\":\"object\",\"properties\":{\"api_key\":{\"type\":\"string\"}},\"additionalProperties\":false}", + "required": true, + "admin_form": { + "fields": [ + { + "key": "api_key", + "label": "API Key", + "description": "Free API key from your MDBList preferences page.", + "control": 3, + "secret": true + } + ], + "submit_label": "Save MDBList account" + } + } + ], + "presentation": { + "display_name": "MDBList Ratings", + "summary": "Aggregated star ratings and age ratings from MDBList.", + "description_markdown": "Fills in ratings that other metadata providers leave empty: IMDb, TMDB, and Rotten Tomatoes critic and audience scores, plus the Common Sense age rating and the release certification.\n\nThis provider never identifies an item. It looks up titles that another provider has already matched, using the IMDb or TMDB ID that provider resolved, so it must sit *below* a primary metadata provider such as TMDB in a library's provider chain.", + "setup_markdown": "Create a free API key in your MDBList preferences, add it below, then add **MDBList** to a library's metadata provider chain at a lower priority than your primary provider.\n\nThe free tier allows 1000 requests per day. When that runs out the plugin simply returns no data, leaving the fields for another provider to fill; it never fails a metadata refresh.", + "homepage_url": "https://mdblist.com", + "source_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist", + "support_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/issues", + "changelog_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases", + "publisher_name": "Silo", + "publisher_url": "https://github.com/Silo-Server", + "license_spdx": "AGPL-3.0-only" + } + }, + "repo_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist", + "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.1.0/checksums.txt", + "binaries": { + "darwin/arm64": { + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.1.0/plugin-darwin-arm64" + }, + "linux/amd64": { + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.1.0/plugin-linux-amd64" + }, + "linux/arm64": { + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.1.0/plugin-linux-arm64" + } + } + }, { "manifest": { "plugin_id": "silo.requests.arr", From 3b29da416459cad78a4417465950c3300b430762 Mon Sep 17 00:00:00 2001 From: Quick <31828688+Quick104@users.noreply.github.com> Date: Thu, 24 Sep 2026 20:10:50 +0000 Subject: [PATCH 08/16] chore: drop the unused CATALOG_SOURCE_TOKEN override The catalog updater reads each plugin's release metadata and its tagged manifest.json. Both workflows let CATALOG_SOURCE_TOKEN override the token used for those reads, for the case where a plugin repository is private and the workflow's own github.token cannot see it. Nothing uses it. All twelve catalogued plugin repositories are public, the secret is not set, and the 16 successful catalog runs to date have all taken the github.token fallback. Keeping a branch that has never executed invites the next reader to believe it is load bearing. The private-repo case it guarded is not one to design for: plugins are meant to be public, and the secret only helps if it is set before a plugin's first dispatch, so it never removed the need to publish the repository first. The README now states that ordering requirement instead. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/update-catalog.yml | 2 +- .github/workflows/update-manifest.yml | 2 +- README.md | 7 ++++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/update-catalog.yml b/.github/workflows/update-catalog.yml index fe31bd8..828c239 100644 --- a/.github/workflows/update-catalog.yml +++ b/.github/workflows/update-catalog.yml @@ -36,7 +36,7 @@ jobs: - name: Update catalog manifest env: - GITHUB_TOKEN: ${{ secrets.CATALOG_SOURCE_TOKEN || github.token }} + GITHUB_TOKEN: ${{ github.token }} PLUGIN_REPO: ${{ inputs.repo || github.event.client_payload.repo }} PLUGIN_TAG: ${{ inputs.tag || github.event.client_payload.tag }} run: | diff --git a/.github/workflows/update-manifest.yml b/.github/workflows/update-manifest.yml index 808f7ad..b35e40f 100644 --- a/.github/workflows/update-manifest.yml +++ b/.github/workflows/update-manifest.yml @@ -40,7 +40,7 @@ jobs: - name: Update catalog manifest env: - GITHUB_TOKEN: ${{ secrets.CATALOG_SOURCE_TOKEN || github.token }} + GITHUB_TOKEN: ${{ github.token }} PLUGIN: ${{ inputs.plugin }} VERSION: ${{ inputs.version }} run: | diff --git a/README.md b/README.md index b1f3c1e..3023376 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,10 @@ Plugin repositories should dispatch `plugin_release_published` after publishing a release. Set `SILO_PLUGINS_DISPATCH_TOKEN` in the plugin repository so it can call `repository_dispatch` on `Silo-Server/silo-plugins`. -`silo-plugins` uses `CATALOG_PUSH_TOKEN` to push catalog updates. If plugin -repositories are private, also set `CATALOG_SOURCE_TOKEN` in `silo-plugins` so -the updater can read release metadata and the tagged `manifest.json`. +`silo-plugins` uses `CATALOG_PUSH_TOKEN` to push catalog updates. Reading a +plugin's release metadata and its tagged `manifest.json` needs no extra +credential: every catalogued plugin repository is public, so the workflow's own +`github.token` is enough. A plugin has to be public before it dispatches. To exercise ingestion locally against an existing tagged release, pass the repository in `owner/name` form and the exact release tag: From 3007ccff7931f037297ccb39653988f4765c0a58 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 24 Sep 2026 20:52:54 +0000 Subject: [PATCH 09/16] chore: update catalog for Silo-Server/silo-plugin-watchprovider-floppy@v0.3.0 --- manifest.json | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/manifest.json b/manifest.json index cdb5449..c444fa2 100644 --- a/manifest.json +++ b/manifest.json @@ -1244,7 +1244,7 @@ { "manifest": { "plugin_id": "silo.watchprovider.floppy", - "version": "0.2.3", + "version": "0.3.0", "silo_api_version": "v1", "supported_platforms": [ { @@ -1265,7 +1265,7 @@ "type": "watch_sync_provider.v1", "id": "floppy", "display_name": "Floppy", - "description": "Bidirectional watch history, resume progress, and live scrobbling for a self-hosted Floppy instance.", + "description": "Bidirectional watch history, movie and series ratings, resume progress, and live scrobbling for a self-hosted Floppy instance.", "config_schema": [ { "key": "floppy", @@ -1296,7 +1296,8 @@ "import_progress": true, "supported_media_types": [ 1, - 2 + 2, + 3 ], "external_id_namespaces": [ "tmdb", @@ -1304,7 +1305,9 @@ "tvdb" ], "max_batch_size": 50, - "scrobble_playback": true + "scrobble_playback": true, + "import_ratings": true, + "export_ratings": true } } ], @@ -1312,8 +1315,8 @@ "presentation": { "display_name": "Floppy Watch Provider", "summary": "Sync Silo watch activity with a self-hosted Floppy instance.", - "description_markdown": "Imports movie and episode history and resume progress, exports completed watches, and forwards live playback start, pause, and stop events.", - "setup_markdown": "Connect a Silo profile by entering that profile's Floppy server URL and API token. Different profiles can use different Floppy servers.", + "description_markdown": "Imports movie and episode history and resume progress, exports completed watches, syncs movie and series ratings in both directions, and forwards live playback start, pause, and stop events.", + "setup_markdown": "Connect a Silo profile by entering that profile's Floppy server URL and API token. Different profiles can use different Floppy servers. A scoped Floppy token needs the tracking preset; sending ratings to Floppy uses its `watchlist:write` scope.", "homepage_url": "https://github.com/dannyvfilms/Floppy", "source_url": "https://github.com/Silo-Server/silo-plugin-watchprovider-floppy", "support_url": "https://github.com/Silo-Server/silo-plugin-watchprovider-floppy/issues", @@ -1324,16 +1327,16 @@ } }, "repo_url": "https://github.com/Silo-Server/silo-plugin-watchprovider-floppy", - "checksums_url": "https://github.com/Silo-Server/silo-plugin-watchprovider-floppy/releases/download/v0.2.3/checksums.txt", + "checksums_url": "https://github.com/Silo-Server/silo-plugin-watchprovider-floppy/releases/download/v0.3.0/checksums.txt", "binaries": { "darwin/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-watchprovider-floppy/releases/download/v0.2.3/plugin-darwin-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-watchprovider-floppy/releases/download/v0.3.0/plugin-darwin-arm64" }, "linux/amd64": { - "url": "https://github.com/Silo-Server/silo-plugin-watchprovider-floppy/releases/download/v0.2.3/plugin-linux-amd64" + "url": "https://github.com/Silo-Server/silo-plugin-watchprovider-floppy/releases/download/v0.3.0/plugin-linux-amd64" }, "linux/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-watchprovider-floppy/releases/download/v0.2.3/plugin-linux-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-watchprovider-floppy/releases/download/v0.3.0/plugin-linux-arm64" } } } From 2498898871d6758aaeff8abb0f47e78f21111a21 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 25 Sep 2026 00:27:39 +0000 Subject: [PATCH 10/16] chore: update catalog for Silo-Server/silo-plugin-metadata-mdblist@v0.2.0 --- manifest.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/manifest.json b/manifest.json index c444fa2..f40679b 100644 --- a/manifest.json +++ b/manifest.json @@ -463,7 +463,7 @@ { "manifest": { "plugin_id": "silo.mdblist", - "version": "0.1.0", + "version": "0.2.0", "silo_api_version": "v1", "supported_platforms": [ { @@ -490,7 +490,7 @@ "movie": 8, "series": 8 }, - "required_external_ids": [ + "lookup_provider_ids": [ "imdb", "tmdb" ] @@ -533,16 +533,16 @@ } }, "repo_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist", - "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.1.0/checksums.txt", + "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.2.0/checksums.txt", "binaries": { "darwin/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.1.0/plugin-darwin-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.2.0/plugin-darwin-arm64" }, "linux/amd64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.1.0/plugin-linux-amd64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.2.0/plugin-linux-amd64" }, "linux/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.1.0/plugin-linux-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.2.0/plugin-linux-arm64" } } }, From 4b1f947e673698c03f232d9243e5d1663138d5c1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 25 Sep 2026 02:55:13 +0000 Subject: [PATCH 11/16] chore: update catalog for Silo-Server/silo-plugin-markers-theintrodb@v0.1.3 --- manifest.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/manifest.json b/manifest.json index f40679b..773b579 100644 --- a/manifest.json +++ b/manifest.json @@ -1014,7 +1014,7 @@ { "manifest": { "plugin_id": "silo.theintrodb", - "version": "0.1.2", + "version": "0.1.3", "silo_api_version": "v1", "supported_platforms": [ { @@ -1079,16 +1079,16 @@ } }, "repo_url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb", - "checksums_url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.2/checksums.txt", + "checksums_url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.3/checksums.txt", "binaries": { "darwin/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.2/plugin-darwin-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.3/plugin-darwin-arm64" }, "linux/amd64": { - "url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.2/plugin-linux-amd64" + "url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.3/plugin-linux-amd64" }, "linux/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.2/plugin-linux-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-markers-theintrodb/releases/download/v0.1.3/plugin-linux-arm64" } } }, From 40b496352da574b2c2941a9b057afc2067a19834 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 25 Sep 2026 22:19:55 +0000 Subject: [PATCH 12/16] chore: update catalog for Silo-Server/silo-plugin-metadata-mdblist@v0.3.0 --- manifest.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest.json b/manifest.json index 773b579..d47fa8f 100644 --- a/manifest.json +++ b/manifest.json @@ -463,7 +463,7 @@ { "manifest": { "plugin_id": "silo.mdblist", - "version": "0.2.0", + "version": "0.3.0", "silo_api_version": "v1", "supported_platforms": [ { @@ -484,7 +484,7 @@ "type": "metadata_provider.v1", "id": "mdblist", "display_name": "MDBList", - "description": "Aggregated ratings, Common Sense age rating, and certification. Enrichment only — never identifies an item.", + "description": "Ratings from every source MDBList aggregates, age rating, certification, and missing basics. Enrichment only — never identifies an item.", "metadata": { "default_priority": { "movie": 8, @@ -520,9 +520,9 @@ ], "presentation": { "display_name": "MDBList Ratings", - "summary": "Aggregated star ratings and age ratings from MDBList.", - "description_markdown": "Fills in ratings that other metadata providers leave empty: IMDb, TMDB, and Rotten Tomatoes critic and audience scores, plus the Common Sense age rating and the release certification.\n\nThis provider never identifies an item. It looks up titles that another provider has already matched, using the IMDb or TMDB ID that provider resolved, so it must sit *below* a primary metadata provider such as TMDB in a library's provider chain.", - "setup_markdown": "Create a free API key in your MDBList preferences, add it below, then add **MDBList** to a library's metadata provider chain at a lower priority than your primary provider.\n\nThe free tier allows 1000 requests per day. When that runs out the plugin simply returns no data, leaving the fields for another provider to fill; it never fails a metadata refresh.", + "summary": "Ratings from every major source, age ratings, and missing basics from MDBList.", + "description_markdown": "Fills in what other metadata providers leave empty: IMDb, TMDB, Rotten Tomatoes critic and audience, Metacritic, Letterboxd, Trakt, Roger Ebert, and MyAnimeList ratings, MDBList's own score, the Common Sense age rating, the release certification, and basics such as year, release date, runtime, language, country, genres, keywords, and show status.\n\nThis provider never identifies an item. It looks up titles that another provider has already matched, using the IMDb or TMDB ID that provider resolved, so it must sit *below* a primary metadata provider such as TMDB in a library's provider chain.", + "setup_markdown": "Create a free API key in your MDBList preferences, add it below, then add **MDBList** to a library's metadata provider chain at a lower priority than your primary provider.\n\nThe free tier allows 1000 requests per day. Lookups that arrive together are sent as one batch request, and when the quota runs out the plugin pauses until it resets, returning no data in the meantime; it never fails a metadata refresh.", "homepage_url": "https://mdblist.com", "source_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist", "support_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/issues", @@ -533,16 +533,16 @@ } }, "repo_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist", - "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.2.0/checksums.txt", + "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.0/checksums.txt", "binaries": { "darwin/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.2.0/plugin-darwin-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.0/plugin-darwin-arm64" }, "linux/amd64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.2.0/plugin-linux-amd64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.0/plugin-linux-amd64" }, "linux/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.2.0/plugin-linux-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.0/plugin-linux-arm64" } } }, From cbf5aedeb364125a0914aad288526e1bfadbb832 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 26 Sep 2026 02:27:21 +0000 Subject: [PATCH 13/16] chore: update catalog for Silo-Server/silo-plugin-metadata-mdblist@v0.3.1 --- manifest.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/manifest.json b/manifest.json index d47fa8f..84aa140 100644 --- a/manifest.json +++ b/manifest.json @@ -463,7 +463,7 @@ { "manifest": { "plugin_id": "silo.mdblist", - "version": "0.3.0", + "version": "0.3.1", "silo_api_version": "v1", "supported_platforms": [ { @@ -521,7 +521,7 @@ "presentation": { "display_name": "MDBList Ratings", "summary": "Ratings from every major source, age ratings, and missing basics from MDBList.", - "description_markdown": "Fills in what other metadata providers leave empty: IMDb, TMDB, Rotten Tomatoes critic and audience, Metacritic, Letterboxd, Trakt, Roger Ebert, and MyAnimeList ratings, MDBList's own score, the Common Sense age rating, the release certification, and basics such as year, release date, runtime, language, country, genres, keywords, and show status.\n\nThis provider never identifies an item. It looks up titles that another provider has already matched, using the IMDb or TMDB ID that provider resolved, so it must sit *below* a primary metadata provider such as TMDB in a library's provider chain.", + "description_markdown": "Fills in what other metadata providers leave empty: IMDb, TMDB, Rotten Tomatoes critic and audience, Metacritic, Letterboxd, Trakt, Roger Ebert, and MyAnimeList ratings, MDBList's own score, the Common Sense age rating, the release certification, and basics such as year, release date, runtime, language, genres, and show status.\n\nThis provider never identifies an item. It looks up titles that another provider has already matched, using the IMDb or TMDB ID that provider resolved, so it must sit *below* a primary metadata provider such as TMDB in a library's provider chain.", "setup_markdown": "Create a free API key in your MDBList preferences, add it below, then add **MDBList** to a library's metadata provider chain at a lower priority than your primary provider.\n\nThe free tier allows 1000 requests per day. Lookups that arrive together are sent as one batch request, and when the quota runs out the plugin pauses until it resets, returning no data in the meantime; it never fails a metadata refresh.", "homepage_url": "https://mdblist.com", "source_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist", @@ -533,16 +533,16 @@ } }, "repo_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist", - "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.0/checksums.txt", + "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.1/checksums.txt", "binaries": { "darwin/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.0/plugin-darwin-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.1/plugin-darwin-arm64" }, "linux/amd64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.0/plugin-linux-amd64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.1/plugin-linux-amd64" }, "linux/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.0/plugin-linux-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.1/plugin-linux-arm64" } } }, From 47fcc4c430dc0b04fd6421975d169de48ab94a8b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 26 Sep 2026 04:30:35 +0000 Subject: [PATCH 14/16] chore: update catalog for Silo-Server/silo-plugin-metadata-mdblist@v0.4.0 --- manifest.json | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/manifest.json b/manifest.json index 84aa140..83f7b13 100644 --- a/manifest.json +++ b/manifest.json @@ -463,7 +463,7 @@ { "manifest": { "plugin_id": "silo.mdblist", - "version": "0.3.1", + "version": "0.4.0", "silo_api_version": "v1", "supported_platforms": [ { @@ -486,6 +486,7 @@ "display_name": "MDBList", "description": "Ratings from every source MDBList aggregates, age rating, certification, and missing basics. Enrichment only — never identifies an item.", "metadata": { + "bulk_lookup_limit": 100, "default_priority": { "movie": 8, "series": 8 @@ -522,7 +523,7 @@ "display_name": "MDBList Ratings", "summary": "Ratings from every major source, age ratings, and missing basics from MDBList.", "description_markdown": "Fills in what other metadata providers leave empty: IMDb, TMDB, Rotten Tomatoes critic and audience, Metacritic, Letterboxd, Trakt, Roger Ebert, and MyAnimeList ratings, MDBList's own score, the Common Sense age rating, the release certification, and basics such as year, release date, runtime, language, genres, and show status.\n\nThis provider never identifies an item. It looks up titles that another provider has already matched, using the IMDb or TMDB ID that provider resolved, so it must sit *below* a primary metadata provider such as TMDB in a library's provider chain.", - "setup_markdown": "Create a free API key in your MDBList preferences, add it below, then add **MDBList** to a library's metadata provider chain at a lower priority than your primary provider.\n\nThe free tier allows 1000 requests per day. Lookups that arrive together are sent as one batch request, and when the quota runs out the plugin pauses until it resets, returning no data in the meantime; it never fails a metadata refresh.", + "setup_markdown": "Create a free API key in your MDBList preferences, add it below, then add **MDBList** to a library's metadata provider chain at a lower priority than your primary provider.\n\nThe free tier allows 1000 requests per day. Lookups that arrive together are sent as one batch request, and Silo's hourly Bulk Metadata Enrichment task sends up to 100 titles at a time. When the quota runs out the plugin pauses until it resets and tells Silo so, and Silo looks those titles up again later; it never fails a metadata refresh.", "homepage_url": "https://mdblist.com", "source_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist", "support_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/issues", @@ -533,16 +534,16 @@ } }, "repo_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist", - "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.1/checksums.txt", + "checksums_url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.4.0/checksums.txt", "binaries": { "darwin/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.1/plugin-darwin-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.4.0/plugin-darwin-arm64" }, "linux/amd64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.1/plugin-linux-amd64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.4.0/plugin-linux-amd64" }, "linux/arm64": { - "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.3.1/plugin-linux-arm64" + "url": "https://github.com/Silo-Server/silo-plugin-metadata-mdblist/releases/download/v0.4.0/plugin-linux-arm64" } } }, From cc27d5d64cd715224eb86f58f90af43973d552de Mon Sep 17 00:00:00 2001 From: JonahMMay Date: Mon, 28 Sep 2026 14:38:42 +0000 Subject: [PATCH 15/16] catalog: add rebranded mdblist and floppy entries from upstream Upstream's catalog lists silo.mdblist (v0.4.0) and silo.watchprovider.floppy (v0.3.0). Add them rebranded as prairie.mdblist and prairie.watchprovider.floppy, pointing at Prairie-Server/prairie-plugin-metadata-mdblist and Prairie-Server/prairie-plugin-watchprovider-floppy. Neither repository has been forked into Prairie-Server yet, so these download URLs 404 until the forks exist and publish releases (the update-catalog workflow will then overwrite these entries with the real release data). Revert this commit to drop them instead. Co-Authored-By: Claude Opus 5.5 (1M context) --- manifest.json | 186 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) diff --git a/manifest.json b/manifest.json index debfb22..1eba0cf 100644 --- a/manifest.json +++ b/manifest.json @@ -391,6 +391,93 @@ } } }, + { + "manifest": { + "plugin_id": "prairie.mdblist", + "version": "0.4.0", + "prairie_api_version": "v1", + "supported_platforms": [ + { + "os": "darwin", + "arch": "arm64" + }, + { + "os": "linux", + "arch": "amd64" + }, + { + "os": "linux", + "arch": "arm64" + } + ], + "capabilities": [ + { + "type": "metadata_provider.v1", + "id": "mdblist", + "display_name": "MDBList", + "description": "Ratings from every source MDBList aggregates, age rating, certification, and missing basics. Enrichment only — never identifies an item.", + "metadata": { + "bulk_lookup_limit": 100, + "default_priority": { + "movie": 8, + "series": 8 + }, + "lookup_provider_ids": [ + "imdb", + "tmdb" + ] + } + } + ], + "global_config_schema": [ + { + "key": "account", + "title": "MDBList Account", + "description": "MDBList API key. Without it the provider stays idle and contributes nothing.", + "json_schema": "{\"type\":\"object\",\"properties\":{\"api_key\":{\"type\":\"string\"}},\"additionalProperties\":false}", + "required": true, + "admin_form": { + "fields": [ + { + "key": "api_key", + "label": "API Key", + "description": "Free API key from your MDBList preferences page.", + "control": 3, + "secret": true + } + ], + "submit_label": "Save MDBList account" + } + } + ], + "presentation": { + "display_name": "MDBList Ratings", + "summary": "Ratings from every major source, age ratings, and missing basics from MDBList.", + "description_markdown": "Fills in what other metadata providers leave empty: IMDb, TMDB, Rotten Tomatoes critic and audience, Metacritic, Letterboxd, Trakt, Roger Ebert, and MyAnimeList ratings, MDBList's own score, the Common Sense age rating, the release certification, and basics such as year, release date, runtime, language, genres, and show status.\n\nThis provider never identifies an item. It looks up titles that another provider has already matched, using the IMDb or TMDB ID that provider resolved, so it must sit *below* a primary metadata provider such as TMDB in a library's provider chain.", + "setup_markdown": "Create a free API key in your MDBList preferences, add it below, then add **MDBList** to a library's metadata provider chain at a lower priority than your primary provider.\n\nThe free tier allows 1000 requests per day. Lookups that arrive together are sent as one batch request, and Prairie's hourly Bulk Metadata Enrichment task sends up to 100 titles at a time. When the quota runs out the plugin pauses until it resets and tells Prairie so, and Prairie looks those titles up again later; it never fails a metadata refresh.", + "homepage_url": "https://mdblist.com", + "source_url": "https://github.com/Prairie-Server/prairie-plugin-metadata-mdblist", + "support_url": "https://github.com/Prairie-Server/prairie-plugin-metadata-mdblist/issues", + "changelog_url": "https://github.com/Prairie-Server/prairie-plugin-metadata-mdblist/releases", + "publisher_name": "Prairie", + "publisher_url": "https://github.com/Prairie-Server", + "license_spdx": "AGPL-3.0-only" + } + }, + "repo_url": "https://github.com/Prairie-Server/prairie-plugin-metadata-mdblist", + "checksums_url": "https://github.com/Prairie-Server/prairie-plugin-metadata-mdblist/releases/download/v0.4.0/checksums.txt", + "binaries": { + "darwin/arm64": { + "url": "https://github.com/Prairie-Server/prairie-plugin-metadata-mdblist/releases/download/v0.4.0/plugin-darwin-arm64" + }, + "linux/amd64": { + "url": "https://github.com/Prairie-Server/prairie-plugin-metadata-mdblist/releases/download/v0.4.0/plugin-linux-amd64" + }, + "linux/arm64": { + "url": "https://github.com/Prairie-Server/prairie-plugin-metadata-mdblist/releases/download/v0.4.0/plugin-linux-arm64" + } + } + }, { "manifest": { "plugin_id": "prairie.requests.arr", @@ -1078,6 +1165,105 @@ "url": "https://github.com/Prairie-Server/prairie-plugin-metadata-tvdb/releases/download/v1.2.25/plugin-linux-arm64" } } + }, + { + "manifest": { + "plugin_id": "prairie.watchprovider.floppy", + "version": "0.3.0", + "prairie_api_version": "v1", + "supported_platforms": [ + { + "os": "darwin", + "arch": "arm64" + }, + { + "os": "linux", + "arch": "amd64" + }, + { + "os": "linux", + "arch": "arm64" + } + ], + "capabilities": [ + { + "type": "watch_sync_provider.v1", + "id": "floppy", + "display_name": "Floppy", + "description": "Bidirectional watch history, movie and series ratings, resume progress, and live scrobbling for a self-hosted Floppy instance.", + "config_schema": [ + { + "key": "floppy", + "title": "Your Floppy server", + "description": "Connection details for the Floppy server used by this profile.", + "json_schema": "{\"type\":\"object\",\"properties\":{\"base_url\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"base_url\"],\"additionalProperties\":false}", + "required": true, + "admin_form": { + "fields": [ + { + "key": "base_url", + "label": "Floppy server URL", + "description": "Root URL of your Floppy instance. API paths are added automatically.", + "control": 1, + "placeholder": "https://floppy.example.com", + "required": true + } + ] + } + } + ], + "watch_sync_provider": { + "auth_methods": [ + 2 + ], + "export_watched": true, + "import_watched": true, + "import_progress": true, + "supported_media_types": [ + 1, + 2, + 3 + ], + "external_id_namespaces": [ + "tmdb", + "imdb", + "tvdb" + ], + "max_batch_size": 50, + "scrobble_playback": true, + "import_ratings": true, + "export_ratings": true + } + } + ], + "category": "Watch Providers", + "presentation": { + "display_name": "Floppy Watch Provider", + "summary": "Sync Prairie watch activity with a self-hosted Floppy instance.", + "description_markdown": "Imports movie and episode history and resume progress, exports completed watches, syncs movie and series ratings in both directions, and forwards live playback start, pause, and stop events.", + "setup_markdown": "Connect a Prairie profile by entering that profile's Floppy server URL and API token. Different profiles can use different Floppy servers. A scoped Floppy token needs the tracking preset; sending ratings to Floppy uses its `watchlist:write` scope.", + "homepage_url": "https://github.com/dannyvfilms/Floppy", + "source_url": "https://github.com/Prairie-Server/prairie-plugin-watchprovider-floppy", + "support_url": "https://github.com/Prairie-Server/prairie-plugin-watchprovider-floppy/issues", + "changelog_url": "https://github.com/Prairie-Server/prairie-plugin-watchprovider-floppy/releases", + "publisher_name": "Prairie Server", + "publisher_url": "https://github.com/Prairie-Server", + "license_spdx": "AGPL-3.0-only" + } + }, + "repo_url": "https://github.com/Prairie-Server/prairie-plugin-watchprovider-floppy", + "checksums_url": "https://github.com/Prairie-Server/prairie-plugin-watchprovider-floppy/releases/download/v0.3.0/checksums.txt", + "binaries": { + "darwin/arm64": { + "url": "https://github.com/Prairie-Server/prairie-plugin-watchprovider-floppy/releases/download/v0.3.0/plugin-darwin-arm64" + }, + "linux/amd64": { + "url": "https://github.com/Prairie-Server/prairie-plugin-watchprovider-floppy/releases/download/v0.3.0/plugin-linux-amd64" + }, + "linux/arm64": { + "url": "https://github.com/Prairie-Server/prairie-plugin-watchprovider-floppy/releases/download/v0.3.0/plugin-linux-arm64" + } + } } ] } From bcac7d374a73031c166f03d10fed34e8761641d1 Mon Sep 17 00:00:00 2001 From: JonahMMay Date: Mon, 28 Sep 2026 14:49:20 +0000 Subject: [PATCH 16/16] docs: point CONTRIBUTING at the prairie-server contribution guide The Prairie-Server/.github repository is empty, so the upstream-style link to its CONTRIBUTING.md is dead. Link the project-wide guide in prairie-server instead. Co-Authored-By: Claude Opus 5.5 (1M context) --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 073ea3f..d5fa30c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing to the Prairie Plugin Catalog -The [Prairie contribution guide](https://github.com/prairie-server/.github/blob/main/CONTRIBUTING.md) +The [Prairie contribution guide](https://github.com/prairie-server/prairie-server/blob/main/CONTRIBUTING.md) covers project-wide coordination, focused changes, evidence, AI disclosure, and pull request expectations. Those requirements apply here; this guide adds the catalog-specific workflow.