coco-research/meta:media
Multimodal memory — ingest, embed, and search media (images, video, audio, files) with Gemini Embedding 2 + ChromaDB
npx skills add https://github.com/coco-research/coco --skill meta:media
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.
~/.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
All commands run from ~/.claude/media-memory/ using uv run.
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"
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
cd ~/.claude/media-memory && uv run scripts/search.py --recent --limit 10
cd ~/.claude/media-memory && uv run scripts/search.py --stats
assets/ via ingest.py--description with a rich natural language description of the content--tags for semantic categorization--source accurately: user (user sent it), generated (Claude/AI created it), url (downloaded), ingested (bulk import)--text--mode hybrid by default (combines semantic + metadata)--type filter when user specifies media kind--tags filter when user mentions categoriesWhen a conversation topic overlaps with stored media:
~/.cache/chroma/onnx_models/ (downloaded once on first use)| 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 |
Take coco-research/meta:media from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.