Metadata-Version: 2.4
Name: memini-vision
Version: 0.1.0
Summary: Shared vision library for image storage, CLIP embedding, and cross-modal search
Author: memini-vision contributors
License-Expression: MIT
License-File: LICENSE
Keywords: clip,cross-modal,embedding,image,memini-ai,pgvector,vision
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Scientific/Engineering :: Image Recognition
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.11
Requires-Dist: asyncpg>=0.29
Requires-Dist: numpy>=1.24
Requires-Dist: pillow>=10.0.0
Requires-Dist: pydantic-settings>=2.0
Requires-Dist: pydantic>=2.0
Requires-Dist: sentence-transformers>=3.0
Provides-Extra: dev
Requires-Dist: mypy>=1.11; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Description-Content-Type: text/markdown

# memini-vision

Shared vision library used by both `videre-mcp` (the MCP server that exposes
vision tools to agents) and `memini-ai-dev` (the semantic memory server that
fuses image results into its existing RRF). Owns image storage, CLIP
embedding, the `memories_image` table CRUD, and cross-modal query logic.

**No FastMCP, no CLI, no HTTP server.** Library only — the two consuming
servers register their own tools.

## Install

```bash
pip install memini-vision
```

## Environment variables

| Variable | Default | Description |
|----------|---------|-------------|
| `MEMINI_IMAGE_SEARCH_ENABLED` | `false` | Master kill-switch (consumer checks flag) |
| `MEMINI_IMAGE_CLIP_MODEL` | `clip-ViT-B-32` | `clip-ViT-B-32` or `clip-ViT-L-14` |
| `MEMINI_IMAGE_CLIP_DEVICE` | `auto` | `auto`, `cpu`, or `cuda` |
| `MEMINI_IMAGE_DIR` | `~/.memini-ai/images` | Filesystem image storage root |
| `MEMINI_IMAGE_MAX_FILE_SIZE` | `10485760` | Max image file size in bytes (10MB) |
| `MEMINI_IMAGE_DB_URL` | *(empty)* | PostgreSQL connection string (falls back to `MEMINI_DB_URL`) |

## Quickstart

```python
from memini_vision import VisionConfig, ImageStore, ClipEmbedder, ImageIndex, ImageQuery

cfg = VisionConfig()                     # reads MEMINI_IMAGE_* env vars
store = ImageStore(cfg.image_dir)        # filesystem sharded storage
embedder = ClipEmbedder(cfg.clip_model, cfg.clip_device)
index = ImageIndex(cfg.db_url)           # asyncpg pool, memories_image CRUD
query = ImageQuery(embedder, index)       # cross-modal CLIP search

# Encode + store an image (lazy model load on first call)
vec = embedder.encode_image(pil_image)    # list[float], zero-padded to 768 for B/32
record = await index.insert(memory_id, sha256, vec, file_path, mime_type)
results = await query.search_by_text("terminal traceback", limit=5)
```