Privacy
What Butterfly Labs collects, where it is kept, who else handles it and how to have it deleted. It covers this website and Butterfly Speak, our dictation app for Windows.
Who we are
Butterfly Labs is a small software lab in India. You can reach us through GitHub at github.com/Deveshu04.
Butterfly Speak
Speak has three modes, and you choose which one it uses. What leaves your computer depends on that choice.
Cloud mode
To sign you in and to apply the free weekly allowance, Butterfly Labs keeps:
- what Google provides when you sign in: your e-mail address, your name, the link to your profile picture and your Google account id;
- a Supabase user id;
- for each signed-in session, when you signed in, and the IP address and the browser or device description sent with its latest sign-in or renewal, with when that was;
- one entry per week: how many words you dictated that week, and when it last changed.
Supabase stores these in its Mumbai region for as long as you have an account; there is one weekly entry for every week you dictated. If a sign-in is started but not finished, Supabase keeps a temporary sign-in record, which can include a short-lived token from Google; a clean-up that runs every hour removes these once they are a day old. If you approved the sign-in at Google but the app did not finish signing in, Supabase has already created your account, with the details above; it is kept like any other account until it is deleted, and the hourly clean-up removes only the temporary sign-in record.
Your audio (with the words in your Dictionary, sent as spelling hints), and the text sent to AI Polish, transforms, the voice agent, note actions, Auto-title and the prompt tester in Settings (including any text you have selected for them), pass through the Butterfly Labs relay, which runs on Cloudflare, to Sarvam AI. Butterfly Labs does not store your audio or your text. Sarvam AI processes them under its own terms.
To enforce the allowance, the relay also keeps your Supabase user id and your full usage (words, seconds of audio and chat requests: AI Polish, transforms, the voice agent, note actions, Auto-title and the prompt tester) for the current week and, until its word count has been copied to Supabase, for the previous week. It keeps them in Cloudflare's storage, in a Cloudflare data centre near where your connection first reaches Cloudflare, which may be outside India. The relay erases this by itself within about a week after the app last contacts the relay for your account.
Bring your own key
The app sends your audio, your text and any recording you import from your computer straight to Sarvam AI, under your own Sarvam account and key. It does not pass through Butterfly Labs, and we receive nothing.
On-device
Speech is recognised on your computer and AI Polish runs on a small model on your computer, unless you switch your own AI endpoint on for speech-to-text (see In every mode). If you have saved a Sarvam key, importing a recording sends that recording to Sarvam AI, and the translate shortcut, transforms, the voice agent, note actions, Auto-title and the prompt tester in Settings send their text there; with your own AI endpoint switched on for AI Polish, transforms, the voice agent, note actions, Auto-title and the prompt tester send their text to it instead.
In every mode
- If you set up your own AI endpoint, the app sends it what you switch it on for: your audio, for transcription in any mode, and your text, for AI Polish (in the cloud modes, and in every mode while it also transcribes) and for transforms, the voice agent, note actions, Auto-title and the prompt tester in Settings. While it transcribes and AI Polish is not switched on for it, the transcript goes to Sarvam AI for AI Polish instead: through the relay in Cloud mode, or under your saved Sarvam key in the other modes.
- With a Sarvam key saved, importing a recording sends it to Sarvam AI, and the translate shortcut sends its text there, whichever mode is selected. The recording is uploaded, through a link Sarvam AI issues for it, to storage Sarvam provides (currently on Microsoft Azure), and Sarvam processes it from there.
- The words in your Dictionary go as spelling hints with the audio you dictate to whichever service transcribes it (Sarvam AI, through the relay in Cloud mode, or your own AI endpoint), but not with a recording you import, and with your text to whichever service runs AI Polish, the voice agent or the prompt tester.
- Wherever AI Polish runs, it receives your dictation after your corrections and snippets are applied, so the text it is sent includes the text of any snippet the dictation triggered.
- The app checks GitHub for updates half a minute after launch and every eight hours (you can turn this off), and downloads on-device models when you ask for them: speech models from GitHub when you choose one, and the AI Polish model from Hugging Face when you turn AI Polish on with the On-device engine or press Download polish model; they see your network address.
- In Speak 0.2.0 and later, switching away from Cloud keeps you signed in on this computer without contacting Supabase; to sign out, select Cloud and choose Sign out while you are online. A sign-out that cannot reach Supabase signs you out on this computer only, and Supabase keeps its record of that sign-in until you delete your account.
- Speak types by briefly placing the text on the clipboard and then puts back the text that was there; anything else on the clipboard, such as an image, is replaced by the dictation. Putting it back can be turned off only in the settings file (by editing it or importing one), and then the dictation stays on the clipboard. In Speak 0.2.0 and later, what Speak places there for typing is marked so that Windows clipboard history and sync skip it, though clipboard managers that ignore that mark may still record it; Copy last transcript, the raw transcript Undo AI Edit copies when it cannot undo in place, and the app's Copy buttons are ordinary copies. To read text you selected, transforms press Ctrl+C in the app you are using, and so does the voice agent when Windows UI Automation cannot read the selection; Undo AI Edit selects the text it pasted and presses Ctrl+C to check it before replacing it. When a window Butterfly Speak recognises as a terminal is in front, none of them presses Ctrl+C and the clipboard is not touched. The copy is made by the app you are using, so if Windows clipboard history or cloud clipboard sync is on, Windows may record it; Butterfly Speak cannot prevent that. Right afterwards Butterfly Speak puts back the text the clipboard held, marked to stay out of history and sync, or empties the clipboard if it held no text; anything other than text (an image, files) is not put back. The voice agent leaves alone anything another program writes to the clipboard during its read. A transform then places its rewrite on the clipboard, marked, to paste it, and afterwards puts back the text the clipboard held just before the paste, unless you turned that off, there was no text, or another program has written to the clipboard since; if it cannot get back to the window it was pressed in, the rewrite stays on the clipboard instead. When Undo's check passes, it pastes the raw transcript the same way a dictation is typed, and your text comes back under the same rule.
- The app has no analytics and no telemetry.
- Nothing is sold, and nothing is shared for advertising.
On your computer
In Speak 0.2.0 and later, the app keeps these on your computer:
- your settings, including your Dictionary, your snippets and the corrections Speak has learned (importing a settings file keeps this computer's notes folder and its switch, and does not change where Cloud mode connects);
- small files beside your settings that hold your theme, when Speak last checked for updates, that it has shown its background notice, and when it last restarted itself after its web view's browser process failed (so it does not restart over and over);
- your dictation history, for as long as Settings → System says; with history turned off, new dictations are not added to it, and the History page deletes one dictation or all of them;
- the words you corrected while Speak was learning from your corrections, each until 30 days after you last corrected it, whatever the history or learning settings, and even after Clear all history;
- your notes, including the transcript of each recording you import (the history settings and Clear all history do not reach notes), and a Markdown copy of each in the folder you chose, if you turned that on (deleting a note removes its copy only while that option is on, and copies in a folder you chose earlier stay);
- any note you export, as a .md or .txt file, and any settings file you export, where you save it;
- the counts behind Insights (such as words and dictations per day, and words per app), which hold no dictation text and stay whether history is on or off;
- the speech and AI Polish models you downloaded;
- logs of what the app did (such as your microphone's name), which hold no dictation text; Speak deletes logs older than a week when it starts (logs written by Speak 0.1.0 can hold dictation text that a server repeated in an error message or a misshapen reply, or that a misshapen realtime message carried; they are deleted with the rest once they are a week old);
- the keys you saved (a Sarvam key, your own AI endpoint's key) and your Cloud sign-in, in Windows Credential Manager; Remove next to a saved key in Settings deletes it from there.
While a recording is being imported, a converted copy of it sits in Windows' temporary folder; Speak deletes it when the import ends, or, if Speak was closed during the import, at a start at least a day later.
Speak applies the history and correction time limits when it starts and every hour while it runs.
The app's web view (Microsoft Edge WebView2) also keeps files of its own on your computer, which the history settings and Clear all history do not reach. Speak 0.1.0 kept the text of your latest 200 dictations in the web view's storage; 0.2.0 takes it out of there when it first starts, but older copies of it can stay in those files. If you used the Scratchpad page, which early builds had, Speak keeps a copy of its notes there after moving them to Notes, and deleting a note does not remove that copy. If the web view crashes, WebView2 can keep a crash report that holds text from Speak's pages.
In Speak 0.2.0 and later, ticking Delete the application data when you uninstall removes all of this except the notes folder you chose, the files you exported and anything reached through a link, such as a models folder you moved to another drive with a junction. A folder holding something the uninstaller cannot check safely is kept, a file it cannot remove (one still in use, say) stays, and if it cannot tell an uninstall from a reinstall it keeps what a reinstall keeps; the uninstaller's details list says which. When the installer uninstalls the old version before reinstalling, the tick removes only the web view's files (with the counts behind Insights) and keeps the rest. Without the tick, everything stays. In Speak 0.1.0 the tick removes only the web view's files; your settings, history, notes, logs, models and saved keys (including the Cloud sign-in) stay, so install 0.2.0 over it before uninstalling, or remove the ButterflySpeak folders in %APPDATA% and %LOCALAPPDATA% and the ButterflySpeak entries in Credential Manager yourself. Windows' temporary files can also hold the installers Speak downloaded to update itself; they hold none of your data, and uninstalling does not remove them. Uninstalling does not sign you out of Cloud mode on Supabase's side, so sign out while you are online, or delete your account, first.
Windows keeps Speak's Learned notifications, which name the words you corrected, in its notification centre until you clear them there or Windows removes them; undoing a learned correction or uninstalling Speak does not remove them.
Google user data
Speak uses the data it receives from your Google account to sign you in, to show which account is signed in and, as a one-way keyed hash of your e-mail address, to keep the weekly allowance across an account deletion. Its use of that data follows the Google API Services User Data Policy, including the Limited Use requirements.
Deleting your account
In Speak 0.2.0 and later, Settings → Speech engine → Cloud → Delete my Cloud account deletes your account from Supabase, with your Google profile details, your sessions and your weekly entries, and erases the relay's copy of your usage on Cloudflare. For two hours afterwards the relay keeps only a note that the account was deleted, so that it refuses sign-in tokens issued before the deletion. Until the week ends (Monday 00:00 UTC), the relay also keeps a one-way keyed hash of your e-mail address with that week's usage, so that deleting cannot reset the weekly allowance.
Google keeps its own record that you signed in to Butterfly Labs with Google; you can remove it at myaccount.google.com/connections.
If you can't sign in any more, open an issue at github.com/Deveshu04/Deveshu04.github.io/issues. Don't put your e-mail address in the issue; we'll reply there with how to confirm it privately, and your account is deleted from Supabase within 30 days of that confirmation. The relay's copy erases itself within about a week after the app last contacts the relay for your account.
Supabase may keep daily backups of its database, which include your account, for up to 7 days, and Cloudflare may keep a recovery history of the relay's storage for up to 30 days. Supabase and Cloudflare keep short-lived operational logs; Supabase keeps its authentication logs for about a day. Sarvam AI keeps what its own terms allow.
This website
This site is hosted on GitHub Pages and loads its fonts from Google Fonts, so GitHub and Google see the network address your browser connects from, under their own privacy policies. The site sets no cookies and runs no analytics.
Changes
When this policy changes, the date at the top changes with it. Every earlier version stays in this site's history on GitHub.