跳到正文

floatboatai

OpenMinutes

OpenMinutes · 录音笔工作台:MemoTalk S1 录音的导入 · 转录 · AI 归类 · 检索复盘(Floatboat Workbench 开源实现)

README 已保存到本站,可直接阅读

Documentation snapshot

README 快照

这篇是英文原文

下面正文是项目自己的英文 README。想读全文就用浏览器自带的整页翻译: Chrome / Edge 点地址栏右侧的翻译图标,或用右键菜单里的「翻译成中文」; 手机浏览器一般在菜单里。

本页保存的是公开项目资料快照,阅读过程不需要连接 GitHub。

English | 简体中文

OpenMinutes

Turn MemoTalk S1 voice-recorder MP3s into searchable, categorized text you can review.

OpenMinutes (formerly memotalk-workbench) is a complete open-source Floatboat Workbench app, used with the memotalk-sdk hardware client.


Why OpenMinutes?

Recordings accumulate every day, but finding a particular conversation or listening back to everything becomes difficult.

This workbench connects import, transcription, classification, and search in one workflow. Each recording has a clear stage label: awaiting download, awaiting transcription, transcribing, awaiting classification, classifying, archived, or failed. Batch operations use the current filters.

Features

CapabilityDescription
Three import methodsScan a directory, register a device file manifest, or download directly over BLE (requires local Python, bleak, and a physical device)
Streaming transcriptionDecode audio to 16 kHz mono PCM16 with ffmpeg, stream it through Host ASR, and store the full text and timestamped segments
AI classificationUse the Host LLM to generate structured titles, summaries, categories, tags, key points, action items, and importance levels, with manual editing
Search and reviewSearch transcript text, titles, and summaries; filter by category, tag, or stage; sort by time; and process recordings in batches
Recording details and playbackPlay audio with HTTP Range support, seek to sentence timestamps, and review separate transcript, AI analysis, and execution-history sections
Category managementCreate, rename inline, recolor, and delete categories
Device setupCheck the environment (Python, bleak, SDK, and ffmpeg), configure paths, browse the SDK command reference, and register recordings manually

Getting started

The app runs in the Floatboat desktop Workbench runtime. It is a workbench package loaded by the Host, not a standalone Node service.

  • The Host prepares dependencies, runs strict TypeScript checks, compiles the server, and bundles the UI. Generated files go in dist/ and are not committed.
  • The Host applies SQLite migrations when opening the workbench. Add new files to migrations/; do not rewrite existing migrations.
  • ASR and LLM calls use Host capabilities. This repository neither contains nor requires model API keys.
pnpm install          # Install UI dependencies, type definitions, and test tooling

Then use Floatboat’s check_workbench_project to run type checks and build the app, and workbench_runtime open to apply the update. These are Host operations, not package scripts.

Runtime dependencies

DependencyPurposeBehavior when missing
ffmpegAudio probing and decodingTranscription is unavailable, and the UI reports it
python + bleak + memotalk-sdkDownload device recordings over BLEThe device page reports “not ready”; directory import remains available

Tool discovery tries configured paths, Floatboat’s bundled tools, PATH, and command names in that order, so it does not rely solely on the process PATH.

Check the device page for the Python interpreter in use, then install the SDK into that same environment:

uv pip install --python "/path/to/python" "memotalk-sdk>=0.1.0"
"/path/to/python" -m memotalk.cli --version

On Windows, use the absolute path to python.exe. In PowerShell, prefix the quoted interpreter path with & when running the version check. If you use a virtual environment, select its Python interpreter in settings. The SDK installs bleak automatically; you do not need to clone its source or configure an SDK directory. The app uses from memotalk import MemoTalkClient for device APIs and live audio streaming. Upgrading removes the old sdk_dir setting while preserving other path, recognition, and automation settings.

SDK regression tests

pnpm test runs the server tests. SDK integration tests use the package’s simulated device and do not connect to a physical recorder. Set the MEMOTALK_TEST_PYTHON environment variable to the path of a Python interpreter with memotalk-sdk installed before running them. Without this variable, SDK integration tests are skipped; settings API and migration tests still run.

