Pipi is a smartphone robot that can talk, remember things, take photos, and drive around when mounted on an Octobot.
tar.QWEN3_TTS_WORKER=rust).macOS native build prerequisites:
brew install cmake pkg-config opus
xcodebuild -downloadComponent MetalToolchain
Ubuntu 26.04 native build prerequisites:
sudo apt install -y build-essential cmake pkg-config git curl tar \
mesa-vulkan-drivers vulkan-tools libvulkan-dev glslc libshaderc-dev spirv-tools
For AMD Strix Halo/Radeon 8060S, install ROCm 7.2.2 from AMD's noble repository if you want HIP/ROCm experiments. The default Linux STT build uses Vulkan.
Fast path after cloning:
./setup.sh
npm run dev
setup.sh installs npm dependencies, initializes submodules, and compiles native STT/TTS workers for the active platform.
Manual equivalent:
npm ci --ignore-scripts
git submodule update --init --recursive
npm run build:native
npm run dev
Open:
http://localhost:8010
For phone access, expose port 8010 over HTTPS, for example with ngrok.
Pipi runs local LLM, STT, and TTS models. Missing default models are downloaded automatically on startup.
LLM default: Gemma 4 26B A4B MoE Q4 via llama.cpp.
ggml-org/gemma-4-26B-A4B-it-GGUF~/models/gemma-4-26b-a4b-it~/.cache/pibot/llama.cpp.LLAMA_CPP_BINARY_PATH=/path/to/llama-server.LOCAL_LLM=gemma12b npm run dev for Gemma 4 12B IT Q4 from unsloth/gemma-4-12b-it-GGUF, downloaded into ~/models/gemma-4-12b-it.STT default: native parakeet.cpp GGUF worker with whisper.cpp GGML Silero VAD.
npm run build:stt-parakeet-cpp.parakeet-cpp-stt-v* GitHub release workflow for Linux x64 Vulkan, macOS arm64 Metal, and Windows x64 Vulkan.mudler/parakeet-cpp-gguf/tdt-0.6b-v3-q8_0.gguf.~/models/parakeet-cpp-gguf/tdt-0.6b-v3-q8_0.gguf.ggml-org/whisper-vad/ggml-silero-v6.2.0.bin.~/models/whisper-vad/ggml-silero-v6.2.0.bin.PARAKEET_CPP_MODEL_PATH/PARAKEET_CPP_MODEL_FILE and SILERO_VAD_GGML_MODEL_PATH/SILERO_VAD_GGML_MODEL_FILE.TTS default: native C++/GGML Qwen3-TTS worker (QWEN3_TTS_WORKER=cpp).
npm run build:tts-cpp (also part of npm run build:native and ./setup.sh).badlogicgames/qwen3-tts-0.6b-q8_0-gguf (Q8_0 GGUF + tokenizer).~/models/qwen3-tts-0.6b-q8_0-gguf.QWEN3_TTS_CPP_WORKER_PATH / QWEN3_TTS_CPP_MODEL_PATH / QWEN3_TTS_CPP_MODEL_REPO.TTS alternative: Rust Qwen3-TTS 0.6B Base 6-bit MLX (QWEN3_TTS_WORKER=rust).
npm run build:tts-rust.mlx-community/Qwen3-TTS-12Hz-0.6B-Base-6bit, downloaded into ~/models/qwen3-tts-12hz-0.6b-base-6bit.Select the TTS engine with QWEN3_TTS_WORKER (cpp default, rust, python, or disabled).
./setup.sh # install deps, initialize submodules, build native workers
npm run dev # start the development server
npm run build:native # build STT and TTS native workers
npm run build:stt-parakeet-cpp # build the native parakeet.cpp STT worker
npm run build:tts-cpp # build only the native C++/Metal Qwen3-TTS worker (default)
npm run build:tts-rust # build only the optional Rust/MLX Qwen3-TTS worker
npm run check # format/lint/typecheck/build client
npm run bench:stt # benchmark STT worker
npm run bench:tts # benchmark TTS worker
npm run bench:llm # benchmark local LLM server
66 commits
TypeScript
63.3%
JavaScript
11.3%
C++
8.8%
HTML
6.8%
Python
6.8%
CSS
1.4%
CMake
1.2%
Pipi is a smartphone robot that can talk, remember things, take photos, and drive around when mounted on an Octobot.
tar.QWEN3_TTS_WORKER=rust).macOS native build prerequisites:
brew install cmake pkg-config opus
xcodebuild -downloadComponent MetalToolchain
Ubuntu 26.04 native build prerequisites:
sudo apt install -y build-essential cmake pkg-config git curl tar \
mesa-vulkan-drivers vulkan-tools libvulkan-dev glslc libshaderc-dev spirv-tools
For AMD Strix Halo/Radeon 8060S, install ROCm 7.2.2 from AMD's noble repository if you want HIP/ROCm experiments. The default Linux STT build uses Vulkan.
Fast path after cloning:
./setup.sh
npm run dev
setup.sh installs npm dependencies, initializes submodules, and compiles native STT/TTS workers for the active platform.
Manual equivalent:
npm ci --ignore-scripts
git submodule update --init --recursive
npm run build:native
npm run dev
Open:
http://localhost:8010
For phone access, expose port 8010 over HTTPS, for example with ngrok.
Pipi runs local LLM, STT, and TTS models. Missing default models are downloaded automatically on startup.
LLM default: Gemma 4 26B A4B MoE Q4 via llama.cpp.
ggml-org/gemma-4-26B-A4B-it-GGUF~/models/gemma-4-26b-a4b-it~/.cache/pibot/llama.cpp.LLAMA_CPP_BINARY_PATH=/path/to/llama-server.LOCAL_LLM=gemma12b npm run dev for Gemma 4 12B IT Q4 from unsloth/gemma-4-12b-it-GGUF, downloaded into ~/models/gemma-4-12b-it.STT default: native parakeet.cpp GGUF worker with whisper.cpp GGML Silero VAD.
npm run build:stt-parakeet-cpp.parakeet-cpp-stt-v* GitHub release workflow for Linux x64 Vulkan, macOS arm64 Metal, and Windows x64 Vulkan.mudler/parakeet-cpp-gguf/tdt-0.6b-v3-q8_0.gguf.~/models/parakeet-cpp-gguf/tdt-0.6b-v3-q8_0.gguf.ggml-org/whisper-vad/ggml-silero-v6.2.0.bin.~/models/whisper-vad/ggml-silero-v6.2.0.bin.PARAKEET_CPP_MODEL_PATH/PARAKEET_CPP_MODEL_FILE and SILERO_VAD_GGML_MODEL_PATH/SILERO_VAD_GGML_MODEL_FILE.TTS default: native C++/GGML Qwen3-TTS worker (QWEN3_TTS_WORKER=cpp).
npm run build:tts-cpp (also part of npm run build:native and ./setup.sh).badlogicgames/qwen3-tts-0.6b-q8_0-gguf (Q8_0 GGUF + tokenizer).~/models/qwen3-tts-0.6b-q8_0-gguf.QWEN3_TTS_CPP_WORKER_PATH / QWEN3_TTS_CPP_MODEL_PATH / QWEN3_TTS_CPP_MODEL_REPO.TTS alternative: Rust Qwen3-TTS 0.6B Base 6-bit MLX (QWEN3_TTS_WORKER=rust).
npm run build:tts-rust.mlx-community/Qwen3-TTS-12Hz-0.6B-Base-6bit, downloaded into ~/models/qwen3-tts-12hz-0.6b-base-6bit.Select the TTS engine with QWEN3_TTS_WORKER (cpp default, rust, python, or disabled).
./setup.sh # install deps, initialize submodules, build native workers
npm run dev # start the development server
npm run build:native # build STT and TTS native workers
npm run build:stt-parakeet-cpp # build the native parakeet.cpp STT worker
npm run build:tts-cpp # build only the native C++/Metal Qwen3-TTS worker (default)
npm run build:tts-rust # build only the optional Rust/MLX Qwen3-TTS worker
npm run check # format/lint/typecheck/build client
npm run bench:stt # benchmark STT worker
npm run bench:tts # benchmark TTS worker
npm run bench:llm # benchmark local LLM server
66 commits
TypeScript
63.3%
JavaScript
11.3%
C++
8.8%
HTML
6.8%
Python
6.8%
CSS
1.4%
CMake
1.2%