meetus + doocus — a local, offline context extractor
Turn a downloaded Google Drive (meetings and documents) into a searchable, browsable, packageable local knowledge base — then hand focused subsets to the AI services you're allowed to use (Gemini web, NotebookLM). Every extraction step is deterministic and offline; no cloud AI ever touches the raw source.
Two pipelines feed two local UIs over a shared component framework:
- meetus — meeting recordings → enhanced transcripts (WhisperX + screen frames).
- doocus — documents → textified content + metadata, indexed into a tree.
Diagram source:
docs/graphs/architecture.dot(regenerate withmake graphs). Repo map:INDEX.md.
Install
System dependencies
sudo apt-get install ffmpeg graphviz # ffmpeg: frames/thumbnails · graphviz: docs diagrams
# optional: tesseract-ocr (doocus --ocr), poppler-utils (pdf page render)
# macOS: brew install ffmpeg graphviz
Python (uv feature groups)
Dependencies live in pyproject.toml as uv groups —
install only what you need:
uv sync --group meetus # meeting pipeline (opencv, ffmpeg-python)
uv sync --group doocus # document extraction (docx/pdf/pptx/xlsx/…)
uv sync --group doocus --group ocr # + OCR for images / scanned pdfs
Groups: meetus, doocus, ocr, pdf-render, deprecated. whisper/whisperx
are external CLI tools (like ffmpeg) — install separately (often a GPU env):
pip install whisperx (diarization needs a HuggingFace token with pyannote access).
UIs (Node)
cd ui/meetus-app && npm install
cd ui/doocus-app && npm install
The two pipelines
meetus — meetings
uv run process_meeting.py samples/meeting.mkv --embed-images --scene-detection --scene-threshold 10 --diarize
Runs WhisperX (speaker diarization) + FFmpeg scene-detection frames → an enhanced
transcript with frame references, in output/<YYYYMMDD-NNN-stem>/. --out-format
customizes the run-folder name (e.g. {name}.meetus for a docs-coherent sidecar).
Batch a tree with make batch IN=<dir>. process_meeting.py --help is the flag
source of truth; caching (--no-cache, --skip-cache-frames/-whisper) lets you
iterate on scene thresholds without re-running Whisper.
doocus — documents
uv run process_tree.py "/path/to/drive" --output "doocus-data/<source>" --only docs
Replicates the whole tree into index.json (every file a node), extracting text
sidecars (content.md + meta.json) only for docx/pdf/pptx/xlsx; other files
are linked, not duplicated. --only {all|docs|meetings} scopes a collection.
Full manual: doocus/README.md.
Outputs & collections
Each app writes to a managed root (gitignored), one subfolder per source, mirroring the source structure:
doocus-data/<source>/— document collections (index.json+.doocus/)meetus-data/<source>/— meeting collections (index.json+.meetus/)
Collections whose index.json.root matches are the same source: the doocus UI
merges their docs + meetings into one tree, toggled as one source. A meeting's
.meetus must sit in the same folder as its collection's index.json.
The UIs
Local Vue 3 + Vite apps over ui/framework/ (shared components + design tokens):
ui/meetus-app— review a meeting: video + transcript (edit/read, speaker merge, select mode) + frame selector, time-synced.ui/doocus-app— browse the merged tree, search cached text (transcripts, extracted docs, raw files), per-type viewers, and package selected files. Meetings embed the meetus review (@review, composed — not duplicated).
cd ui/doocus-app && DOOCUS_DATA="$PWD/../../doocus-data,$PWD/../../meetus-data" npm run dev
cd ui/meetus-app && MEETUS_OUTPUT=/abs/path/to/output npm run dev
Packaging (the point)
The doocus package builder zips selected originals + their content.md for a
target (Gemini web ≤10 files/≤100 MB, or NotebookLM). Originals are what the
permitted services consume; the extracted text is the local search index and is
never a replacement for the document.
Project layout
See INDEX.md for the full map. In brief:
process_meeting.py meetus CLI process_tree.py / process_doc.py doocus CLIs
meetus/ meetus core doocus/ doocus core
ctrl/ batch + ops scripts ui/{meetus-app,doocus-app,framework}
Makefile batch · docs · merge · graphs docs/graphs/ architecture diagram
def/ design notes samples/ output/ (gitignored)
Deprecated OCR/vision code lives unwired in meetus/deprecated/ (the only user of
ollama, kept out of every default install). See INDEX.md.
License
For personal use.