Models that fit on a phone with ~8GiB RAM — what they are, what each one is good for, what to pay, and how to compare them. This page exists because I keep hitting this wall: every model is a number with a marketing deck, and none of the numbers agree. So this is the honest version, maintained by hand and updated periodically rather than streamed live.

Data checked 2026-11-08. Where a number is vendor-reported it’s marked †; where I couldn’t verify it says UNVERIFIED rather than being filled with a plausible-looking lie. Benchmarks don’t transfer across vendors, so treat the “Measured” column as one signal, never the signal.

the short version

  • A model is a file of weights + a bit of plumbing. No internet, no account, no subscription needed to run one.
  • Rule of thumb: RAM ≈ parameters × bytes-per-parameter. At int4 (4-bit) quantisation that’s ~0.55 GB per billion parameters, plus runtime overhead and plus KV-cache growth with context (cheap at short context; several GB extra at full ctx).
  • 8 GiB usable ⇒ a realistic int4 weight budget of 4–5 GB ⇒ comfortably ≤4B parameter dense models (or ~8B models with very tight KV at short context; not “load it at 256K ctx” territory).
  • Everything listed here fits that envelope with int4 quantisation — the largest are Gemma-4-E4B-class (~2.5 GB effective weights). Everything runs fully offline.

the types of model you’re choosing between

  • General LLM — text in → text out. The “assistant” or the brains of the app: summarising, organising, answering, calling tools.
  • VLM (vision / multimodal) — pixels or frames in → text out. OCR, document parsing, photo tagging, captioning, frame-sampled video understanding. A few add audio input or even speech output (see LFM3-Omni).
  • STT (speech-to-text) — audio in → tokens out. Transcription, dictation, live captions, voice commands.
  • Speaker / diarization — audio in → who spoke when. Not a vocabulary; these are segmentation + embedding + clustering models. Genuine low-latency “who is talking right now” open-weight is very new — see the table.
  • Reasoning models — not a separate species, an LLM post-trained to emit a long private chain-of-thought before the answer. Usually slower per answer, much better at maths/code/multi-step planning. Nearly always also toggleable (marked opt).

A few things the table does not tell you, because nobody can: how a model feels in your actual conversation flow (that’s a week with a good and a bad prompt), or how its chat template handles your system prompt (read the card).

the table

Search, filter by type, click a header to sort. † = vendor-reported; UNVERIFIED = could not be confirmed from source.

