Files

215 lines
14 KiB
Markdown

# Changelog
## 0.9.2
- Apply pending preview rotations physically when saving JPG, PNG, and TIFF files.
- Show an explicit overlay stating whether rotation will be saved or is preview-only.
- Preserve pending rotation while navigating between photos during the current session.
- Use lossless `jpegtran` rotation for compatible JPEG dimensions.
- Fall back to one high-quality JPEG re-encode when a perfect lossless transform is unavailable.
- Rotate PNG pixels losslessly and reject animated PNG files rather than dropping frames.
- Rotate every page of a TIFF with lossless TIFF compression.
- Restore existing metadata after PNG/TIFF reconstruction, then normalize EXIF/XMP orientation to 1.
- Keep HEIF, DNG, and all camera RAW formats strictly preview-only for rotation.
- Reject unsupported or invalid rotation requests at the backend.
- Add `libjpeg-turbo-progs` to the container for lossless JPEG transforms.
- Preserve all existing metadata editing, format support, viewport, and streamed-save behavior.
## 0.9.1
- Lock the three-column desktop workspace to the available browser viewport height.
- Keep the bottom photo-navigation bar visible without whole-page scrolling.
- Let the photo list and metadata form scroll independently inside their panels.
- Allow the image stage to shrink with shorter laptop displays while preserving aspect ratio.
- Add a compact desktop-height layout for browser viewports 800 pixels tall or shorter.
- Preserve normal document scrolling for tablet and mobile layouts.
- Preserve all v0.9 format, metadata, preview, and streamed-save behavior.
## 0.9.0
- Add the `nikon` format group with NEF and NRW support.
- Add the `sony` format group with ARW and ARQ support.
- Add exact NEF, NRW, ARW, and ARQ badges and format-sort compatibility.
- Validate the TIFF headers used by Nikon and Sony RAW containers before processing.
- Prefer embedded JPEG previews before loading the lazy LibRaw fallback.
- Read and write EXIF, XMP, IPTC, dates, descriptions, keywords, GPS coordinates, and location labels.
- Preserve Nikon and Sony maker notes, sensor data, embedded previews, and untouched camera metadata.
- Use the established streamed save path, live transfer progress, and timing diagnostics.
- Document every `ENABLED_FORMATS` group, its extensions, and its behavior in the README.
- Keep older Sony SR2 as a future compatibility decision and exclude read-only SRF.
- Preserve all existing JPG, PNG, TIFF, HEIF, DNG, and Canon RAW behavior.
## 0.8.3
- Stream processed files from the backend in 256 KiB chunks with an explicit content length.
- Write response chunks directly into the browser's protected writable file instead of creating a complete in-memory Blob.
- Show live transferred bytes and percentage while saving.
- Commit the local replacement only after the complete response stream closes successfully.
- Cancel the response reader and abort the browser writable file if streaming fails.
- Retain the buffered Blob workflow as a compatibility fallback for browsers without response streaming.
- Report time to first byte and combined stream/write time for streamed saves.
- Preserve all existing metadata, format, progress, and folder-state behavior.
## 0.8.2
- Return inspection metadata and the JPEG preview in one compact binary response instead of Base64 JSON.
- Remove Base64 response expansion and the corresponding browser decode loop.
- Preserve the detailed save timing after the current photo reloads.
- Include total, server/transfer, and local-write durations in the save notification.
- Log end-to-end server duration for `/api/inspect` and `/api/process`.
- Log temporary-copy, preview-extraction, and metadata-read timings for inspections.
- Add request-duration and `Server-Timing` response headers for browser diagnostics.
- Preserve all v0.8.1 RAW opening optimizations and existing format behavior.
## 0.8.1
- Upload server-preview formats only once when opening them, returning the preview and metadata together.
- Stop at the first usable embedded RAW preview instead of extracting every candidate.
- Add `RAW_PREVIEW_MAX_EDGE` (default `1600`) for smaller temporary RAW previews.
- Keep LibRaw as a lazy fallback only when no embedded RAW preview is usable.
- Show separate server/transfer and local-file-write durations after saving.
- Log upload, ExifTool rewrite, and response-read timings and expose them through `Server-Timing`.
- Allow up to three minutes for large DNG and Canon RAW metadata rewrites.
- Preserve all existing format and in-place overwrite behavior.
## 0.8.0
- Add the `canon` format group with CR2 and CR3 support.
- Add exact `CR2` and `CR3` badges and format-sort compatibility.
- Validate TIFF-based CR2 headers separately from ISO-BMFF-based CR3 headers.
- Extract `JpgFromRaw`, `PreviewImage`, and `ThumbnailImage`, using the largest valid embedded preview.
- Use the lazy LibRaw decoder only when a Canon RAW file has no usable embedded preview.
- Read and write CR2 EXIF, XMP, IPTC, date precision, description, keywords, GPS coordinates, and location labels.
- Read and write CR3 EXIF and XMP metadata without applying unsupported IPTC-IIM fields.
- Preserve Canon maker notes, sensor data, embedded previews, and other untouched camera metadata.
- Update enabled-format configuration, UI text, manifest, README, and the RAW roadmap, including planned Nikon and Sony phases.
- Preserve all established JPG, PNG, TIFF, HEIF, and DNG behavior.
- Bump the application and service-worker cache version to 0.8.0.
## 0.7.1
- Add `ENABLED_FORMATS` with the available groups `jpg`, `png`, `tiff`, `heif`, and `dng`.
- Expand each group to its associated extensions and expose the enabled groups/extensions through `/api/config`.
- Omit disabled formats from browser folder scans and reject them at backend metadata, preview, and processing endpoints.
- Generate the default page subtitle and empty-folder guidance from the enabled format groups.
- Validate configuration strictly so unknown or empty format lists fail clearly at startup.
- Load `pillow-heif` only on the first HEIF preview.
- Prefer an embedded DNG preview without loading LibRaw, and import `rawpy` only when a rendered DNG fallback is actually required.
- Keep a decoder loaded after first use until container restart, avoiding repeated load/unload overhead.
- Preserve all format behavior when `ENABLED_FORMATS` is omitted.
- Bump the application and service-worker cache version to 0.7.1.
## 0.7.0
- Add DNG folder scanning, `DNG` format badges, and format-sort compatibility.
- Add browser-friendly DNG previews by preferring embedded `JpgFromRaw`, `PreviewImage`, and `ThumbnailImage` data.
- Add a half-size LibRaw rendering fallback for DNG files without a usable embedded preview.
- Add `rawpy` and the container OpenMP runtime required by its LibRaw decoder.
- Validate DNG uploads as TIFF-based files before processing.
- Read and write DNG EXIF, XMP, IPTC, date precision, description, keywords, GPS coordinates, and location label metadata.
- Preserve the original DNG container, sensor data, and embedded previews while overwriting the same local file.
- Update the interface, manifest, environment example, README, and format roadmap.
- Preserve all established JPG, PNG, TIFF, and HEIF processing behavior.
- Bump the application and service-worker cache version to 0.7.0.
## 0.6.1
- Add optional `APP_TITLE` and `APP_SUBTITLE` environment variables for the visible page heading and subtitle.
- Keep `APP_NAME` backward-compatible as the title fallback and application identity.
- Update the browser tab title from the configured page title.
- Bump the application and service-worker cache version to 0.6.1.
## 0.6.0
- Add HEIC, HEIF, and HIF folder scanning and in-place metadata processing.
- Normalize all three HEIF-family extensions to a `HEIF` format badge and include them in format sorting.
- Generate temporary browser-friendly JPEG previews for HEIF-family images while preserving and overwriting the original container on save.
- Add `pillow-heif` and the container HEIF runtime needed to decode previews.
- Validate HEIF-family files as ISO Base Media File Format containers with recognized HEVC image brands before processing, without admitting renamed AVIF files.
- Read and write HEIF EXIF/XMP dates, precision marker, description, keywords, GPS coordinates, and location label without applying IPTC-IIM fields.
- Return updated files using HEIC/HEIF media types while keeping the original filename and extension.
- Update the interface, manifest, documentation, and empty-folder guidance for the new formats.
- Preserve the established JPG, PNG, and TIFF processing paths.
- Bump the application and service-worker cache version to 0.6.0.
## 0.5.0
- Add in-place PNG metadata reading and writing.
- Add in-place TIFF/TIF metadata reading and writing.
- Generate temporary browser-friendly JPEG previews for TIFF files while preserving and overwriting the original TIFF on save.
- Validate JPEG, PNG, and TIFF file signatures before metadata processing.
- Add normalized JPG, PNG, and TIFF format badges to the left photo list.
- Show the current file format alongside size and modified time in the viewer.
- Add **Sort: Format**, grouping by normalized format and then filename.
- Keep TIFF list thumbnails lazy: a format tile is shown until that TIFF has been opened and previewed.
- Add configurable TIFF preview edge and pixel limits.
- Bump the application and service-worker cache version to 0.5.0.
## 0.4.3
- Fix favorite locations appearing empty after a browser refresh.
- Load the shared server-side favorite list during application startup instead of waiting for **Open photo folder**.
- Keep the existing refresh when opening a folder as a defensive re-sync for changes made by another family member.
- Preserve all favorites already stored in the `photo-date-editor-data` Docker volume.
- Bump the application and service-worker cache version to 0.4.3.
## 0.4.2
- Added shared favorite locations to the Location tab.
- Favorite names and coordinates are stored server-side in the persistent `photo-date-editor-data` Docker volume.
- Added **Use**, **Add current location**, and **Delete selected** controls for favorite locations.
- Favorite locations are available to every browser and family member using the same Docker stack.
- Duplicate favorite names are rejected case-insensitively.
- Documented MP4 as a later media phase after the planned photo formats.
## 0.4.1
- Fix `Shift+Tab` so it activates the previous metadata tab immediately and focuses that tab's first field.
- Keep Left/Right arrow keys dedicated to previous/next photo navigation.
- Remove the tab-header Arrow/Home/End behavior that conflicted with photo navigation and was awkward on compact Mac keyboards.
- Proxy OpenStreetMap tiles through the backend and serve them same-origin through Caddy, avoiding Brave third-party tile blocking.
- Add an in-memory map-tile cache and clear map loading/error status text.
- Add an explicit message when the Leaflet library fails to load instead of silently showing a dead map.
- Add `ca-certificates` explicitly to the container image for outbound HTTPS map and geocoder requests.
- Keep all map environment variables optional; existing `.env` files remain valid.
- Bump the application and service-worker cache version to 0.4.1.
## 0.4.0
- Add a dedicated Location tab with an interactive Leaflet map.
- Add user-triggered address/place search through a backend geocoder endpoint.
- Add click-to-place and draggable map markers.
- Add editable decimal latitude and longitude fields plus an optional location label.
- Read existing EXIF/XMP GPS metadata and repopulate the map and fields.
- Write GPS coordinates to EXIF and XMP while preserving existing GPS unless the user changes it.
- Add explicit Clear location behavior that removes app-managed GPS and location tags on save.
- Add configurable tile, geocoder, and default map settings through optional environment variables.
- Rate-limit uncached public geocoder calls to one request per second and cache results in memory.
- Add `Shift+Tab` to cycle backward through right-side metadata tabs while keeping normal `Tab` field navigation.
- Add arrow-key navigation when a tab header has focus.
- Avoid service-worker caching of third-party map tiles and scripts.
- Bump the application and service-worker cache version to 0.4.0.
## 0.3.0
- Add status filtering for All, Pending, Saved, Skipped, and Failed photos.
- Add sorting by filename or status; status order prioritizes Pending, then Failed, Skipped, and Saved.
- Make previous/next and Save & Next follow the currently filtered and sorted list.
- Replace the single blue progress fill with green Saved, yellow Skipped, and red Failed segments; Pending remains the grey remainder.
- Add accessible progress text with counts for every status.
- Document the proposed PNG, TIFF, HEIC/HEIF, DNG, Canon RAW, and Nikon RAW roadmap.
- Explicitly drop DWG and BMP alongside the previously excluded formats.
- Bump the service-worker cache and application version to 0.3.0.
## 0.2.0
- Read EXIF/XMP/IPTC metadata from the selected JPEG and populate the editor fields.
- Recognize files previously edited by Photo Date Editor from their XMP marker, including in another browser.
- Show a saved metadata summary such as date, time precision, description presence, and keyword count.
- Add a persistent Skipped state and sidebar icon.
- Count Saved + Skipped photos as processed in the progress bar.
- Rename the secondary save action to **Save current**.
- Clarify `Ctrl+S` as **Save current photo and stay on it**.
- Record whether an entered time was known or unknown in the app's XMP marker.
- Preserve compatibility with progress state and files created by 0.1.