[2026-07-10 09:14:02] Mia: Hi, I’m having trouble with my self-hosted photo library. New uploads work, but thumbnails are blank. [2026-07-10 09:14:18] Support - Daniel: Hi Mia. I can help with that. What photo library are you running, and how is it deployed? [2026-07-10 09:14:41] Mia: It’s running in Docker Compose on an Ubuntu server. Reverse proxy is Caddy. Photos are stored on a mounted NAS share. [2026-07-10 09:15:07] Support - Daniel: Got it. Are the original images viewable when you open them, or are only the thumbnails affected? [2026-07-10 09:15:29] Mia: Originals open fine. The grid view just shows gray boxes. [2026-07-10 09:16:03] Support - Daniel: That usually points to the thumbnail worker not being able to write generated files. Can you check the logs for the app and worker containers? [2026-07-10 09:16:44] Mia: I see repeated errors: “permission denied: /library/cache/thumbs”. [2026-07-10 09:17:12] Support - Daniel: Thanks. Is `/library/cache` also on the NAS mount? [2026-07-10 09:17:26] Mia: Yes, I mapped the whole `/library` folder there. [2026-07-10 09:18:05] Support - Daniel: That can cause permission issues depending on the NAS export settings. The app needs write access for cache and generated thumbnails. Do you know what UID/GID the container runs as? [2026-07-10 09:18:38] Mia: Compose has `PUID=1000` and `PGID=1000`. [2026-07-10 09:19:10] Support - Daniel: Please run `ls -ln` on the mounted library folder from the host and check whether the cache directory is owned by `1000:1000`. [2026-07-10 09:20:27] Mia: It shows `root:root` for cache and thumbs. [2026-07-10 09:20:59] Support - Daniel: That explains it. You can either change ownership to `1000:1000` or move the cache to local disk while keeping originals on the NAS. Local cache is usually faster. [2026-07-10 09:21:23] Mia: I’d rather move cache local. How should I map it? [2026-07-10 09:22:02] Support - Daniel: Add a separate volume mapping like `/srv/photo-cache:/library/cache`, then create that folder on the host and set ownership to UID/GID 1000. [2026-07-10 09:22:38] Mia: Okay, I changed it and restarted the containers. Logs look cleaner now. [2026-07-10 09:23:05] Support - Daniel: Good. The app may need to regenerate thumbnails. Is there a maintenance or library scan command available in your admin panel? [2026-07-10 09:23:41] Mia: There’s a “Rebuild thumbnails” button. I clicked it. [2026-07-10 09:24:19] Support - Daniel: Perfect. You should see CPU activity while it processes. Larger RAW files may take a while. [2026-07-10 09:25:33] Mia: Thumbnails are appearing now. Some older albums still show blanks, but the number is going down. [2026-07-10 09:26:04] Support - Daniel: That’s expected during rebuild. Before we wrap up, are uploads and mobile sync still working through Caddy? [2026-07-10 09:26:31] Mia: Uploads work. Mobile sync works on Wi-Fi, but sometimes fails on cellular. [2026-07-10 09:27:08] Support - Daniel: Check the Caddy upload body limit and app URL setting. If the public URL is different from the internal Docker hostname, mobile clients can fail intermittently. [2026-07-10 09:27:46] Mia: The public URL is set correctly. I didn’t configure an upload limit in Caddy. [2026-07-10 09:28:22] Support - Daniel: Then the thumbnail issue was the main problem. For cellular failures, test with one small image and one large video later. If only videos fail, we’ll tune proxy timeouts. [2026-07-10 09:28:57] Mia: Makes sense. The gallery already looks normal again. [2026-07-10 09:29:18] Support - Daniel: Great. Summary: the thumbnail cache was on a NAS path owned by root, so the container couldn’t write generated thumbnails. Moving cache to local storage and rebuilding thumbnails resolved it. [2026-07-10 09:29:36] Mia: Thanks, Daniel. That fixed the issue. [2026-07-10 09:29:49] Support - Daniel: You’re welcome. Have a good day.