Memorito — saját tudástár automatizált kereséssel
Sokat keresgéltem az interneten, mire rájöttem, hogy a személyes tudásom szétszóródott mindenfelé: noteszek, PDF-ek, bookmarkok, jegyzetek, linkek, képek, hangfelvételek — mind máshol, soha nem találom meg, amikor szükségem van rá. A Notion jó volt, de nem akartam egy másik SaaS szolgáltatásba rakni az agyam tartalmát.
Aztán gondoltam: “Miért ne csinálnék magamnak egyet?”
És csináltam.
Mi az a Memorito?#
A Memorito egy self-hosted, multimodális tudásbázis, amit magamnak írtam — nem egy kész terméket használok, hanem magamnak kódtam meg, amit aztán folyamatosan fejlesztgetek. A kódot az AI generálta, de az ötlet, az architektúra és a design teljesen az enyém. Szövegeket, URL-eket, képeket, hangfájlokat és PDF-eket tud feldolgozni, indexelni, és aztán szöveges kereséssel lehet rájuk rákeresni. Nem csak keyword search — semantic search, azaz a jelentés alapján találja meg a releváns tartalmakat.
A lényeg: bedobsz bármit, és később rákereshetsz rá természetes nyelven, mintha egy személyi asszisztensnél keresgélnél.
A kód nyílt forráskódú, GitHub-on elérhető: https://github.com/Yappito/memorito. Ha érdekel, nézd meg, és ha van hozzá ötleted vagy pull request-ed, szívesen veszem.
Miért csináltam meg?#
Őszintén? Mert unalmas mindenhol keresgélnem. Van egy QNAP NAS-om, van egy Proxmox homelab cluster-em, és gondoltam: “Miért ne futtathatnék egy saját tudásbázist?” A saját szoftvert akartam, nem egy SaaS terméket.
A fő motivációk:
- Saját adat, saját szerver — nem egy SaaS cégnek adom oda az agyam tartalmát
- Multimodális — nem csak szöveg, hanem képek, audio, PDF is
- Semantic search — nem keyword match, hanem tényleges jelentés-alapú keresés
- Automatizálható — API endpointok, így agentek is használhatják
- Self-hosted — teljes kontroll, saját infrastruktúrában
- Saját kód — ha valami nem működik, magam javítom meg, nem kell support ticketet írnom valakinek
Vibe-coding, avagy a bűn#
Igen, vibe-kódoltam. GLM-5.1-en át, OpenCode-on keresztül, egy délután alatt megvolt a v1. Persze utána még sokat finomítottam rajta, de az alapötlet és a legtöbb kódot a vibe-coding hozta össze. Nem vagyok fejlesztő egyáltalán, infra engineer vagyok, mostanában architect. De a nagy nyelvi modellekkel ma már tényleg össze lehet dobni egy működő appot, ha van hozzá egy jó prompt és egy tiszta elképzelés.
A kulcs az, hogy tudod, mit akarsz. Ha pontosan le tudod írni, mit szeretnél, és van egy AI partnered, aki le tudja fordítani kódra — akkor nem kell heteket várnod egy feature-re. Pár óra alatt megvan.
Hogyan működik?#
Ingestion — tartalom beadása#
Öt endpoint van a feldolgozáshoz, mindegyik aszinkron:
- Text — közvetlen szöveg beillesztése címmel és címkékkel
- URL — weboldal betöltése és indexelése
- Image — kép feltöltése vizuális kereséshez
- Audio — hangfájl feltöltése, ami automatikusan transzkribálva lesz (z.ai GLM-ASR-2512 modellel)
- PDF — dokumentum feltöltése teljes szöveges kereséshez
Minden ingestion aszinkron: POSTolsz egy job-ot, majd pollolod az /api/ingest/<id>/status endpointot, amíg COMPLETED nem lesz. Nem kell várnod, hogy kész legyen — csak beküldöd és később keresel rá.
Retrieval — keresés és lekérdezés#
Két fő mód van a keresésre:
/api/search?q=...— hibrid semantic search, szűrhető forrástípus, címkék, dátumtartomány, reranker bekapcsolható, pagination/api/items/<id>— egy konkrét elem lekérdezése, ami visszaadja a metadata-t, chunk-okat, duplicate linkeket, és egy presigned S3 download URL-t a média fájlokhoz
Meglévő adatok módosítása#
PATCH endpoint-okkal lehet címet és címkéket frissíteni anélkül, hogy újra fel kellene tölteni a tartalmat. Hasznos, ha elrontottad a címet vagy utólag akarsz címkéket hozzáadni.
A technikai hátteret#
A stack nem éppen átlagos:
- Next.js 15 App Router + TypeScript strict mode
- tRPC v11 (belső UI) + REST ingestion API (külső hívókhoz)
- Prisma + PostgreSQL 17 + pgvector (hibrid keresés)
- Redis + BullMQ (async job queue)
- Jina embeddings v4 (1024-dimenziós) + Jina reranker v3
- Provider-agnostic LLM layer — négyféle modellt tud kezelni:
zai— z.ai Coding Plan API (GLM-5.1,/layout_parsing, ASR)local— helyi OpenAI-compatible szerver (pl. llama.cpp)custom— bármilyen OpenAI-compatible endpointollama-cloud— Ollama Cloud (https://ollama.com/v1)
A hangfeldolgozás külön z.ai GLM-ASR-2512 modellel történik, függetlenül az LLM provider-től.
Tárolás#
A fájlok egy S3-compatible backend-re kerülnek — nálam Garage fut egy QNAP NAS-on. A letöltési URL-ek presigned URL-ek, ami kb. 1 óráig érvényesek. Ez azt jelenti, hogy a Memorito nem tárolja közvetlenül a fájlokat — csak az S3 backend-re küldi őket, és onnan szolgálja ki őket.
Hogyan kapcsolódik az OpenClaw és Hermes agentekhez?#
Itt válik igazán érdekessé a dolog. Van két AI agentem (OpenClaw és Hermes), ami a Memorito API-ját használja. A kódot nem én írtam — az AI generálta, de én terveztem meg az architektúrát, és pontosan tudom, hogyan működik minden endpoint, és hogyan lehet a legjobban kihasználni.
OpenClaw#
Az OpenClaw egy skill-t használ (openclaw-skill/SKILL.md), ami curl alapú HTTP kéréseket küld a Memorito API-hoz. A kulcsfontosságú viselkedések:
- Ingestion
sourceName: "openclaw"tag-gel — így tudom, melyik tartalom jött az agenttől - Pollolás
COMPLETED-ig — soha nem ugrunk át a keresésre anélkül, hogy kész lenne az ingestion - Keresés a
/api/searchendpointon - Teljes kontextus lekérése a
/api/items/<id>endpointon releváns találatokhoz - Fordítás angolra — nem-angol eredményeket mindig lefordítja angolra
- Fájlok letöltése és küldése — ha van media file a találatban, letölti a
downloadUrl-ről, és elküldi a felhasználónak
Fontos: a downloadUrl egy presigned S3 URL, nem Memorito endpoint. Közvetlenül curl-lel kell letölteni: curl -o file.jpg "$DOWNLOAD_URL".
Hermes#
A Hermes agent hasonlóan működik, de van néhány különbség:
- Netcat fallback — a VM környezetben a curl akadozik, ezért netcat-et használ raw HTTP-hez
- Fájlok küldése üzenetcsatornákon — Telegram/WhatsApp esetén a
MEDIA:tag nem elég, a fájlt le kell tölteni a~/.openclaw/workspace/mappába, majd azopenclaw message send --channel <channel> --target <target> --media <local-path>paranccsal kell elküldeni - GLM-5.1 reasoning model —
generateTitle-hez minimum 2048 token kell, különben üres a válasz (a reasoning tokens elviszik a budget-et)
Mire használom?#
Gyakorlatilag bármit bedobhatok, és később rákereshetek rá:
- Tech cikkek, dokumentáció — URL ingestion, később rákeresek, ha emlékszem a témára
- PDF dokumentumok — kutatási anyagok, kézikönyvek
- Hangfelvételek — meeting jegyzetek, podcastek, saját hangjegyzetek
- Képek — screenshotok, diagramok, bármi vizuális
- Szöveges jegyzetek — gyors gondolatok, tippek, megoldások
- Fotók jegyzetekről, szórólapokról, IKEA bútorok címkéiről — ez a legnagyobb use-case nálam: fényképezek valamit (pl. egy IKEA bútor címkéjét, egy szórólapot, egy jegyzetet), és később rákeresek rá, vagy megkérem az AI agentet, hogy keresse meg az item URL-jét, mentse le a méreteit, vagy egészítse ki az információt az extracted data alapján.
Az agentek nem ingestelik automatikusan a tartalmakat — csak akkor küldenek adatot a Memorito-nak, ha én utasítom rá őket. Ha rákeresek valamire, a Memorito visszaadja a releváns találatokat a teljes kontextussal.
Összegzés#
A Memorito egy erős, jól megtervezett tudásbázis, amit magamnak írtam, de nyílt forráskódként közzétettem, hátha akadnak kalandorok, akik szeretnék kipróbálni. Nem csak egy másik bookmark manager, hanem egy tényleges semantic search réteget ad a személyes tudásodhoz. Az agent integrációk (OpenClaw, Hermes) teszik igazán hasznossá — nem kell kézzel ingestelned mindent, az agentek automatikusan gyűjtik és kategorizálják a tartalmakat.
És ha már saját kódról van szó — ha érdekel a Memorito, nézd meg a GitHub-on: https://github.com/Yappito/memorito. Nyílt forráskódú, tehát nem kell félned a vendor lock-in-tól. Ha van ötleted, bug report, vagy pull request — szívesen veszem.
Ha te is unod, hogy minden tudásod szétszóródik tíz különböző helyen, és szeretnéd, hogy egy AI agent segítsen megtalálni, amit keresel — érdemes kipróbálni. Vagy ha úgy érzed, te is meg tudnád csinálni — akkor csinálj meg, nagyon jó móka. Ma már tényleg nem kell profi fejlesztőnek lenned ahhoz, hogy saját szoftvert építs.