Skip to content

v0.3.0

Choose a tag to compare

@smk762 smk762 released this 26 Oct 06:36
· 33 commits to main since this release
8db7e9f

Added

  • argus_cortex.xmp — the suite's one XMP sidecar implementation, hoisted
    from argus-lens so lens (keywords/caption) and argus-curator (face regions,
    content rating) share a writer. write_xmp() / read_xmp() /
    merge_xmp() / parse_xmp() / render_xmp() / sidecar_path() over an
    XmpData model, all exported from the top-level package.
    • Namespaces: dc (subject, description), xmp (Rating, Label), lr
      (hierarchicalSubject), Iptc4xmpExt (PersonInImage), mwg-rs regions
      (XmpRegions / XmpRegion, MWG centre-based normalised coordinates), and a
      new argus namespace for ContentRating. The argus namespace URI
      (https://github.com/smk762/argus-cortex/ns/xmp/1.0/) is now a wire
      contract.
    • Writes merge: each property set in XmpData replaces that property
      (latest write wins, element or attribute form, across every
      rdf:Description); everything else in the sidecar — Lightroom develop
      settings, GPS, another stage's fields, foreign namespace prefixes — is
      preserved. None leaves a property untouched, an empty value removes it;
      replace=True discards the existing sidecar.
    • Writes are atomic (temp file + rename) and keep the existing file mode
      (0644 for a new sidecar). An unparseable existing sidecar raises
      XmpError and is never clobbered; a DTD / entity declaration is refused.
    • Stdlib xml.etree + pydantic only, so the top-level import stays
      pydantic-only.
  • CLAUDE.md agent guide.

Security

  • eMudhra/emSign CA incident. The extras that make outbound TLS
    connections ([remote] httpx, [qdrant], [s3]) now require
    certifi>=2026.10.19, which no longer trusts the compromised emSign
    intermediates. See https://discuss.python.org/t/109576.