Unable to view photos without transcoding

Server Version#: 3.69.1
Player Version#: 7.8.0.8092 (Android), Roku, web, Windows Store app

This has been addressed previously in older threads like this one (Poor performance when accessing images) but I want to re-open the issue because it’s still VERY much a problem and I think the previous answers were just plain wrong (and insulting).

When playing video or audio, we are able to stream directly without transcoding (i.e. Direct Play). This is true even if (with video) the player does not support the encoded resolution. Yes, you’re streaming more data than you need, but in many cases that’s OK and the file plays without any problems.

We cannot do that with photos. Plex insists on transcoding all photos to a resolution that it deems appropriate for the device, even if that same full-resolution image would open just fine on the client. Heck, these are often photos originally taken on that same device.

Many of us have low-powered NASs designed for media streaming, NOT media transcoding. That is not a mistake or an oversight or a misunderstanding or tech ignorance or a need to upgrade. I have zero desire or intention to use my Synology DS215 to transcode anything; that’s what my media workstation is for. I don’t need it. I don’t want it.

(And please don’t tell me to just run Plex on my workstation; that’s also my work computer and it’s not always powered on. The whole point of a NAS is that it is low-powered and just always there.)

But because of this limitation, it takes me 10 seconds to open. each. picture. in. my. library. This is true on all my clients. Plex on my DS215 is effectively unusable as a photo server because it insists on needless transcoding, even though it’s fantastic as a music and video server, streaming in original format to Android, Roku, Sonos, and web.

I love Plex for audio and video steaming; I’m not here to bash. I’m here to beg. Please allow raw photo images to be streamed without transcoding.

2 Likes

Since you have referenced the android app (which it correctly is an App issue),
I have moved this to the Android mobile section.

Clearly you didn’t read the post but just did a keyword scan. This is an issue that affects ALL clients: Android, Roku, Windows app, web. Please move it back. Thanks.

1 Like

Can you attach one of these images or otherwise make it available for analysis?

The DS215 is an ARMv7 and not a very quick NAS by any means to begin with.

Secondly, it is the client’s ability to accept the image AS IS which determines whether it is transcoded or not.

These are ALL images, on ALL clients. That includes:

  • Photos taken on my Android device (Pixel 2), uploaded to Plex by the Plex app, which is then requiring transcoding to view in the Plex app. This includes both regular stills as well as the Pixel’s fancy “motion” photos.
  • All photos viewed on any web browser, including Win7 and Win10 devices, and including Chrome, IE, and Edge.
  • All photos viewed using Roku & Win10 Store app.

Pixel 2 photos are 4032 x 3024 native resolution, which is large but not insane.

I just tested a batch of older photos at 3648 x 2736 (Canon PowerShot SD1200 IS) with the same results. On both Android and web, the images all required transcoding. That means 10+ seconds to open each one, assuming it doesn’t time out (which it frequently does).

And as you point out the DS215 is a low-end unit. That’s the intention. It’s a media server, not a media transcoder. It’s perfectly fine serving up Plex video and audio (via Play Direct) to any of the above-mentioned clients.

I’m not sure what criteria Plex uses to determine a client’s ability to accept an image AS IS but if that’s really what’s happening then the logic is very broken. My high-end desktop workstation running Chrome can certainly view a 1.2Mb photo AS IS. My Pixel 2 certainly has the ability to view a photo it took itself.

I know Plex tanscoding is awesome and you love it, but I’m interested in Plex as a media library and distribution hub. I just want it to serve up the photos AS IS just like you already do for audio and video.

And I’m not the only one having this issue.

3 Likes

And because you asked, here’s a sample image. I could literally choose ANY image from my library (or just snap a pic right now) but here’s an old one I tested with.

With all due respect, what on earth are you going on about?

Quoting me wikipedia articles on 4k video resolution? Yes, I know what 4k resolution is. Everybody on this forum knows what 4k resolution is. It’s a term only ever used to describe newer high-res video. These are old still photos from 2010 and in no conceivable way “require a 4K capable display”.

Perhaps you mean, “to display at full resolution”. Well, of course. But every phone and every browser regularly displays images at resolutions lower than native. It happens on almost every web page you visit. It’s normal. Images on the web do not have to be resized before transmission in order to display at a lower resolution. Why would Plex?

Plex won’t serve up a 3648 x 2736 JPEG but instead dynamically resizes it. In a test just now, it served up the above image as a 1164 x 873 JPEG. The original was 1.3Mb, this resized one is 187Kb. That’s a significant size savings, but it took about 10 seconds to do it. I’m on a gigabit LAN (and gigabit WAN, for that matter). I could transfer the full 1.3Mb image in a fraction of a second, which is far better than waiting 10+ seconds (plus timeout errors) for Plex to resize it.

“Premature optimization is the root of all evil” and all that.

Both video and audio have settings to force (or prefer) original quality in the clients, but there’s nothing for photos. That is literally all I am asking for.

The only thing I can direct you to falls short.

Either open a feature request (globally) or go target your device specifically and do the feature request there.

right now this thread is visible on Syno, Web (everything browser), Android, and Rodu. And the Windows app store.

It sounds like you want one point. Ability to specify DirectPay of photos with full knowledge that if the image sent to the player is too many pixels, anything can happen.

This is not server device specfic. The server does what the app asks for. Right now it asks to be resized. The syno isn’t fast enough to deliver i7 blazing speed.