Type In → Out Think Measured License Best for Status
Qwen3-0.6BAlibaba 2025-04 LLM 0.6B ~0.3 GB 32K text → text ± MMLU 52.8 Apache-2.0 tiniest reasoner; offline chat superseded
Qwen3-1.7BAlibaba 2025-04 LLM 1.7B ~0.9 GB 32K text → text ± MMLU 62.6 Apache-2.0 small reasoning; on-device chat superseded
Qwen3-4BAlibaba 2025-04 LLM 4B ~2.2 GB 32K (128K YaRN) text → text ± MMLU 73.0 Apache-2.0 best ≤4B 2025 reasoner (pre-3.5) superseded
Llama-3.2-1B-InstructMeta 2024-09 LLM 1.23B ~0.7 GB 128K text → text — MMLU 49.3 Llama 3.2 Community weakest Llama; do not expect miracles current
Llama-3.2-3B-InstructMeta 2024-09 LLM 3.2B ~1.8 GB 128K text → text — MMLU 63.4 Llama 3.2 Community safe cross-HW default; 128K ctx current
Gemma-3-1B-itGoogle 2025-03 LLM 1B ~0.5 GB 32K text → text — HellaSwag 62.3 (10-shot) Gemma terms tiny English-centric tasks superseded
SmolLM3-3BHugging Face 2025-07 LLM 3B ~1.7 GB 64K (128K YaRN) text → text ± AIME'25 36.7 † · Global MMLU 64.1 Apache-2.0 reasoning + no-think chat in one model current
Phi-4-mini-instructMicrosoft 2025-02 LLM 3.8B ~2.1 GB 128K text → text — MMLU 67.3 MIT strong bench-per-GB; English-first current
Phi-4-mini-reasoningMicrosoft 2025-04 LLM 3.8B ~2.1 GB 128K text → text — AIME'24 57.5 MIT math-grade chain-of-thought on phone current
DeepSeek-R1-Distill-Qwen-1.5BDeepSeek 2025-01 LLM 1.5B ~0.8 GB 128K* text → text — AIME'24 28.9 · MATH-500 83.9 MIT long CoT at 0.8 GB; no toggle current
MiniCPM5-2BOpenBMB 2026-09 LLM 2B ~1.4 GB 128K text → text ± AIME'25 86.5 † Apache-2.0 2026 small reasoner; EN/ZH current
LFM3-1.7BLiquid AI 2026-10 LLM 1.73B ~1.0 GB 256K text → text ± LiveCodeBench 73.5 † · GPQA 63.4 † LFM Open License v1.0 (<$10M rev) edge optimised; hybrid fast path current
Qwen3-VL-2B-InstructAlibaba 2025-10 VLM 2.1B ~1.2 GB 256K text · image · video → text ± MMMU 53.4 · DocVQA 93.3 Apache-2.0 best 2025 sub-2B multimodal current
Qwen3-VL-4B-InstructAlibaba 2025-10 VLM 4.4B ~2.4 GB 256K text · image · video → text ± MMMU 67.4 · DocVQA 95.3 · Video-MME 69.3 Apache-2.0 video LLM for 8 GiB phones current
Qwen3.5-0.8BAlibaba 2026-02 VLM 0.8B ~0.5 GB 256K text · image · video → text ± MMLU-Pro 42.3 (T) / 29.7 (NT) Apache-2.0 smallest native multimodal current
Qwen3.5-2BAlibaba 2026-02 VLM 2.3B ~1.3 GB 256K text · image · video → text ± MMLU-Pro 66.5 (T) · MMMU 64.2 Apache-2.0 recommended small VLM, 2026 line current
Qwen3.5-4BAlibaba 2026-02 VLM 4.7B ~2.6 GB 256K (1M YaRN) text · image · video → text ± MMLU-Pro 79.1 (T) · MMMU 77.6 Apache-2.0 strongest ≤4B multimodal, thinking current
Gemma-3-4B-itGoogle 2025-03 VLM 4.3B ~2.4 GB 128K text · image → text — MMLU 59.6 (PT, 5-shot) Gemma terms hosted cheap ($0.05/$0.10/M) else skip superseded
Gemma-3n-E2B-itGoogle 2025-06 VLM 2B eff (5.1 w/ emb) ~1.1 GB eff (~3.0 full) 32K text · image · video · audio → text — MMLU (0-shot) 60.1 Gemma terms omni on-device: image+audio in current
Gemma-3n-E4B-itGoogle 2025-06 VLM 4B eff (7.9 w/ emb) ~2.2 GB eff (~4.3 full) 32K text · image · video · audio → text — MMLU (0-shot) 64.9 Gemma terms omni with better quality than E2B current
Gemma-4-E2B-itGoogle 2026-04 VLM 2.3B eff (5.1 w/ emb) ~1.3 GB eff (~2.8 full) 128K text · image · video · audio → text ± MMLU-Pro 60.0 · MMMU-Pro 44.2 Apache-2.0 omni open Apache on-device 2026 current
Gemma-4-E4B-itGoogle 2026-04 VLM 4.5B eff (8.0 w/ emb) ~2.5 GB eff (~4.4 full) 128K text · image · video · audio → text ± MMLU-Pro 69.4 · MMMU-Pro 52.6 Apache-2.0 omni for capable phones; E2B tier better fit current
LFM3-VL-2BLiquid AI 2026-10 VLM 1.9B ~1.1 GB 128K text · image · video → text ± MMMU 55.7 † · DocVQA 96.7 † · Video-MME 62.8 † LFM Open License v1.0 (<$10M rev) on-phone VLM edge (S26/OnePlus tested) current
LFM3-Omni-2BLiquid AI 2026-10 VLM 2.2B ~1.2 GB 32K text · image · video · audio → text · speech — MMMU 42.4 † · EN-ASR WER 6.4 † LFM Open License v1.0 (<$10M rev) full omni incl. speech output current
SmolVLM2-256M-Video-InstructHugging Face 2025-02 VLM 256M ~0.14 GB 8K text · image · video → text — Video-MME 33.7 Apache-2.0 video captioning on the weakest HW current
SmolVLM2-500M-Video-InstructHugging Face 2025-02 VLM 500M ~0.28 GB 8K text · image · video → text — Video-MME 42.2 Apache-2.0 cheap visual QA; 8 GB HW current
SmolVLM2-2.2B-InstructHugging Face 2025-02 VLM 2.2B ~1.2 GB 8K text · image · video → text — MMMU 42.0 · DocVQA 80.0 · Video-MME 52.1 Apache-2.0 all-round open video VLM (8K ctx) current
MiniCPM-V-4.7-1BOpenBMB 2026-10 VLM 1.6B ~0.9 GB 256K text · image · video → text — MMMU 56.9 · OCRBench 86.1 Apache-2.0 recommended OCR/vision for phones current
MiniCPM-OCR-1.0OpenBMB 2026-10 VLM 1.3B ~0.7 GB — text · image → text — Real5-OmniDocBench 93.68 † Apache-2.0 specialist document/OCR parsing current
Ministral-3-3B-2512Mistral 2025-12 VLM 3.4B LM + 0.4B ViT ~2.1 GB 256K (131K hosted) text · image → text ± MMLU (base) 70.7 · AIME-25 72.1 (Reasoning) Apache-2.0 edge dense VLM; strong EN/FR current
Moonshine-tiny · baseUseful Sensors 2024-10 STT 27M · 62M ~0.02–0.06 GB — audio → text — WER 12.7 † (tiny, Open-ASR) MIT live captions / push-to-talk current
Whisper-tinyOpenAI 2022-09 STT 38M ~0.02 GB — audio → text (99 langs) — WER 7.5 / 17.2 (clean/other) Apache-2.0 smallest multilingual ASR ever current
Whisper-baseOpenAI 2022-09 STT 73M ~0.04 GB — audio → text (99 langs) — WER 5.0 / 12.9 Apache-2.0 small but real multilingual ASR current
Whisper-smallOpenAI 2022-09 STT 242M ~0.12 GB — audio → text (99 langs) — WER 3.4 / 7.6 Apache-2.0 solid general-purpose ASR (99 langs) current
Whisper large-v3-turboOpenAI 2024-10 STT 809M ~0.4 GB — audio → text (99 langs) — WER 7.83 † (Open-ASR mean) MIT accuracy-favouring 8 GiB ASR current
Distil-Whisper large-v3Hugging Face 2024-03 STT 756M ~0.38 GB — audio → text (EN only) — WER 9.7 (ESB short-form) MIT English long-form transcription current
Qwen3-ASR-0.6BAlibaba 2026-01 STT 782–938M ~0.47 GB — audio → text (30 langs + 22 dialects) — WER 1.7 / 4.0 (Open-ASR 6/2026) Apache-2.0 2026 recommended multilingual ASR current
SenseVoice-SmallAlibaba (FunAudioLLM) 2024-07 STT ~234M ~0.12 GB — audio → text (5 langs) + events · emotion — WER 3.15 / 7.18 FunASR license (free w/ conditions) ZH/EN/YUE/JA/KO + emotion tags current
Parakeet-TDT-0.6B-v3NVIDIA 2025-08 STT 627M ~0.32 GB (q8_0 GGUF 0.71) — audio → text (25 EU langs) — WER 1.93 / 3.59 CC-BY-4.0 fastest EU/EN ASR on GGUF current
Canary-1B-v2NVIDIA 2025-08 STT 978M ~0.49 GB — audio → text (25 EU langs) — UNVERIFIED — see card CC-BY-4.0 EN+DE/FR/ES ASR+translate 4L current
Light-ASD (audio-visual)LHL 2023-06 speaker 1.0M ~1 MB — audio + video (faces) → speaker — mAP 94.1 (AVA-ASD) MIT research-only; no mobile build research
pyannote/segmentation-3.0pyannote 2023-09 speaker ~1.5M ~2 MB int8 — audio → speech segments — component — see community-1 pipeline MIT — gated (accept conditions) segmentation block for sherpa-onnx gated
Speaker-diarization 3.1 (legacy)pyannote 2023-11 speaker seg 1.5M + emb 6.6M ~33 MB — audio → who spoke when — DER 18.8 (IHM) / 22.7 (SDM) MIT — gated (accept conditions) supersedes nothing — use community-1 legacy
Speaker-diarization community-1pyannote 2025-04 speaker seg + emb ~33 MB — audio → who spoke when — DER 17.0 (IHM) / 19.9 (SDM) CC-BY-4.0 — gated offline diarization reference pipeline gated
WeSpeaker CAM++ (embeddings)WeNet / ModelScope 2023 speaker 7.2M ~28 MB (ONNX) — audio → speaker embedding — EER 0.66 (vox1-O) Apache-2.0 code building block; pair with segmentation current
Sortformer-4spk-v2NVIDIA 2025-06 speaker ~80M? (GGUF 147 MB) ~0.15 GB (GGUF 147 MB) — audio → who spoke when (streaming, ≤4 spk) — DIHARD-3 19.7 † · CALLHOME 10.5 CC-BY-4.0 low-latency open diarization ≤4 spk current
Nemotron-3-DiarizationNVIDIA 2026-09 speaker 99M ~0.1 GB (GGUF quants exist) — audio → who spoke when (streaming, ≤8 spk) — DIHARD-3 12.7 · AMI SDM 11.1 OpenMDW-1.1 (commercial OK) best open streaming diarizer (DIY) current
MOSS-Transcribe-DiarizeOpenMOSS 2026-05 speaker 0.9B ~0.9 GB int8 — audio → diarized transcript (50+ langs) — UNVERIFIED (demo-class) Apache-2.0 joint ASR+diarize; not phone-proven demo

