I
Immich2mo ago
clr1107

Vp09 transcoding

Hi all, Been using Immich for > 1 year with success. I noticed a while ago, though, that I couldn’t play older videos. I assumed it was as I was on 4G, but I’ve since come to the conclusion they were google takeout videos. As such, they’re encoded in VP09, and I can’t play them on my iPhone. If I press download it also says -300% and download missing. My transcode policy is for anything not in H264. I ran all missing transcodes and it ran > 100, I also manually triggered a few transcodes as a test. I still can’t play them on my phone, however. Has anyone else experienced this? (I’m on the latest version.)
63 Replies
Immich
Immich2mo ago
:wave: Hey @clr1107, Thanks for reaching out to us. Please carefully read this message and follow the recommended actions. This will help us be more effective in our support effort and leave more time for building Immich :immich:. References - Container Logs: docker compose logs docs - Container Status: docker ps -a docs - Reverse Proxy: https://immich.app/docs/administration/reverse-proxy - Code Formatting https://support.discord.com/hc/en-us/articles/210298617-Markdown-Text-101-Chat-Formatting-Bold-Italic-Underline#h_01GY0DAKGXDEHE263BCAYEGFJA Checklist I have... 1. :ballot_box_with_check: verified I'm on the latest release(note that mobile app releases may take some time). 2. :ballot_box_with_check: read applicable release notes. 3. :ballot_box_with_check: reviewed the FAQs for known issues. 4. :ballot_box_with_check: reviewed Github for known issues. 5. :ballot_box_with_check: tried accessing Immich via local ip (without a custom reverse proxy). 6. :ballot_box_with_check: uploaded the relevant information (see below). 7. :ballot_box_with_check: tried an incognito window, disabled extensions, cleared mobile app cache, logged out and back in, different browsers, etc. as applicable (an item can be marked as "complete" by reacting with the appropriate number) Information In order to be able to effectively help you, we need you to provide clear information to show what the problem is. The exact details needed vary per case, but here is a list of things to consider: - Your docker-compose.yml and .env files. - Logs from all the containers and their status (see above). - All the troubleshooting steps you've tried so far. - Any recent changes you've made to Immich or your system. - Details about your system (both software/OS and hardware). - Details about your storage (filesystems, type of disks, output of commands like fdisk -l and df -h). - The version of the Immich server, mobile app, and other relevant pieces. - Any other information that you think might be relevant. Please paste files and logs with proper code formatting, and especially avoid blurry screenshots. Without the right information we can't work out what the problem is. Help us help you ;) If this ticket can be closed you can use the /close command, and re-open it later if needed. Successfully submitted, a tag has been added to inform contributors. :white_check_mark:
Mraedis
Mraedis2mo ago
Hi @clr1107 that's correct, with the current implementation 'missing' only applies on videos that do not have any transcode. What might be possible is that your videos do have a transcode because a certain audio codec was not allowed. Can you give examples of videos you tried to re-transcode and the resulting codecs?
clr1107
clr1107OP2mo ago
Sure, I’m at work rn but I think I tried it, and they were H264 when downloaded from the web. On my phone, however, still nothing. Is it possible that either (a) my phone is caching smth or (b) that Immich somehow has 2 transcodes and is serving the stale one? I’ll verify later and reply with the results 🙂 in theory, should the refresh of the transcode fix the issue? Okay, I manually triggered a transcode for an asset. It successfully transcodes, and if I run ffprobe on the resultant file, it's h264. But, in the app, it still won't play.
[Nest] 7 - 08/07/2025, 6:45:13 PM LOG [Microservices:MediaService] Transcoding video 3bb28cd0-116f-4fce-9dc0-b7a07c0db026 without hardware acceleration
[Nest] 7 - 08/07/2025, 6:45:14 PM LOG [Microservices:MediaService] Successfully encoded 3bb28cd0-116f-4fce-9dc0-b7a07c0db026
[Nest] 7 - 08/07/2025, 6:45:13 PM LOG [Microservices:MediaService] Transcoding video 3bb28cd0-116f-4fce-9dc0-b7a07c0db026 without hardware acceleration
[Nest] 7 - 08/07/2025, 6:45:14 PM LOG [Microservices:MediaService] Successfully encoded 3bb28cd0-116f-4fce-9dc0-b7a07c0db026
And the original asset is vp9 in ffprobe
clr1107
clr1107OP2mo ago
This is the error if I try and download the video on my phone
No description
Mraedis
Mraedis2mo ago
Download?
clr1107
clr1107OP2mo ago
In the top right, the cloud icon These are only on the server
Mraedis
Mraedis2mo ago
Yes I understand, just trying to compare Are you on the beta timeline? I'm assuming no
clr1107
clr1107OP2mo ago
No, I did turn it on, had some separate issues, and turned it off But I've had this video issue for almost a year Just assumed it was either 4G playing up, a dodgy transcode, and never really bothered to look into it
Mraedis
Mraedis2mo ago
Are you using a proxy of some kind?
clr1107
clr1107OP2mo ago
Yea NPM
Mraedis
Mraedis2mo ago
Just NPM, nothing else?
clr1107
clr1107OP2mo ago
Nope, just NPM Immich on docker -> NPM -> tailscale
Mraedis
Mraedis2mo ago
Did you add something like
client_max_body_size 4096M;
proxy_read_timeout 5m;
client_max_body_size 4096M;
proxy_read_timeout 5m;
?
clr1107
clr1107OP2mo ago
client_max_body_size 50000M; Anyone have any ideas as to what could be going wrong? @Mraedis Just did a test: recorded a video, uploaded it, and I can see in the logs it got transcoded. If I then delete it from my device I also can't play it, so maybe not vp9 related at all
Mraedis
Mraedis2mo ago
mm Do you have prefer local assets set to true?
clr1107
clr1107OP2mo ago
Where is that option? I see 'prefer remote images' and that's false
schuhbacca
schuhbacca2mo ago
Or Force Original video in the mobile app? Does it not work connected to localhost?
clr1107
clr1107OP2mo ago
Just tried force original and same tihng. Black screen, nothing plays, and the 'Downlaod not found' error with -300%
Mraedis
Mraedis2mo ago
That's what I meant 😛
clr1107
clr1107OP2mo ago
Ah haha so it seems this is an all remote videos issue, transcoding or not
schuhbacca
schuhbacca2mo ago
Localhost connection?
clr1107
clr1107OP2mo ago
I'm going through a VPN, I'm not where it's hosted Do you mean without the proxy?
schuhbacca
schuhbacca2mo ago
I mean in general we try to directly connect to the server (local network) to rule out that it's anything networking related
clr1107
clr1107OP2mo ago
Alright let me see if I can get that working, got a few firewalls going haha okay seems to work fine if I go via http to the ip itself sorry had to get auth working too haha so looks like it's the proxy somehow? Looking in the proxy logs, if I open an image, I get: - "/api/auth/validateToken" - "/api/assets/685dad71-49bd-4d4d-8e02-83293c45f6dd/thumbnail?size=preview" If I open a video, I get: - "/api/auth/validateToken" and nothing else
schuhbacca
schuhbacca2mo ago
That I can't say, I'm no proxy wizard 🤣
clr1107
clr1107OP2mo ago
It's very odd... Almost as if the app isn't even sending a request to the proxy for the video. I've seen a lot of people online saying they've had issues with iOS video playback. To do with codecs and even SSL. I've just tried HEVC and H264. I'm using a letsencrypt cert via NPM. For context, this is all that's in my nginx proxy manager advanced:
client_max_body_size 50000M;

