
Memo supports vision and speech natively — all processing happens on-device with no data leaving your machine.
Memo can analyze images using multimodal GGUF models. Images are processed entirely locally.
User drags image ──▶ Base64 encode ──▶ Send to GGUF model ──▶ Stream response
(local) (in-memory) (llama.cpp server) (SSE tokens)
Supported formats: PNG, JPEG, GIF, WebP, BMP.
Images are encoded as Base64 in-memory before being sent to the multimodal model. The encoding is performed client-side (Flutter) and the raw bytes are passed directly to the local llama.cpp server via the Go backend. No image data is stored on disk unless you choose to embed it in the chat log.
// Client-side Base64 encoding
final bytes = await imageFile.readAsBytes();
final base64 = base64Encode(bytes);
// Sent to local backend over HTTP
Vision requires a multimodal GGUF model. Current recommendations:
| Model | Size | Quality | Notes |
|---|---|---|---|
llava-v1.6-mistral-7b |
~4 GB (Q4_K_M) | Good | Broad visual understanding |
llava-v1.6-vicuna-7b |
~4 GB (Q4_K_M) | Good | Fine-tuned on detailed captions |
bakllava-1.5-7b |
~4 GB (Q4_K_M) | Decent | Lightweight alternative |
These models are available in the Factory model store filtered by the "Vision" tag.
User: [attaches photo of error dialog]
What does this error mean and how do I fix it?
Memo: The error "ENOSPC: no space left on device" means your disk
is full. Here's how to free up space...
Voice input uses whisper.cpp, running as a local subprocess with no internet dependency.
Microphone ──▶ Audio capture (WAV) ──▶ whisper.cpp ──▶ Transcribed text ──▶ Chat input
(Flutter) (16kHz mono) (local binary) (UTF-8 string) (ready to send)
whisper-cli \
--model models/ggml-base.bin \
--file /tmp/memo_audio.wav \
--language auto \
--output-txt
ggml-base.bin (~142 MB, bundled or downloaded on first use)--language auto detects Turkish (TR) and English (EN) automaticallywhisper.cpp automatically identifies the spoken language from the audio signal. Memo's bundled model is optimized for:
| Language | Detection Accuracy | Transcription Quality |
|---|---|---|
| Turkish (TR) | High | Very good |
| English (EN) | High | Excellent |
| Mixed TR/EN | Good | Good (code-switching supported) |
Additional languages are available by downloading the ggml-large.bin model in the Factory.
For best STT accuracy, use theggml-small.binorggml-medium.binmodel. The base model is optimized for speed but larger models offer better accuracy, especially for Turkish.
| Feature | Status |
|---|---|
| Vision: image analysis via GGUF | Stable |
| Vision: multi-image comparison | Planned |
| STT: on-device whisper.cpp | Stable |
| STT: real-time streaming transcription | Planned |
| TTS: on-device text-to-speech (piper) | Planned |
| Vision: screen capture analysis | Planned |