Handcrank CrankGPT: Build a Fully Offline, Hand-Powered AI Voice Assistant on Raspberry Pi

By Prahlad Menon 6 min read

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

ComponentRecommendedPrice (approx)Notes
Single Board ComputerRaspberry Pi 5 (8GB RAM)$80Orange Pi 5 Pro has faster DDR5, +58% generation speed
Hand Crank Generator20W switchable voltage USB generator$25-40Amazon link
Audio HATKEYESTUDIO ReSpeaker 2-Mic Pi HAT$20Amazon link
CoolingCooling fan HAT for Pi 5$15Required for sustained inference
Storage32GB+ microSD card$10Fast read speeds help boot time

Optional Upgrades

ComponentPurposeLink
USB Sound CardBetter audio qualityAmazon
External MicImproved voice captureAmazon
External SpeakersLouder outputAmazon
Capacitor BoardSmooth power during inference spikesBOM

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:

ModelQuantMemoryGen Speed (tok/s)Notes
LFM2 350MQ4_K_M354 MB48.9Fast, good for simple tasks
LFM2 1.2BQ4_K_M762 MB15.0Better reasoning, still real-time
Gemma 3 1BQ4_K_M762 MB14.3Google’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

  1. Use DietPi — boots in ~3 seconds vs. 60+ for standard Raspberry Pi OS
  2. Disable radios — turn off WiFi and Bluetooth to reduce power draw
  3. Match model to task — use 350M for simple queries, 1.2B when you need reasoning
  4. Capacitor board — essential for smooth operation; prevents brownouts during inference
  5. 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


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.