Giter Club home page Giter Club logo

jellyfin-plugin-anidb's Introduction

Jellyfin

The Free Software Media System


Logo Banner

GPL 2.0 License Current Release Translation Status Azure Builds Docker Pull Count
Donate Submit Feature Requests Chat on Matrix Join our Subreddit Release RSS Feed Master Commits RSS Feed


Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby's 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it. We welcome anyone who is interested in joining us in our quest!

For further details, please see our documentation page. To receive the latest updates, get help with Jellyfin, and join the community, please visit one of our communication channels. For more information about the project, please see our about page.

Want to get started?
Check out our downloads page or our installation guide, then see our quick start guide. You can also build from source.

Something not working right?
Open an Issue on GitHub.

Want to contribute?
Check out our contributing choose-your-own-adventure to see where you can help, then see our contributing guide and our community standards.

New idea or improvement?
Check out our feature request hub.

Don't see Jellyfin in your language?
Check out our Weblate instance to help translate Jellyfin and its subprojects.

Detailed Translation Status

Jellyfin Server

This repository contains the code for Jellyfin's backend server. Note that this is only one of many projects under the Jellyfin GitHub organization on GitHub. If you want to contribute, you can start by checking out our documentation to see what to work on.

Server Development

These instructions will help you get set up with a local development environment in order to contribute to this repository. Before you start, please be sure to completely read our guidelines on development contributions. Note that this project is supported on all major operating systems except FreeBSD, which is still incompatible.

Prerequisites

Before the project can be built, you must first install the .NET 8.0 SDK on your system.

Instructions to run this project from the command line are included here, but you will also need to install an IDE if you want to debug the server while it is running. Any IDE that supports .NET 6 development will work, but two options are recent versions of Visual Studio (at least 2022) and Visual Studio Code.

ffmpeg will also need to be installed.

Cloning the Repository

After dependencies are installed you will need to clone a local copy of this repository. If you just want to run the server from source you can clone this repository directly, but if you are intending to contribute code changes to the project, you should set up your own fork of the repository. The following example shows how you can clone the repository directly over HTTPS.

git clone https://github.com/jellyfin/jellyfin.git

Installing the Web Client

The server is configured to host the static files required for the web client in addition to serving the backend by default. Before you can run the server, you will need to get a copy of the web client since they are not included in this repository directly.

Note that it is also possible to host the web client separately from the web server with some additional configuration, in which case you can skip this step.

There are three options to get the files for the web client.

  1. Download one of the finished builds from the Azure DevOps pipeline. You can download the build for a specific release by looking at the branches tab of the pipelines page.
  2. Build them from source following the instructions on the jellyfin-web repository
  3. Get the pre-built files from an existing installation of the server. For example, with a Windows server installation the client files are located at C:\Program Files\Jellyfin\Server\jellyfin-web

Running The Server

The following instructions will help you get the project up and running via the command line, or your preferred IDE.

Running With Visual Studio

To run the project with Visual Studio you can open the Solution (.sln) file and then press F5 to run the server.

Running With Visual Studio Code

To run the project with Visual Studio Code you will first need to open the repository directory with Visual Studio Code using the Open Folder... option.

Second, you need to install the recommended extensions for the workspace. Note that extension recommendations are classified as either "Workspace Recommendations" or "Other Recommendations", but only the "Workspace Recommendations" are required.

After the required extensions are installed, you can run the server by pressing F5.

Running From The Command Line

To run the server from the command line you can use the dotnet run command. The example below shows how to do this if you have cloned the repository into a directory named jellyfin (the default directory name) and should work on all operating systems.

cd jellyfin                          # Move into the repository directory
dotnet run --project Jellyfin.Server --webdir /absolute/path/to/jellyfin-web/dist # Run the server startup project

A second option is to build the project and then run the resulting executable file directly. When running the executable directly you can easily add command line options. Add the --help flag to list details on all the supported command line options.

  1. Build the project
dotnet build                       # Build the project
cd Jellyfin.Server/bin/Debug/net8.0 # Change into the build output directory
  1. Execute the build output. On Linux, Mac, etc. use ./jellyfin and on Windows use jellyfin.exe.

