GGitHub采集材料
Diction:可自托管的iOS语音输入键盘
发布时间未知 · 北京时间
原文与观测指标
1 个来源GGitHub
查看原文 Diction:可自托管的iOS语音输入键盘
DictionLabs星标245采集时的累计值
每小时增长待观察星标 / 小时 · 观测区间平均值
最近提交10-27 19:23提交时间不是项目发布时间
发布时间:未知 · 首次发现 10-27 20:32 · 北京时间
指标采集:10-27 20:32 · 指标已取得
项目文档有线索安装说明有线索使用说明有线索示例有线索
仅反映文档与示例线索,未实际运行项目。
摘要
Diction让用户在iPhone任意应用中语音转文字,可使用设备端模型或自托管服务。其Go网关支持流式转录、端到端加密和可选LLM文本清理,文档给出Docker Compose部署方式及硬件要求。
摘要由 AI 生成,请以原文为准。观测历史 · 最近 1 条 展开 / 收起
缺失不计为零;增长只比较同一指标来源的有效记录,按实际间隔折算每小时。上游缓存可能延迟数值更新。
| 采集时间 · 北京时间 | 指标 | 数值 | 来源 | 状态 |
|---|---|---|---|---|
| 10-27 20:32:11 | Star | 245 | GitHub 公开页面 | 已取得 |
采集原文 展开 / 收起
Diction
Open Source self-hosted alternative to WisprFlow - iOS voice AI keyboard
项目说明 展开 / 收起
The iPhone keyboard with voice and AI you can self-host. A full QWERTY that learns your words. On-device, cloud, or your own server. Website • Self-Hosting Guide • Privacy Policy Contributors omachala jeprecated ankitson DXCanas basnijholt What is Diction? Diction is an iOS keyboard that transcribes speech to text directly in any app. Tap the mic, speak, text lands in the field. No switching apps, no copy-paste. This repo is the open-source gateway: a Go service that sits between the iOS keyboard and your speech-to-text backend. It handles the WebSocket streaming protocol, AES-256-GCM end-to-end encryption, and optional LLM cleanup. The iOS app is on the App Store; the gateway is what you self-host. Self-hosted in one command. docker compose up and paste the URL into the app. Your server, your models, your data. Model-agnostic. The gateway speaks the OpenAI transcription API spec. Point it at any speech-to-text backend that implements it. Your model, your stack. On-device option. On-device models run locally on the iPhone. No gateway needed for that mode. Encrypted in transit. AES-256-GCM with X25519 key exchange. Same primitives used by Signal and WireGuard. No tracking. No third-party analytics or ad code in the app. Free and unlimited. Self-hosted and on-device modes have no caps, no rate limits, no expiry. Self-Hosting Diction speaks the OpenAI transcription API (POST /v1/audio/transcriptions) directly, so any compatible Whisper server works without the gateway. The gateway adds a WebSocket layer for live streaming — audio is transcribed as you speak, so by the time you tap stop the result is already back. For longer dictations the difference is noticeable; for short phrases it barely matters. The gateway also handles end-to-end encryption, QR pairing and optional LLM cleanup. This README is the current setup guide. The app's Setup guide link opens it. Requirements: A machine with Docker and Docker Compose installed: Linux box, NUC, home server, VPS. No GPU needed - the default speech model (Parakeet) runs on CPU. About 2.5 GB of free RAM and 2 GB of disk for the default stack: Parakeet uses ~2 GB of RAM while transcribing (1.25 GB image), the gateway under 100 MB (150 MB image). An x86-64 (amd64) or ARM (arm64) host, so a Raspberry Pi 4/5 works too. The gateway image is multi-arch from v14.1; if you pinned an older tag on ARM, move to v14.1 or latest. iPhone running iOS 17.0 or later. Step 1 - Write the Compose File Create a folder for the stack and save this as docker-compose.yml: services: parakeet: image: dictionlabs/parakeet:latest-int8 container_name: diction-parakeet restart: unless-stopped healthcheck: test: ["CMD", "bash", "-c", "echo > /dev/tcp/localhost/5092"] interval: 30s timeout: 5s retries: 3 start_period: 30s gateway: image: dictionlabs/gateway:latest container_name: diction-gateway restart: unless-stopped ports: - "8080:8080" depends_on: - parakeet environment: DEFAULT_MODEL: parakeet-v3 volumes: # Keeps the pairing key across container rebuilds. Without it, every # rebuild generates a new key and your phone has to pair again. - gateway-data:/data volumes: gateway-data: ghcr.io/omachala/diction-gateway is retired as of v13.0 (2026-09-11). Images already published there stay pullable and are not going anywhere, but no new versions will land on it - that ref is frozen at v12.0. If you are pulling it, switch to dictionlabs/gateway to keep receiving updates: - image: ghcr.io/omachala/diction-gateway:latest + image: dictionlabs/gateway:latest Images are published under Diction Labs on Docker Hub (dictionlabs/gateway, canonical) and GHCR (ghcr.io/dictionlabs/gateway). Model weights are baked into the parakeet image, so there's nothing to download on first start. DEFAULT_MODEL: parakeet-v3 covers 25 European languages - for the other 74, see Whisper on CPU or, with an NVIDIA GPU, large-v3-turbo. On a VPS or any host reachable from the internet, this stack is open: anyone who finds port 8080 can transcribe on your server, and if you add AI cleanup with a paid API key, spend your credit. Before exposing it, turn on required pairing, or keep the port off the internet and use Tailscale. Step 2 - Start the Stack docker compose up -d docker compose logs -f # watch progress docker compose ps # check status Expected: NAME STATUS diction-gateway Up 30 seconds diction-parakeet Up 30 seconds (healthy) Error Fix pull access denied on gateway image docker logout and retry - a stale login to Docker Hub or ghcr.io can shadow the anonymous pull no matching manifest for linux/arm64 on gateway image ARM host pulling a gateway tag older than v14.1 - use latest Gateway exits immediately Parakeet container failed - check its logs Step 3 - Test the Server Generate a test audio file: say -o test.aiff "Hello from my home server" # macOS espeak-ng -w test.wav "Hello from my home server" # Linux (apt install espeak-ng) Or record a voice memo on your phone and AirDrop it over. Use whichever file you made in the commands below (test.aiff here). curl -X POST http://localhost:8080/v1/audio/transcriptions \ -F "[email protected]" \ -F "model=parakeet-v3" {"text":"Hello from my home server."} # Check timing headers curl -sS -D - -o /dev/null \ -X POST http://localhost:8080/v1/audio/transcriptions \ -F "[email protected]" -F "model=parakeet-v3" | grep -i diction That returns three headers, verified against a live gateway: Header Meaning X-Diction-Whisper-Ms speech model inference latency in milliseconds X-Diction-Route-Model which backend actually served the request X-Diction-Route-Lang detected language, empty when detection didn't run X-Diction-LLM-Ms is added when AI cleanup runs. X-Diction-Route-Model is the quickest way to confirm a model switch took effect, since an unrecognised model name silently falls back to DEFAULT_MODEL. Response Cause Connection refused Gateway not running - docker compose ps 502 Bad Gateway Parakeet unreachable, still loading, or DEFAULT_MODEL names a service that isn't running 4