Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

456 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

openMemo

Organize Your Digital Attic.

One place for everything worth saving. On your machine. Free.

A personal space for saving links, files, notes, and videos. No cloud, no subscriptions, no API keys.

Version License Docker


Stop Drowning in Digital Chaos

Articles in bookmarks you'll never re-read. Notes scattered across 4 apps. PDFs buried in Downloads. YouTube videos you meant to summarise. Screenshots you can't find.

openMemo brings it all together. One place to capture, organise, and actually use everything you save.

Capture Anything

πŸ“„ Articles 🎬 Videos πŸ“ Notes
πŸ”— Links πŸ“Έ Images πŸ“ Files
πŸŽ™οΈ Audio πŸ“Š Reports πŸ–ΌοΈ Screenshots

Drop a PDF. Paste a URL. Jot a quick note. Record a voice memo. The Chrome Extension captures any webpage in one click. On your phone, share any post to your private Telegram bot and it lands in openMemo by itself.


What's Inside

πŸŽ™οΈ Audio Memos

Record a voice memo straight from your mic, or drop in any audio file (lossless WAV and FLAC included). Play it from a now-playing player in the sidebar that follows you across the app. Every recording and upload transcribes on your own machine with faster-whisper, in dozens of languages, on your GPU or CPU. The transcript becomes searchable text, so you can find and ask about what you said.

πŸ“ Video Transcripts & Summaries

Get the transcript of any video without losing the video. One click pulls the source's own captions (YouTube, Vimeo, and any host yt-dlp supports), instant and no download, and falls back to local Whisper speech-to-text when a host has none. The video keeps playing inline while the timestamped transcript fills its tab, fully searchable and ask-able. Then summarise it three ways: a Timestamp outline of the talk, Key Insights bullets, or a flowing Essay, each generated on demand by your local Ollama model.

πŸ’Ύ Make It Local

Point it at any video or audio link (YouTube, Vimeo, podcast hosts, direct media files, anything yt-dlp can fetch) and openMemo pulls the media down and keeps it. A Memo survives the original being taken offline. Or convert a long video into an audio-only copy when you just want the podcast.

πŸ“š Smart Collections

Organise Memos into themed collections with emoji icons and descriptions. Drag and drop cards directly into collections. Scope your AI chat to a single project or topic.

πŸ”Œ Chrome Extension

One-click save from any webpage. Site-specific extractors pull clean article text, video metadata, and source attribution automatically.

πŸ“² Phone Capture

See a post worth keeping while you're out. Share it to your private Telegram bot and keep scrolling. openMemo polls Telegram from your machine, no VPN, no open ports, and files each link like a paste: photo, caption, thumbnail, AI tags. The bot replies with a receipt and buttons to re-file into any collection, or reply with a collection name and it moves. Your PC asleep? Messages queue on Telegram until it wakes. Instagram photo posts land as real image files, not embeds. Add your cookie file and they arrive full resolution, uncropped.

🎡 Music Library

A full music page of its own. Paste a Spotify, Apple Music, or YouTube playlist and get it back as a real playlist: per-track downloads, lossless FLAC where the source allows, a play queue with OS media keys, and a now-playing player that follows you across the app. Voice notes and music live apart, each with their own dashboard filter.

πŸ•ΈοΈ Mesh

Two computers, one library. Your Mac and your PC each hold everything, and both can write. Changes travel in both directions, so it stops mattering which machine you happen to be sat at.

No account. No cloud. Nothing in the middle. You pair them once with a 12 word code, or point a camera at a QR, and they find each other on your network from then on.

It does not shove 25 GB around. Your library's text is a few megabytes, and most of your media can be fetched again from where it came from. So the other machine pulls what you actually open, grabs your 20 most recent Memos up front, and fills in the rest quietly. Your laptop is usable in seconds instead of after a two hour progress bar. Notes, tags, transcripts and AI summaries all arrive as text, so joining a Mesh never re-runs Whisper or Ollama.