Accessing the Hosted Web Client

If the Server is configured to host the Web Client, and the Server is running, the Web Client can be accessed at http://localhost:8096 by default.

API documentation can be viewed at http://localhost:8096/api-docs/swagger/index.html

Running from GH-Codespaces

As Jellyfin will run on a container on a github hosted server, JF needs to handle some things differently.

NOTE: Depending on the selected configuration (if you just click 'create codespace' it will create a default configuration one) it might take 20-30 secounds to load all extensions and prepare the enviorment while vscode is already open. Just give it some time and wait until you see Downloading .NET version(s) 7.0.15~x64 ...... Done! in the output tab.

NOTE: If you want to access the JF instance from outside, like with a WebClient on another PC, remember to set the "ports" in the lower VsCode window to public.

NOTE: When first opening the server instance with any WebUI, you will be send to the login instead of the setup page. Refresh the login page once and you should be redirected to the Setup.

There are two configurations for you to chose from.

Default - Development Jellyfin Server

This creates a container that has everything to run and debug the Jellyfin Media server but does not setup anything else. Each time you create a new container you have to run though the whole setup again. There is also no ffmpeg, webclient or media preloaded. Use the .NET Launch (nowebclient) lunch config to start the server.

Keep in mind that as this has no web client you have to connect to it via an extenal client. This can be just another codespace container running the WebUI. vuejs does not work from the getgo as it does not support the setup steps.

Development Jellyfin Server ffmpeg

this extens the default server with an default installation of ffmpeg6 though the means described here: https://jellyfin.org/docs/general/installation/linux#repository-manual If you want to install a specific ffmpeg version, follow the comments embedded in the .devcontainer/Dev - Server Ffmpeg/install.ffmpeg.sh file.

Use the ghcs .NET Launch (nowebclient, ffmpeg) launch config to run with the jellyfin-ffmpeg enabled.

Running The Tests

This repository also includes unit tests that are used to validate functionality as part of a CI pipeline on Azure. There are several ways to run these tests.

  1. Run tests from the command line using dotnet test
  2. Run tests in Visual Studio using the Test Explorer
  3. Run individual tests in Visual Studio Code using the associated CodeLens annotation

Advanced Configuration

The following sections describe some more advanced scenarios for running the server from source that build upon the standard instructions above.

Hosting The Web Client Separately

It is not necessary to host the frontend web client as part of the backend server. Hosting these two components separately may be useful for frontend developers who would prefer to host the client in a separate webpack development server for a tighter development loop. See the jellyfin-web repo for instructions on how to do this.

To instruct the server not to host the web content, there is a nowebclient configuration flag that must be set. This can specified using the command line switch --nowebclient or the environment variable JELLYFIN_NOWEBCONTENT=true.

Since this is a common scenario, there is also a separate launch profile defined for Visual Studio called Jellyfin.Server (nowebcontent) that can be selected from the 'Start Debugging' dropdown in the main toolbar.

NOTE: The setup wizard can not be run if the web client is hosted separately.


This project is supported by:

DigitalOcean ย  JetBrains logo

jellyfin-plugin-anidb's People

Contributors

anthonylavado avatar barronpm avatar bond-009 avatar crobibero avatar cvium avatar danigta avatar dependabot[bot] avatar dkanada avatar erayan avatar h1dden-da3m0n avatar hawken93 avatar jellyfin-bot avatar joshuaboniface avatar lukepulverenti avatar mateustoyama avatar matt07211 avatar mcd1992 avatar methbkts avatar mtlott avatar musi13 avatar nalsai avatar oddstr13 avatar pikami avatar reynn avatar scholars-mate avatar stillloading avatar tomgillen avatar zepx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jellyfin-plugin-anidb's Issues

Missing information "undefined"

Some shows return only "undefined" when trying to identify them. The link to the entry from AniDB gets added but other information and images are missing.

Logs:

