Show-Harness VLMs

LoRA adapters that turn a vision-language model into a robot controller: two camera views in, one semantic action token out. Every unit is a 2 cm translation on every rig, so real and simulated data mix without rescaling.

Paper · Code · Dataset · Project page

Adapters

Two corpora. The five real-robot adapters differ only in backbone — same data, same hyper-parameters — so they read as a clean model-scale comparison. The simulation adapter is a single policy covering both simulators, not one per simulator.

folder base model corpus epochs size license
qwen3_5_0_8b Qwen3.5-0.8B real 40 87 MB apache-2.0
qwen3_5_2b Qwen3.5-2B real 40 135 MB apache-2.0
qwen3_5_4b Qwen3.5-4B real 40 260 MB apache-2.0
qwen3_5_9b Qwen3.5-9B real 40 346 MB apache-2.0
gemma4_e4b gemma-4-E4B-it real 40 311 MB gemma
qwen3_5_2b_sim Qwen3.5-2B sim 30 135 MB apache-2.0

The output vocabulary is only nine tokens, so every backbone fits the training set — compare these on closed-loop success rate, not on training curves.

Recipe, identical for every adapter: LoRA r=64, alpha=128, dropout 0.05, target=all, vision tower frozen; LR 1e-4 cosine with warmup ratio 0.1; bf16, DeepSpeed ZeRO-2; effective batch 32. The real corpus is 7,933 samples (5,070 Franka + 2,863 AgileX) × 40 epochs = 9,920 steps; the sim corpus is 13,753 samples (7,813 RoboLab + 5,940 ManiSkill) × 30 epochs = 12,900 steps. Trained with LLaMA-Factory.

Two contracts that fail silently

Chat template. Each folder's chat_template.jinja reproduces what training rendered — not the base model's own. Qwen3.5's official template emits an empty think block after the assistant turn even with enable_thinking=false, while the training template emits nothing. Serve the wrong one and the model still answers, just off distribution.

Direction convention. All directions follow the Franka rig's overhead exocentric view. The AgileX rig observes first-person, so deploying there requires swapping MV_FWD and MV_BACK. Franka and simulation need no conversion.

Usage

Serving and closed-loop deployment go through the Show-Harness repository, which owns the vLLM launch path, prompt assembly, and token-to-motion mapping.

# real-robot policy
MODEL=Qwen/Qwen3.5-2B FAMILY=qwen3_5 \
  LORA=qwen3_5_2b_showharness_ft=<path>/qwen3_5_2b bash scripts/serve_vlm.sh

# simulation policy — RoboLab and ManiSkill both select this one
MODEL=Qwen/Qwen3.5-2B FAMILY=qwen3_5 \
  LORA=qwen3_5_2b_showharness_sim=<path>/qwen3_5_2b_sim bash scripts/serve_vlm.sh

Adapter names follow <folder>_showharness_<split> and are what clients request with --model. All adapters here were trained against the v3 unified prompt, so run them with --version v3.

Data

The demonstrations these were trained on are at Show-Harness-Data — 164 real episodes (Franka + AgileX, 17 tasks) and 230 simulated (RoboLab + ManiSkill), every observation paired with exactly one action token.

License

The Qwen3.5 adapters are Apache-2.0. gemma4_e4b derives from google/gemma-4-E4B-it and is governed by the Gemma Terms of Use — the repo-level license tag cannot express both.

Citation

@misc{chen2026showharnessjustvlmagent,
      title={Show-Harness: Just a VLM Agent Can Play Robots}, 
      author={Yanzhe Chen and Zechen Bai and Zhijun Cao and Wenzheng Zeng and Kevin Qinghong Lin and Yiqi Lin and Guoqiang Liang and Kevin Yuchen Ma and Qiming Huang and Mike Zheng Shou},
      year={2026},
      eprint={2609.10522},
      archivePrefix={arXiv},
      primaryClass={cs.RO},
      url={https://arxiv.org/abs/2609.10522}, 
}
Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Collection including showlab/Show-Harness-VLMs

Paper for showlab/Show-Harness-VLMs