Glossary. WER = word error rate (lower is better) · DER = diarization error rate (lower) · EER = equal error rate (lower) · MMMU / MMLU(-Pro) = multimodal / text knowledge (higher) · INT4 size = weights only, ~0.55 GB per billion params + ~5% (excludes KV cache & runtime) · `✓` reasoning always on · `±` toggleable thinking mode · `✗` none · `—` n/a · *128K = config positions; card recommends lower generation length · Status: superseded = later open weights exist · legacy = kept for reproducibility · gated = free but licence conditions to accept · research / demo = not packaged for production. † = vendor-reported. Canary-1B-v2 has a card but no clean public WER — marked UNVERIFIED rather than guessed.

what you pay

Everything here runs free once downloaded — that’s the whole point of open weights.

A few also have hosted access if you’d rather not self-serve. As of 2026-11-08 (OpenRouter prices, per million tokens prompt / completion):

Model Prompt Completion
meta-llama/llama-3.2-1b-instruct $0.027 $0.201
meta-llama/llama-3.2-3b-instruct $0.05 $0.33
google/gemma-3-4b-it $0.05 $0.10
mistralai/ministral-3b-2512 (131K ctx) $0.10 $0.10

That’s it — the rest of this list is legal-but-not-hosted or hosted elsewhere at prices set by each host. Calls/second/subsidisation change; check OpenRouter for the day’s number. Self-hosting cost ≈ $0 (electricity). There is no “API price” hiding behind an open download.