Project structure

src/
  contracts/       Shared DTOs (app.ts) and untrusted-input validation (input.ts)
  server/          Node server: assembly, routing, and domain logic
    routes/        HTTP routes grouped by domain
    http.ts        Shared { ok, data | error } envelope and error-code mapping
    sql.ts         Thin node:sqlite wrapper, settings, and job records
    ingest.ts      Directory scanning, manifest registration, deduplication, naming conflicts
    media.ts       ffmpeg probing, duration parsing, and PCM16 framing
    transcribe.ts  Host ASR sessions: parameter fallback, streaming, resumption, error classification
    organize.ts    Host LLM structured classification and text fallback
    pipeline.ts    Transcription/classification state machines and retries
    bridge.ts      memotalk-sdk Python API bridge (fixed arguments, no concatenated commands)
  ui/              React UI: overview / library / details / device / categories / live / settings
migrations/        Append-only SQLite migrations
sdk/               @floatboat/workbench-sdk contracts and types (provided by the Host)
tests/             Server tests

Related documentation (in Chinese): requirements, engineering conventions, and design.

Data model

devices, recordings, transcripts, analyses, categories, tags, recording_tags, job_runs, sdk_commands, and settings.

Audio files live in the audio data resource directory. The database stores only relative filenames. Deleting a recording moves its audio file to audio/_trash instead of permanently deleting it.

API overview

MethodPathDescription
GET/api/recordingsList recordings with search, stage/category/tag filters, sorting, and pagination
GET/api/recordings/:idDetails: metadata, transcript, AI analysis, and execution history
PATCH/api/recordings/:idEdit title, category, tags, and importance
DELETE/api/recordings/:idDelete a recording (move its file to audio/_trash)
GET/api/recordings/:id/audioAudio stream with HTTP Range support (206 and content-range; 416 for out-of-range requests)
POST/api/recordings/:id/exportExport to a local directory
POST/api/recordings/:id/transcribeTranscribe one recording
POST/api/recordings/:id/organizeAI classification for one recording
POST/api/recordings/batch/transcribe, /api/recordings/batch/organizeBatch transcription and classification
GET/api/ingest/directoryRead import directory information
POST/api/ingest/directory/ensureCreate the import directory
POST/api/ingest/scanScan the import directory
POST/api/ingest/manifestRegister device manifest entries
GET/api/device, /api/device/summary, /api/device/capabilitiesDevice records, overview, and SDK command reference
POST/api/device/check, /api/device/list, /api/device/download, /api/device/statusEnvironment check, file listing, BLE download, and status
GET/api/liveLive caption status
POST/api/live/start, /api/live/stopStart or stop live captions
GET, POST/api/categoriesList or create categories
PATCH, DELETE/api/categories/:idUpdate or delete a category
GET, PATCH/api/settingsPaths, transcription/classification toggles, hotwords, and language

JSON responses use the { ok: true, data } / { ok: false, error: { code, message } } envelope. The audio endpoint returns an audio stream on success.

Design principles

  • Report failures honestly. If BLE is not ready, audio cannot play, or upstream ASR fails, the UI reports the problem and offers a next action.
  • Communicate status with both text and color, never color alone. Animations respect prefers-reduced-motion.
  • Prioritize lists. Each recording occupies one row, content is at most 1220 px wide, and table numbers use tabular-nums for alignment.
  • Support accessibility. Icon-only buttons have aria-label and title; segmented controls use aria-pressed.

See DESIGN.md for more design decisions.

  • floatboatai/memotalk-sdk: Python BLE client and CLI for the MemoTalk S1

License

MIT © Floatboat and MemoTalk

Official distribution

获取与安装

暂未发现可确认的官方软件包地址

当前 README 快照没有出现 npm、PyPI、Crates.io、pub.dev 等官方包页链接。本站不会根据仓库名称猜测下载地址。

本站不托管项目文件;需要安装时,请以项目维护者发布的官方文档为准。

使用前核验

本站保存公开资料用于阅读,不代表安全审计或功能背书。安装前请核对许可证、依赖来源和发布签名,不要直接运行来源不明的二进制文件或高权限脚本。