Awful banner/poster/fanart quality on newly added shows (compared to Windows PMS)

server-freebsd

#1

Hello,

I just moved my whole media collection to FreeNAS and added a plexmediaserver-plexpass jail. I have recreated my libraries because I wanted a fresh start. Unfortunately I’ve noticed that some of the tv shows have awful image quality of their banners, posters or fanart. The quality is much worse than what I have on my Windows PMS library. A refresh of the affected series did not help.

For example the show “Blue Mountain State”:
FreeNAS banners:

Quite pixelated.

Windows banners:

As you can see the difference is staggering.

Here is an excerpt from the thetvdb plugin log on FreeNAS (agent cache was cleared beforehand):
2017-01-15 14:03:16,580 (80a428c00) : INFO (__init__:781) - def update() 2017-01-15 14:03:16,581 (80a428c00) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/login' 2017-01-15 14:03:16,908 (80a428c00) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/series/134511?lang=de' 2017-01-15 14:03:17,275 (80a428c00) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/series/134511/actors' 2017-01-15 14:03:17,630 (80a428c00) : DEBUG (preferences:258) - Loaded preferences from DefaultPrefs.json 2017-01-15 14:03:17,631 (80a428c00) : DEBUG (preferences:178) - Loaded the user preferences for com.plexapp.agents.thetvdb 2017-01-15 14:03:17,633 (80a428c00) : DEBUG (networking:166) - Requesting 'https://meta.plex.tv/tv_e/134511/blue+mountain+state/2010' 2017-01-15 14:03:17,906 (80a428c00) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/series/134511/episodes?page=1' 2017-01-15 14:03:18,404 (80a428c00) : INFO (__init__:896) - No media for season 0 episode 1 - skipping population of episode data 2017-01-15 14:03:18,405 (80a428c00) : DEBUG (threadkit:234) - Starting a parallel task set named UpdateEpisodes with 40 tasks 2017-01-15 14:03:18,407 (80b072800) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/episodes/4163710?lang=de' 2017-01-15 14:03:18,408 (80b072000) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/episodes/2611851?lang=de' ... 2017-01-15 14:03:22,753 (80b072400) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/episodes/4207211?lang=de' 2017-01-15 14:03:23,042 (80b072800) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/episodes/4207210?lang=en' 2017-01-15 14:03:23,126 (80b072400) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/episodes/4207211?lang=en' 2017-01-15 14:03:23,516 (80a428c00) : DEBUG (threadkit:244) - Parallel task set UpdateEpisodes ended 2017-01-15 14:03:23,517 (80a428c00) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/series/134511/images?lang=de' 2017-01-15 14:03:23,881 (80a428c00) : ERROR (networking:219) - Error opening URL 'https://tvdb2.plex.tv/series/134511/images?lang=de' 2017-01-15 14:03:23,881 (80a428c00) : INFO (__init__:162) - HTTPError 404: 2017-01-15 14:03:23,881 (80a428c00) : INFO (__init__:685) - Bad image type data for TVDB id: 134511 2017-01-15 14:03:23,882 (80a428c00) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/series/134511/images?lang=en' 2017-01-15 14:03:24,221 (80a428c00) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/series/134511/images/query?keyType=fanart&lang=en' 2017-01-15 14:03:24,686 (80a428c00) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/series/134511/images/query?keyType=poster&lang=en' 2017-01-15 14:03:25,047 (80a428c00) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/series/134511/images/query?keyType=series&lang=en' 2017-01-15 14:03:25,403 (80a428c00) : DEBUG (networking:166) - Requesting 'https://tvdb2.plex.tv/series/134511/images/query?keyType=season&lang=en' 2017-01-15 14:03:25,839 (80a428c00) : DEBUG (threadkit:234) - Starting a parallel task set named DownloadImages with 36 tasks 2017-01-15 14:03:25,842 (80a428c00) : DEBUG (threadkit:244) - Parallel task set DownloadImages ended 2017-01-15 14:03:25,843 (80a428c00) : DEBUG (networking:166) - Requesting 'https://meta.plex.tv/tv_e/134511/blue+mountain+state/2010/1' 2017-01-15 14:03:26,139 (80a428c00) : DEBUG (networking:166) - Requesting 'https://meta.plex.tv/tv_e/134511/blue+mountain+state/2010/0' 2017-01-15 14:03:26,414 (80a428c00) : DEBUG (networking:166) - Requesting 'https://meta.plex.tv/tv_e/134511/blue+mountain+state/2010/3' 2017-01-15 14:03:26,691 (80a428c00) : DEBUG (networking:166) - Requesting 'https://meta.plex.tv/tv_e/134511/blue+mountain+state/2010/2' 2017-01-15 14:03:27,050 (80a428c00) : DEBUG (model:229) - Serializing to /usr/local/plexdata-plexpass/Plex Media Server/Metadata/TV Shows/9/0acc6318935d933ddd4059b7a9a84ff691fc0bd.bundle/Contents/com.plexapp.agents.thetvdb/Info.xml 2017-01-15 14:03:27,051 (80a428c00) : DEBUG (runtime:88) - Sending packed state data (107 bytes) 2017-01-15 14:03:27,051 (80a428c00) : DEBUG (runtime:924) - Response: [200] str, 16 bytes

