M3a: meetrec-server storage service + automatic upload from the app

- server/meetrec-server: FastAPI storage API (upload bundle with wav/
  txt/srt/json + metadata incl. agenda, list, fetch, download, delete);
  file-based index.json, no database; Docker Compose on port 8090,
  Tailscale-only bind like whisper-server; Ollama env prepared for M3c
  (gemma4:12b, German)
- phone: StorageClient (stdlib multipart upload); RecorderService uploads
  the bundle in the background after the final pass and publishes
  UploadState (Uploading/Done/Error) to the UI
- app: Library URL setting (persisted, default http://100.103.83.12:8090,
  empty disables upload); status line reports upload progress
- storage API validated locally end-to-end: upload, list, metadata,
  download, path-traversal rejected, delete
This commit is contained in:
2026-09-08 09:57:40 +02:00
parent 50d00286d7
commit 6b697f8d94
10 changed files with 427 additions and 5 deletions
+10 -1
View File
@@ -14,13 +14,22 @@ The phone's local whisper.cpp engine remains as the offline fallback.
(tiny/base for live, e.g. small for the final pass). Measured on the
Fairphone 6: ~0.60.8× realtime, so keep local models small.
**server** — a remote [whisper.cpp server](../server/whisper-server/)
**server** — a remote [whisper.cpp server](../whisper-server/)
(Docker Compose, Vulkan GPU) transcribes BOTH the live pass and the final
pass; the model lives on the server (e.g. large-v3). The phone only
records and displays. Set the server URL in the app (persisted; e.g.
`http://100.103.83.12:8085` over Tailscale — the phone needs Tailscale
too). Local model selection is greyed out in this mode.
## Recording library (meetrec-server)
Finished recordings (WAV + txt/srt/json) upload automatically to the
[meetrec-server](../meetrec-server/) storage service. Set the **Library
URL** in the app (`http://100.103.83.12:8090`, persisted) or leave it
empty to disable upload. Uploads run in the background after the final
pass; the status line reports the result. (A browse UI for previous
recordings arrives with M3b.)
## Requirements
- Android Studio (or: SDK Platform 36, Build Tools 36, NDK 27.1, CMake 3.22.1)