[23:54:53] [INF] [64] Jellyfin.Api.Controllers.ItemLookupController: Setting provider id's to item fa6b9ec1-4251-3557-2d02-533b6866a756-JK Genkai Koubi Goui Sounyuu de Bachibachi Niku Anaka: {"AniDB":"17316"} [matroska,webm @ 0x563aa4a74700] Could not find codec parameters for stream 3 (Attachment: none): unknown codec Consider increasing the value for the 'analyzeduration' (200000000) and 'probesize' (5000000) options [matroska,webm @ 0x563aa4a74700] Could not find codec parameters for stream 4 (Attachment: none): unknown codec Consider increasing the value for the 'analyzeduration' (200000000) and 'probesize' (5000000) options [matroska,webm @ 0x563aa4a74700] Could not find codec parameters for stream 5 (Attachment: none): unknown codec Consider increasing the value for the 'analyzeduration' (200000000) and 'probesize' (5000000) options [matroska,webm @ 0x563aa4a74700] Could not find codec parameters for stream 6 (Attachment: none): unknown codec Consider increasing the value for the 'analyzeduration' (200000000) and 'probesize' (5000000) options [matroska,webm @ 0x563aa4a74700] Could not find codec parameters for stream 7 (Attachment: none): unknown codec Consider increasing the value for the 'analyzeduration' (200000000) and 'probesize' (5000000) options [matroska,webm @ 0x563aa4a74700] Could not find codec parameters for stream 8 (Attachment: none): unknown codec Consider increasing the value for the 'analyzeduration' (200000000) and 'probesize' (5000000) options [matroska,webm @ 0x563aa4a74700] Could not find codec parameters for stream 9 (Attachment: none): unknown codec Consider increasing the value for the 'analyzeduration' (200000000) and 'probesize' (5000000) options Unsupported codec with id 0 for input stream 3 Unsupported codec with id 0 for input stream 4 Unsupported codec with id 0 for input stream 5 Unsupported codec with id 0 for input stream 6 Unsupported codec with id 0 for input stream 7 Unsupported codec with id 0 for input stream 8 Unsupported codec with id 0 for input stream 9 [23:54:54] [INF] [3] MediaBrowser.Providers.TV.SeriesMetadataService: Removing virtual season 1 in series JK Genkai Koubi Goui Sounyuu de Bachibachi Niku Anaka [23:54:54] [INF] [3] Emby.Server.Implementations.Library.LibraryManager: Removing item, Type: Season, Name: Season 1, Path: , Id: ae9a5af0-91c2-cc0b-8e12-9210f800531b [23:54:54] [INF] [3] Jellyfin.Plugin.Tvdb.Providers.TvdbMissingEpisodeProvider: Creating Season Season 1 entry for JK Genkai Koubi Goui Sounyuu de Bachibachi Niku Anaka [23:54:54] [INF] [3] MediaBrowser.Providers.TV.SeriesMetadataService: Creating Season Season Unknown entry for JK Genkai Koubi Goui Sounyuu de Bachibachi Niku Anaka [23:54:54] [INF] [3] Emby.Server.Implementations.Library.LibraryManager: Removing item, Type: Season, Name: Season 1, Path: , Id: ae9a5af0-91c2-cc0b-8e12-9210f800531b [23:54:54] [WRN] [3] Jellyfin.Server.Middleware.ResponseTimeMiddleware: Slow HTTP Response from http://192.168.178.31:8096/Items/RemoteSearch/Apply/fa6b9ec1425135572d02533b6866a756?ReplaceAllImages=true to 192.168.178.24 in 0:00:01.7740956 with Status Code 204

Screenshot_1
Screenshot_2

[Request] Retrieve all tags

Hi, I noticed that the plugin only retrieves the tags listed at the top of an AniDB page, but those are just a few ones (I assume this section is intended to be a summary?). I'd prefer it if it could also retrieve all of them lower on the page (these ones):

Untitled

Could this be added, please?

Plugin build for Jellyfin 10.6.4

I already tried modified build.yml, then build the plugin.
But obviously it doesn't work.

Could you provide plugin build for Jellyfin 10.6.4 ?
Or how can I build it myself?

Episode not added to Season

Some episodes are not properly added to a show or a season, even when placed in the correct folder with a similar filename to other episodes.

For instance, this episode of Goblin Slayer (S02E02):

S02E02

image

Does not appear in the Season:

Season 2

image

The filename is the same format as the S02E01 which was properly identified:
image

