Metadata-Version: 2.5
Name: ilmzot
Version: 0.1.0
Summary: Feed your Zotero knowledge into NotebookLM.
License: MIT License
        
        Copyright (c) 2026 ilmzot contributors
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and sell copies
        of the Software, and to permit persons to whom the Software is furnished to do so,
        subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
        
License-File: LICENSE
Requires-Python: <3.13,>=3.10
Requires-Dist: notebooklm-py[cookies]<0.9,>=0.8.1
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Description-Content-Type: text/markdown

# ilmzot

Feed your Zotero knowledge into NotebookLM.

`ilmzot` mirrors Zotero collections into same-named NotebookLM notebooks while
keeping Zotero as the source of truth. It is one-way: local PDFs are uploaded,
but Zotero is never modified and disappeared items are not deleted remotely.

## Quickstart

```sh
ilmzot setup
ilmzot ls
ilmzot sync "Climate Modelling"
ilmzot status
```

`ilmzot setup` detects Zotero at `localhost:23119`, authenticates NotebookLM
using browser cookies, and creates its local state directory. Use
`--browser firefox`, `--browser "firefox::Work"`, or `--login` for interactive
authentication. ilmzot supports major browsers through automatic cookie
detection. An interactive login fallback is available when browser-cookie
extraction is unavailable.

## Installation

PyPI and Homebrew releases are coming soon. The intended Homebrew UX is
`brew install <user>/tap/ilmzot`; it will provide `ilmzot` directly without
shell configuration. For local development:

```sh
git clone <repository-url>
cd ilmzot
uv sync
uv run ilmzot --help
```

Python 3.10–3.12 is supported (browser-cookie support is most reliable on
3.12). Runtime authentication is provided by `notebooklm-py[cookies]`.

## Commands

`ilmzot sync --all` syncs the personal library to `Zotero Library`.
`-n/--notebook` changes the destination name and `-d/--dry-run` previews work.
`ilmzot doctor` is diagnostic-only and explains one concrete fix for failures.

## Architecture and state

The standard library handles CLI parsing, HTTP, hashing, and state. `zotero.py`
owns the local Zotero API, `notebook.py` contains the unofficial NotebookLM
boundary, and `state.py` stores SHA-256 mappings. State is
`$XDG_DATA_HOME/ilmzot/state.json`, or `~/.local/share/ilmzot/state.json`.
It contains no cookies, tokens, passwords, or browser credentials.

## Privacy and limitations

PDFs are read locally from Zotero and uploaded to NotebookLM. No Zotero cloud
API key is needed. Group libraries, bidirectional sync, metadata editing, and
destructive remote reconciliation are not supported in 0.1.0.

NotebookLM integration relies on an unofficial API exposed through
`notebooklm-py` and may require updates when Google changes NotebookLM.
ilmzot is not affiliated with Zotero or Google.
