Skip to content

v0.7.3

Choose a tag to compare

@maltyxx maltyxx released this 21 Sep 19:59
· 13 commits to main since this release
a2d5b2f

What's Changed

Photos keep their metadata through image edits. Everything happens in the
app: the server plays no part and needs no update. Images attached before
this version carry no metadata; attach the photo again to use the feature.

Added

  • Edited photos keep their metadata when saved. When you attach a
    photo, everything its file carries is kept with it, verbatim: camera and
    lens, exposure, date taken, GPS position, the rest of the EXIF (maker
    notes and unknown tags included), XMP in any namespace, IPTC, comments
    and PNG text. Every image the model makes from that photo inherits it,
    through any number of edits ("make it blue", then "add a hat"), and
    "Save as…" writes it into the saved file without re-encoding the pixels.
    What describes the file rather than the photo stays the saved file's
    own: orientation, pixel size and colour profile. The old embedded
    thumbnail, a small copy of the original picture, is dropped. An image
    generated from the prompt alone inherits nothing.
  • A "Photo Metadata" section in the settings panel, with two global
    switches, both on by default:
    • Keep the original metadata. Off, saved images carry none.
    • Mark generated images as AI. Writes the IPTC "digital source type"
      that photo apps read to flag AI images. When the photo already declares
      one (Apple Photos does after Clean Up), it is updated rather than
      duplicated.
  • Each image records how the model made it, when the model returns it:
    edited from a picture you sent (a photo, a screenshot, an earlier
    result) or drawn from the prompt alone. The AI mark declares exactly
    that, "edited" or "generated", even for an edited screenshot that
    carries no metadata. A result you annotate and send again keeps it.
    Images generated before this version are marked from where they appear
    in the conversation.
  • You can see what a photo carries.
    • Thumbnails in the composer get a camera badge.
    • On hover, images in the conversation show the camera model; its tooltip
      adds exposure, date and place, the date in your system's language
      ("5 juil. 2026, 19:41" on a Mac set to French). The rest of the app
      stays in English.
    • After "Save as…", a message says whether the original metadata and the
      AI mark went into the file.

Changed

  • "Annotate & reuse" carries the image's metadata to the new draft, so
    an edit of an edit still has the original photo's metadata.
  • "Save as…" asks where first, then prepares the file: cancelling the
    dialog costs nothing.
  • Metadata stays out of the way of the chat. A message keeps only what
    is shown (camera, date, place); the metadata itself is stored beside the
    image and read only to save or reuse it, so a large XMP from Lightroom
    or a ComfyUI workflow embedded in a PNG does not slow the conversation
    down. Each image made from a photo has its own copy, so deleting a
    message never takes another image's metadata with it. No schema change:
    the chat history is kept.
  • Metadata handling is a domain contract (IPhotoMetadataCodec) with a
    pure-Dart implementation: same behaviour on macOS, Windows and Linux.
    Dates are formatted with intl (new dependency, date formats only).
    Test suite grew from 406 to 467.

Known limitations

  • Metadata is written into PNG and JPEG files. WebP and GIF are saved as
    they are.
  • In a saved PNG, IPTC fields that have no XMP equivalent (IPTC date and
    time created, for instance) are in the file but not shown by macOS
    Preview, which reads no IPTC from PNG files; exiftool shows them.
  • "Copy image" carries no metadata: the macOS clipboard keeps only the
    pixels. Pasting a photo into the composer loses its metadata for the same
    reason; attach it with the paperclip or by drag-and-drop instead.
  • Photos no larger than 2048 px on a side are still sent to the server
    untouched, their EXIF (GPS included) with them. Removing it on send is
    not done yet.

Full Changelog: v0.7.2...v0.7.3