Contents of the .nfo generated:

[SubsPlease] Goblin Slayer S2 - 01 (1080p) [23637EF6].nfo
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<episodedetails>
  <plot />
  <lockdata>false</lockdata>
  <dateadded>2023-10-07 01:42:47</dateadded>
  <title>An Ordinary Spring Day</title>
  <rating>0</rating>
  <year>2023</year>
  <imdbid>tt20896366</imdbid>
  <tvdbid>9040106</tvdbid>
  <runtime>24</runtime>
  <art>
    <poster>/home/multimedia/Downloads/Animes/Goblin Slayer/Season 2/metadata/[SubsPlease] Goblin Slayer S2 - 01 (1080p) [23637EF6].jpg</poster>
  </art>
  <actor>
    <name>Yuuichirou Umehara</name>
    <role>Goblin Slayer (voice)</role>
    <type>Actor</type>
    <sortorder>0</sortorder>
    <thumb>/var/lib/jellyfin/metadata/People/Y/Yuuichirou Umehara/folder.jpg</thumb>
  </actor>
  <actor>
    <name>Yui Ogura</name>
    <role>Priestess (voice)</role>
    <type>Actor</type>
    <sortorder>1</sortorder>
    <thumb>/var/lib/jellyfin/metadata/People/Y/Yui Ogura/folder.jpg</thumb>
  </actor>
  <actor>
    <name>Nao Toyama</name>
    <role>High Elf Archer (voice)</role>
    <type>Actor</type>
    <sortorder>2</sortorder>
    <thumb>/var/lib/jellyfin/metadata/People/N/Nao Toyama/folder.jpg</thumb>
  </actor>
  <actor>
    <name>Yuka Iguchi</name>
    <role>Cow Girl (voice)</role>
    <type>Actor</type>
    <sortorder>3</sortorder>
    <thumb>/var/lib/jellyfin/metadata/People/Y/Yuka Iguchi/folder.jpg</thumb>
  </actor>
  <actor>
    <name>Maaya Uchida</name>
    <role>Guild Girl (voice)</role>
    <type>Actor</type>
    <sortorder>4</sortorder>
    <thumb>/var/lib/jellyfin/metadata/People/M/Maaya Uchida/folder.jpg</thumb>
  </actor>
  <actor>
    <name>Yuichi Nakamura</name>
    <role>Dwarf Shaman (voice)</role>
    <type>Actor</type>
    <sortorder>5</sortorder>
    <thumb>/var/lib/jellyfin/metadata/People/Y/Yuichi Nakamura/folder.jpg</thumb>
  </actor>
  <actor>
    <name>Tomokazu Sugita</name>
    <role>Lizard Priest (voice)</role>
    <type>Actor</type>
    <sortorder>6</sortorder>
    <thumb>/var/lib/jellyfin/metadata/People/T/Tomokazu Sugita/folder.jpg</thumb>
  </actor>
  <actor>
    <name>Yoko Hikasa</name>
    <role>Witch (voice)</role>
    <type>Actor</type>
    <sortorder>7</sortorder>
    <thumb>/var/lib/jellyfin/metadata/People/Y/Yoko Hikasa/folder.jpg</thumb>
  </actor>
  <actor>
    <name>Yoshitsugu Matsuoka</name>
    <role>Spearman (voice)</role>
    <type>Actor</type>
    <sortorder>8</sortorder>
    <thumb>/var/lib/jellyfin/metadata/People/Y/Yoshitsugu Matsuoka/folder.jpg</thumb>
  </actor>
  <actor>
    <name>Aya Endo</name>
    <role>Sword Maiden (voice)</role>
    <type>Actor</type>
    <sortorder>9</sortorder>
    <thumb>/var/lib/jellyfin/metadata/People/A/Aya Endo/folder.jpg</thumb>
  </actor>
  <showtitle>Goblin Slayer</showtitle>
  <episode>1</episode>
  <season>2</season>
  <aired>2023-10-06</aired>
  <fileinfo>
    <streamdetails>
      <video>
        <codec>h264</codec>
        <micodec>h264</micodec>
        <bitrate>8153005</bitrate>
        <width>1920</width>
        <height>1080</height>
        <aspect>16:9</aspect>
        <aspectratio>16:9</aspectratio>
        <framerate>23.976025</framerate>
        <scantype>progressive</scantype>
        <default>True</default>
        <forced>False</forced>
        <duration>23</duration>
        <durationinseconds>1420</durationinseconds>
      </video>
      <audio>
        <codec>aac</codec>
        <micodec>aac</micodec>
        <bitrate>127999</bitrate>
        <language>jpn</language>
        <scantype>progressive</scantype>
        <channels>2</channels>
        <samplingrate>44100</samplingrate>
        <default>True</default>
        <forced>False</forced>
      </audio>
      <subtitle>
        <codec>ass</codec>
        <micodec>ass</micodec>
        <language>eng</language>
        <scantype>progressive</scantype>
        <default>True</default>
        <forced>False</forced>
      </subtitle>
    </streamdetails>
  </fileinfo>