proxy_read_timeout 600s;
proxy_send_timeout 600s;
send_timeout 600s;
client_max_body_size 50000M;

proxy_read_timeout 600s;
proxy_send_timeout 600s;
send_timeout 600s;
Daniel
Daniel2mo ago
Could you send screenshots of your NPM config?
clr1107
clr1107OP2mo ago
No description
No description
No description
No description
clr1107
clr1107OP2mo ago
The /share is for immich public proxy
Daniel
Daniel2mo ago
You're also going through cloudflare?
clr1107
clr1107OP2mo ago
No, VPN There is a cloudflare tunnel just for /share for immihc-public-proxy So I can share stuff publicly, so just the /share endpoints
Daniel
Daniel2mo ago
I see You mentioned the same video plays in the browser, right?
clr1107
clr1107OP2mo ago
Yup
Daniel
Daniel2mo ago
Also in your phone's browser?
clr1107
clr1107OP2mo ago
Let me try, usually i can't even open immich on the phone browser
clr1107
clr1107OP2mo ago
Yea I just get this
No description
Daniel
Daniel2mo ago
usually i can't even open immich on the phone browser
Well that would be an indicator lol
clr1107
clr1107OP2mo ago
Ngl, I've run Immich for so long, I just assumed it wasn't meant to work on the phone browser lmao, it never has
Daniel
Daniel2mo ago
LOL Can you download that document and share it? Interested to see what it is
clr1107
clr1107OP2mo ago
upload failed, file cannot be empty so it's just nothing sent back by the proxy and the request doesn't show up on the access logs for nginx
Daniel
Daniel2mo ago
Do you have a local DNS server set up? Does that domain resolve to NPM and not to cloudflare?
clr1107
clr1107OP2mo ago
Yea, I'm using Tailscale, and it points to a local DNS. So assuming my phone isn't doing something hella weird, it should also only get the privat one. Tbh, if it wasn't, the rest of the app wouldn't work since nothing else is hosted publicly, just the /share endpoint
clr1107
clr1107OP2mo ago
No description
Daniel
Daniel2mo ago
Tbh, if it wasn't, the rest of the app wouldn't work since nothing else is hosted publicly, just the /share endpoint
That's kind of what I'm assuming lol It's sus that the browser doesn't work
clr1107
clr1107OP2mo ago
does the video in the app use the browser someho? Either way you're right that it's very odd, somehow those requests aren't even registering in the nginx access logs
Daniel
Daniel2mo ago
My guess is that it just has all the images cached/they're local images on your phone and it doesn't actually need to fetch anything from the server The video it needs to get from the server and that fails
clr1107
clr1107OP2mo ago
Oh definitely, that's why I hadn't noticed I have had the same phone for a while, so it's always old stuff. That's why I assumed it was a google takeout vp9 thing
Daniel
Daniel2mo ago
Tbh that is kind of hard for me to debug remotely... But I'd definitely fix your browser first as that seems like the easiest reproducible issue to me right now Yeah that sounds correct
clr1107
clr1107OP2mo ago
Alright ty, you're right this is probably going to take me to the root issue Do you htink perhaps it's how authentik and nginx proxy manager are interacting on the phone?
Daniel
Daniel2mo ago
If you aren't using proxy auth but have authentik configured in Immich, no You should definitely see some Immich page at least My bet is that it simply does not resolve to the tailscale IP
clr1107
clr1107OP2mo ago
Perhaps, but then what's responding with the 0 bytes? Because something must be terminating that HTTP connection, right?
Daniel
Daniel2mo ago
Cloudflare?
clr1107
clr1107OP2mo ago
Good point, perhaps stupid ios what the hell is it doing haha
Daniel
Daniel2mo ago
Android does make debugging such things easier tbf, yes 😅 But yeah I can't really help more here since I'm kind of flying blind at this point
clr1107
clr1107OP2mo ago
No you've been a good help, got me at least to realise that it's not meant to blank out on mobile web Thanks!
Daniel
Daniel2mo ago
:KEKW:
clr1107
clr1107OP2mo ago
okay i'm getting somewhere it works on safar safari* lmfao if chrome is somehow overwriting my DNS I'm going to be so pissed
Daniel
Daniel2mo ago
To my knowledge iOS has a "access local network" kind of per-app setting I don't use iOS so idk how exactly it's called but it's a thing Could be that chrome and Immich don't have permissions, but safari has by default
clr1107
clr1107OP2mo ago
you're right but it is on
Daniel
Daniel2mo ago
Hm k then you gotta keep digging 😅
clr1107
clr1107OP2mo ago
:prayge: okay... it was my weird split /share thing going on with cloudflare tunnels. It appears, sometimes the DNS would resolve to Cloudflare and sometimes to the local one. How the app always resolved correctly and Chrome didn't? No fucking clue. Looks like Chrome was doing more of a round robbin on DNS, whichever responds first, wins. My shitty VPS vs 1.1.1.1? Well we know who wins there
Daniel
Daniel2mo ago
Yeah I guess that's fair lol
Immich
Immich2mo ago
This thread has been closed. To re-open, use the button below.

Did you find this page helpful?