OK, fair enough, but to reiterate:

Displaying an image at a lower resolution than at what it was transmitted is what every single HTML page does every single day. It’s what every single other image viewer (both web and app) does. It is so common and normal it makes my eyes water. Saying that if there are “too many pixels, anything can happen” is inane.

Just to drive home the point, go to https://www.plex.tv/. See that little Plex logo at the top? It’s displayed at 90x29 but the actual image that was transmitted by the web server to your browser is 300x97. The web server did not dynamically create a new 90x29 version of the image to send to the browser. It sent “too many pixels”. Look out, world.

If Plex cannot do that, and instead insists on dynamically resizing every image to exactly fit the target before each transmission, that makes Plex a complete outlier and totally unsuitable for any kind of still image hosting on anything less than a full-power server.

I’m not angry, just sad and a little bit confused, mainly because it would be so easy to fix.

1 Like

Not to sound antagonistic or sarcastic, perhaps you can write to Plex via the home page and submit your resume?

@trumpy81 please read the past posts. We’ve been over this. I am baffled as to why you guys keep bringing up 4K video standards when we’re talking about displaying old still images. These pictures were taken before there was such a thing as 4K video. And I am baffled as to why you keep insisting that all still images must be resized by the server before transmission. It’s a bizarre claim and completely out of sync with literally every image app and web browser on the planet. That bit about “too many pixels” was at least entertaining.

I don’t want to be rude or unproductive, but I’m running out of things to say. Sorry.

2 Likes

If I may offer a different way of explaining why PMS is doing what it’s doing?

  1. Regardless when the photos were taken, the digital resolution level they were SCANNED at is the issue here.
  2. The images were scanned with such fine resolution that when PMS goes to display them PMS has no choice but to resize them to fit into the digital pixel limits of the device.

It’s funny how I stumbled upon this when searching for the exact same thing on the internet.

I think I totally understand what nlaslett is trying to say here. What he wants is as simple as a feature request: “Let user choose where plex do the image resize + transcoding”

Currently plex client + server choose to do this on the plex media server side, but it may not be the best scenario for some users. Like nlaslett, I have a similar weak ARM cpu NAS, instead of doing the trascoding on the server, why not let client app do the work, today’s phone or TV set box have amazingly good CPUs (Check those crazy geekbench scores), let them do the hardwork!

Simply transmit the raw jpeg files! It’s only several MB, less than one second in local network. Then do the decoding on the phone/tv set box, 0.5 seconds, BAM! Instant photo! But now, 10 seconds or more for each photo.

This issue has been mentioned here multiple times over the past several years, I wish I have explained it clearly enough for the Plex team to notice.

5 Likes

It is interesting, because I can take the same photo from the server, put it on a usb key and display it directly on the TV or use Roku Media player to play it, but when asking plex to do it, it feels the need to ‘transcode’ (which isnt really whats happening, its just resizing) for some reason.

1 Like

Plex is resizing the image. Plain and simple. It is labeled as transcoding because the transcoder has to do the work. For whatever reason (the app guys would know why), the app isn’t capable of resizing itself so it needs the server to do it.

Can you get the app guy involved? To me, it’s not always the optimal solution to do the resize thing on the server, at least it should be an option.

Already are,. The tags at the top alert them.

I use the home network Samsung 4K Qled TV Plex app and NAS DS215j PMS. It takes up to 1 minute to load a photo via Plex TV app. Looking through the TV DLNA photos loads instantly. The maximum size of the videos can be set in the app (none, originale, etc.), but the quality of the photos cannot be set in the TV app unfortunately. Why can’t I turn off PMS side transcoding for photos? Watching videos works perfectly.

Can you explain how to ask the server for an image that is not resized?

For example, when using the plex chrome client I can see it makes a request for:

https://<HOST>:32400/photo/:/transcode?width=483&height=969&minSize=1&url=<PHOTO_PATH>.JPG%3FX-Plex-Token%<TOKEN>&X-Plex-Token=<TOKEN>

Now for a 2.6MB image this takes around 3 seconds on a cold hit (subsequent cache hits are 0.2s).

The raw image dimensions are 1936 x 2592, so if I modify the request to the raw image size:

https://<HOST>:32400/photo/:/transcode?width=1936&height=2592&minSize=1&url=<PHOTO_PATH>.JPG%3FX-Plex-Token%<TOKEN>&X-Plex-Token=<TOKEN>

I still get a ~3 second rate (0.2s subsequent), which suggests the image is still being transcoded. I’m using curl, with no other headers.

As a control, downloading the image via scp takes 0.25s, similar to the cached result, even for random images in my library.

In the Plex Web API (Google Code Archive - Long-term storage for Google Code Project Hosting.) I can’t see any endpoints which would allow fetching an image without transcoding. If you know how, I could write my own client if necessary, but at the moment I cant figure out how to get the Plex server to serve native images.

I think the caching which is going on comes in two areas:

  1. The image itself is buffered by the OS
  2. The binaries themselves are also buffered (the codecs at minimum because they are shared objects)

I haven’t experimented in a while but IIRC, specifying Width & Height forces the image to that size. If the image is small, it will be zoomed. I think the PMS logic is

if (?width)  ForceTranscode = 1;
if (?height) ForceTranscode = 1;

What happens when you don’t specify Width or Height?