6 Downloads Updated 11 hours ago
ollama run xuonglun123/ui-voyager:q8-vision
UI-Voyager (Q8_0) is a fine-tuned multimodal vision-language agent based on Qwen3-VL-4B, engineered specifically for Mobile GUI Navigation, Element Grounding, and Screen Automation (evaluated on AndroidWorld).
This distribution is packaged as a true multi-layer OCI artifact in Ollama:
- LLM Weights: Q8_0 quantization (UI-Voyager.Q8_0.gguf, 4.28 GB) ensuring maximum reasoning capacity.
- Vision Projector: Intact native clip projector with qwen3vl_merger layer (454 MB), allowing direct image understanding and pixel coordinate grounding without relying on external vision pipelines.
ollama run xuonglun123/ui-voyager:q8-vision
You can provide an image and an instruction directly:
ollama run xuonglun123/ui-voyager:q8-vision "Tap the Login button. Give its center coordinate. screenshot.png"
Evaluated across a comprehensive 40-case multi-resolution test battery:
| Benchmark Test | Metric | Result | Status |
|---|---|---|---|
| GUI Element Grounding | Bounding Box Hit Rate (40 probes) | 100.0% (40⁄40) | PASS |
| Coordinate Precision | Mean Distance to Element Center | 11.85 pixels | PASS |
| Target Absence Check | Rejection of non-existent UI targets | 100.0% | PASS |
| OCR Accuracy | English, Vietnamese, Numerics, Hex Codes | 10 / 10 (CER: 0.00) | PASS |
| Projector Integrity | OCI Projector Layer Verification | application/vnd.ollama.image.projector |
VERIFIED |
| Inference Stability | 75+ Consecutive Multi-modal Calls | 0 Crashes (1.56s / inference) | PASS |
UI-Voyager outputs official structured mobile_use actions in normalized 999x999 coordinate space:
Thought: The goal is to tap the "Login" button and enter the credentials.
Action: "Tap the Login button to initiate authentication."
<tool_call>
{"name": "mobile_use", "arguments": {"action": "click", "coordinate": [255, 190]}}
</tool_call>
import base64
import requests
def analyze_ui(image_path, instruction):
with open(image_path, "rb") as f:
img_b64 = base64.b64encode(f.read()).decode("utf-8")
response = requests.post(
"http://localhost:11434/api/chat",
json={
"model": "xuonglun123/ui-voyager:q8-vision",
"messages": [
{
"role": "user",
"content": instruction,
"images": [img_b64]
}
],
"options": {"temperature": 0.0},
"stream": False
}
)
return response.json()["message"]["content"]
# Example:
result = analyze_ui("screen.png", "Tap the Settings icon. Give its center coordinate.")
print(result)