I found also that the file sizes of the banners differ by a factor of ten:

  • FreeNAS
  • Windows

Does anyone have any idea how to fix this quality issue? Any input would be appreciated!


#2

I've noticed this too for a while actually (low quality posters), but I didn't realize it wasn't a problem on other platforms, as I only run plex on FreeBSD. So put me down for "me too".


#3

I wonder if the posters in the German (de) directory on tvdb are old whereas the posters in the English (en) directory are up to date? What happens if you set your preference to english? Are the posters better? This may be a tvdb issue.


#4

I did actually try that, but it didn't change anything. According to the log the German directory seems to return invalid image data anyway, so that PMS falls back to the English directory. I also checked on the thetvdb Website, and both language entries have exactly the same image data - which is quite highres by default due to their rules.


#5

Oh well, worth a shot in the dark :((


#6

It would be great, if a Plex developer could maybe shed a little light into this, as there is nothing from my end that I can do to fix this!


#7

I did some more investigating, and now think that this might be a general problem possibly due to some changes on thetvdb.com.

It seems that the images pulled from thetvdb are no longer retrieved in full resolution but in the very poor preview resolution! For posters this means 300x441 instead of 680x1000 , and for banners 300x55 (example) instead of 758x140 (example) pixels!

Maybe something has changed on the thetvdb website, since the full-res images are no longer directly linked in the img tags, but rather get linked via "View Full Size links" which appears after clicking on the banner/poster (or on the banner/poster/fanart detail pages, e.g. http://thetvdb.com/?tab=seriesbanners&id=...). Please note that the preview and the full size images on thetvdb.com seem to have the same filename, but the previews reference a /banners/_cache/... directory while the full resolution images are not in the "_cache" subdirectory.

It would be great if that issue could be resolved! I do not know of any way to bring this to the attention of the devs, however. :-(


#8

@Elandril I just poked around in the code, and it looks like plex is specifically fetching the cached version.

In Resources/Plug-ins-b46e0ea/TheTVDB.bundle/Contents/Code/__init__.py
```
def parse_banner(self, img_info):
# Get the image attributes from the XML
banner_type = img_info.get('keyType', '')
banner_path = img_info.get('fileName', '')
banner_thumb = img_info.get('thumbnail', '_cache/%s' % banner_path)
proxy = Proxy.Preview

return banner_type, banner_path, banner_thumb, proxy

This seems to be using the thumbnail from the tvdb response, and falling back to an attempt to guess at the thumbnail path.

Then this method is called later in the download file logic:

      banner_type, banner_path, banner_thumb, proxy = self.parse_banner(img_info)

      # Compute the banner name and prepare the data
      banner_name = TVDB_IMG_ROOT % banner_path
      banner_url = TVDB_IMG_ROOT % banner_thumb
This is done in another place later as well (fallback to foreign artwork if native language artwork isn't present).

Using the tvdb api (https://api.thetvdb.com/swagger), and the token defined in the same file above to generate a JWT token, a sample response for retrieving images looks like this:

{
  "id": 334331,
  "keyType": "series",
  "subKey": "graphical",
  "fileName": "graphical/134511-g.jpg",
  "resolution": "",
  "ratingsInfo": {
    "average": 7,
    "count": 7
  },
  "thumbnail": "_cache/graphical/134511-g.jpg"
},

So it *seems* to be intentional to fetch the thumbnail instead of the full image. Maybe due to size?
For full images, presumably setting banner_url to `TVDB_IMG_ROOT % banner_path` would be enough to fetch full size images (and replace again a bit further down the file for foreign language fallback).


Unrelated: My goodness. Is this python file machine generated or minimized in some way? This is some weirdly formatted python code!

#9

@tootsmcgee Great find, thanks!

Since my older library on Windows has the full res images, I would guess that either the the fetch code was specifically changed at some point in the last 2 years, or the website has switched over to caching the low res images.

Either way, it would be great if this would be changed back to full res, or at least the user would have the option to download full res images. :-(


#10

any light on this problem? just rebuilt my server (new PC) and all my posters looks awful :c