cd /news/artificial-intelligence/open-source-free-tier-capable-whispr… Β· home β€Ί topics β€Ί artificial-intelligence β€Ί article
[ARTICLE Β· art-61380] src=github.com β†— pub= topic=artificial-intelligence verified=true sentiment=↑ positive

Open Source, Free Tier Capable Whispr Using Cloudflare AI

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.

read4 min views1 publishedJul 16, 2026
Open Source, Free Tier Capable Whispr Using Cloudflare AI
Image: source

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.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  PCM chunks   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   formatted
β”‚  Wails Desktop App   β”‚ ──WebSocket──▢ β”‚  Cloudflare Worker (Durable Obj) β”‚ ──text────▢ Clipboard β†’ Auto-paste
β”‚  (Go + React WebView)β”‚ ◀─────────────│  Whisper STT β†’ LLM Formatter     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  • Hold Ctrl+Cmdβ€” focus context is captured, recording starts, overlay appears at top-center - Speak into your microphone (voice level meter shows input)
  • Release Ctrl+Cmdβ€” audio streams to the cloud - Whisper transcribes, LLM formats, result is copied to clipboard and auto-pasted into the originating app
voicebox/
β”œβ”€β”€ main.go                 # Wails entrypoint, app menu
β”œβ”€β”€ app.go                  # App lifecycle, hotkey handlers, pipeline orchestration
β”œβ”€β”€ window_darwin.go        # macOS window management (overlay, settings, dock click)
β”œβ”€β”€ window_other.go         # Stub for non-macOS builds
β”œβ”€β”€ internal/
β”‚   β”œβ”€β”€ audio/              # PCM audio capture (malgo/miniaudio), RMS level
β”‚   β”œβ”€β”€ pipeline/           # WebSocket client, streams audio + focus context to worker
β”‚   β”œβ”€β”€ accessibility/      # macOS AX API: focused element context + auto-paste (Cmd+V)
β”‚   β”œβ”€β”€ config/             # TOML config  and saving
β”‚   β”œβ”€β”€ hotkey/             # Global hotkey registration
β”‚   β”œβ”€β”€ stt/                # STT provider interface (stubs)
β”‚   └── formatter/          # LLM formatting provider interface (stubs)
β”œβ”€β”€ frontend/               # React + Tailwind overlay UI (Vite)
β”‚   └── src/
β”‚       β”œβ”€β”€ App.tsx         # Routes between settings mode and overlay mode
β”‚       β”œβ”€β”€ components/
β”‚       β”‚   β”œβ”€β”€ settings-form.tsx  # Config editor (react-hook-form + zod)
β”‚       β”‚   └── title-bar.tsx      # Frameless title bar with drag region
β”‚       └── hooks/
β”‚           β”œβ”€β”€ use-voicebox.ts    # voicebox:state / voicebox:mode / voicebox:level events
β”‚           └── use-config.ts      # GetConfig / SaveConfig / GetConfigPath bindings
β”œβ”€β”€ worker/                 # Cloudflare Worker (TypeScript)
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ index.ts        # Router: /ws (WebSocket), /health
β”‚   β”‚   β”œβ”€β”€ session.ts      # Durable Object: audio accumulation + AI pipeline
β”‚   β”‚   β”œβ”€β”€ prompt.ts       # System prompt + user message builder
β”‚   β”‚   β”œβ”€β”€ wav.ts          # PCM-to-WAV wrapper
β”‚   β”‚   └── types.ts        # Shared types
β”‚   β”œβ”€β”€ test/               # Vitest tests
β”‚   └── wrangler.jsonc      # Worker configuration
β”œβ”€β”€ go.mod
└── voicebox.toml           # User config (gitignored)
  • Go 1.24+
  • Node.js + pnpm Wails v2CLI- A Cloudflare account with Workers AI access
  • macOS (accessibility permission required for auto-paste)
cd worker
pnpm install
wrangler secret put VOICEBOX_TOKEN     # set a shared secret
pnpm deploy

On first launch, VoiceBox opens a settings window. You can also create the config manually at ~/.config/voicebox/voicebox.toml

:

[provider]
mode = "cloud"

[cloud]
worker_url = "https://voicebox.<your-subdomain>.workers.dev"
token = "your-shared-secret"

[audio]
sample_rate = 16000
channels = 1
chunk_size = 4096

[hotkey]
record = "ctrl+cmd"

Config is loaded from (in order): ~/.config/voicebox/voicebox.toml

, next to the binary, then ./voicebox.toml

.

Auto-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.

wails dev      # dev mode with hot reload
wails build    # production binary

Settings (700Γ—450, centered): Opens on launch, dock click, or via the Recording menu. Edit config here.

Overlay (160Γ—48, top-center, floating): Appears during recording. Shows recording indicator with voice level meter, spinner while processing, checkmark on success.

Client connects to GET /ws?token=<auth-token>

.

After receiving {"type":"ready"}

, the client sends a configure

message with audio and focus context, then streams binary PCM chunks:

Client                          Server
  │── connect /ws?token=... ──────▢│
  │◀── {"type":"ready"} ──────────│
  │── {"type":"configure", ...} ──▢│
  │── [binary PCM chunk] ─────────▢│
  │── [binary PCM chunk] ─────────▢│
  │── {"type":"audio_end"} ───────▢│
  │◀── {"type":"processing",...} ──│
  │◀── {"type":"result",...} ──────│

The configure

message 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.

STT:@cf/openai/whisper-large-v3-turbo

Formatter:@cf/qwen/qwen3-30b-a3b-fp8

STT: faster-whisper** Formatter**: Ollama- Provider interfaces exist at internal/stt/

andinternal/formatter/

  • 16kHz sample rate, mono, PCM signed 16-bit LE
  • ~4096 byte chunks (~128ms each)
  • Max recording: ~25 MiB (~13 minutes)
wails dev                              # dev server (Go + Vite hot reload)
wails build                            # production build
go vet ./...                           # lint Go
go test ./internal/...                 # test Go

cd frontend && pnpm install && pnpm build

cd worker
pnpm dev                               # local dev server
pnpm lint                              # type-check
pnpm format                            # prettier
pnpm test                              # vitest
pnpm deploy                            # deploy to Cloudflare
── more in #artificial-intelligence 4 stories Β· sorted by recency
── more on @cloudflare 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/open-source-free-tie…] indexed:0 read:4min 2026-07-16 Β· β€”