[Release] HTTP Anidb Metadata Agent (HAMA)

This is the first release of the HTTP AniDB Metadata Agent (HAMA), an alternative AniDB-based anime metadata agent to [Tuffo's excellent UDP-based AniDB agent](http://forums.plexapp.com/index.php/topic/37750-anidb-metadata-agent/).

 

Features:

 

  • Movie and TV agent
  • Uses AniDB's HTTP API for significantly improved lookup times1
  • For TV anime, performs a secondary search against the TVDB to pull down banners, posters and backgrounds2
  • Correctly handles episode names for Specials (as in the UDP version)
  • Maps the top 5 categories in AniDB to the genre list
  • Extracts Studios3, Writers, Directors, Producers credits from AniDB
  • Estimates the duration of each episode (average of all non-special episode lengths)
  • Marks 18-restricted Content4

 

1 I haven't actually measured them side-by-side but it seems much faster and on paper it should be, as all data is looked up with one request

2 This behavior can be disabled or only enabled for specific image types. By default, we select AniDB's poster, but this can be disabled. If like me, you use Local Media Assets to set background images in the media folder, you should move that plugin to the top of the priority list or else this agent's backgrounds will be selected instead.

3 Plex tends to map Studio names to TV Studios and so you may see some TV Studio logos popping up as a result of this (eg the anime studio Seven Arcs will display Australia's Channel Seven logo) so I may remove it.

4 It marks it as NC-17 - this causes Plex to mark it with a rating logo. Does not look up TVDB for Adult content

 

Limitations & Notes:

 

  • Provided your media has a hash known to AniDB, Tuffo's UDP client will always give a correct identification. Because AniDB does not expose any sort of search mechanism over HTTP, I instead am running a mirror of an AniDB name search system written by [Eloyard](http://anisearch.outrance.pl/doc.html) as his own deployment's database is around six months out of date. The lookup is slightly fuzzy and can be innacurate in some cases.
  • In the event that matching is simply not working correctly you can bypass the search process if you know the correct AniDB Anime ID for the show by searching for 'aid:' followed by the numerical id
  • There is no explicit AniDB to TVDB mapping - it is simply a text-based search, looking for a complete match. AniDB lists every season of a TV show separately, where TVDB will munge them all into one season regardless of whether it makes sense to do so. Generally it seems that searching with the official English title from AniDB gives the correct hit on TVDB but this may not always be the case. There's no way to override the match at the moment and if you really want those pictures you may need to manually add them.
  • While there is a significant speedup over the UDP API, I have also had to add some flooding control. AniDB's HTTP API has flood protection that may ban you if you re-request the same content more than once on a given day, or if you request data faster than once every 2 seconds on average. As such, all results are cached for 24 hours and all lookups are kept at least 2 seconds apart. Plex tends to use one thread per series lookup, so this makes the behavior when scanning multiple series at once slightly slower. But there is only one lookup per show so in most cases you won't notice a problem. There is an outside chance that the 24-hour cache will cause you to miss new episode names if you're watching very current shows, but generally new episode titles are entered into AniDB days or weeks in advance of screening so again, this shouldn't be an issue.
  • I'm not a Python programmer - this is the first major thing I've ever written in Python, I usually work in C++ or C#. As such there are likely tons of bugs and inefficiencies. I'm not responsible if you get banned from AniDB despite my best efforts to avoid this. I am also not responsible if for some reason my code breaks or eats your homework. It's working fairly well for me in my limited testing, however.
  • There's heaps and heaps of debug logging still in place. I'll cut it back a bit once it's stable.

Usage: Just extract Hama.bundle to your Plex Media Server's plugin library and restart Plex Media Server and it should appear as a selectable agent. If you have long-running shows with more than a hundred episodes, eg Naruto, I suggest also running [BABS](http://forums.plexapp.com/index.php/topic/31081-better-absolute-scanner-babs/?hl=babs) as your Scanner, as it handles these shows properly (the default Plex TV scanner will assume that episode 101 is season 1 episode 01 and so on). You can set TVDB-related image options in the options for the plugin.

 

Please let me know if you run into problems and I'll be happy to fix them.

 

Update 25th April 2013: New version v0.2.

Update 6th May 2013: New version v0.3, should fix syntax error issues when parsing air date.

Update 7th May 2013: New version v0.4, should fix issue with erroneous attempt to look up movies in TVDB

Updated version with fix for a minor issue when doing tvdb matching against series matches where there are no aliases for the series on TVDB (eg Fairy Tail)

This is freakin' amazing! I've been scouring the net for ways to combine the metadata from anidb and the other PMS agents. I'm actually in the middle of scanning all my anime via the applet so won't get to this immediately, but will let you know how it goes. Thanks so much!
-----
So, I unzipped and put it in my plugin folder, but it doesn't appear to show up, I still have separate tabs under anidb and tvdb agents in my settings.

Shouldn't i see it as an additional agent under tvdb or does it work some other way? (I already had the previous udp anidb agent installed and that is still there.

Thanks!
-----
Argh, thought I figured it out, but not sure. I can enable agents manually in standalone manager, but the agent is showing up as AniDB, is that how it should or is that just the preexisting agent?

Thanks again.

That's probably the previous agent. This one shows up as a top-level one. You may need to enable the 'disable compatibility checking' function (or something with a similar name) in the settings of your server?

You may need to enable the 'disable compatibility checking' function (or something with a similar name) in the settings of your server?

Hi! Just a fyi: the "Disable Capability Checking" option has nothing to do with metadata agents.

Yeah, I already had capability checking disabled since I already have the unauthorized app store, etc...perhaps because I'm on the latest plex pass PMS there's some disconnect?

I've cut and pasted what I think is the most relevant log section from Hama.

2013-05-05 15:17:44,102 (-53f565d8) :  DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.hama in namespace 'metadata'
2013-05-05 15:17:44,117 (-53f565d8) :  DEBUG (networking:172) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes'
2013-05-05 15:17:45,371 (-53f565d8) :  DEBUG (runtime:1104) - Created a thread named 'load_all_services'
2013-05-05 15:17:45,372 (-4f9e9000) :  DEBUG (services:265) - Plug-in is not daemonized - loading services from system
2013-05-05 15:17:45,375 (-53f565d8) :  DEBUG (runtime:1104) - Created a thread named 'get_server_info'
2013-05-05 15:17:45,379 (-4f9e9000) :  DEBUG (networking:172) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_'
2013-05-05 15:17:45,379 (-53f565d8) :  DEBUG (core:149) - Finished starting framework core
2013-05-05 15:17:45,380 (-4f8e5000) :  DEBUG (networking:172) - Requesting 'http://127.0.0.1:32400'
2013-05-05 15:17:45,383 (-53f565d8) :  DEBUG (core:547) - Loading plug-in code
2013-05-05 15:17:45,409 (-53f565d8) :  CRITICAL (core:556) - Exception while loading code (most recent call last):
  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/core.py", line 550, in load_code
    self.init_code = self.loader.load(self.init_path, elevated, use_xpython = Framework.constants.flags.use_xpython in self.sandbox.flags)
  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/code/loader.py", line 47, in load
    code = self.compile(str(source), str(uni(filename)), elevated)
  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/code/loader.py", line 52, in compile
    return RestrictedPython.compile_restricted(source, name, 'exec', elevated=elevated)
  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Framework.bundle/Contents/Resources/Platforms/Shared/Libraries/RestrictedPython/RCompile.py", line 115, in compile_restricted
    gen.compile()
  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Framework.bundle/Contents/Resources/Platforms/Shared/Libraries/RestrictedPython/RCompile.py", line 68, in compile
    tree = self._get_tree()
  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Framework.bundle/Contents/Resources/Platforms/Shared/Libraries/RestrictedPython/RCompile.py", line 59, in _get_tree
    tree = self.parse()
  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Framework.bundle/Contents/Resources/Platforms/Shared/Libraries/RestrictedPython/RCompile.py", line 56, in parse
    return niceParse(self.source, self.filename, self.mode)
  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Framework.bundle/Contents/Resources/Platforms/Shared/Libraries/RestrictedPython/RCompile.py", line 38, in niceParse
    compile(source, filename, mode)
  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Hama.bundle/Contents/Code/__init__.py", line 384
    except ValueError as e:
                       ^
SyntaxError: invalid syntax
 
Thanks for helping and REALLY looking forward to the genre piece! :-)

Try the new version attached to the first post. Looks like I used some syntax which isn't supported in the version of Python included with Plex.

Awesome! Downloaded the new version, restarted, and hello there buddy! Excited to test drive.

Okay, so I first updated my section with the hamamovie agent, then forced refreshed my movie section and only the new entries were updated. I then manually updated the others by "fix incorrect match" and  "match using hamamovies" and it worked pretty much like a charm. All the posters grabbed seemed pretty much in Japanese, unless there were unnotated, and I know you can disable the prefer anidb posters, but is there any way to have it prioritize english language if available. Not a big deal at all. The genre matching is AMAZING!

Speedwise, it's great and no issues with anidb yet.

So now onto the bigger challenge with the TV section. I tried multiple methods, but I kept on coming up with some issues. I first did a full force refresh and again nothing that wasn't new was updated, I could try deep scan, but don't think that would make a difference. In terms of matching, when I selected hamatv as the sole agent (without TVDB enabled as adding to Hamatv), it updated genres, posters, and episode titles as advertised, but overwrote the TVDB episode descriptions. So i went ahead and enabled TVDB and placed it above Hamatv in the priority preferences for the Hamatv agent and it seemed to work fine until the end when it somehow matched it with another TV show and overwrote everything due to not finding a string (I believe-see log attached). I then went back into the hamatv agent and put tvdb below hamatv, what this seemed to do was to preserve the hamatv entries, but then input the incorrect tvdb episode descriptions again. This happens regardless of the show. I cut and pasted what i think is the relevant output, but also attached the full hama log.

Also, random question, does this, similar to the udp agent, update anidb with your entries, files, and history?

thanks for all this, it's already great and looking forward to getting my entire anime series database updated with this.

here's the cut and paste:

2013-05-06 19:34:40,662 (-4fa6b000) :  CRITICAL (agentkit:973) - Exception in the update function of agent named 'HamaMovies', called with guid 'com.plexapp.agents.hama://6496?lang=en' (most recent call last):

  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/api/agentkit.py", line 969, in _update

    agent.update(obj, media, lang, force)

  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Hama.bundle/Contents/Code/__init__.py", line 720, in update

    self.matchAnime(metadata, media, force, True)

  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Hama.bundle/Contents/Code/__init__.py", line 679, in matchAnime

    self.parseAnimeXml(metadata, media, force, self.getAnimeXmlById(metadata.id), movie)

  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Hama.bundle/Contents/Code/__init__.py", line 576, in parseAnimeXml

    if tvdbSeriesId != None:

UnboundLocalError: local variable 'tvdbSeriesId' referenced before assignment

 

Thanks, 

Awesome! Downloaded the new version, restarted, and hello there buddy! Excited to test drive.

Okay, so I first updated my section with the hamamovie agent, then forced refreshed my movie section and only the new entries were updated. I then manually updated the others by "fix incorrect match" and  "match using hamamovies" and it worked pretty much like a charm. All the posters grabbed seemed pretty much in Japanese, unless there were unnotated, and I know you can disable the prefer anidb posters, but is there any way to have it prioritize english language if available. Not a big deal at all. The genre matching is AMAZING!

The movie posters are only pulled down from AniDB so there's only one poster. I could possibly look into doing a similar cross-search with something like IMDB for extra info in the same way that TV checks against TVDB but I'm not sure how feasible that would be and would have to do a search against a database that indexes a fair amount of anime films.

Speedwise, it's great and no issues with anidb yet.

So now onto the bigger challenge with the TV section. I tried multiple methods, but I kept on coming up with some issues. I first did a full force refresh and again nothing that wasn't new was updated, I could try deep scan, but don't think that would make a difference. In terms of matching, when I selected hamatv as the sole agent (without TVDB enabled as adding to Hamatv), it updated genres, posters, and episode titles as advertised, but overwrote the TVDB episode descriptions. So i went ahead and enabled TVDB and placed it above Hamatv in the priority preferences for the Hamatv agent and it seemed to work fine until the end when it somehow matched it with another TV show and overwrote everything due to not finding a string (I believe-see log attached). I then went back into the hamatv agent and put tvdb below hamatv, what this seemed to do was to preserve the hamatv entries, but then input the incorrect tvdb episode descriptions again. This happens regardless of the show. I cut and pasted what i think is the relevant output, but also attached the full hama log.

Yeah, you can't mix and match them - the cross-lookup that HAMA does is internal. The main issue is the way that TVDB and AniDB index shows is quite different and the main reason for wanting to have an AniDB-based agent in the first place. They lump related shows together as 'seasons' of the one larger show. In some cases that makes sense, though it can be frustrating if the 'seasons' for example aired several years apart. More frustrating is when you get an anime show which is a sequel or prequel or remake but it gets listed as some random season of the series which came first - good recent examples are things like Eureka Seven AO, which TVDB lists as 'season 2' of Eureka Seven, but it's a completely new plot, characters and so on so logically it should be considered separate (effectively in the US TV world it's like making Caprica season 5 of Battlestar Galactica). However they always stick to their policy on this so that's just something you either have to put up with or work around. Thus AniDB.

Anyway, there's no way to pull the episode descriptions from TVDB because they'll be wrong. You can only use the one primary metadata agent. The TVDB matching is internal, doesn't pull from the actual TVDB agent at all because I simply couldn't see a good way to make that work and reconciling the differences in information (need to figure out which 'season' in TVDB each AniDB episode belongs to, and it gets even more complicated with OVAs and extra DVD/BD-only episodes and stuff).

Also, random question, does this, similar to the udp agent, update anidb with your entries, files, and history?

I don't think that Tuffo's agent does this. But no, mine doesn't - there's no provisions for doing this over their HTTP API as it is stateless and you don't have to log in. If I ever implement a UDP-based lookup or if Tuffo and I end up merging agents at some point definitely this is something I could look into, but I don't actually use their list-tracking stuff myself. :)

thanks for all this, it's already great and looking forward to getting my entire anime series database updated with this.

here's the cut and paste:

2013-05-06 19:34:40,662 (-4fa6b000) :  CRITICAL (agentkit:973) - Exception in the update function of agent named 'HamaMovies', called with guid 'com.plexapp.agents.hama://6496?lang=en' (most recent call last):

  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/api/agentkit.py", line 969, in _update

    agent.update(obj, media, lang, force)

  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Hama.bundle/Contents/Code/__init__.py", line 720, in update

    self.matchAnime(metadata, media, force, True)

  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Hama.bundle/Contents/Code/__init__.py", line 679, in matchAnime

    self.parseAnimeXml(metadata, media, force, self.getAnimeXmlById(metadata.id), movie)

  File "/Users/Titan/Library/Application Support/Plex Media Server/Plug-ins/Hama.bundle/Contents/Code/__init__.py", line 576, in parseAnimeXml

    if tvdbSeriesId != None:

UnboundLocalError: local variable 'tvdbSeriesId' referenced before assignment

 

Thanks, 

Looks like there's a pathway where it might try to look up TVDB for images on movies in some cases. Easy fix.

EDIT: Try the new version in the first post, hopefully this issue will be fixed.

First off, this is so cool, I hope I'm not being a bother, but from my side, it's pretty fun and I feel like I'm helping out a little!

Otherwise, thanks for the new version.

Regarding the tv stuff, yeah, I wasn't sure when you mentioned that the agent would be secondary to tvdb whether I should enable the tvdb agent within the hamatv internal settings. Yeah, I can definitely see how the episode ordering would be challenging. I had already started archiving stuff per tvdb's season requirements and got used to episode descriptions for most of my anime and retroactively to reorder everything seems like too big an endeavor. 

I am totally in love with the genre settings though, might there be a way to draw top-level data like the cast/crew information, genres, and do secondary to tvdb for artwork and episodes? I have no programming skills whatsoever and just recently discovered logs and my console app therefore I have no idea about feasibility so if this request is ridiculous, feel free to ignore.

Anyhow, thanks again so much, I'll try out the new agent.

Thanks for helping out testing this. I'm glad someone's using it.

It's possible that you could put together something that fed in the genres etc on top of TVDB, but it would be a different agent. Or possibly a modified version of this one designed to work as a secondary to fill that stuff out. I'll look into it if I get some time, I'm not sure how feasible it is. My main worry would be that you'd relevant information for the first series only in multi-series shows but if that's already something you're expecting to work with that might be okay.

I've been reviewing the code for the hama agent and the tvdb agent to see if I might be able to take a swing.

Here's what I'm thinking, since the agent (when tvdb was enabled but lower in priority within the agent) returned artwork, metadata, etc..as it should, but also added episode descriptions, it makes me believe that it may be possible to make the agents play well together.

This would likely be another companion agent built off yours, but for losers like me who are stuck/wedded to tvdb artwork/episode descriptions (despite the funky numbering) but also want to be able to take advantage of anidb's wealth of metadata.

It looks like if we keep most everything the same, except skip the episode updating section, then tvdb will attempt to to do that but won't overwrite everything else (e.g. Main title, main description, genres, studio). The issue looks like the tvdb agent attempts to locate via url/GUID but is unable to find it and then tries again and essentially goes with series title "none".

I feel like I'm onto something here, but this is all still rather new, fun, but daunting. I'm willing to give it a go, but need some pointers.

thanks!

I think I could probably add an extra config option to stop it updating episode titles. Then you could put it in with TVDB and they'd work together. This would mean you're using anidb's title though (which may not match the TVDB title for aforementioned reasons), series description etc. The only thing TVDB would end up applying would be episode titles and descriptions.

That would be ah-may-zing  :rolleyes: ! I'm totally okay with that level of inconsistency, use to it by now lol.

Would it also cache or set-up a reference point so tvdb could accurately match the series?

I already use Benni-chan's SABnzbd AniDB post-processing script which does a hash, renames and moves files. As part of the rename, the file's CRC is added to the filename. It would be nice if HAMA could just check this hash string against AniDB rather than trying to hash files again itself. The reason being is that hashing an entire anime directory (even just one series) is time consuming and unnecessary when the hash is already known. I actually thought the agent wasn't working, but it actually was just slower than a typical scan due to the hash.

I already use Benni-chan's SABnzbd AniDB post-processing script which does a hash, renames and moves files. As part of the rename, the file's CRC is added to the filename. It would be nice if HAMA could just check this hash string against AniDB rather than trying to hash files again itself. The reason being is that hashing an entire anime directory (even just one series) is time consuming and unnecessary when the hash is already known. I actually thought the agent wasn't working, but it actually was just slower than a typical scan due to the hash.

This agent doesn't do any hashing. Lookup is entirely based on the initial name it receives, which is usually derived from the folder name I think.

CRC isn't useful for lookup in AniDB, it's not unique. CRC can only be used to verify if your copy of the file has been corrupted in transit (which is why most fansub groups that distribute over IRC still include them in the filename). AniDB is keyed by stronger hashes (specifically ed2k), which is unique to the file. However I don't do any hashing because there's no facility in the HTTP API to do a lookup using any hash at all - it was something I considered in the future, but would require using a different API to do the hash lookup.

If it is slow, then it might be because your network is saturated, or perhaps one of the sites it pulls data from is responding slowly. There's an initial search using an index running on my own site, followed by a lookup by ID on AniDB to retrieve an XML file, followed by an additional search and possibly multiple image gets on TVDB. The image copying from there shouldn't be too slow as it only fetches thumbnails for large files, though it will fetch one background image if you don't have one set. Perhaps that's where the slowdown occurs. If you're not interested in background pictures etc. you could try turning the secondary TVDB lookup off and see if the speed improves. Otherwise if you'd like I can take a look at your log.

This agent doesn't do any hashing. Lookup is entirely based on the initial name it receives, which is usually derived from the folder name I think.

CRC isn't useful for lookup in AniDB, it's not unique. CRC can only be used to verify if your copy of the file has been corrupted in transit (which is why most fansub groups that distribute over IRC still include them in the filename). AniDB is keyed by stronger hashes (specifically ed2k), which is unique to the file. However I don't do any hashing because there's no facility in the HTTP API to do a lookup using any hash at all - it was something I considered in the future, but would require using a different API to do the hash lookup.

If it is slow, then it might be because your network is saturated, or perhaps one of the sites it pulls data from is responding slowly. There's an initial search using an index running on my own site, followed by a lookup by ID on AniDB to retrieve an XML file, followed by an additional search and possibly multiple image gets on TVDB. The image copying from there shouldn't be too slow as it only fetches thumbnails for large files, though it will fetch one background image if you don't have one set. Perhaps that's where the slowdown occurs. If you're not interested in background pictures etc. you could try turning the secondary TVDB lookup off and see if the speed improves. Otherwise if you'd like I can take a look at your log.

Idk why I didn't differentiate the CRC and ed2k check. Thanks for clarifying.

I just thought it was strange that I had about 60 Hunter x Hunter (2011) episodes, added 20 latest ones and it wouldn't seem to grab metadata past ep 58. I thought it was due to season 1 going up to 58 per TheTVDB. By the time I watched a few episodes it had finally updated the episode titles and images. I also ran into a weird thing with an ep whose filename was "Hunter x Hunter (2011) - 67 - 15 x 15". It treated it as "Season 2011" and the episode was something weird--don't recall what but it seemed like it treated that as a date or something. I think renaming it Fifteen x Fifteen resolved that.

I'm sure it'll be fine for the single episode updates here and there. I'm happy with the work you've done... I can finally have my anime ep info as I did in XBMC (WITHOUT having to edit XML files). Thanks for your work and sorry for the ASSumption about the hash.

 I also ran into a weird thing with an ep whose filename was "Hunter x Hunter (2011) - 67 - 15 x 15". It treated it as "Season 2011" and the episode was something weird--don't recall what but it seemed like it treated that as a date or something. I think renaming it Fifteen x Fifteen resolved that.

This is usually a problem which is external to the metadata agent - it can only fill in information, can't change the way that seasons and episodes are numbered. Which media scanner are you using? The default Plex Series Scanner has a lot of issues with anime, especially when stuff runs over 99 episodes or when you have a full episode title in the filename. I've also IIRC seen it pick up on CRCs in the filename, eg [ABCD2E01] will actually be picked up as Season 2 Episode 01. If you're using the default scanner I suggest trying BABS (linked in the first post) as it's much better for scanning anime filenames. If you already are using that then it's probably a bug in there.

I'm not sure about the specific issue with Hunter x Hunter taking a long time to scan past 58. I'm following the series myself and haven't had issues like that, though the first time it indexes a lot of new episodes it can take a long time for plex to process all the new information internally. Once the Metadata agents fill in their data Plex has to re-load it, compile all the different agents data together and so on. Quite likely that's where your time was being spent as that process is slow - when I last had to re-scan all my data I found that the 300 or so episodes of Naruto Shippuuden took at least 15 minutes to get re-loaded into Plex's databases but the metadata scan was done pretty quickly. Single-episode updates are usually pretty quick.

I'm having a strange issue that HAMA 'goes away' after a few manual searches. It no longer appears in the list of agents and requires a restart of PLEX for it to return. Any suggestions? I've attached the com.plexapp.agents.hama.log file

I'm having a strange issue that HAMA 'goes away' after a few manual searches. It no longer appears in the list of agents and requires a restart of PLEX for it to return. Any suggestions? I've attached the com.plexapp.agents.hama.log file

Sorry for the delayed response, I've been away.

I've seen this locally as well sometimes and I'm still getting to the bottom of what's causing it - I'm not 100% sure it's the HAMA code either, since the errors are happening when re-loading persisted data, which is basically just the TVDB ID it matched if one was found when getting pictures etc. so that it doesn't re-search every time.