Code
Search code
Co-authored-by: Copilot <copilot@github.com>
Jellyfin Megakino Downloader
A Jellyfin plugin that integrates the unofficial megakino Python client to search, download and integrate movies, TV-series and documentaries from MegaKino into your local Jellyfin library.
Disclaimer (Important)
This software may be used to download media from third-party websites. Using it may violate the terms of service of those websites and could infringe copyright or other laws in some jurisdictions.
Use this software at your own risk. The author and contributors provide this software "AS IS" and assume no responsibility or liability for any consequences arising from its use, including but not limited to legal claims, damages, loss of data, or other liabilities. It is your responsibility to ensure that you have the legal right to download and store any content you obtain with this tool. If you are unsure about the legality of your intended use, consult a qualified legal professional.
Features
- Feed tab: carousel, movies/series grid and "Recently added" list from MegaKino
- Search MegaKino directly from Jellyfin
- Downloads tab: live progress for running and past downloads
- Subscriptions: monitor series and automatically queue new episodes
- Server-side image proxy with caching (clients never call MegaKino directly)
- NFO metadata (.nfo) generation for Kodi/Jellyfin compatibility
Requirements
- Jellyfin 10.x (tested with 10.9.x / 10.11.x)
- .NET 8 SDK to build the plugin
- Python 3.10+ on the server with the
megakinopackage andyt-dlpinstalled:
pip install megakino-python yt-dlp
- The configured Python interpreter must be able to
import megakinoandimport yt_dlp.
Building
dotnet build -c Release
The compiled plugin is located at bin/Release/net8.0/Jellyfin.Plugin.MegakinoDownloader.dll.
Installation (manual)
- Copy
Jellyfin.Plugin.MegakinoDownloader.dllto your Jellyfin plugins directory (e.g./var/lib/jellyfin/plugins/MegakinoDownloader/). - Restart Jellyfin.
- Open Admin → Plugins → Megakino Downloader and configure target libraries, Python executable, preferred hoster and other settings.
Installation (via Jellyfin Plugin Catalog)
This repository includes helper files that let you expose the plugin as a custom Jellyfin plugin catalog.
Included files (in this repo):
plugins.json— repository index that lists available plugin packages (the URL you add to Jellyfin).manifest.json— per-plugin metadata (included as a convenience; the important part for cataloging isplugins.json).meta.json— optional repository metadata describing the catalog.
Setup and publish
- Build the plugin:
dotnet build -c Release
- Upload the compiled DLL to the repository so it is reachable via a raw download URL. Recommended approaches:
- Create a
releases/directory in the repository and uploadJellyfin.Plugin.MegakinoDownloader.dllthere. - Or create a GitLab/GitHub Release and attach the DLL as a release asset (then use the release/download raw URL).
- Ensure
plugins.jsoncontains apackageUrlthat points to the raw downloadable DLL (example URLs shown below). ThepackageUrlmust be a direct link to the.dllso Jellyfin can download it.
Example raw URLs (edit branch/path as needed):
-
Repository index (plugins.json):
https://git.cydium.net/WildesBenny/Jellyfin-Megakino-Downloader/-/raw/main/plugins.json -
Plugin DLL (example
packageUrlused inplugins.json):https://git.cydium.net/WildesBenny/Jellyfin-Megakino-Downloader/-/raw/main/releases/Jellyfin.Plugin.MegakinoDownloader.dll
Add the catalog to Jellyfin
- In Jellyfin Admin: go to Plugins → Catalogs → Add.
- Enter the raw URL to
plugins.json(the repository index) and save. - Open Plugins → Catalogs → Refresh (or wait a short while) to fetch the new index.
- Install "Jellyfin Megakino Downloader" from the catalog and restart the server.
Notes and tips
packageUrlinplugins.jsonmust point to a downloadable.dll(raw file or release asset). If you change branches or the release layout, updateplugins.jsonaccordingly.manifest.jsonis included as plugin metadata andmeta.jsondocuments the catalog; Jellyfin mainly usesplugins.jsonfor discovery.- If you want, I can add a CI job to build the DLL and automatically attach it to a release, then update
plugins.jsonto point to that release asset.
CI: Automatic build & release
This repository contains a .gitlab-ci.yml that will automatically build the plugin and publish the compiled DLL as a GitLab Release asset when pushed to main.
How it works
- The pipeline runs
dotnet build -c Releaseusing the .NET 8 SDK image and copies the compiled DLL intoreleases/. - A release job then uploads the DLL to the project's Release (tag
v<short-commit-sha>) and adds the DLL as a release asset.
What you need to configure
- Add a CI variable
GITLAB_RELEASE_TOKEN(Repository → Settings → CI/CD → Variables) containing a Personal Access Token withapiscope so the pipeline can create releases and upload assets. Keep it protected. - The pipeline triggers on commits to
main. You can change the branch or trigger manually if you prefer.
Result
- After the pipeline completes, the DLL will be available as a release asset. Use the release raw download URL as the
packageUrlinplugins.json(or keep the existing raw path underreleases/if you want to reference a static path).
If you want, I can also add a GitHub Actions workflow that does the same for GitHub releases.
Usage
- Use the Feed/Search tabs to browse MegaKino content.
- Open a detail page to download a film or specific episode(s).
- The plugin writes
.nfofiles and poster images beside downloaded media so Jellyfin/Kodi can import metadata automatically. - Subscriptions can check for new episodes automatically at a configurable interval.
Security & Privacy
- The plugin spawns a Python subprocess and performs network requests to external hosters. Ensure the server environment and configured Python interpreter are secured and trusted.
- The plugin caches images and stores download metadata under the Jellyfin plugin configuration path.
Notes
- The
megakinoPython module is not modified by this plugin; it is used as a separate subprocess. - The plugin is provided for educational and personal-automation use cases. Respect content owners and terms of service.
This README was generated by the project maintainer upon request.