Generate Markdown meeting transcripts from speech-to-text JSON.
Project description
meetdown
meetdown is a small Python CLI for turning meeting audio into a Markdown transcript.
The default provider is NAVER Cloud Platform CLOVA Speech. The CLI sends a local
audio or video file to a speech provider, normalizes the response, and writes a
.md file with the full text and speaker-by-speaker transcript when the provider
returns speaker information.
Install and run
Run it directly with uvx; cloning this repository is not required:
uvx meetdown meeting.m4a -o meeting.md --api-url "https://your.invoke.url" --api-key "your-secret-key"
For local development:
uv run meetdown meeting.m4a -o meeting.md --api-url "https://your.invoke.url" --api-key "your-secret-key"
Set credentials with environment variables:
$env:CLOVA_SPEECH_INVOKE_URL="https://your.invoke.url"
$env:CLOVA_SPEECH_SECRET_KEY="your-secret-key"
You can also pass them directly:
uvx meetdown meeting.m4a -o meeting.md --api-url "https://your.invoke.url" --api-key "your-secret-key"
Providers
The default provider is CLOVA Speech:
uvx meetdown meeting.m4a -o meeting.md --provider clova --api-url "https://your.invoke.url" --api-key "your-secret-key"
For CLOVA, --api-url is the CLOVA Speech Invoke URL from NAVER Cloud Platform.
You may pass either the base Invoke URL or a URL that already ends with
/recognizer/upload.
OpenAI and Gemini can be selected with --provider. Use --api-key directly or
set the provider environment variable. Use --api-url when you need to override
the provider endpoint or base URL:
$env:OPENAI_API_KEY="your-openai-key"
uvx meetdown meeting.m4a -o meeting.md --provider openai --chunk-duration 10m
uvx meetdown meeting.m4a -o meeting.md --provider openai --api-url "https://api.openai.com/v1"
$env:GEMINI_API_KEY="your-gemini-key"
uvx meetdown meeting.m4a -o meeting.md --provider gemini --chunk-duration 10m
Use --model to override the provider default model. CLOVA does not support
--model; the CLOVA Speech model is determined by the Invoke URL/domain.
OpenAI defaults to a diarization-capable transcription model when diarization is
enabled, and to a smaller transcription model when --no-diarization is used.
Gemini uses inline audio requests, so use --chunk-duration for larger files.
Chunk long recordings
Use --chunk-duration when a recording is too long for one sync upload. The
CLI extracts audio chunks with ffmpeg, sends each chunk to the selected provider,
shifts segment timestamps back to the original file timeline, and writes one Markdown file.
If your PC does not have system ffmpeg, meetdown falls back to the bundled
imageio-ffmpeg executable installed with the package. If system ffprobe is
missing, meetdown reads duration metadata through ffmpeg instead.
uvx meetdown meeting.mp4 -o meeting.md --api-url "https://your.invoke.url" --api-key "your-secret-key" --chunk-duration 10m
Accepted duration forms include 600, 600s, 10m, and 1h. Uploads default
to --compress smallest, which extracts audio and uploads a 64 kbps MP3 copy.
Use --compress lossless for FLAC or --compress none to avoid compression.
When chunking or range extraction is used, --compress none creates WAV chunks:
uvx meetdown meeting.mp4 -o meeting.md --api-url "https://your.invoke.url" --api-key "your-secret-key" --chunk-duration 10m --compress lossless
uvx meetdown meeting.mp4 -o meeting.md --api-url "https://your.invoke.url" --api-key "your-secret-key" --chunk-duration 10m --compress none
You can still force the exact temporary upload format with --chunk-format mp3,
--chunk-format flac, or --chunk-format wav.
You can transcribe only part of the source file. Timestamps in the Markdown stay on the original media timeline:
uvx meetdown meeting.mp4 -o meeting.md --api-url "https://your.invoke.url" --api-key "your-secret-key" --start 10m --end 45m
uvx meetdown meeting.mp4 -o meeting.md --api-url "https://your.invoke.url" --api-key "your-secret-key" --start 00:10:00 --end 00:45:00 --chunk-duration 10m
Offline conversion
If you already have a CLOVA Speech JSON response, convert it without calling the API:
uvx meetdown --from-json examples/clova_response.sample.json -o sample.md --title "Sample Meeting"
Generated Markdown includes a 처리 옵션 section with the provider, model, language,
compression, chunking, range, timeout settings, and a replay command for the run.
Raw API keys are never written. They are stored only in masked form, such as
sk-p********7890. Replay commands use <...> placeholders for secret values;
replace them before running the command.
When a provider returns unnamed speakers, meetdown writes speaker placeholders
like [[SPEAKER_1]] and [[SPEAKER_2]]. These are intentionally easy to find
with Replace All and change to real names after you identify the speakers.
Initial scope
This project intentionally starts small. It supports one local file, CLOVA Speech sync recognition, full text output, speaker-segment output, and Markdown file generation. Summaries, decisions, action items, database storage, web UI, async callbacks, and batch processing are later extensions.
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 meetdown-0.1.0.tar.gz.
File metadata
- Download URL: meetdown-0.1.0.tar.gz
- Upload date:
- Size: 15.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09d38bf95b46a98840b80709750eca74f224148a61481fa20c28b564fcea178d
|
|
| MD5 |
d80086caa8cb98b703fd4f079c2d64b3
|
|
| BLAKE2b-256 |
5497f23953804619a9545e25d7cce439e6d8003d35a51fc14045cbef9ea059f9
|
File details
Details for the file meetdown-0.1.0-py3-none-any.whl.
File metadata
- Download URL: meetdown-0.1.0-py3-none-any.whl
- Upload date:
- Size: 19.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cdb5e22a08aa6dd5d05ff601f13dad5c6ac8e8481b96a8b1c4e8080a4d7cc9a4
|
|
| MD5 |
cb422eb129fba76ab70d16812e849263
|
|
| BLAKE2b-256 |
6e5f3923e4eb490d710bb8593c034cae3bf0f8657d5ce698b2d91d60669f9b7b
|