# MeiamSubtitles: Chinese Subtitle Downloads for Emby and Jellyfin

> MeiamSubtitles is a C# plugin pair for Emby and Jellyfin that searches Assrt and Thunder XMP for Chinese subtitles, matched by film name or by a CID computed from the video file. It is aimed at self-hosters whose libraries are missing Chinese subtitles, and its main constraints are an API token for Assrt, a Jellyfin-only metadata search toggle for Thunder, and the version windows the README publishes for each server.

**91270/MeiamSubtitles** — Emby Server / Jellyfin Server 端字幕插件 ，使用  迅雷影音、 射手网 接口精准匹配视频字幕

- Repository: https://github.com/91270/MeiamSubtitles
- Stars: 2,566 · Forks: 196
- Language: C#
- License: Apache-2.0
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/91270-meiamsubtitles

## What MeiamSubtitles fixes in an Emby or Jellyfin library

The plugin targets a narrow gap: media servers that hold Chinese-language films and series but have no Chinese subtitle files beside them. Emby and Jellyfin can search for subtitles through OpenSubtitles and similar providers, but the README positions MeiamSubtitles around two sources that Chinese-language users tend to reach for instead: Assrt, described as the successor to Shooter, and Thunder XMP, the subtitle service behind Xunlei's video player. The project ships four plugin packages, split by server and by source, so an Emby installation does not carry Jellyfin code and an Assrt user does not carry the Thunder client.

The README states the audience indirectly through the compatibility table. Emby is supported from 4.8.10.0 to 4.10.0.40, Jellyfin from 10.10.7 to 12.1. Those are not open-ended ranges, so an Emby server on 4.7 or a Jellyfin server on 10.9 is outside what the project claims to support. The plugin also expects Chinese language codes such as zho, chi and zh-CN, which tells you it is not a general-purpose subtitle fetcher. If your library is English-first, this is the wrong tool and the README makes no attempt to be one.

## How the Assrt and Thunder sources differ under the hood

The two sources use different matching strategies, and that difference matters more than the plugin packaging.

Assrt searches by film name. It requires an API token, and the README says that without a token the provider skips the search and writes a note to the log. Results come back as archives in some cases, so the plugin downloads the response, validates it, and extracts .srt, .ass or .ssa files from ZIP or RAR containers. That extraction is why Assrt carries a SharpCompress dependency, and why the installation instructions treat that DLL differently on each platform.

Thunder works the other way. Instead of a title, it computes a CID from the video file's contents and looks for a subtitle that corresponds to that specific file. The README describes the file read as asynchronous, which it says suits both local and network media libraries. No token is needed. On Jellyfin only, the plugin settings also expose a metadata search option that uses the film name to assist matching, which suggests CID matching alone can miss.

The README is explicit that SearchAllProviders means multiple sources are queried, not that every result is downloaded. It also states that scheduling belongs to the server: the plugin responds to search and download requests rather than initiating them on its own timer.

## Installing MeiamSubtitles through the Jellyfin repository

The README recommends the repository route for Jellyfin because it delivers later updates. Add a repository named MeiamSub in the Jellyfin console under Plugins, then Repositories, and paste this manifest address.

```text
https://github.com/91270/MeiamSubtitles.Release/raw/main/Plugin/manifest-stable.json
```

After saving, open the catalog and install MeiamSub.Assrt or MeiamSub.Thunder, then restart Jellyfin. The catalog is where the stable channel lives; the README says preview builds are never written to the stable repository and must be downloaded by hand from the preview release on GitHub.

Manual installation is the fallback. Download the archive for your platform from Releases, unpack it, and place the plugin in the server's plugins directory. The README lists common locations, including /var/lib/jellyfin/plugins on Linux, %LOCALAPPDATA%\jellyfin\plugins on Windows, %APPDATA%\Emby-Server\programdata\plugins for Emby on Windows, and the mapped /config/plugins inside Docker. It also names the release archives as Emby_v*.zip and Jellyfin_v*.zip.

The README's rule for the two Assrt packages is asymmetric and worth reading twice. On Emby, copy only the plugin DLL and do not bring a separate SharpCompress.dll, because Assrt reuses the copy Emby already ships. On Jellyfin, the SharpCompress.dll that sits beside the Assrt plugin is a required dependency and must not be deleted. Getting this backwards is the documented cause of a missing SharpCompress error.

## Configuring the Assrt token and running a first search

Assrt will not return anything until it has credentials. Create an API token on the Assrt site, open the plugin configuration page, and paste it into the field the README names as Assrt API Token. Then enable MeiamSub.Assrt in the library's subtitle downloader settings. The README notes that logs mask the token and do not record full API responses, which is a reasonable default for a credential that sits in a config file.

Thunder needs no configuration for CID matching. On Jellyfin you can optionally turn on metadata search in the plugin settings to let the film name help.

Before switching on automatic download for a library, the README advises running a manual search first and confirming the match quality. That is the practical sequence: configure the token, search one film by hand, inspect the result, and only then let the server fetch subtitles on its own. Automatic download is driven by Emby or Jellyfin, not by the plugin, so the plugin cannot retry or throttle on your behalf.

## Duplicate subtitle files and other failure modes

The most common complaint the README addresses is a library filling up with .0, .1 and similar suffixed subtitle files. Two distinct causes are given. The first is duplicate download languages in the library settings: if zho appears twice, the server issues two download requests, and the plugin answers both. The second is manual downloading of several search results in a row, where the server adds numeric suffixes rather than overwriting. The README is clear that neither case means the plugin is looping.

