mamal72/bazarr-providers

Provider Hub plugins for Bazarr+, installable as a catalog source. Currently ships SubKade (Persian, subkade.ir).

โ˜… 1Forks 0PythonGitHub โ†—Compare
bazarrbazarr-providerfarsipersiansubtitles

README

๐ŸŽฌ bazarr-providers

Subtitle providers for Bazarr+, focused on sources the mainstream providers cover poorly.

Note

These are Provider Hub plugins and require Bazarr+. Upstream Bazarr has no plugin system, so it is not supported here.

Provider Language Source Notes
SubKade Persian (fas) subkade.ir Per-season archives, matched by IMDB id

More may follow โ€” the layout and tooling are built for several.


๐Ÿ“ฆ Install on Bazarr+ (Provider Hub)

Bazarr+ runs providers as sandboxed plugins: each in its own virtualenv, out-of-process, hash-verified against its manifest, and unaffected by Bazarr updates. Three ways in, easiest first.

1๏ธโƒฃ Add this repo as a catalog source โญ recommended

Install and update from the Marketplace like any other provider โ€” no files to download, and updates appear automatically.

Subtitle Hub โ†’ Marketplace โ†’ Manage sources, then:

GitHub catalog URL

https://github.com/mamal72/bazarr-providers/blob/main/catalog.json

Name

mamal72/bazarr-providers

Add source, then install SubKade from the Marketplace list.

Note

Community sources show as untrusted โ€” that badge only means the source is not on Bazarr+'s own trusted list. It says nothing about the plugin. Review the manifest before installing, as you should with any third-party catalog.

2๏ธโƒฃ Download a prebuilt package

Grab subkade-hub.zip from the latest release, then Subtitle Hub โ†’ Marketplace โ†’ Install local package.

3๏ธโƒฃ Build the package yourself

Nothing to install โ€” the builder is stdlib Python:

git clone https://github.com/mamal72/bazarr-providers.git
cd bazarr-providers
python3 scripts/build_zip.py subkade      # -> subkade-hub.zip

Builds are deterministic: the same source always produces a byte-identical archive. Then install it as in โ‘ก.

โš ๏ธ After installing, enable it

Installing does not enable. In Subtitle Hub โ†’ My Providers, click + Add search provider, choose the provider, and save settings.


๐Ÿงฉ Providers

SubKade โ€” Persian

SubKade publishes one archive per season rather than per-episode files, so the provider:

  1. Resolves the series by its IMDB id (https://subkade.ir/?s=tt1234567), which returns exactly one page โ€” no fuzzy title matching, so no wrong-show results.
  2. Reads the per-season archive links from that page.
  3. Downloads the season archive once, caches it for the life of the worker, and lists entries matching the requested episode.
  4. Serves the chosen entry on download.

Fetching several episodes of one season therefore costs a single download.

No configuration. Archives use the same episode numbers Bazarr does โ€” a two-part episode is filed under its first number (S04E01E02 lives in the E01 folder and answers for both halves), so nothing needs translating. Entries naming their release are offered ahead of bare filenames, since Bazarr can score those against the video.

๐Ÿ“ Notes

  • subkade.ir is reachable directly from Iran and does not need proxying. If Bazarr routes through a VPN, add subkade.ir and dl1.subkade.ir to the proxy exclusions โ€” some hosts return 403 to datacenter IPs.
  • Archives are .zip. SubKade occasionally publishes .rar, which the standard library cannot read; those entries are skipped.
  • Subtitles are served as-is. Persian files sometimes need a leading RLM (U+200F) for dialogue dashes to render correctly in some players โ€” a property of the source files, not this provider.

๐Ÿ› ๏ธ Development

providers/<id>/provider.py     Hub plugin โ€” stdlib only, no Bazarr imports
providers/<id>/provider.json   manifest (hashes must match the source)
tests/                         unit tests + fixtures captured from the live site
catalog.json                   generated; what Bazarr+ fetches as a catalog
python3 -m unittest discover -s tests   # tests
python3 scripts/check_hashes.py         # manifest hashes match the source
python3 scripts/build_catalog.py        # regenerate catalog.json
python3 scripts/build_zip.py --all      # build every package

providers/<id>/ must contain only *.py and provider.json โ€” the Hub's verifier rejects anything else, and the manifest's file map is built by globbing *.py recursively. Anything else belongs outside providers/.

Regenerate provider.json hashes with the upstream catalog SDK (python3 -m sdk hash providers/<id>); scripts/check_hashes.py reproduces its digest and fails CI when a manifest is stale.

โœ… Requirements

  • Bazarr+ โ€” these are Provider Hub plugins; upstream Bazarr cannot load them

No provider here needs an account, API key, or configuration.

๐Ÿ“„ License

MIT

Contributors

mamal72

Issues