Contents

Immich Simple fix for large files

I’ve been running Immich for about a year now, and it’s been one of the most reliable self-hosted services in my setup. For photo and video backups, it has just worked—smooth uploads, a clean timeline, and the peace of mind of keeping my media under my own control.

Recently, I started experimenting with the new beta timeline feature. That’s when I hit my first real bump: smaller uploads worked fine, but larger images and videos would consistently fail. Since I run Immich behind Traefik, my first thought was that it might be a proxy-related issue.

After some digging, I came across this helpful GitHub discussion: immich-app/immich#13573. That pointed me in the right direction.

The Fixes

There are two main ways to solve the large upload issue:

Option 1: Multi-Network Setup (Bypass Proxy on LAN)

This is the method I chose because it was quick, reliable, and didn’t require changing my Traefik config.

  • Inside my local network: the app connects directly to the Immich server on my PC via its internal IP (192.168.x.xxx).
  • Outside my network: the app connects through my public domain, proxied by Cloudflare and routed through Traefik.

This way, large uploads at home skip the reverse proxy entirely, while I still get secure access through Traefik when I’m away.

How to set it up in the Immich app:

  1. Open the Immich app on your phone.
  2. Go to Settings → Networking.
  3. Add your Wi-Fi name and your server’s LAN IP + port as the local endpoint.
    • Example: http://192.168.xx.xx:2283/api
  4. Save the configuration.

Now, whenever you’re on your home Wi-Fi, the app will automatically connect using the LAN IP, and fall back to your public domain when you’re away.


Option 2: Increase Request Size in Traefik

If you prefer to keep all traffic going through Traefik, you can instead fix the upload size limits directly in Traefik by adding a middleware for larger bodies.

Here’s an example configuration:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# traefik.yml or dynamic config
http:
  middlewares:
    immich-upload-size:
      buffering:
        maxRequestBodyBytes: 0        # disable limit
        maxResponseBodyBytes: 0
        memRequestBodyBytes: 20971520 # 20MB in memory before spilling to disk
        memResponseBodyBytes: 20971520
        retryExpression: "IsNetworkError() && Attempts() < 2"

After a year of daily use, Immich continues to impress me. This was the first time I hit a real snag, and even then, the community made troubleshooting easy.