By Sam Ridder — I build and run ScribeGrab on my own hardware, on my own. Who I am.
The Whisper plugins for Obsidian let you choose the server they talk to. Most people leave it on OpenAI and pay $0.006 for every minute they dictate. Change one field to ScribeGrab and the same plugin keeps working — on my graphics card, for nothing, without an API key.
In the plugin's settings there is an API URL box, filled in with https://api.openai.com/v1/audio/transcriptions. Replace it with:
https://scribegrab.com/v1/audio/transcriptions
That's the whole setup. The endpoint speaks OpenAI's transcription API — same multipart form, same JSON back — so the plugin doesn't know or care that it isn't talking to OpenAI anymore.
Authorization header is accepted and thrown away.Field names below are from nikdanilov's Whisper plugin, the popular one. Other plugins use the same words in a different order.
| Setting | What to put in it |
|---|---|
| Whisper API Key | Leave empty. Ignored if you fill it in anyway. |
| API URL | https://scribegrab.com/v1/audio/transcriptions |
| Model | Anything — whisper-1 is fine. Every request runs Whisper large-v3, because that's the only model on the card. |
| Language | Empty for auto-detect (about 100 languages), or a code like en, nl, de. The word auto is understood too. |
| Prompt | Accepted and ignored. Vocabulary hints don't reach the model here. |
| Temperature | Accepted and ignored — the transcriber uses Whisper's own fallback ladder. |
| Response format | json is what plugins expect. text, srt, vtt and verbose_json also work. |
Before you trust it with a real recording, throw any audio file at it from a terminal:
curl https://scribegrab.com/v1/audio/transcriptions \ -F [email protected] \ -F model=whisper-1 {"text":"This is the first sentence of the memo."}
Add -F response_format=srt for time-coded subtitles, or verbose_json for a segment list with start and end times. The request stays open until the transcript exists, exactly like OpenAI's — a two-minute voice note usually comes back in a few seconds.
This is one person's computer, not a cloud region. Everything below is the same rule the website itself runs on, not a special API tier:
verbose_json is the plain version. You get id, start, end and text per segment. Whisper's internal statistics (avg_logprob, tokens, no_speech_prob) are not there — I'd rather leave a field out than invent a number.Your audio goes to a machine in my house, gets transcribed, and the uploaded file is deleted the moment the transcript exists. The transcript itself is wiped within 45 minutes. Nothing is kept, sold, or used to train anything, and your recording is never forwarded to OpenAI, Google or any other API — the whole point of this site is that it doesn't pay per minute either. Details in the privacy policy.
That said: it is still my machine. If a recording is confidential enough that a stranger's server is a problem, run Whisper locally instead — that advice costs me nothing and it's the right advice.
Anything that lets you set an OpenAI base URL can use this: dictation launchers, shell scripts, a Makefile that subtitles your screen recordings. If your tool asks for a base URL rather than a full endpoint, give it https://scribegrab.com/v1 and it will append the rest itself.
ScribeGrab is not affiliated with OpenAI or Obsidian; "OpenAI-compatible" here means it accepts the same request and returns the same shape of answer.
The cards are already bought and paid for, so your audio costs me electricity and nothing else. Ads on the website cover that. The catch is the queue and the missing uptime guarantee — that's it, and both are written above.
That's the plugin, before it ever reaches me: most of them refuse to send clips under a second. Talk for a few seconds longer.
The first means the file is truncated or corrupt — nothing in it says how long it is, and I refuse anything I can't measure rather than let it chew on the card forever. Browser recordings that leave the length open (the usual .webm from a plugin) are fine: those get measured properly. The second means there is genuinely no sound in it, which happens with silent screen recordings.
Not through this endpoint — OpenAI's API has no field for it. The website does: paste the link on the YouTube page.