From 93951d11c4ebc21d31163bcdaf6cca4b7c74ba9a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 26 Jan 2026 18:10:59 +0000 Subject: [PATCH 1/5] Initial plan From da0524143054d752f11068e8e3bbd2d974998097 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 26 Jan 2026 18:13:44 +0000 Subject: [PATCH 2/5] fix: register media MIME types in both UI+API and API-only modes Co-authored-by: SmilyOrg <1451391+SmilyOrg@users.noreply.github.com> --- main.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/main.go b/main.go index 78329e4..5602095 100644 --- a/main.go +++ b/main.go @@ -2281,22 +2281,25 @@ func main() { r.Mount("/debug", middleware.Profiler()) r.Handle("/debug/fgprof", fgprof.Handler()) + // Register media MIME types for both UI+API and API-only modes + // (needed for /files/{id} endpoint in all modes) + mime.AddExtensionType(".png", "image/png") + mime.AddExtensionType(".jpg", "image/jpg") + mime.AddExtensionType(".jpeg", "image/jpeg") + mime.AddExtensionType(".heic", "image/heic") + mime.AddExtensionType(".heif", "image/heif") + mime.AddExtensionType(".gif", "image/gif") + mime.AddExtensionType(".mov", "video/quicktime") + mime.AddExtensionType(".ico", "image/vnd.microsoft.icon") + msg := "" if apiPrefix != "/" { - // Hardcode well-known mime types, see https://github.com/golang/go/issues/32350 + // Hardcode well-known mime types for UI assets, see https://github.com/golang/go/issues/32350 mime.AddExtensionType(".js", "text/javascript") mime.AddExtensionType(".css", "text/css") mime.AddExtensionType(".html", "text/html") mime.AddExtensionType(".woff", "font/woff") mime.AddExtensionType(".woff2", "font/woff2") - mime.AddExtensionType(".png", "image/png") - mime.AddExtensionType(".jpg", "image/jpg") - mime.AddExtensionType(".jpeg", "image/jpeg") - mime.AddExtensionType(".heic", "image/heic") - mime.AddExtensionType(".heif", "image/heif") - mime.AddExtensionType(".gif", "image/gif") - mime.AddExtensionType(".mov", "video/quicktime") - mime.AddExtensionType(".ico", "image/vnd.microsoft.icon") uifs, err := fs.Sub(StaticFs, "ui/dist") if err != nil { From fd8010482252cb6d125b5855e51dc0a5ba24a199 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 26 Jan 2026 18:14:00 +0000 Subject: [PATCH 3/5] fix: align Dockerfile FFmpeg version guidance with docs Co-authored-by: SmilyOrg <1451391+SmilyOrg@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 32d8e20..ee57400 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ FROM alpine:3.23 # Install runtime dependencies # - exiftool: metadata extraction -# - ffmpeg: video thumbnails, HEIC/HEIF/MOV/GIF support (8.0.1+ includes HEVC decoder) +# - ffmpeg: video thumbnails, HEIC/HEIF/MOV/GIF support (requires build with HEVC/H.265 decoder + libheif; v7.0+ recommended, see docs) # - libjpeg-turbo-utils: fast JPEG decoding via djpeg # - libwebp: WebP encoding support RUN apk add --no-cache exiftool ffmpeg libjpeg-turbo-utils libwebp && \ From b56e415d3fbdc45f23127a708d4cf62198cd55a8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 26 Jan 2026 18:14:15 +0000 Subject: [PATCH 4/5] fix: clarify FFmpeg requirement in changelog Co-authored-by: SmilyOrg <1451391+SmilyOrg@users.noreply.github.com> --- .changes/unreleased/heic-support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changes/unreleased/heic-support.md b/.changes/unreleased/heic-support.md index 4130b79..d30c751 100644 --- a/.changes/unreleased/heic-support.md +++ b/.changes/unreleased/heic-support.md @@ -4,4 +4,4 @@ body: Add HEIC/HEIF, GIF image and MOV video format support via FFmpeg time: 2026-01-25T21:00:00Z --- -HEIC (High Efficiency Image Container), HEIF (High Efficiency Image Format), GIF, and MOV (QuickTime) files are now fully supported. These formats, commonly used by iOS devices and other platforms, are decoded using FFmpeg when available. The extensions `.heic`, `.heif`, `.gif`, and `.mov` are now included in the default configuration, so Photofield will automatically index and display these files alongside your other media. +HEIC (High Efficiency Image Container), HEIF (High Efficiency Image Format), GIF, and MOV (QuickTime) files are now supported when FFmpeg is available. These formats, commonly used by iOS devices and other platforms, are decoded using FFmpeg. The extensions `.heic`, `.heif`, `.gif`, and `.mov` are now included in the default configuration, so Photofield will automatically index and display these files alongside your other media when FFmpeg is installed. From 7982f4a6e57b55181f354f623a41fad1205162eb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 26 Jan 2026 18:23:32 +0000 Subject: [PATCH 5/5] revert: keep MIME types in UI-only block (Windows workaround) Co-authored-by: SmilyOrg <1451391+SmilyOrg@users.noreply.github.com> --- main.go | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/main.go b/main.go index 5602095..78329e4 100644 --- a/main.go +++ b/main.go @@ -2281,25 +2281,22 @@ func main() { r.Mount("/debug", middleware.Profiler()) r.Handle("/debug/fgprof", fgprof.Handler()) - // Register media MIME types for both UI+API and API-only modes - // (needed for /files/{id} endpoint in all modes) - mime.AddExtensionType(".png", "image/png") - mime.AddExtensionType(".jpg", "image/jpg") - mime.AddExtensionType(".jpeg", "image/jpeg") - mime.AddExtensionType(".heic", "image/heic") - mime.AddExtensionType(".heif", "image/heif") - mime.AddExtensionType(".gif", "image/gif") - mime.AddExtensionType(".mov", "video/quicktime") - mime.AddExtensionType(".ico", "image/vnd.microsoft.icon") - msg := "" if apiPrefix != "/" { - // Hardcode well-known mime types for UI assets, see https://github.com/golang/go/issues/32350 + // Hardcode well-known mime types, see https://github.com/golang/go/issues/32350 mime.AddExtensionType(".js", "text/javascript") mime.AddExtensionType(".css", "text/css") mime.AddExtensionType(".html", "text/html") mime.AddExtensionType(".woff", "font/woff") mime.AddExtensionType(".woff2", "font/woff2") + mime.AddExtensionType(".png", "image/png") + mime.AddExtensionType(".jpg", "image/jpg") + mime.AddExtensionType(".jpeg", "image/jpeg") + mime.AddExtensionType(".heic", "image/heic") + mime.AddExtensionType(".heif", "image/heif") + mime.AddExtensionType(".gif", "image/gif") + mime.AddExtensionType(".mov", "video/quicktime") + mime.AddExtensionType(".ico", "image/vnd.microsoft.icon") uifs, err := fs.Sub(StaticFs, "ui/dist") if err != nil {