agentsclimarketplace

Media memory

Skill coco-research/coco/skills/media-memory

Multimodal memory — ingest, embed, and search media (images, video, audio, files) with Gemini Embedding 2 + ChromaDBFrom its SKILL.md

Install
npx -y skills add coco-research/coco --skill media-memory

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

SKILL.md

4.4 KB, 952 tokens by cl100k_base, as published. Nobody here has run it

/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)

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)

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

cd ~/.claude/media-memory && uv run scripts/search.py --recent --limit 10

Stats

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

FieldTypeDescription
idstringAuto-generated: {type}_{hash}_{stem}
filenamestringOriginal filename
typestringimage, video, audio, document, file
timestampISO 8601When ingested
sourcestringuser, generated, url, ingested
descriptionstringNatural language description
extracted_textstringOCR / transcript / content
tagsJSON arraySemantic tags
original_pathstringWhere it came from
asset_pathstringPath in assets/
embeddedbooleanWhether vector is in ChromaDB

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.