a realistic stack for STT + active speaker + image/video, multilingual

On 8GiB, on battery or on the charger, for an app that listens, watches, and knows who was talking:

  • STT: Qwen3-ASR-0.6B (30 languages + 22 dialects, leaderboard WER 1.7/4.0, Apache-2.0) — my default. Parakeet-TDT-0.6B-v3 if your languages are the 25 European set and raw speed matters. Whisper-small if you need the long tail of Whisper’s 99 languages and can afford ~2× worse accuracy.
  • Active speaker (reality): today = offline post-processing, not sub-second “who is talking now”. Two workable paths: sherpa-onnx on device (pyannote/segmentation-3.0 + WeSpeaker CAM++ embeddings, ~30–40 MB total, seconds of latency, MIT-but-gated for the pyannote weights) — works, well trodden. Or the 2026 newcomer loop: Nemotron-3-Diarization (100M params, streaming, DIHARD-3 12.7) — best open option, but DIY GGUF; nothing plug-and-play yet. Sortformer v2 if you need ≤4 speakers over ≤30 s billing latency. True audio-visual ASD (Light-ASD) remains research-only.
  • Image / video processing: MiniCPM-V-4.7-1B (OCR/document grade), Qwen3.5-2B (all-round, 256K ctx, reasoning toggle) or Gemma-4-E2B (Apache-2.0, omni w/ audio-in).
  • Orchestration brain (routing, structuring, answering): Qwen3.5-2B or SmolLM3-3B (both toggleable thinking).
  • One-model-many-jobs: LFM3-Omni-2B if you genuinely need audio-in and speech-out in one weights file.