Spaces, collections, playlists and covers come across first. A Space showing up without its artwork looks broken. A track still downloading does not.

Nothing gets overwritten behind your back. Edit the same note on both machines and openMemo shows you both versions, says which device each came from, and keeps both by default. Every sync is written down with the reason it decided what it did, and any of them can be undone.

openMemo itself never goes online. Mesh runs on its own separate port that serves exactly one thing, the sync channel, and everything on the wire is encrypted with AES-256 and signed with a key only your two computers hold. Off by default, behind one toggle in Settings. While it is off it costs your install nothing at all.

Two switches, not one. Turning Mesh on lets you pair. A second switch, Reachable from your other computer, is what actually opens the port. Off, openMemo listens only to itself. That is deliberate: opening a port is a decision you make, not something an update does to you. Your 12 word code lives in your operating system's own vault, the keychain on a Mac and account level encryption on Windows.

Step by step for two machines, including from different networks: the pairing walkthrough. Design in ADR-024, full write-up in the handbook, and what it does before, during and after you switch it on in the security audit.

πŸ—‚οΈ Spaces

Group whole areas of your life. A Space bundles Memos and collections under one cover, one color, one name. Client work, home projects, research topics. Each Space gets its own page.

πŸ” Hybrid Search

Semantic + Full-Text. ChromaDB finds things by meaning. SQLite FTS5 finds things by exact words. Combined, they surface what you need even when you can't describe it perfectly.

βš™οΈ Everything Gets Indexed

Every saved item is automatically processed in the background:

  • Extracted: PDFs, DOCX, images, audio, and webpages parsed into clean text
  • Embedded: Vectorised by your local Ollama embed model for semantic search
  • Indexed: Added to FTS5 for instant keyword retrieval

✨ Ask Memo

Ask questions in plain language. Get answers grounded in your actual saved content, with citations back to the source Memos. One toggle switches between Memos (searches your library, cites what it used) and Chat (straight to the model, your data stays out of it). Live status while it thinks, streaming answers, scoped chat per memo or per collection. The whole retrieval flow is documented and locked in ADR-022.



Why openMemo?

Cloud Tools openMemo
Your data lives on their servers βœ… Your data lives on your machine
Monthly subscription fees βœ… Free forever. Open source.
Vendor lock-in, proprietary formats βœ… SQLite + markdown. Export anytime.
Closed-source black box AI βœ… You choose the model. Ollama runs locally.
Upload limits, usage caps βœ… No limits. Your hardware is the ceiling.
Privacy policy changes βœ… No policy. No tracking. No telemetry.
Sync means uploading to their servers βœ… Your devices talk to each other. Nothing in between.

Quick Start

The One-Liner (Docker)

git clone https://github.com/izored/OpenMemo.git
cd OpenMemo
docker-compose up -d

Open http://localhost:8091. That's it.

macOS App (Apple Silicon)

openMemo also runs as a native Mac app. Its own window, Dock icon, ⌘N, PIN lock, no Docker and no browser. Everything Mac-specific lives under macOS/; build and install guide in docs/MACOS.md.

Prerequisites

  1. Ollama installed and running (ollama.ai)
  2. Pull the recommended models:
ollama pull nomic-embed-text-v2-moe   # embeddings
ollama pull gemma4:e4b                 # chat + vision (fast, capable)

Any Ollama chat model works. Pick yours in Settings β†’ Local AI, or per conversation from the Ask composer. Full model guide in docs/ollama.md.

Development Mode

# Backend
cd backend
python -m venv .venv
.venv\Scripts\activate          # Windows
pip install -r requirements.txt
uvicorn backend.main:app --reload --port 8000

# Frontend (new terminal)
cd frontend
npm install
npm run dev

Open http://localhost:3000. See docs/INSTALL.md for the full guide, troubleshooting matrix, and Ollama setup for every platform.


Architecture

