media-memory · git:20260802.1479e32 · 2026-08-02 · sha256 713b1aed324ead6a
media-memory git:20260802.1479e32A
Immutable. This exact content is served forever at /api/v1/blob/713b1aed324ead6a.
---
name: meta:media
description: Multimodal memory — ingest, embed, and search media (images, video, audio, files) with Gemini Embedding 2 + ChromaDB
trigger: |
ACTIVATE when:
- User sends an image, screenshot, file, video, or audio
- User says "remember this", "save this image", "store this", "log this media"
- User asks "find that diagram", "search for", "what images do we have", "recall", "media search"
- User asks to generate an image/diagram and wants it saved
- Code references a past asset (screenshot, diagram, mockup, recording)
ALSO proactively query when:
- User discusses a topic and a past media asset might be relevant
- User references "that screenshot", "the diagram from last week", etc.
domain: engineering
---
# /media-memory — Multimodal Memory System
You have access to a persistent multimodal memory system at `~/.claude/media-memory/`. It stores every piece of media (images, video, audio, files) with rich metadata and Gemini Embedding 2 vectors in ChromaDB.
## Directory Layout
```
~/.claude/media-memory/
assets/ # stored media files
chroma/ # ChromaDB vector store
metadata.db # SQLite structured metadata
scripts/
ingest.py # ingestion + embedding
search.py # search with filters
schema.py # metadata models
```
## Commands
All commands run from `~/.claude/media-memory/` using `uv run`.
### Ingest (store + embed)
```bash
cd ~/.claude/media-memory && uv run scripts/ingest.py "<file_path>" \
--source "user|generated|url|ingested" \
--description "Natural language description of the media" \
--tags "tag1,tag2,tag3" \
--type "image|video|audio|document|file" \
--text "Extracted text or transcript content"
```
### Search (hybrid: semantic + metadata)
```bash
cd ~/.claude/media-memory && uv run scripts/search.py "search query" \
--type image \
--source user \
--tags "architecture,diagram" \
--from "2026-03-01" \
--to "2026-03-28" \
--limit 10 \
--mode hybrid|semantic|metadata \
--json
```
### Recent items
```bash
cd ~/.claude/media-memory && uv run scripts/search.py --recent --limit 10
```
### Stats
```bash
cd ~/.claude/media-memory && uv run scripts/search.py --stats
```
## Behavior Rules
### On Ingest (when user sends or generates media)
1. Copy the file to `assets/` via `ingest.py`
2. ALWAYS provide `--description` with a rich natural language description of the content
3. ALWAYS provide relevant `--tags` for semantic categorization
4. Set `--source` accurately: `user` (user sent it), `generated` (Claude/AI created it), `url` (downloaded), `ingested` (bulk import)
5. For screenshots: describe what's visible (UI elements, text, code, diagrams)
6. For documents: extract key text into `--text`
7. Report the result to the user: "Saved to media memory: {description}"
### On Search (when user asks about past media)
1. Use `--mode hybrid` by default (combines semantic + metadata)
2. Add `--type` filter when user specifies media kind
3. Add `--tags` filter when user mentions categories
4. Add date filters when user references timeframes ("last week", "this month")
5. Show results with descriptions and asset paths
6. Offer to open/display the asset if it's an image
### Proactive Recall
When a conversation topic overlaps with stored media:
1. Run a quick semantic search with the current topic
2. If relevant results found (similarity > 0.7), mention: "I found a related {type} in media memory: {description}"
3. Don't be noisy — only surface genuinely relevant assets
## Environment
- **No API key needed** — uses ChromaDB's built-in local embeddings (all-MiniLM-L6-v2 via onnxruntime)
- Everything runs locally, zero external calls
- ChromaDB: local persistent storage, cosine similarity
- Model cached at `~/.cache/chroma/onnx_models/` (downloaded once on first use)
## Metadata Schema
| Field | Type | Description |
|-------|------|-------------|
| id | string | Auto-generated: `{type}_{hash}_{stem}` |
| filename | string | Original filename |
| type | string | image, video, audio, document, file |
| timestamp | ISO 8601 | When ingested |
| source | string | user, generated, url, ingested |
| description | string | Natural language description |
| extracted_text | string | OCR / transcript / content |
| tags | JSON array | Semantic tags |
| original_path | string | Where it came from |
| asset_path | string | Path in assets/ |
| embedded | boolean | Whether vector is in ChromaDB |