Files
meetus/README.md
Mariano Gabriel ef72d06bfe docs
2026-07-06 02:41:50 -03:00

5.0 KiB

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.

Architecture

Diagram source: docs/graphs/architecture.dot (regenerate with make 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.