215 lines
14 KiB
Markdown
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.
|