</episodedetails>
[SubsPlease] Goblin Slayer S2 - 02 (1080p) [65A01B7B].nfo
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<episodedetails>
  <plot />
  <lockdata>false</lockdata>
  <dateadded>2023-10-13 19:06:16</dateadded>
  <title>Goblin Slayer S2</title>
  <language>en</language>
  <art />
  <showtitle />
  <fileinfo>
    <streamdetails>
      <video>
        <codec>h264</codec>
        <micodec>h264</micodec>
        <bitrate>8151020</bitrate>
        <width>1920</width>
        <height>1080</height>
        <aspect>16:9</aspect>
        <aspectratio>16:9</aspectratio>
        <framerate>23.976025</framerate>
        <scantype>progressive</scantype>
        <default>True</default>
        <forced>False</forced>
      </video>
      <audio>
        <codec>aac</codec>
        <micodec>aac</micodec>
        <bitrate>128000</bitrate>
        <language>jpn</language>
        <scantype>progressive</scantype>
        <channels>2</channels>
        <samplingrate>44100</samplingrate>
        <default>True</default>
        <forced>False</forced>
      </audio>
      <subtitle>
        <codec>ass</codec>
        <micodec>ass</micodec>
        <language>eng</language>
        <scantype>progressive</scantype>
        <default>True</default>
        <forced>False</forced>
      </subtitle>
    </streamdetails>
  </fileinfo>
</episodedetails>

I see to remember that identification and categorization in Shows/Seasons was based on the path and the filename, so why is Jellyfin properly identifying the first episode but not the second ?

metadata for OP, ED, PV etc.

I'd really love to have support for specials like openings and endings. @nalsai in #6 said

If you want any of these implemented or have another problem, make a new issue or message me, then we can work on it.
Originally posted by @nalsai in #6 (comment)

and so here's the issue.

It could also be good idea to support use of anidb episode prefixes:

  • regular episode: none
  • special episode: S
  • openings: OP (sometimes it can be sth like OP1b)
  • endings: ED (sometimes it can be sth like ED1b)
  • trailer/promo/ads: T

Alternatively the prefixes could also be:

  • E, EP or Episode - for regular episodes
  • SP or Special - for specials
  • PV, P, AD, PR (not necessarily) or Promo (not necessarily) - for trailer/promo/ads

There could be more types of episodes, but I haven't come across any.

And of course padded episode numbers (EP1, EP01 or EP0001) should also be supported, but I guess it's already implemented.

Error: Root element is missing.

I somehow get this error with the plugin from your unstable repo.

Seems something is wrong.

