{"slug": "open-source-free-tier-capable-whispr-using-cloudflare-ai", "title": "Open Source, Free Tier Capable Whispr Using Cloudflare AI", "summary": "VoiceBox, an open-source voice-to-text tool using Cloudflare AI, captures speech via Whisper transcription and formats output with an LLM, auto-pasting the result into the user's active application. The tool is built with Go, React, and Cloudflare Workers, and is available for macOS with a free tier. It demonstrates a practical integration of AI speech recognition and language models for productivity.", "body_md": "Voice-to-text tool that captures speech, transcribes it via Whisper, and formats the output with an LLM. Press a hotkey, speak, release — formatted text lands in your clipboard and is auto-pasted into whatever you were typing in.\n\n```\n┌──────────────────────┐  PCM chunks   ┌──────────────────────────────────┐   formatted\n│  Wails Desktop App   │ ──WebSocket──▶ │  Cloudflare Worker (Durable Obj) │ ──text────▶ Clipboard → Auto-paste\n│  (Go + React WebView)│ ◀─────────────│  Whisper STT → LLM Formatter     │\n└──────────────────────┘               └──────────────────────────────────┘\n```\n\n- Hold\n**Ctrl+Cmd**— focus context is captured, recording starts, overlay appears at top-center - Speak into your microphone (voice level meter shows input)\n- Release\n**Ctrl+Cmd**— audio streams to the cloud - Whisper transcribes, LLM formats, result is copied to clipboard and auto-pasted into the originating app\n\n```\nvoicebox/\n├── main.go                 # Wails entrypoint, app menu\n├── app.go                  # App lifecycle, hotkey handlers, pipeline orchestration\n├── window_darwin.go        # macOS window management (overlay, settings, dock click)\n├── window_other.go         # Stub for non-macOS builds\n├── internal/\n│   ├── audio/              # PCM audio capture (malgo/miniaudio), RMS level\n│   ├── pipeline/           # WebSocket client, streams audio + focus context to worker\n│   ├── accessibility/      # macOS AX API: focused element context + auto-paste (Cmd+V)\n│   ├── config/             # TOML config loading and saving\n│   ├── hotkey/             # Global hotkey registration\n│   ├── stt/                # STT provider interface (stubs)\n│   └── formatter/          # LLM formatting provider interface (stubs)\n├── frontend/               # React + Tailwind overlay UI (Vite)\n│   └── src/\n│       ├── App.tsx         # Routes between settings mode and overlay mode\n│       ├── components/\n│       │   ├── settings-form.tsx  # Config editor (react-hook-form + zod)\n│       │   └── title-bar.tsx      # Frameless title bar with drag region\n│       └── hooks/\n│           ├── use-voicebox.ts    # voicebox:state / voicebox:mode / voicebox:level events\n│           └── use-config.ts      # GetConfig / SaveConfig / GetConfigPath bindings\n├── worker/                 # Cloudflare Worker (TypeScript)\n│   ├── src/\n│   │   ├── index.ts        # Router: /ws (WebSocket), /health\n│   │   ├── session.ts      # Durable Object: audio accumulation + AI pipeline\n│   │   ├── prompt.ts       # System prompt + user message builder\n│   │   ├── wav.ts          # PCM-to-WAV wrapper\n│   │   └── types.ts        # Shared types\n│   ├── test/               # Vitest tests\n│   └── wrangler.jsonc      # Worker configuration\n├── go.mod\n└── voicebox.toml           # User config (gitignored)\n```\n\n- Go 1.24+\n- Node.js + pnpm\n[Wails v2](https://wails.io/)CLI- A Cloudflare account with Workers AI access\n- macOS (accessibility permission required for auto-paste)\n\n```\ncd worker\npnpm install\nwrangler secret put VOICEBOX_TOKEN     # set a shared secret\npnpm deploy\n```\n\nOn first launch, VoiceBox opens a settings window. You can also create the config manually at `~/.config/voicebox/voicebox.toml`\n\n:\n\n```\n[provider]\nmode = \"cloud\"\n\n[cloud]\nworker_url = \"https://voicebox.<your-subdomain>.workers.dev\"\ntoken = \"your-shared-secret\"\n\n[audio]\nsample_rate = 16000\nchannels = 1\nchunk_size = 4096\n\n[hotkey]\nrecord = \"ctrl+cmd\"\n```\n\nConfig is loaded from (in order): `~/.config/voicebox/voicebox.toml`\n\n, next to the binary, then `./voicebox.toml`\n\n.\n\nAuto-paste requires macOS Accessibility access. On first use, macOS will prompt for permission, or you can grant it manually in **System Settings → Privacy & Security → Accessibility**.\n\n```\nwails dev      # dev mode with hot reload\nwails build    # production binary\n```\n\n**Settings** (700×450, centered): Opens on launch, dock click, or via the Recording menu. Edit config here.\n\n**Overlay** (160×48, top-center, floating): Appears during recording. Shows recording indicator with voice level meter, spinner while processing, checkmark on success.\n\nClient connects to `GET /ws?token=<auth-token>`\n\n.\n\nAfter receiving `{\"type\":\"ready\"}`\n\n, the client sends a `configure`\n\nmessage with audio and focus context, then streams binary PCM chunks:\n\n```\nClient                          Server\n  │── connect /ws?token=... ──────▶│\n  │◀── {\"type\":\"ready\"} ──────────│\n  │── {\"type\":\"configure\", ...} ──▶│\n  │── [binary PCM chunk] ─────────▶│\n  │── [binary PCM chunk] ─────────▶│\n  │── {\"type\":\"audio_end\"} ───────▶│\n  │◀── {\"type\":\"processing\",...} ──│\n  │◀── {\"type\":\"result\",...} ──────│\n```\n\nThe `configure`\n\nmessage carries audio params and focused element context (app name, bundle ID, element role, title, placeholder, current value) used by the LLM formatter to tailor output.\n\n**STT**:`@cf/openai/whisper-large-v3-turbo`\n\n**Formatter**:`@cf/qwen/qwen3-30b-a3b-fp8`\n\n**STT**: faster-whisper** Formatter**: Ollama- Provider interfaces exist at\n`internal/stt/`\n\nand`internal/formatter/`\n\n- 16kHz sample rate, mono, PCM signed 16-bit LE\n- ~4096 byte chunks (~128ms each)\n- Max recording: ~25 MiB (~13 minutes)\n\n```\n# Desktop app\nwails dev                              # dev server (Go + Vite hot reload)\nwails build                            # production build\ngo vet ./...                           # lint Go\ngo test ./internal/...                 # test Go\n\n# Frontend\ncd frontend && pnpm install && pnpm build\n\n# Worker\ncd worker\npnpm dev                               # local dev server\npnpm lint                              # type-check\npnpm format                            # prettier\npnpm test                              # vitest\npnpm deploy                            # deploy to Cloudflare\n```\n\n", "url": "https://wpnews.pro/news/open-source-free-tier-capable-whispr-using-cloudflare-ai", "canonical_source": "https://github.com/PrestigePvP/Voicebox", "published_at": "2026-07-16 02:57:30+00:00", "updated_at": "2026-07-16 03:25:56.999609+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-tools", "ai-infrastructure", "developer-tools"], "entities": ["Cloudflare", "Whisper", "VoiceBox", "Wails", "Go", "React", "Cloudflare Workers"], "alternates": {"html": "https://wpnews.pro/news/open-source-free-tier-capable-whispr-using-cloudflare-ai", "markdown": "https://wpnews.pro/news/open-source-free-tier-capable-whispr-using-cloudflare-ai.md", "text": "https://wpnews.pro/news/open-source-free-tier-capable-whispr-using-cloudflare-ai.txt", "jsonld": "https://wpnews.pro/news/open-source-free-tier-capable-whispr-using-cloudflare-ai.jsonld"}}