Instructions to use qvac/VisionPsy-Nano-460M with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use qvac/VisionPsy-Nano-460M with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="qvac/VisionPsy-Nano-460M", trust_remote_code=True) messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("qvac/VisionPsy-Nano-460M", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use qvac/VisionPsy-Nano-460M with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "qvac/VisionPsy-Nano-460M" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "qvac/VisionPsy-Nano-460M", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/qvac/VisionPsy-Nano-460M
- SGLang
How to use qvac/VisionPsy-Nano-460M with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "qvac/VisionPsy-Nano-460M" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "qvac/VisionPsy-Nano-460M", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "qvac/VisionPsy-Nano-460M" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "qvac/VisionPsy-Nano-460M", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use qvac/VisionPsy-Nano-460M with Docker Model Runner:
docker model run hf.co/qvac/VisionPsy-Nano-460M
VisionPsy-Nano-460M
VisionPsy-Nano-460M is a compact (~460M parameter) vision-language model built for on-device and edge deployment. It is built on top of nanoVLM. Despite its size, it compares favorably on 16 of 17 public benchmarks and matches or beats models up to ~2x larger on knowledge reasoning, visual instruction following, and hallucination robustness.
- Best-in-class among ~0.5B VLMs: compares favorably to LFM2.5-VL-450M, SmolVLM2-500M, and nanoVLM-460M-8k on 16 of 17 benchmarks.
- Punches above its weight: beats the larger FastVLM-0.5B (~0.75B), Qwen3.5-0.8B, and InternVL3.5-1B outright on ScienceQA, MM-IFEval, and POPE, and on many fine-grained reasoning/perception capabilities.
- Efficient architecture: built on nanoVLM (SigLIP2 vision encoder + SmolLM2 language backbone), ~460M params total, 8K token context, native 512x512 image processing.
Where VisionPsy-Nano-460M leads
To showcase where the model is strongest, we group the 17 public benchmarks into four core capability areas — Document Understanding & OCR, Visual Perception, Reasoning & Knowledge, and Instruction Following & Reliability. VisionPsy-Nano-460M leads its ~0.5B cohort in every one of these areas. Scores are normalized to 0-100 for cross-benchmark comparison (MME /2800, OCRBench /1000; percentages otherwise).
| Capability area | Benchmarks | VisionPsy-Nano-460M | LFM2.5-VL-450M | SmolVLM2-500M | nanoVLM-460M-8k |
|---|---|---|---|---|---|
| Document Understanding & OCR | OCRBench, DocVQA, ChartQA, InfoVQA, TextVQA | 73.9 | 71.6 | 62.4 | 69.5 |
| Visual Perception | MME, SEEDBench, MMBench, RealWorldQA | 61.5 | 58.8 | 53.9 | 55.2 |
| Reasoning & Knowledge | ScienceQA, AI2D, MMStar, MMMU, MathVista, MMVet | 52.2 | 48.6 | 45.1 | 43.7 |
| Instruction Following & Reliability | MM-IFEval, POPE | 65.1 | 64.3 | 46.9 | 51.4 |
Per-benchmark detail within each capability area:
Model details
| Property | Value |
|---|---|
| Developed by | Tether AI Research* |
| Parameters | ~460M total |
| Built on | nanoVLM (base: lusxvr/nanoVLM-460M-8k) |
| Vision encoder | SigLIP2 base, patch16, 512x512 |
| Language backbone | SmolLM2-360M (nanoVLM's LM) |
| Connector | pixel-shuffle MLP (64 image tokens / tile) |
| Context length | 8,192 tokens |
| Image handling | native 512x512, tiling up to 2048px |
| Precision | float32 |
* References to Tether AI Research are references to Tether Data, S.A. de C.V.
Benchmarks
All numbers below are computed in-house with a single VLMEvalKit harness so every model is scored identically, using each benchmark's official metric: accuracy for most, POPE = F1, MMVet = partial credit, MM-IFEval = instruction-following accuracy, MME = Perception + Reasoning score, OCRBench = Final Score (out of 1000). Each model is evaluated on its own full sample set. All LLM-as-judge scoring uses Qwen3.6-27B as the judge.
The changes used for these numbers are currently under review in VLMEvalKit:
- VisionPsy model support: PR #1613
- Opt-in LLM-judge rescoring for open-ended VQA benchmarks: PR #1602
- MM-IFEval bug fix: PR #1601
- LLM-judge bug fix: PR #1611
Until they are merged, you can reproduce the benchmarks by applying these PRs on top of VLMEvalKit.
Similar-size models (~0.45-0.5B)
Bold = best score in the row across the similar-size cohort. Sorted by VisionPsy-Nano's lead. Scores are % unless noted (MME = P+R points, OCRBench = /1000). Starred (*) rows show LLM-judge / strict.
| Benchmark | Metric | VisionPsy-Nano-460M | LFM2.5-VL-450M | SmolVLM2-500M | nanoVLM-460M-8k |
|---|---|---|---|---|---|
| MME | P+R | 1541 | 1453 | 1455 | 1442 |
| OCRBench * | /1000 | 757 / 726 | 710 / 679 | 619 / 611 | 745 / 710 |
| ScienceQA | acc | 86.5 | 77.7 | 76.3 | 76.8 |
| MathVista | acc | 48.9 | 42.2 | 38.5 | 33.3 |
| MMBench | acc | 61.9 | 56.8 | 51.4 | 53.1 |
| MMStar | acc | 47.6 | 42.7 | 38.3 | 37.0 |
| AI2D | acc | 66.5 | 62.2 | 57.3 | 55.3 |
| DocVQA * | acc | 85.7 / 80.6 | 82.7 / 78.3 | 74.7 / 68.6 | 82.3 / 77.3 |
| ChartQA * | acc | 78.7 / 76.8 | 76.6 / 75.0 | 64.9 / 60.9 | 70.4 / 65.9 |
| SEEDBench | acc | 69.2 | 67.5 | 62.1 | 64.3 |
| POPE | F1 | 87.9 | 86.5 | 82.7 | 82.7 |
| RealWorldQA | acc | 60.0 | 59.0 | 50.1 | 51.8 |
| InfoVQA * | acc | 49.8 / 43.3 | 48.9 / 43.3 | 39.0 / 27.6 | 46.0 / 35.0 |
| TextVQA * | acc | 79.3 / 71.0 | 78.8 / 69.8 | 71.3 / 60.6 | 74.5 / 64.8 |
| MM-IFEval | IF-acc | 42.3 | 42.0 | 11.1 | 20.2 |
| MMMU | acc | 31.4 | 30.7 | 31.6 | 31.3 |
| MMVet | partial-credit | 32.3 | 36.0 | 28.6 | 28.4 |
VisionPsy-Nano-460M compares favorably on 16 of 17 benchmarks, with MMVet the only clear exception.
* ChartQA, TextVQA, DocVQA, InfoVQA, and OCRBench are shown as LLM-judge / strict. On these open-ended benchmarks, strict string/heuristic matching lowers every model's score, but an LLM-as-judge (Qwen3.6-27B) is a more reliable evaluation of free-form answers (e.g., "12%" vs "12 percent", paraphrases, units, formatting). Full analysis in the blog post.
Beating larger models (0.75-1B)
At roughly half to two-thirds the parameters, VisionPsy-Nano-460M still beats FastVLM-0.5B (~0.75B), Qwen3.5-0.8B, and InternVL3.5-1B outright on 3 full benchmarks, and outperforms all three on many specific reasoning/perception capabilities even where the larger models win on aggregate. Bold = VisionPsy-Nano leads all three larger models.
| Scope | Capability | Benchmark (subset) | N | VisionPsy-Nano-460M | FastVLM-0.5B (759M) | Qwen3.5-0.8B (873M) | InternVL3.5-1B (1061M) |
|---|---|---|---|---|---|---|---|
| Full benchmark | Science & diagram reasoning | ScienceQA | 2017 | 86.5 | 84.7 | 71.6 | 79.7 |
| Full benchmark | Visual instruction following | MM-IFEval | 400 | 42.3 | 21.1 | 36.9 | 33.6 |
| Full benchmark | Hallucination robustness | POPE (F1) | 5127 | 87.9 | 86.5 | 87.3 | 86.0 |
| Subcategory | Spatial position reasoning | MME (position) | 60 | 85.0 | 75.0 | 63.3 | 73.3 |
| Subcategory | Cross-instance relation reasoning | MMStar (L2) | 62 | 66.1 | 56.5 | 59.7 | 53.2 |
| Subcategory | Nature relation reasoning | MMBench (L1) | 62 | 51.6 | 46.8 | 41.9 | 45.2 |
| Subcategory | Irregular text recognition | OCRBench | 50 | 92.0 | 80.0 | 88.0 | 82.0 |
| Subcategory | Object localization | MMStar (L2) | 40 | 57.5 | 45.0 | 50.0 | 55.0 |
| Subcategory | Attribute recognition | MMBench (L1) | 60 | 86.7 | 85.0 | 83.3 | 83.3 |
| Subcategory | Instance interaction | SEEDBench | 97 | 70.1 | 67.0 | 69.1 | 69.1 |
The 3 "full benchmark" rows are outright wins over all three larger models. The "subcategory" rows are fine-grained capabilities (N >= 40) from suites where the larger models may lead on aggregate — the point being that a 460M model can still beat models up to ~2x its size on these specific skills. All scores are accuracy except POPE (F1).
Usage
VisionPsy-Nano-460M loads directly with 🤗 Transformers via trust_remote_code — no extra repo to
clone. Requires Python ≥ 3.10, transformers>=4.46 (tested with 5.13.1), and PyTorch ≥ 2.4 (CUDA
recommended).
import torch
from PIL import Image
from transformers import AutoModelForImageTextToText, AutoProcessor
repo = "qvac/VisionPsy-Nano-460M"
device = "cuda" if torch.cuda.is_available() else "cpu"
model = AutoModelForImageTextToText.from_pretrained(
repo,
trust_remote_code=True,
dtype="auto" if device == "cuda" else torch.float32,
).to(device).eval()
processor = AutoProcessor.from_pretrained(repo, trust_remote_code=True)
# apply_deploy_profile() enables torch.compile + CUDA graphs (fastest on GPU);
# use apply_eager_profile() for plain eager execution or CPU.
if device == "cuda":
model.apply_deploy_profile(model.device)
else:
model.apply_eager_profile()
# The processor applies the chat template and inserts image tokens for you —
# just pass the raw image(s) and a plain-text prompt.
image = Image.open("your_image.jpg").convert("RGB")
inputs = processor(images=image, text="What is in this image?", return_tensors="pt")
inputs = {
k: (v.to(device) if torch.is_tensor(v) else v)
for k, v in inputs.items()
if v is not None
}
inputs.pop("pixel_values", None)
with torch.inference_mode():
out = model.generate(**inputs, max_new_tokens=128, greedy=True)
print(processor.batch_decode(out, skip_special_tokens=True)[0].strip())
Intended use
VisionPsy-Nano-460M targets latency- and memory-constrained, on-device multimodal applications: visual question answering, document/chart/diagram understanding, scene-text reading, and lightweight visual instruction following. Because of its small size, we recommend fine-tuning on your specific domain to maximize quality.
Limitations
- Single-image by design: the model is trained and optimized for one image per query, so we recommend single-image inputs at inference; multi-image prompts are outside its intended use.
- As a compact model, it may occasionally hallucinate or miscount and is best suited to focused tasks rather than very dense documents or long multi-step math, where larger models have an edge.
- Primarily English; other languages are not officially supported yet.
- Not intended for safety-critical or high-stakes automated decisions.
- Benchmark scores are produced with a fixed in-house harness and an LLM judge (Qwen3.6-27B); absolute numbers may differ from other reported setups.
Acknowledgements
Built on the excellent open-source work of nanoVLM, SmolLM2, and SigLIP2.
Citation
@misc{visionpsynano2026,
title = {VisionPsy-Nano-460M: A Compact Vision-Language Model for On-Device Inference},
author = {Tether AI Research},
year = {2026},
note = {Hugging Face model card}
}
Copyright
We will take appropriate actions in response to notices of copyright infringement. If you believe your work has been used or copied in a manner that infringes upon your intellectual property rights, please email data-apps@tether.io identifying and describing both the copyrighted work and alleged infringing content.
Licensing
This model, which was finetuned as described in the blog post, is licensed by Tether Data, S.A. de C.V. under the Apache 2.0 license. As described in the blog post, this model is a version of the NanoVLM-460M-8k pre-trained model (https://huggingface.co/lusxvr/nanoVLM-460M-8k), which is made available under the MIT license.
The FineVision dataset (https://huggingface.co/datasets/HuggingFaceM4/FineVision) is made available under the CC-BY-4.0 (Creative Commons - Attribution 4.0) license. FineVision is an aggregation of a number of public sources unified into a single corpus. Individual subsets within the collection may inherit specific underlying terms from their original creators. As described in the blog post, a subset of the FineVision dataset was used as a part of finetuning the model.
The NVIDIA Nemotron-Image-Training-v3 dataset (https://huggingface.co/datasets/nvidia/Nemotron-Image-Training-v3) is made available under the CC-BY-4.0 (Creative Commons - Attribution 4.0). The mPLUG TinyChartData dataset (https://huggingface.co/datasets/mPLUG/TinyChartData) is made available under the Apache 2.0 license. The TabMWP dataset (https://promptpg.github.io/) is made available under the CC BY-NC-SA 4.0 (Creative-Commons-Attribution-NonCommercial-ShareAlike 4.0). The PopVQA dataset (https://huggingface.co/datasets/idoco/PopVQA) is made available under the MIT license. The InfoSeek dataset (https://github.com/open-vision-language/infoseek) is made available under the Apache 2.0 license. The MMKU-Bench dataset (https://huggingface.co/datasets/baochenfu/MMKU-Bench) is made available under the Apache 2.0 license. The VisionFoundry-10K dataset (https://huggingface.co/datasets/zlab-princeton/VisionFoundry-10K) is made available under the Apache 2.0 license. The PKU-SafeRLHF-V dataset (https://huggingface.co/datasets/PKU-Alignment/PKU-SafeRLHF-V) is made available under the CC-BY-NC 4.0 (Attribution-NonCommercial 4.0 International). As described in the blog post, the NVIDIA Nemotron-Image-Training-v3, mPLUG TinyChartData, TabMWP, PopVQA, InfoSeek, MMKU-Bench, VisionFoundry-10K and PKU-SafeRLHF-V datasets were used as a part of finetuning the model.
- Downloads last month
- 297