If it were my build: Qwen3-ASR + Nemotron-3-Diarization + Qwen3.5-2B (orchestrator + vision). Three models, all < 1 GB each at int4/int8, all Apache/OpenMDW, all offline, none with a licence questionnaire.

running these on a phone — working notes

  • Stacks that matter: llama.cpp/whisper.cpp (GGUF, CPU/GPU/Vulkan) · MLC LLM · ExecuTorch · sherpa-onnx (speech/Android+iOS first class) · WhisperKit (Apple ANE) · ONNX Runtime Mobile · MediaPipe LLM Inference · LiteRT · Core ML.
  • Formats: GGUF at Q4_K_M / int4. Avoid grouping-size > 64; keep Q4/int8 KV for long ctx (quantised KV matters more than quantised weights).
  • iOS: ANE chops small models into a 4 GB DRAM envelope per app; WhisperKit + Core ML finds it. Android: NNAPI/GPU delegate where available, else CPU; watch thermal throttle on sustained STT.
  • Context is not free: at 256K ctx, expect GBs of KV — the cards’ “128K/256K context” is a hard ceiling, not a dial you should set. Real-world on phones: 4–32K.
  • Multilingual ≠ certified: Whisper’s 99 languages is “trained on”, not “quality-checked”. For production, spot-check top-5 languages you actually touch.

exclusions and gotchas (the ones worth printing)

  • Qwen2.5-VL-3B — Qwen Research License, non-commercial (the 7B is Apache-2.0). Excluded.
  • canary-1b — CC-BY-NC-4.0. Use canary-1b-flash / -v2 instead (CC-BY-4.0).
  • Sortformer v1 (diar_sortformer_4spk-v1) — CC-BY-NC-4.0. Use v2 (CC-BY-4.0).
  • sherpa-onnx reverb-diarization-v1 (Revai/..) — non-commercial. Don’t ship in a commercial app.
  • pyannote weights — technically MIT/CC-BY but gated: account + conditions, contact info flows to pyannote. Legally fine for personal use, read conditions for commercial redistribution.
  • Gemma 3 / 3n — Gemma Terms of Use (not Apache). Gemma 4 moved to Apache.
  • LFM3 — LFM Open License v1.0: free commercial use only under $10M annual revenue; else talk to Liquid.
  • Llama 3.2 — Llama Community License, >700M MAU needs Meta’s blessing; multimodal Llama variants are EU-restricted (text models unaffected).
  • Benchmarks: every † is vendor-reported. Vendor rigs optimistic/in-house evals. Cross-vendor comparisons on the same public benchmark (e.g. Qwen3.5-vs-Gemma4 MMMU) at least use one axis per benchmark. Don’t read “97.0 MATH-500” as “superhuman at maths”.
  • Cards lie in both directions: sometimes the model samples a better number; sometimes they just don’t print any. UNVERIFIED is the honest comment.

sources

Model cards, official blogs, tech reports — no third-party comparison sites except where marked. Retrieval 2026-11-08.

How to update: this page renders the table from _data/models.yml in the site repo — update a row there, push, done. If a model goes EOL or gets beaten by something ≤4B that did happen recently, flag it with status: superseded rather than deleting the row; reproducibility beats tidiness.