Skip to content

v0.4.0

Latest

Choose a tag to compare

@github-actions github-actions released this 03 Aug 21:44

Added

  • Support for Immich 3.x servers (3.0 and 3.1) next to the existing
    support for Immich 2.7 and later 2.x releases. pymmich asks the
    server for its version on first use and adapts to the API changes
    Immich 3.0 introduced. No configuration is needed, and the API key
    permissions stay the same — one key works against either server
    generation.
  • PYMMICH_API_VARIANT environment variable to pin the API variant to
    v2 or v3 instead of detecting it. Useful when the server's
    version endpoint is unreachable, e.g. behind a restrictive reverse
    proxy.
  • New "Server compatibility" documentation page describing the
    supported server versions, the version detection, and the endpoints
    that differ between the two server generations.
  • Public API for the version handling, for callers using pymmich as a
    library: ServerVersion and the API_V2 / API_V3 /
    API_VARIANTS identifiers are re-exported from pymmich, and
    ImmichClient gained api_variant= plus get_server_version(),
    server_version, api and connect().
  • Album.shared_users and Album.owner, which tell the users an
    album is shared with apart from its owner on both server
    generations.
  • Live integration tests that run against real Immich 2.7 and 3.1
    servers, started from the official images. Every test runs against
    both server generations, so a behaviour that differs between them
    fails the suite instead of going unnoticed. The tests need Docker
    and are opt-in — the default suite stays mocked, hermetic and
    offline. New just recipes drive them: docker-test-up,
    docker-test, docker-test-status and docker-test-down.
  • GitHub Actions workflow that runs the pytest suite on every push to
    main and on every pull request.

Changed

  • Album listings, album contents and uploads now use the endpoints and
    request fields appropriate for the connected server version. On
    Immich 3.x, album contents are read via the stable metadata search
    instead of the internal timeline endpoints, which also removes one
    request per asset.
  • unshare no longer treats an album's owner as a shared user, so the
    owner can't be removed from their own album on Immich 3.x, which
    reports the owner as part of the album's user list.
  • list and filename lookups now ask the server for timeline assets
    explicitly. Immich 3.0 widened the default of its metadata search to
    include archived and hidden assets; pinning the filter keeps listings
    identical on both server generations. Album listings keep their
    archived members, but drop hidden ones — Immich stores the video part
    of a motion photo as a hidden asset, and Immich 2.x never reported
    those as album members either.
  • Server error messages are now unpacked from either the Immich 2.x or
    the 3.x error format, so failures name the offending field instead
    of dumping a raw JSON body.
  • GitHub Release notes are taken from the matching CHANGELOG.md
    section instead of being generated from the commit log. Releasing a
    tag with no changelog entry now fails the workflow rather than
    shipping empty notes.
  • ImmichClient._list_accessible_albums(include_shared) is now the
    public, keyword-only ImmichClient.list_accessible_albums().

Fixed

  • list, download and standalone upload now report server errors
    with a message and exit code 1 instead of raising an unhandled
    exception.
  • A failing download names the HTTP error instead of aborting with an
    httpx.ResponseNotRead traceback. Downloading with a key that lacks
    asset.download is the common way to hit this.