Lightweight capture-only subset of millet (formerly meetscribe-record): record dual-channel meeting audio (mic + system) with no transcription/diarization/summarization deps. Named after the Ottoman millet system. Part of the vezir ecosystem.
Project description
millet-record
Lightweight capture-only subset of millet (formerly meetscribe-record).
Records dual-channel meeting audio — your microphone on the left channel, system/remote audio on the right — into a single stereo WAV via PipeWire or PulseAudio + ffmpeg. Ships none of millet's transcription, diarization, summarization, or PDF dependencies; install footprint is ~30 MB instead of ~3 GB.
Full release history in CHANGELOG.md. Named after
the Ottoman millet system. Part of the
vezir ecosystem.
When to use which
| Need | Install |
|---|---|
| Just record audio (e.g., for vezir thin clients, or local archival) | pip install millet-record |
| Record + transcribe + diarize + summarize + PDF | pip install millet-pipeline (depends on millet-record) |
Install
pip install millet-record
System deps (apt example):
sudo apt install ffmpeg pulseaudio-utils
CLI
millet check # verify prerequisites
millet devices # list audio sources
millet record # record dual-channel WAV; Ctrl+C to stop
millet archive # compress past WAV recordings to OGG/Opus
millet request-permissions # macOS Sequoia 15+: trigger Microphone /
# System Audio Recording TCC prompts
# (Apple removed the manual '+' button in
# System Settings, so apps must request)
millet record writes to ~/millet-recordings/meeting-YYYYMMDD-HHMMSS/...wav
unless -o is passed. See millet record --help for options.
When millet-pipeline is also installed, additional subcommands
(transcribe, run, label, sync, gui, ...) become available
under the same millet command via Click entry-points.
Legacy meet command
The pre-rename meet console script keeps working for two minor
versions (until millet-record 0.6.0). It prints a deprecation
warning on each invocation and forwards to the millet group. Set
MILLET_SUPPRESS_DEPRECATION=1 to silence the warning during
transition.
Architecture
millet-record exposes a stable package millet_record containing:
millet_record.capture— ffmpeg-backed dual-channel capture (RecordingSession, watchdog, drain buffer)millet_record.audio— stereo channel reading + ffmpeg-based audio compressionmillet_record.utils— formatting helpers (HH:MM:SS, file sizes)millet_record.languages— language constants used by capture flowmillet_record.cli—milletconsole-script entry point
The legacy meet_record package name is still importable via a
sys.modules alias + a meta-path finder, so existing
from meet_record.X import … keeps working unchanged. Removed in
millet-record 0.6.0.
millet-pipeline depends on this package and re-uses these modules,
plus its own heavy modules (transcribe, label, voiceprint, summarize,
sync, pdf, gui).
macOS (Apple Silicon)
pip install millet-record on macOS 14.4+ Apple Silicon ships a
bundled meet-record-mac Swift sidecar that captures via Core Audio
Process Tap + AVAudioEngine — no PulseAudio, no BlackHole, no extra
install. millet record uses it by default.
Note: the Swift binary itself is still named
meet-record-macfor now — renaming would require macOS code-signing bundle-path changes that aren't worth doing as part of the package rename. Tracked as a follow-up; doesn't affect end users.
First run prompts for Microphone and System Audio Recording permissions
via the standard macOS TCC dialogs; both are required for full dual-
channel capture (mic on left, system on right). See
mac/README.md for the sidecar's CLI surface, level
analysis recipes, and environment variables.
On macOS Sequoia 15+, Apple removed the manual + button from
System Settings → Privacy → Microphone, so users can no longer add
permissions before running the app. The millet request-permissions
subcommand explicitly calls AVCaptureDevice.requestAccess(for: .audio)
to trigger the TCC dialog. millet check will tell you which
permission is missing and suggest running request-permissions.
Set MEET_RECORD_MAC=0 to force the legacy ffmpeg+PulseAudio path
(diagnostic kill switch only — that path will fail on a stock macOS
install because there is no PulseAudio device). Intel Macs and
macOS < 14.4 are unsupported.
License
GPL-3.0-or-later, same as parent millet.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file millet_record-0.4.1.tar.gz.
File metadata
- Download URL: millet_record-0.4.1.tar.gz
- Upload date:
- Size: 37.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82269d65635f027325b398acd73c27e887ed768e4697319898f093eac26f433a
|
|
| MD5 |
26c1e14901f763516cdf266cb6e37269
|
|
| BLAKE2b-256 |
aefe1fcebf2fb37d1f03dcf37cc13346f51763d5e263d30d6f92d8105d507763
|
File details
Details for the file millet_record-0.4.1-py3-none-any.whl.
File metadata
- Download URL: millet_record-0.4.1-py3-none-any.whl
- Upload date:
- Size: 30.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
088af1ee9594da4211440ea005272a47963ec815caf52b609c2cab7ca919a432
|
|
| MD5 |
145673d2fc88e182de105169df763749
|
|
| BLAKE2b-256 |
81d625634dd5859acc9ca19e0d5f4b4c8ef4266ba1cdae2c4e13f1d79cf3a775
|