Turn a downloaded Google Drive — meetings and documents — into a + searchable, browsable, packageable knowledge base, then hand focused subsets to the + AI services you're allowed to use (Gemini web, NotebookLM). Two offline pipelines + feed two local UIs over a shared component framework.
++ meetus → meeting transcripts (WhisperX + frames) + doocus → documents → text + metadata tree +
+WhisperX (speaker diarization) + FFmpeg scene-detection frames → an enhanced + transcript with frame references.
+uv run process_meeting.py meeting.mkv \
+ --embed-images --scene-detection \
+ --scene-threshold 10 --diarize
+ Batch a tree with make batch IN=<dir>. --out-format
+ controls the run-folder name (e.g. {name}.meetus).
Replicates the whole tree into index.json; extracts text sidecars
+ (content.md + meta.json) only for docx/pdf/pptx/xlsx —
+ other files are linked, not duplicated.
uv run process_tree.py "/path/to/drive" \
+ --output "doocus-data/<source>" --only docs
+ --only {all|docs|meetings} scopes a collection.
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 match are the same source:
+ the doocus UI merges their docs + meetings into one tree, toggled as one source. When a
+ file exists in two collections, the copy whose sidecar resolves wins. A meeting's
+ .meetus must sit in the same folder as its collection's index.
Local Vue 3 + Vite apps over ui/framework/ (shared components + tokens):
@review,
+ composed — not duplicated).cd ui/doocus-app && DOOCUS_DATA="/abs/doocus-data,/abs/meetus-data" npm run dev
+cd ui/meetus-app && MEETUS_OUTPUT=/abs/output npm run dev
+ 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 — never a replacement for the document.
# system
+sudo apt-get install ffmpeg graphviz # + tesseract-ocr, poppler-utils (optional)
+
+# python (uv feature groups)
+uv sync --group meetus # meeting pipeline
+uv sync --group doocus --group ocr # docs + OCR
+
+# whisper/whisperx are external CLIs (install separately, often a GPU env)
+pip install whisperx # diarization needs a HuggingFace token
+
+# UIs
+cd ui/meetus-app && npm install
+cd ui/doocus-app && npm install
+