A related quirk: when Emby and Jellyfin share a media directory, they name subtitle files differently, so .zh-CN.* and .zho.* files can appear side by side for the same video. That is a server naming difference, not a plugin bug, but it looks like one until you know.

Empty searches have a short list of causes. The Chinese language may not be selected, the plugin may be outdated, the Assrt token may be missing or invalid, or Thunder may be unable to read the media file to compute a CID. The README also concedes that some films and releases simply have no matching resource, and suggests enabling metadata search or picking another result manually.

The upgrade path carries its own hazard. From v1.0.16.0 onward, Shooter is no longer compiled, maintained or released, because the README says the old Shooter interface rarely returns usable subtitles. Old Shooter DLLs and directories should be deleted. Keeping two versions of the same plugin side by side can cause duplicate loading or a failed start.

## Where MeiamSubtitles stops and other tools begin

The obvious comparison is with a general subtitle provider such as OpenSubtitles, which Emby and Jellyfin can query natively. The difference is coverage rather than architecture: OpenSubtitles indexes broadly across languages, while MeiamSubtitles deliberately limits itself to Chinese sources and to two of them. If your library needs Chinese subtitles matched to a specific release, the CID path through Thunder is something a title-based provider cannot do. If your library needs French or Spanish, MeiamSubtitles has nothing to offer.

Within the Chinese-source space, the README's own history is instructive. Shooter was once a source here and has been dropped. That leaves Assrt, which depends on a third-party token, and Thunder, which depends on being able to read the video file and on the CID existing in Thunder's index. Two sources is a thin redundancy margin, and the README does not describe a fallback order between them.

Related tools that appear alongside this one in search results, such as embyToLocalPlayer, Subbuzz, StrmAssistant and MetaShark, are not discussed in the README, so this article cannot compare their mechanisms. What can be said is that MeiamSubtitles is a subtitle provider plugin and nothing else: it does not touch playback, library metadata or strm handling.

## Release channels, maintenance and the Apache-2.0 licence

Version numbers carry meaning here. The README states that a stable release ends in 0, for example 1.0.18.0, and goes to GitHub Releases and the Jellyfin stable plugin repository. Preview builds use a single rolling release tagged preview with Emby_preview.zip and Jellyfin_preview.zip attachments, and the internal version increments in the last digit, such as 1.0.17.1 and 1.0.17.2, so a support request can identify the exact test batch. Old preview packages are replaced rather than kept. A stable version must be higher than every preview in the same cycle, and once a stable release ships, the rolling preview release becomes a draft until the next cycle.

The practical cost of that scheme is that preview users get no archive of previous test builds. If a preview breaks something, the only route back is a stable release or a re-download of whatever the rolling tag currently points at. The README does not document rollback.

On maintenance: the last push to the repository was on 2026-09-17, and the most recent release is the preview build from the same day, with v1.0.17.0 published on 2026-09-16 and v1.0.16.0 on 2026-08-07. The project is not archived.

The licence is Apache-2.0. For a plugin that links against server assemblies and bundles SharpCompress on the Jellyfin side, that permissive licence keeps redistribution straightforward, but the README does not discuss what it means for anyone repackaging the plugin alongside a modified server. That is a question for a lawyer, not for this article.

## Conclusion

Adopt MeiamSubtitles if you run Emby 4.8.10.0 to 4.10.0.40 or Jellyfin 10.10.7 to 12.1 and your library lacks Chinese subtitles, and install through the Jellyfin repository or the platform zip if you want updates. Do not adopt it if you need English or other non-Chinese subtitle sources, or if you cannot create an Assrt API token and are unwilling to rely on Thunder's CID matching alone. Before enabling automatic download, verify that your library's subtitle download languages contain exactly one Chinese entry and no leftover Shooter plugin files, then confirm a manual search returns a usable result.

## FAQ

### Does MeiamSubtitles work with Jellyfin as well as Emby?

Yes. The README lists four packages: Emby.MeiamSub.Assrt and Emby.MeiamSub.Thunder targeting .NET Standard 2.1, and Jellyfin.MeiamSub.Assrt and Jellyfin.MeiamSub.Thunder targeting .NET 8.0. Compatibility is bounded, with Emby supported from 4.8.10.0 to 4.10.0.40 and Jellyfin from 10.10.7 to 12.1.

### Why does MeiamSubtitles return no subtitles for my films?

The README lists several causes: the Chinese language may not be selected, the plugin may be outdated, the Assrt token may be missing or invalid, or Thunder may be unable to read the media file to compute a CID. Some films and releases have no matching resource at all, in which case enabling metadata search or choosing another result manually is the suggested step.

### Why does MeiamSubtitles create multiple subtitle files with numeric suffixes?

The README attributes this to duplicate entries in the library's subtitle download languages, since the server runs one download per language entry, or to downloading several search results in succession, where the server adds suffixes instead of overwriting. It states this is Emby and Jellyfin file-saving behaviour rather than the plugin looping.

### What should I do with the old Shooter plugin after upgrading MeiamSubtitles?

Delete the old Shooter DLL and plugin directory. The README states that Shooter stopped being compiled, maintained and released from v1.0.16.0 because its old interface rarely returns usable subtitles, and that keeping multiple versions of the same plugin can cause duplicate loading or a failed start.

## Sources

- [91270/MeiamSubtitles on GitHub](https://github.com/91270/MeiamSubtitles)
- [Issues](https://github.com/91270/MeiamSubtitles/issues)
- [License: Apache-2.0](https://github.com/91270/MeiamSubtitles/blob/master/LICENSE)
- [README](https://github.com/91270/MeiamSubtitles/blob/master/README.md)
- [Releases](https://github.com/91270/MeiamSubtitles/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/91270-meiamsubtitles