Layer Technology
Frontend React 19 + Vite + TypeScript (strict mode), custom token CSS system
State Zustand + TanStack Query
Backend FastAPI (async Python 3.12)
Vector DB ChromaDB (local persistence)
Embeddings Ollama (nomic embed models, async background queue)
LLM Ollama (any model you choose)
Search Hybrid: ChromaDB semantic + SQLite FTS5, re-ranked
Chat Server-Sent Events (SSE) streaming
Database SQLite (metadata)
Proxy nginx (Docker production, single port 80)

Chrome Extension

  1. Open chrome://extensions
  2. Enable Developer mode
  3. Click Load unpacked β†’ select the chrome-extension/ folder
  4. Click the openMemo icon to save any page

Project Structure

openmemo/
β”œβ”€β”€ backend/              # FastAPI Python backend
β”‚   β”œβ”€β”€ api/              # REST routes (memos, chat, ingest, search)
β”‚   β”œβ”€β”€ core/             # RAG, embeddings, extractors, transcription, localize
β”‚   └── db/               # SQLAlchemy models, SQLite, FTS5
β”œβ”€β”€ frontend/             # React 19 + TypeScript + token CSS system
β”‚   └── src/
β”‚       β”œβ”€β”€ components/   # UI components
β”‚       β”œβ”€β”€ pages/        # Route pages
β”‚       β”œβ”€β”€ stores/       # Zustand state
β”‚       └── lib/          # API client, utilities
β”œβ”€β”€ chrome-extension/     # Manifest V3 browser extension
β”œβ”€β”€ docs/
β”‚   β”œβ”€β”€ INSTALL.md                  # Full installation & troubleshooting
β”‚   β”œβ”€β”€ ollama.md                   # Models, retrieval, context windows
β”‚   β”œβ”€β”€ DECISIONS.md                # Architecture Decision Records
β”‚   β”œβ”€β”€ ADR-022-ASK-RAG.md          # The locked Ask Memo / RAG flow
β”‚   β”œβ”€β”€ memo-card-visual-system.md  # Card UI design reference
β”‚   β”œβ”€β”€ settings-and-appearance.md  # Settings bento + live appearance panel
β”‚   └── CHANGELOG.md                # Release history
└── docker-compose.yml

Roadmap

v3.0 (current): Music library with playlist import and lossless pulls, Spaces, Ask Memo with the Memos/Chat toggle and per-memo citations, native macOS app, mobile responsive pass, editable thumbnails, hidden section behind a passcode, cinematic onboarding Next: Transcript-synced playback, AI-suggested collections, similar Memos, multiple views (grid/list/board) Later: Multi-user workspaces, Notion/Obsidian import, PWA offline support, plugin system

See Specs/ROADMAP.md for the full roadmap, architectural findings, and contributor guide.


Built With AI

openMemo was my first serious attempt at building something useful for myself with AI.

It started with Kimi 2.6 Pro, then Claude Code (Opus 4.7 / Sonnet 4.6), and later Perplexity for quick fixes and release help.

Most of the code is AI-assisted, but not directionless. I knew what I wanted to build from the start, and used AI as a tool to steer execution, iterate faster, and explore solutions.

This project is also a learning record: a messy, practical discovery step into AI-powered software building.


Contributing

Contributions are welcome. See CONTRIBUTING.md for setup, coding style, and PR guidelines.


Credits & Open Source

openMemo stands on the shoulders of incredible open-source projects: MDXEditor, Ollama, ChromaDB, faster-whisper, yt-dlp, TanStack Query, Zustand, Lucide, dnd-kit, FastAPI, React, Vite, Tailwind CSS.


Licence

AGPL 3.0. Free to use, modify, and self-host. Any derivative work or service must remain open source and share improvements back to the community, and must keep the credit: "Based on openMemo by DIR (dev.izo.red)". Full text in LICENSE, attribution terms in NOTICE, plain-English walkthrough in docs/LICENSE-EXPLAINED.md.

About

openMemo is your personal digital space for things worth keeping links, files, notes, videos. On your machine.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages