Handcrank CrankGPT: Build a Fully Offline, Hand-Powered AI Voice Assistant on Raspberry Pi
What if your AI assistant worked without batteries, internet, or a power outlet? CrankGPT is exactly that — a fully offline, hand-powered voice assistant running on a Raspberry Pi 5. Turn the crank, ask a question, get an answer. No cloud. No subscription. Just physics and silicon.
This isn’t a concept demo — it’s a working system with published hardware specs, software stack, and benchmarks. Here’s everything you need to build one.
What is CrankGPT?
CrankGPT is an off-grid AI voice assistant created by SqueezLabs. It runs speech recognition, a language model, and text-to-speech entirely on a Raspberry Pi 5 CPU — no accelerators, no internet, no battery. Power comes from a 20W hand-crank generator.
The system handles voice conversations in real-time: you speak, it listens (Moonshine ASR), thinks (Gemma 3 1B or LFM2), and responds (Piper TTS). All processing happens locally. The electronics are designed to last decades — swap the SD card and it keeps working.
Hardware Requirements (Complete Parts List)
Core Components
| Component | Recommended | Price (approx) | Notes |
|---|---|---|---|
| Single Board Computer | Raspberry Pi 5 (8GB RAM) | $80 | Orange Pi 5 Pro has faster DDR5, +58% generation speed |
| Hand Crank Generator | 20W switchable voltage USB generator | $25-40 | Amazon link |
| Audio HAT | KEYESTUDIO ReSpeaker 2-Mic Pi HAT | $20 | Amazon link |
| Cooling | Cooling fan HAT for Pi 5 | $15 | Required for sustained inference |
| Storage | 32GB+ microSD card | $10 | Fast read speeds help boot time |
Optional Upgrades
| Component | Purpose | Link |
|---|---|---|
| USB Sound Card | Better audio quality | Amazon |
| External Mic | Improved voice capture | Amazon |
| External Speakers | Louder output | Amazon |
| Capacitor Board | Smooth power during inference spikes | BOM |
Why the Capacitor Board Matters
When the LLM runs inference, power draw spikes. The hand crank voltage can sag below the Pi’s required 4.8V or trigger overcurrent protection. A custom capacitor board acts as a ~20-second power reservoir, smoothing output and letting you rest your arm between cranking bursts.
You can feel the load through the crank — when LLM inference and TTS run together, cranking gets noticeably harder.
Software Stack
The voice agent uses three components, all optimized for CPU inference:
1. Speech Recognition (ASR)
Moonshine — fastest CPU-based ASR by a wide margin. Slightly less robust in noisy environments than Whisper, but latency wins for real-time conversation.
Alternatives supported: FasterWhisper, NVIDIA FastConformer, Vosk
2. Language Model (LLM)
Runs via llama.cpp. Recommended models:
| Model | Quant | Memory | Gen Speed (tok/s) | Notes |
|---|---|---|---|---|
| LFM2 350M | Q4_K_M | 354 MB | 48.9 | Fast, good for simple tasks |
| LFM2 1.2B | Q4_K_M | 762 MB | 15.0 | Better reasoning, still real-time |
| Gemma 3 1B | Q4_K_M | 762 MB | 14.3 | Google’s edge model |
On Orange Pi 5 Pro (DDR5): Generation speeds increase 29-58% due to higher memory bandwidth.
Warning: Larger models (2B+) drop to single-digit tok/s, making conversation feel painfully slow.
3. Text-to-Speech (TTS)
Piper — synthesizes a 20-word response in ~0.5 seconds on Pi 5. Kokoro is 9× slower. Piper’s speed lets it stream alongside LLM output without stuttering.
Alternatives: Kokoro, KittenTTS, PocketTTS (all slower)
Step-by-Step Setup
Prerequisites
- Raspberry Pi 5 with DietPi OS (fast boot: ~3 seconds to usable shell)
- Hand crank generator connected via USB-C
- ReSpeaker HAT attached to GPIO headers
Installation
# 1. Clone the edge voice agent
git clone https://github.com/ktomanek/edge_voice_agent
cd edge_voice_agent
# 2. Create Python environment
python -m venv venv
source venv/bin/activate
# 3. Install dependencies
sudo apt install python3-dev portaudio19-dev
pip install -r requirements.txt
# 4. Download models
sh download_piper_models.sh # TTS
sh download_llm.sh # LLM (LFM2 350M default)
python download_moonshine_v1_models.py # ASR
python download_silero_vad_model.py # Voice activity detection
# 5. Install llama.cpp (with server support)
# Follow: https://github.com/ggml-org/llama.cpp
# Ensure llama-server is in PATH
sudo ln -s ~/llama.cpp/build/bin/llama-server /usr/local/bin/llama-server
Running the Voice Agent
# Terminal 1: Start LLM server
llama-server -m models/llms/LFM2-350M-Q4_K_M.gguf --port 8080
# Terminal 2: Start voice agent
python voice_agent_cli.py
Or use the quick demo:
./start_demo.py # Fitness coach demo with tiny models
Practical Use Cases
1. Emergency Preparedness
Power grid down? No cell service? CrankGPT still works. Ask it first-aid questions, survival tips, or just have company during a blackout.
2. Off-Grid Living
Cabins, boats, RVs — anywhere without reliable power or internet. Pre-load knowledge bases and have a capable assistant available.
3. Privacy-Critical Applications
Medical notes, legal dictation, personal journaling — nothing leaves the device. Ever.
4. Educational Tool
Teach kids (or adults) about AI without cloud dependencies. The physical feedback of cranking harder during inference makes compute costs tangible.
5. Field Research
Remote locations where charging is impractical. Ornithologists, archaeologists, wilderness medics — anyone working away from infrastructure.
Performance Tips
- Use DietPi — boots in ~3 seconds vs. 60+ for standard Raspberry Pi OS
- Disable radios — turn off WiFi and Bluetooth to reduce power draw
- Match model to task — use 350M for simple queries, 1.2B when you need reasoning
- Capacitor board — essential for smooth operation; prevents brownouts during inference
- Orange Pi upgrade — if you want ~50% faster generation, DDR5 memory bandwidth helps significantly
Limitations to Know
- Response time — expect 2-5 seconds for a short response depending on model size
- Noisy environments — Moonshine ASR struggles more than Whisper with background noise
- Crank fatigue — sustained conversations require sustained cranking. It’s a workout.
- Model capabilities — 1B models are impressive but not GPT-4. Set expectations accordingly.
Frequently Asked Questions
How long do I need to crank for one response?
Depends on response length. Short answers (1-2 sentences) need 10-20 seconds of cranking. Longer responses or complex reasoning need more. The capacitor board gives you ~20 seconds of buffer.
Can I use solar instead of hand crank?
Yes. Any 5V/3A+ power source works. The hand crank is the most dramatic demo, but solar panels, bicycle dynamos, or car chargers all work.
What’s the best model for general conversation?
LFM2 1.2B offers the best balance of speed and capability. Gemma 3 1B is comparable. Both run at ~15 tok/s on Pi 5.
Can it generate images?
The creators have generated small images, but it’s slow. This is primarily a voice/text system.
How much does the complete setup cost?
About $150-200 for a basic setup (Pi 5 + crank + audio HAT + SD card + cooling). Add $30-50 for the capacitor board and better audio.
Will this work on Raspberry Pi 4?
Technically yes, but significantly slower. Pi 5’s improved CPU and memory bandwidth make a noticeable difference for real-time voice interaction.
How do I add custom knowledge?
Use llama.cpp’s standard RAG approaches or fine-tune a model. The system prompt can also include context for specific domains.
Resources
- Project Homepage: squeezlabs.github.io/handcrank
- Edge Voice Agent: github.com/ktomanek/edge_voice_agent
- LFM2 Models: Liquid AI on HuggingFace
- Moonshine ASR: github.com/usefulsensors/moonshine
- Piper TTS: github.com/OHF-Voice/piper1-gpl
- Parts BOM: squeezlabs.github.io/handcrank/assets/bom/bom.html
CrankGPT proves that useful AI doesn’t require a data center — or even a power outlet. The models are small but capable, the hardware is accessible, and the concept is compelling: AI that works when everything else fails.
Whether you’re building for emergency prep, privacy, or just because it’s cool, this is one of the most practical edge AI projects published this year.