A custom server for S Voice that makes it work again locally. Works with S Voice versions that shipped until Android 5, tested with 11.2.2.0.x.
All tested versions
- 11.2.2.0.39002 (r1) on S4 (I9505)
- 11.2.2.0.37791 (r1) on Note 3 (N9005)
- 11.2.2.0.32948 (r1) on S3 Mini (I8200)
- 11.2.2.0.32564 (r1) on S3 Neo (I9301I)
It works by redirecting requests sent from S Voice to a local server. The server then decodes the audio and uses OpenAI Whisper to transcribe it and passes it to an LLM. The LLM then chooses whether to respond with plain text or an action such as setting a timer, opening an app, etc.
The current supported actions are opening apps, setting timers, toggling bt/wifi, starting voice recordings, searching the web, and controlling music.
- New-ish Python version (3.13.5 tested)
- Ollama (
brew install --cask ollama-app) - mitmproxy (
brew install mitmproxy) - ffmpeg in path (
brew install ffmpeg) - Ollama model - I use qwen3:4b instruct as it runs good on my laptop (
ollama pull qwen3:4b-instruct-2507-q4_K_M, about 2.5GB) - Decent CPU or GPU and enough RAM to load the LLM and Whisper model.
- Wi-Fi on the phone
Open config.json and update the settings:
server.host: Your local IP address (find withifconfig,ip addr, oripconfig)server.port: Server port (default 5067)models.llm: Your Ollama model name (qwen3:4b-instruct-2507-q4_K_M)models.whisper: Whisper model size (tiny/base/small/medium/large)options.whisper_language: Language code for transcription ("en", "es", "fr", etc)options.max_history_messages: Number of messages to keep in conversation memoryoptions.conversation_timeout_minutes: Auto-cleanup inactive conversationsoptions.keep_audio_files: Set to true to keep audio files
This allows the computer to read and modify http traffic on the phone
- The svoiceredir.py script is used along with mitmproxy to achieve that
- Run the
run_svoiceredir.shscript, or justmitmproxy -s svoiceredir.py - It will run at port 8080 by default
- Allow mitmproxy through your firewall if needed
The phone needs to be configured to use our proxy server
- This may vary across devices, but is generally something like this
- Go to Settings > Wi-Fi and forget your current network if already connected
- Tap on your network, input your password but do not connect yet
- Check "Show Advanced Options"
- In the proxy settings, select "Manual"
- In the ip address field, enter your computer's ip address (from config.json)
- In the port field, enter 8080 unless you have changed the port manually during step 2
- If you open S Voice, you should see a failing request in the mitmproxy window from step 2
Now we need to set up the S Voice server itself
- You need the packages listed in requirements.txt
- To install the packages:
pip install -r requirements.txtoruv sync
Note
Installing the requirements in a venv instead of the global Python installation is recommended.
python -m venv .venv to create it, source .venv/bin/activate to activate on macOS/Linux, .venv\Scripts\activate on Windows
- Type
python main.pyto start the server - The first start may take a while as it needs to download and load the Whisper model
- If everything is set up correctly, you should see
Application startup complete. - Visit http://localhost:5067/dash (or your configured port) to access the dashboard

