import requests class ImmichClient: def __init__(self, base_url: str, api_key: str): self.base_url = base_url.rstrip("/") self.headers = {"Authorization": f"Bearer {api_key}"} def _get(self, path: str, **kwargs): try: r = requests.get(f"{self.base_url}{path}", headers=self.headers, timeout=10, **kwargs) r.raise_for_status() return r except requests.exceptions.ConnectionError as e: raise ConnectionError(f"Cannot reach Immich: {e}") from e def list_albums(self) -> list: return self._get("/api/albums").json() def get_album(self, album_id: str) -> dict: return self._get(f"/api/albums/{album_id}", params={"withoutAssets": "false"}).json() def get_thumbnail(self, asset_id: str) -> bytes: return self._get(f"/api/assets/{asset_id}/thumbnail", params={"size": "preview"}).content def get_original(self, asset_id: str) -> bytes: return self._get(f"/api/assets/{asset_id}/original").content