v0.9.4

Highlights

Release notes are now managed with reno. Every contributor adds a note for the change they are making in the same pull request that carries the code, and the notes of a release are published as the body of its GitHub Release.

Upgrade Notes

  • Contributors need the new release dependency group to add a release note. Run uv sync --group release to install it, then create a note with make release-note NAME=my-change. A pull request touching library code that carries no note fails the Check Release Notes job.

  • VLADEmbedder, FisherVectorEmbedder, Pipeline, ContrastiveSiameseNetwork and TripletNeuralNetwork now L2-normalize what embed returns. Vectors already stored in an InMemoryImageEmbeddingStore built in the "l2" or "ip" space are on a different scale than newly embedded queries, so rebuild such a store or construct the embedder with normalize=False. A "cosine" store is unaffected, since it normalizes its vectors anyway.

  • Subclasses outside the library that implement embed have to rename it to _embed: ImageEmbedderBase.embed is now a concrete method that applies normalize to whatever _embed returns.

  • The .embedder file format carries the normalize setting and is bumped to version 3. Files written by earlier versions lack the key and no longer load, so re-save any embedder saved with pyvisim 0.9.3 or older.

New Features

  • Every image embedder now takes a normalize parameter, which ImageEmbedderBase owns and all embedders inherit. It defaults to True, so embed returns rows of unit L2 length and two embeddings can be compared with a plain dot product. Pass normalize=False to get the raw encoding instead.

  • macOS is now a supported operating system. The package metadata lists it next to Linux and Windows, and the unit and slow test suites run on macos-latest in CI.

Enhancement Notes

  • The documentation now shows the pyvisim symbol above the title in the sidebar, with a separate variant for the dark theme, and a clickable GitHub icon in the page footer.

  • CHANGELOG.md is frozen at 0.9.3 and is no longer updated. It stays in the repository as the record of every release up to that point. Notes for later releases live in releasenotes/notes and are rendered onto the GitHub Releases page.