Transcribe your Plaud recordings on Ubuntu¶
Your Plaud recorder captures the meeting. This guide shows you how to turn those recordings into written text on your own Ubuntu computer, using the transcription service of your choice rather than the one that came with the device.
You do not need to be a developer. You will copy and paste a handful of commands into a black window called the Terminal, and answer a few questions along the way. Set aside about thirty minutes the first time. Afterwards, transcribing a new recording takes one command and a couple of minutes.
What you are actually installing
OpenTranscribe is a small program that runs on your computer. It takes an audio file, sends it to a speech-to-text service you have chosen, and hands you back a clean transcript. It does not keep your audio, and it does not send anything anywhere except to the one service you configured.
How the pieces fit together¶
There are four things involved, and it helps to picture them before you start.
| The piece | What it does | Where it lives |
|---|---|---|
| Your Plaud recorder | Records the conversation | In your pocket |
| The Plaud app or website | Holds your recordings; lets you download the audio | Your phone and Plaud's servers |
| OpenTranscribe | Receives an audio file and returns a transcript | Your Ubuntu computer |
| A speech-to-text provider | Does the actual listening and writing | The provider's servers |
The audio makes exactly one journey off your computer: from OpenTranscribe to the provider you picked. Nothing else is sent anywhere, and no transcript is stored unless you deliberately turn storage on.
Before you start¶
You will need:
- An Ubuntu computer. Ubuntu 22.04 or 24.04 both work. Anything reasonably recent is fine; transcription happens on the provider's servers, not on your machine, so an old laptop is perfectly adequate.
- Your Plaud device and the Plaud app, signed in to your account.
- An internet connection.
- A payment card, to open an account with a speech-to-text provider. These services charge per hour of audio; a one-hour meeting typically costs a few tens of cents. You are not signing up for a subscription.
- About thirty minutes.
Before you record anyone
Recording and transcribing people is regulated in most countries. Make sure you have the right to record the conversation and to process it, and tell people when they are being recorded. This guide assumes the recordings are yours to use.
Step 1 — Open the Terminal¶
Press the Super key (the one with the Windows or Ubuntu logo), type
terminal, and press Enter. A window with a text prompt opens. This is where
every command in this guide goes.
To run a command: select it here, copy it, click inside the Terminal window, paste it with Ctrl + Shift + V, and press Enter. Then wait for the prompt to come back before running the next one.
Nothing appears when you type your password
When Ubuntu asks for your password, the Terminal shows nothing at all — no dots, no stars. That is normal. Type it and press Enter.
Step 2 — Install the two tools you need¶
The first command installs git, which downloads software from the internet. The
second installs uv, which sets up the Python pieces OpenTranscribe needs.
sudo apt update && sudo apt install -y git curl
curl -LsSf https://astral.sh/uv/install.sh | sh
Close the Terminal window and open a new one, so it picks up the newly installed
uv. Check that both tools are there:
git --version && uv --version
You should see two version numbers. If you see command not found, close and
reopen the Terminal once more.
Step 3 — Download OpenTranscribe¶
git clone https://github.com/fbossiere/open-transcribe-mcp.git ~/open-transcribe
cd ~/open-transcribe && uv sync
The second command takes a minute or two and prints a long list of package names. That is it installing everything OpenTranscribe depends on. When the prompt comes back, you are done.
About that cd
cd means "change directory" — it moves the Terminal into the folder you just
downloaded. Every command from here on assumes you are inside
~/open-transcribe. If you open a new Terminal window later, run
cd ~/open-transcribe first.
Step 4 — Choose a transcription provider and get a key¶
OpenTranscribe can talk to three providers. You only need one. They differ in price and in what they can do:
| Provider | Tells speakers apart | Per hour of audio | Sign-up effort |
|---|---|---|---|
| ElevenLabs Scribe v2 | Yes | about $0.22 | One page: create an account, copy a key |
| Microsoft MAI-Transcribe-2 | Yes | about $0.10 | Longer: you must create an Azure resource first |
| Groq Whisper | No | $0.04 to $0.11 | One page |
For meetings, choose ElevenLabs. It labels who said what — which is the whole point of a meeting transcript — and getting a key takes two minutes. Microsoft is half the price and just as capable, but it makes you create a cloud resource first, which is a detour if this is your first time. Groq is cheapest and fastest and returns one undifferentiated block of text: fine for a voice memo, frustrating for a four-person meeting.
About those prices
They come from the pricing table shipped with the project and are there to give you a sense of scale, not a quote. Providers change their prices; check theirs before you commit to one.
To get an ElevenLabs key:
- Go to elevenlabs.io and create an account.
- Open your profile menu and find the API keys section.
- Create a new key and copy it. It starts with
sk_. - Paste it somewhere safe for a moment — you need it in the next step.
Treat the key like a password
Anyone holding that key can spend money on your account. Do not email it, do not put it in a document you share, and do not paste it into a chat.
Step 5 — Write your settings file¶
OpenTranscribe reads its settings from a file called .env. Create it with this
command — but replace the two placeholder values first:
- Replace
sk_PASTE_YOUR_ELEVENLABS_KEY_HEREwith the key from Step 4. - Replace
pick-a-long-random-password-herewith any long random phrase you invent. It is a local password that stops other programs on your computer from using your transcription budget. Twenty characters of nonsense is ideal.
cat > ~/open-transcribe/.env <<'EOF'
OT_DEFAULT_PROVIDER=elevenlabs
OT_DEFAULT_MODEL=scribe-v2
OT_ELEVENLABS__API_KEY=sk_PASTE_YOUR_ELEVENLABS_KEY_HERE
OT_ELEVENLABS__ZERO_RETENTION=true
OT_SECURITY__AUTH_MODE=bearer
OT_SECURITY__BEARER_TOKEN=pick-a-long-random-password-here
OT_SECURITY__REQUIRE_HTTPS_SOURCES=false
OT_SECURITY__ALLOW_PRIVATE_URLS=true
EOF
Two lines deserve an explanation.
OT_ELEVENLABS__ZERO_RETENTION=true asks ElevenLabs not to keep a copy of your
audio. Leave it on.
The last two lines are the ones that let OpenTranscribe read files from your own computer. Out of the box it only accepts audio published on the public internet, as a safety measure for servers exposed online. Your installation is not exposed online — it listens only to your own machine — so relaxing that restriction is safe here.
One condition
Those last two lines are safe only because this server runs on your own computer and is not reachable from the internet. If you ever put OpenTranscribe on a shared machine or a public server, delete both lines first.
Why not copy .env.example?
The repository ships an example settings file, but several of its lines are left deliberately blank, and the server refuses to start when it finds a blank value where it expects a number or an address. The block above is complete and starts cleanly. Use it as written.
Step 6 — Start the service¶
cd ~/open-transcribe && uv run open-transcribe-mcp
After a few seconds you will see a line ending in:
Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
Leave this window open. The service runs for as long as this window is running. Closing it stops the service.
Now open a second Terminal window (Ctrl + Alt + T) and check that the service is healthy:
curl http://localhost:8000/readyz
You should see:
{"status":"ready","configured_providers":["elevenlabs"]}
If configured_providers is empty, your key did not load. Go back to Step 5 and
check for a typo or a stray space.
Step 7 — Try it on the sample recording¶
Before involving your own audio, prove the whole chain works. The project ships a short bilingual test recording with two voices.
In the second Terminal window, run this — replacing the password with the one you invented in Step 5:
cd ~/open-transcribe && uv run python examples/transcribe.py --token pick-a-long-random-password-here
After a few seconds you will see a block of structured text containing the transcript, which speaker said each line, and what the request cost. If you got that, everything is working, and the rest is easy.
Step 8 — Get the recording off your Plaud device¶
This is the one step that happens outside the Terminal.
The reliable way: export from Plaud¶
Plaud devices upload their recordings to the Plaud app over Bluetooth, and from there to your Plaud account. Download the audio from the app or from the web player:
- Open the Plaud app on your phone, or go to Plaud's web player in a browser on your Ubuntu machine, and sign in.
- Open the recording you want.
- Use the Share or Export control — usually an icon in the top-right corner.
- Choose to export the audio (as opposed to the summary or the transcript). The web player exports MP3; the phone app can also export WAV. Either is fine.
- Save the file into your Downloads folder on the Ubuntu machine. If you exported from your phone, send it to yourself by email, or use Plaud's web player on the Ubuntu machine directly, which is simpler.
Do this once, then keep the file
Plaud's export links expire. Download the audio to your own disk rather than trying to pass a link to OpenTranscribe — a downloaded file will still work tomorrow.
The legacy way: plugging the device in¶
Older Plaud Note units, on firmware versions before V2.1, could be plugged into a
computer with the USB cable and browsed like a memory stick, with recordings in
folders named NOTES and CALLS. Plaud removed that capability in firmware V2.1,
and the newer NotePin and Note Pro models never had it. If your device shows up in
the Files application with those folders, you can copy the audio directly. If it
does not, use the export route above — it is not a fault with your cable.
Stay on the marked path
Use the export features Plaud gives you. Do not try to work around the device's protections or extract credentials from the app. Aside from being against Plaud's terms, it is not necessary: the export button gives you the same audio.
Step 9 — Transcribe your recording¶
Suppose your file is ~/Downloads/team-meeting.mp3. In the second Terminal
window, run:
cd ~/open-transcribe && uv run python examples/plaud_transcribe.py ~/Downloads/team-meeting.mp3 --token pick-a-long-random-password-here
Replace the file path with your own, and the password with yours. You will see:
Transcribing team-meeting.mp3 (18.4 MB)…
Provider: elevenlabs / scribe-v2
Languages: eng
Saved: /home/you/Downloads/team-meeting.txt
The transcript is written next to your audio file, with the same name and a .txt
ending. Open it by double-clicking it in the Files application. It looks like this:
[00:00] SPEAKER_01
Right, shall we start? Everyone got the agenda?
[00:07] SPEAKER_02
Yes. I had one question about the second item.
The timestamps are minutes and seconds from the start of the recording, so you can
jump straight to a passage in the audio. SPEAKER_01 and SPEAKER_02 are the
service's way of saying "this is a different voice" — it does not know anyone's
name, and you can rename them yourself in the text file.
Useful variations¶
Add these to the end of the command when you need them:
| What you want | Add this |
|---|---|
| Tell it the language, if detection struggles | --language fr |
| Tell it how many people are speaking | --speakers 4 |
| Timecoded text with no speaker labels | --no-diarization |
| Save the transcript somewhere specific | --out ~/Documents/meeting.txt |
| Prefer the cheapest provider over the best | --policy cost |
| Use a provider that cannot tell speakers apart | --no-diarization as well |
Why --policy cost may not change anything
Asking for speaker labels rules out any provider that cannot produce them, so a
request for a meeting transcript will never route to Groq however cheap it is.
Add --no-diarization and the cheaper provider becomes available, at the price of
losing the labels. This is deliberate: OpenTranscribe would rather tell you it
cannot do what you asked than quietly hand back something different.
For example, a four-person French meeting:
uv run python examples/plaud_transcribe.py ~/Downloads/reunion.mp3 --token pick-a-long-random-password-here --language fr --speakers 4
Using it again tomorrow¶
The setup work is done for good. From now on, transcribing a recording is three things:
- Open a Terminal, run
cd ~/open-transcribe && uv run open-transcribe-mcp, and leave that window open. - Open a second Terminal and run the
plaud_transcribe.pycommand with your file. - When you are finished for the day, click into the first window and press Ctrl + C to stop the service.
Save yourself the typing
Keep both long commands in a text file on your desktop and copy them from there.
When something goes wrong¶
| What you see | What it means | What to do |
|---|---|---|
command not found: uv |
The Terminal has not noticed the new tool | Close the window, open a new one |
configured_providers":[] |
Your key was not read | Re-check Step 5 for typos and stray spaces |
The server rejected the request |
The token does not match | The value after --token must match OT_SECURITY__BEARER_TOKEN in .env exactly |
PROVIDER_AUTHENTICATION_FAILED |
The provider rejected your key | The key is wrong, revoked, or the account has no credit. Create a fresh key |
PROVIDER_UNAVAILABLE |
The provider could not be reached | Check your internet connection and the provider's status page, then run the command again |
UNSUPPORTED_CAPABILITY |
No configured provider can do what you asked | Usually speaker labels on a provider that has none. Add --no-diarization, or configure a provider that supports them |
SOURCE_URL_REJECTED |
The two local-access lines are missing | Re-check the last two lines of Step 5, then restart the service |
INVALID_AUDIO |
The file is not audio, or it is damaged | Play it first. Re-export it from Plaud |
SOURCE_TOO_LARGE |
Longer than the built-in limit | Add OT_MAX_AUDIO_SIZE_MB=1000 to .env and restart, or split the recording |
Could not reach OpenTranscribe at… |
The service is not running | Go back to the first window; it should say Uvicorn running |
| It hangs for a long time | Long recordings simply take a while | A one-hour recording can take several minutes. Wait |
To restart the service after changing .env: click into the first window, press
Ctrl + C, then run the start command again.
What happens to your audio¶
Worth knowing, and worth being able to explain to the people you record:
- Your audio file stays on your disk. OpenTranscribe reads it, sends it to the one provider you configured, and deletes its working copy immediately.
- Nothing is logged: not the audio, not the transcript, not your key. The project sends no usage statistics anywhere.
- No transcript is kept by OpenTranscribe. The
.txtfile on your disk is the only copy it produces. - With
OT_ELEVENLABS__ZERO_RETENTION=true, ElevenLabs is asked not to keep a copy either. Their own terms govern what actually happens on their side. - Plaud still holds whatever you uploaded to your Plaud account. This guide adds a second path for your audio; it does not remove the first one.
Where to go next¶
- Change provider. Edit
OT_DEFAULT_PROVIDERin.envafter adding that provider's key, and restart. Your commands stay the same — that is the point of OpenTranscribe. The one exception is a provider that cannot tell speakers apart: on Groq the command needs--no-diarization, and without it you getUNSUPPORTED_CAPABILITYrather than a transcript missing the labels you asked for. - Connect it to an AI assistant. OpenTranscribe speaks MCP, so an assistant that supports MCP can call it directly and work with your transcripts in conversation. See the project README.
- Read the details. The providers page explains what each service can and cannot do; the privacy page covers retention.
Trademarks
Plaud is a trademark of its respective owner. OpenTranscribe is an independent open-source project and is not affiliated with, endorsed by, or sponsored by Plaud, ElevenLabs, Microsoft, or Groq. Plaud's apps and export features change over time; if a menu has moved, the Plaud support site is the authority on where it went.