[2021-01-28 22:08:31.052 +01:00] [ERR] Error in "AniDB"
System.Xml.XmlException: Root element is missing.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.ParseDocumentContentAsync_ReadData(Boolean needMoreChars)
   at System.Xml.AsyncHelper.CallBoolTaskFuncWhenFinishCoreAsync[TArg](Task task, Func`2 func, TArg arg)
   at System.Xml.XmlReader.MoveToContentAsync()
   at Jellyfin.Plugin.AniDB.Providers.AniDB.Metadata.AniDbSeriesProvider.FetchSeriesInfo(MetadataResult`1 result, String seriesDataPath, String preferredMetadataLangauge)
   at Jellyfin.Plugin.AniDB.Providers.AniDB.Metadata.AniDbSeriesProvider.GetMetadata(SeriesInfo info, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Manager.MetadataService`2.ExecuteRemoteProviders(MetadataResult`1 temp, String logName, TIdType id, IEnumerable`1 providers, CancellationToken cancellationToken)

Also, what is the best Anime scraper?

Don't replace user entered ids

When using the plugin as well as the TVDB plugin if you manually specify an andb episode entry and refresh metadata on an entry the manually entered id will be reset and it will pull the wrong info again.

feature request: implement image fetching from thetvdb/fanart

Background is this jellyfin issue. TL;DR: Combining the anidb plugin with TheTVDB can cause some watched-state woes between seasons.

The primary reason I want to enable the tvdb-plugin is so that I can get the pretty banners/backdrops/logos etc. that it can fetch for the series. If this plugin could be updated to fetch images from the same sources (thetvdb.com and fanart.tv) there would be no need to enable TheTVDB. I'm guessing it should be fairly easy to implement using the anime-lists as a mapping.

Unable To Detect Episodes With Information In The End Of The Filenames

I have had a difficult time having Jellyfin detect episode information/names properly when there is information located near the end of filenames. This could potentially be related to #6 I am not sure.

Just for example:
In my folder: /Videos/Anime/Fate Stay Night/Fate Stay Night - S01E01 - The First Day - [76C77486] [Moby JJ].mkv
In Jellyfin it shows up as: Fate Stay/Night - 1. Fate Stay Night - S01E01 - The First Day - [76C77486] [Moby JJ]

I would expect it to ignore the ending [76C77486] [Moby JJ]. Often I also place codec and similar information in the filenames such as Fate Stay/Night - 1. Fate Stay Night - S01E01 - The First Day - [BluRay MKV FLAC 2.0] [76C77486] [Moby JJ]. I would expect it to match the former lines and ignore everything it doesn't recognize (So everything after S01E01 or the episode name).

Now I am not entirely sure if this is an issue with Jellyfin, or an issue with this plugin. I state this because I have also had issues with this with Music. While I understand this plugin doesn't handle music, just for clarity, an example with Music:
/Music/Artists/Zuill Bailey/Zuill Bailey - Bach Cello Suites Volume 2 - [192k 24bit] [WAV] (Octave Records)/01 - Zuill Bailey - BWV 1008 Suite No. 2 in D minor - Prelude.wav; /Music/Artists/Zuill Bailey/Zuill Bailey - Bach Cello Suites Volume 2 - [DSD] (Octave Records)/01 - Zuill Bailey - BWV 1008 Suite No. 2 in D minor - Prelude.dsf. While not exactly the same folder/file structure, these show up in Jellyfin without proper metadata, and show up as the folder names (Zuill Bailey - Bach Cello Suites Volume 2 - [DSD] (Octave Records)) instead of simply displaying Zuill Bailey - Bach Cello Suites Volume 2 as I would expect.

My Movies on the other hand, are labeled similarly and detect majority of the time properly, which is creating even more confusion for me. This makes me think this may be a plugin independent issue, and not Jellyfin? But I am not entirely sure anymore.
/Videos/Movies/Out of the Past (1947)/Out of the Past (1947) - BluRay Remux 1080p AVC FLAC 2.0 [HiFi].mkv is an example. Detects no problems.

TV Shows also seem to generally detect without issues, although I have run into one or two here or there.
/Videos/TV Shows/SpongeBob SquarePants/Season 01/SpongeBob SquarePants - S01E01-E03 - Help Wanted, Reef Blower, Tea at the Treedome - 1080p AMZN WEB-DL DDP2.0 x264 [TVSmash]

I only provide the latter for redundancy and clarity, to help further explain my issue with the anime detection. It seems to be a bit random, as I can have some things named exactly the same, yet one would have issues detecting whilist the other detects fine. My files are generally pretty consistent from one another as far as the local naming schemes go. It would also not be the easiest thing to go in and rename terabytes of data.
I have heard others complain about detection issues as well, whilist Plex detects no issues according to them. Again I am unsure if this is a Jellyfin issue, or a plugin independent issue. I can move this issue over to the Jellyfin repository if desired.

[Request] Scan subdirectories for series and automatically create collections for series within the same subfolder

My current folder structure looks like the following:

Series Name > Series Season Name [anidbid-12345] > Name - 01 - [some][info].ext

As AniDB does not support traditional seasons, a nice alternative would be to group series inside a folder and then have that folder be scanned in as a collection. This would greatly aid in adding new series to a library, and it would keep the main library directory more organized.

An example of this structure would look something this:

Anime Library >
        Initial D > Initial D First Stage [anidbid-135] > Initial D First Stage - 01.mkv
        Initial D > Initial D First Stage [anidbid-135] > Initial D First Stage - 02.mkv
        Initial D > Initial D Second Stage [anidbid-145] > Initial D Second Stage - 01.mkv
        Initial D > Initial D Second Stage [anidbid-145] > Initial D Second Stage - 02.mkv
        Initial D > Initial D Third Stage [anidbid-625] > Initial D Third Stage Full Movie (2001).mkv
        Initial D > ...

The base Initial D folder would be located in the root of the library. When scanned, Jellyfin should check within the folder and create a collection titled Initial D and then add the contained series to that collection.

AniDB Login & MyList Tracking

please add the ability to login to anidb and track to mylist directly from the plugin. Its annoying to have to manually update mylist on anidb.
And provide options to do the following

features

  • Scrobble newly added anime (anime imported into jf, is added into anidbs mylist. Ignore if already present on mylist)
  • default import status (when added in above, set status to defaultm for example set to unwatched by default, then when the user watches 1 episode it can change to watched)
  • track watched and completed episodes
  • check status of already watched anime on jf (series says you completed it on jellyfin, but is set as not completed on anidb? have it mark it as complete)
  • an option to don't unwatch stuff" on mylist if its marked as unwatched after previously being watched in jellyfin
  • scan for subgroups on files and mark it in mylist
  • see user ratings
  • add start/end watching dates to mylist

failsafes

  • ignore entires that dont have an anidb page number (if you have an anime in your library, and it couldnt find the anidb id for metadata, completely ignore it so it doesnt mess up mylist)

  • a history feature with ability to revert recent changes (failsafe in case it adds an anime with wrong metadata, accidentally marks the wrong anime/bunch of episodes as watched, etc.)

https://wiki.anidb.net/API
https://anidb.net/software

Movies are not detected automatically

Jellyfin version: 1.8.0
AniDB plugin version: 6.0.0.0

Steps to reproduce:

  • Create a new Movie library, pointing it to a directory with anime movies (arranged according to jellyfin standard, one movie per subdirectory, named in romaji after anidb main title)
  • Disable all other metadata providers, keeping only the anidb provider for this library
  • Let jellyfin scan the library

Result: No metadata is found for the movies.

Other notes:

  • If you manually try to identify the movies they will be found in anidb, so it's only the automatic scan that fails
  • plugin works as expected for shows
  • anilist plugin properly detects the movies if enabled
  • rescanning the library (with "replace all metadata") does not help
  • removing and re-adding the library does not help

Search, as used to identify a show/movie/etc, only returns a single item

Steps:

  1. Install the AniDB plugin.
  2. Create a library of type show with at least one show in it.
  • Ensure the AniDB metadata downloader is enabled, easiest to see if it's the only downloader enabled for the library.
  1. Open the library, select the show, and select "Identify"
  2. Enter name "Lost", hit "Search"

Result: A single show (Lost Universe) shows up.
Expected result: Multiple shows are listed, goal is probably this list filtered to fit library type (show here, movie for movie type library, both for other type) so that the correctly identified show can be selected.

More details:
The series provider search function simply calls GetMetadata instead of hitting a search endpoint:

var metadata = await GetMetadata(searchInfo, cancellationToken).ConfigureAwait(false);

Option to limit the number of cast and crew entries

It would be nice to have an option to limit the number of cast and crew names pulled from the provider.
Many entries on AniDB have an absurd number of "Staff" entries, when all I really want are the several lead character's VAs. Like the TMDB plugin, an option to limit cast to a certain number

Search should match on exact titles first

It seems that this plugin likes to match the longest title containing the search words.

Some examples:

  • "Saki" is matched as "Saki: Achiga Hen - Episode of Side-A"
  • "Sangatsu no Lion" is matched as "Sangatsu no Lion (2017)"
  • "Seikai no Senki" is matched as "Seikai no Senki II"

and so on. I think the matching logic would get much better if it first attempted to find an exact match before attempting current logic.

Handling of AniDB bans and 1000+ Anime Series

Background

The AniDB API is heavily rate-limited and will ban any IP that requests more than maybe a few hundred series. Some of us data hoarders have far more series than that, meaning we can never do a full metadata refresh without getting banned.

Problems

I can think of three different scenarios when this causes problems:

  • During initial creation of a large library (it was horrible)
  • During full metadata refresh of a large library
  • When adding a large amount of series or episodes in different series in a short time (a day?)

A bit of brainstorming follows ๐Ÿ™‚

Possible solutions?

When I added my library I manually kept track in the xml cache directory for when I started getting banned messages. At that point I:

  1. Stopped the library scanning
  2. Noted ID:s for the bad xml files and removed them
  3. Waited at least 24 hours
  4. Manually refreshed the metadata for the previously noted ID:s
  5. Restarted then library scan; rinse and repeat

Not the most smooth sailing possible. I guess PR #42 may have helped me to detect the bans which would be an improvement, but unless it also prevents the plugin from making more requests it might also have made the bans longer (I understand the AniDB API adds ban-time for each "unsolicited" request).

A possible high-level solution (which I don't know if it's possible) would be to limit the plugin to maybe 200 requests during a sliding window of 24 hours. When asked for more the plugin should just respond that it currently has no metadata and maybe schedule a new refresh for that series in 24/48/possible more hours. Same if a ban is detected: refuse to send any more requests for at least 24 hours. It will still take very long time for a large library to be refreshed; but it would be populated eventually and without any cumbersome user interaction.

As for library metadata refresh I think there can be some improvements to the xml-file caching. At the moment it looks like the xml files are cached for 7 days. One idea would be to make a daily scheduled task that updates the 50 (or 100 or something) oldest xml files for series that are present in the library and raise the cache time to 30, 60 or 90 days. This would keep the xml files fairly fresh even for larger collections and you wouldn't run in to trouble if you configure the libraries to refresh periodically.

I realize that this is a quite big change, and maybe the problem is rare enough that not many more than I find this troublesome. Unfortunately I cannot help with the code myself, but I'd like to put it up here as an idea, and maybe someone else finds it to be a fun challenge. Anyway; Thank you for an awesome plugin ๐Ÿ˜ƒ

GetMetadata always returns the first search result, regardless if it matches the request

Steps:

  1. Install the AniDB plugin.
  2. Create a library of type show with at least one show in it.
  • Ensure the AniDB metadata downloader is enabled as the first metadata downloader in the library (for each category), and also enable TheMovieDb as a secondary downloader.
  1. Open the library, select the show, and select "Identify"
  2. Enter name "Lost", hit "Search"
  3. Select the second entry ("Lost", from TheMovieDb) and hit "Ok"

Result: Metadata (title, images, description, etc) for "Lost Universe" are loaded, and the external links for the show are:

Expected result: Metadata for the selected show ("Lost") loaded, and AniDB does not have an ID linked because the show isn't listed there.

More details:
The equality check in the series provider passes the same value into both sides, so they can never not be equal. This results in whatever show first matches the search being selected and tagged with an AniDB id.

aid = await Equals_check.Fast_xml_search(info.Name, info.Name, cancellationToken, true);

anidb id for season

Hello,

Is it possible to choose the id only for the season ?
anidb don't provide a show id, only a season.

Thank you,
Best !

[Request] Documentation on folder name structure so plugin can retrieve AniDB ID from folder name

Hello

First off, thanks for the great work. It helps to have plugins dedicated for retrieving anime metadata.

One thing I've noticed is that the documentation does not mention how to add the AniDB ID to the name the folder in a way that the plugin can pick it up automatically.

This feature is already provided by Jellyfin for movies and TV shows

image

It would be great if you could add that as part of the documentation.

Thanks again

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.