召回 – 本地多模态语义搜索您的文件
Recall – local multimodal semantic search for your files

原始链接: https://github.com/aayu22809/Recall

## 本地多模态记忆:用搜索查找任何内容 这个工具允许您使用自然语言创建本地、可搜索的文件数据库——包括图像、音频、视频、PDF 和文本。只需嵌入您的文件,然后使用描述性查询*查找*它们,即使没有任何现有的元数据或标签。例如,搜索“团队晚餐”将显示相关的照片! 它由 Gemini Embedding 2(免费版本)和 ChromaDB 提供支持,所有内容都存储在您本地机器上以保护隐私。设置过程经过简化,并配备了一个动画向导,Raycast 扩展程序提供带有缩略图的即时视觉搜索。 **主要特点:** * **跨模态搜索:** 无缝处理所有文件类型。 * **本地和私密:** 数据保留在您的机器上。 * **易于设置:** 动画向导引导您完成整个过程。 * **Raycast 集成:** 从您的启动器进行快速视觉搜索。 **开始使用:** [https://github.com/hughminhphan/vector-embedded-finder](https://github.com/hughminhphan/vector-embedded-finder)

对不起。
相关文章

原文

Local multimodal memory with semantic search.

Embed images, audio, video, PDFs, and text into a local vector database — then find anything with a natural language query. A text search for "team dinner" surfaces the photos, even though the photos have no text metadata.

Comes with an animated setup wizard and a Raycast extension for instant visual search.

Powered by Gemini Embedding 2 (768-dim, free tier) and ChromaDB stored entirely on your machine.


You                     Gemini Embedding 2          ChromaDB (local)
 |                            |                        |
 |-- team-dinner.jpg -------->|-- 768-dim vector ------>|-- stored on disk
 |-- meeting-notes.pdf ------>|-- 768-dim vector ------>|-- stored on disk
 |-- "team dinner" (query) -->|-- query vector -------->|-- cosine search
 |<---------------------------|<-- ranked results -------|

Cross-modal search works out of the box. No tagging, no renaming, no metadata required.


git clone https://github.com/hughminhphan/vector-embedded-finder.git
cd vector-embedded-finder
pip install -e .
python setup_wizard.py

That's it. The animated setup wizard handles everything end-to-end:

Setup wizard — splash, auto-detect, API key, folder picker, indexing, Raycast card

Step What happens
Splash Animated rainbow logo
Auto-detect Finds your Python binary, repo path, and checks all deps
API key Opens aistudio.google.com/apikey, validates your key, saves to .env
Folder picker Checkbox list of your home folders with live file counts
Indexing Progress bar with current filename, auto-retries on rate limits
Raycast card Prints pre-filled Python Package Path and Python Binary — just copy-paste

Manual key setup: cp .env.example .env and add GEMINI_API_KEY=your_key


from vector_embedded_finder import search, ingest_file, ingest_directory, count

# Embed a single file — image, PDF, audio, video, or text
ingest_file("~/Photos/team-dinner.jpg")

# Embed an entire directory (recursive by default)
ingest_directory("~/Documents/", source="docs")

# Search with natural language
matches = search("team dinner at the rooftop", n_results=5)
for m in matches:
    print(f"{m['file_name']}  {m['similarity']:.0%} match  {m['file_path']}")

# Housekeeping
print(f"{count()} items indexed")

ingest_file returns {"status": "embedded" | "skipped" | "error", ...}. Files are SHA-256 deduplicated — re-ingesting the same file is a no-op.


Visual grid search with image thumbnails, right from your launcher.

cd raycast
npm install
npx ray develop

Open Raycast and search Memory Search. On first launch, go to Preferences and set:

Preference Value
Python Package Path Absolute path to this repo, e.g. /Users/you/vector-embedded-finder
Python Binary Path to python3, e.g. /usr/bin/python3
Gemini API Key Your key (or leave blank if set in .env)

Tip: Run python setup_wizard.py first — it prints these values pre-filled for you.

Command What it does
Memory Search Grid UI with image/video thumbnails, 400ms debounced live search
Memory Open Headless — type a query, instantly opens the best matching file

Category Formats
Image .png .jpg .jpeg .webp .gif .bmp .tiff
Audio .mp3 .wav .m4a .ogg .flac .aac
Video .mp4 .mov .avi .mkv .webm
Document .pdf
Text .txt .md .csv .json .yaml .yml .toml .py .js .ts .go .rs .sh and more

Variable Default Description
GEMINI_API_KEY (required) Free key from aistudio.google.com/apikey
VEF_DATA_DIR ./data Where ChromaDB persists vectors

vector_embedded_finder/
  config.py      — env, API key, supported types, paths
  embedder.py    — Gemini Embedding 2 (text, image, audio, video, PDF)
  store.py       — ChromaDB layer: cosine distance, SHA-256 dedup, upsert
  search.py      — natural language search with similarity scoring
  ingest.py      — file detection → embedding → storage pipeline
  utils.py       — hashing, MIME detection, timestamp helpers

raycast/
  src/lib/runner.ts       — Python bridge: spawnSync + JSON envelope protocol
  src/search-memory.tsx   — grid search UI with thumbnails
  src/open-memory.tsx     — headless instant file opener

setup_wizard.py           — animated CLI setup: key → folders → index → Raycast card

All vectors are stored locally in data/chromadb/. The only outbound traffic is embedding API calls to Google — your files never leave your machine.


MIT

联系我们 contact @ memedata.com