alt.freeweights.text / GUI-Actor-Verifier-2B
From: microsoft <huggingface.co/microsoft>Newsgroups: alt.freeweights.textSubject:

GUI-Actor-Verifier-2B

Date: 2026-11-15Commit: 30dd0dbSigned: 2DC28CC7B26A283B ✓

Image text to text model with 2.2B parameters. Safetensors weights, 4.43 GB in all. Published by microsoft under MIT.

2.2B params4.43GBGUI-Actor-Verifier-2Bsafetensorspermissive
FactsParams2.2BSize4.43 GBFormatssafetensorsTaskimage text to textLicenseMITFrom sourcepermissive
$ fw get microsoft/GUI-Actor-Verifier-2B
# manifest sha256 bcb1298070c3… · 4.43 GB · 15 files
$ fw verify ./GUI-Actor-Verifier-2B microsoft/GUI-Actor-Verifier-2B
From sourceHosted (signed)microsoft/GUI-Actor-Verifier-2BLast check: 2026-11-15 03:45 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Works with

Overview

Size
4.43 GB
Weights
4.42 GB (safetensors)
Parameters
2.2B
Formats
safetensors
Task
image text to text
License
MIT (permissive)
Files
15, each with a sha256
Publisher
microsoft
Added
2026-11-15
Section
alt.freeweights.text
Lineage

Original release from the publisher.

Base model: ByteDance-Seed/UI-TARS-2B-SFT

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 03:45 UTCpassed

Model card

From the publisher at commit 30dd0db. Shown as plain text with links; images open at the publisher.

GUI-Actor-Verifier-2B#

This model was introduced in the paper GUI-Actor: Coordinate-Free Visual Grounding for GUI Agents. It is developed based on UI-TARS-2B-SFT and is designed to predict the correctness of an action position given a language instruction. This model is well-suited for GUI-Actor, as its attention map effectively provides diverse candidates for verification with only a single inference.

For more details on model design and evaluation, please check: 🏠 Project Page | πŸ’» Github Repo | πŸ“‘ Paper.

Model ListHugging Face Link
GUI-Actor-7B-Qwen2-VLπŸ€— Hugging Face
GUI-Actor-2B-Qwen2-VLπŸ€— Hugging Face
GUI-Actor-7B-Qwen2.5-VLπŸ€— Hugging Face
GUI-Actor-3B-Qwen2.5-VLπŸ€— Hugging Face
GUI-Actor-Verifier-2BπŸ€— Hugging Face

πŸ“Š Performance Comparison on GUI Grounding Benchmarks#

Table 1. Main results on ScreenSpot-Pro, ScreenSpot, and ScreenSpot-v2 with Qwen2-VL as the backbone. † indicates scores obtained from our own evaluation of the official models on Huggingface.

MethodBackbone VLMScreenSpot-ProScreenSpotScreenSpot-v2
72B models:
AGUVIS-72BQwen2-VL-89.2-
UGround-V1-72BQwen2-VL34.589.4-
UI-TARS-72BQwen2-VL38.188.490.3
7B models:
OS-Atlas-7BQwen2-VL18.982.584.1
AGUVIS-7BQwen2-VL22.984.486.0†
UGround-V1-7BQwen2-VL31.186.387.6†
UI-TARS-7BQwen2-VL35.789.591.6
GUI-Actor-7BQwen2-VL40.788.389.5
GUI-Actor-7B + VerifierQwen2-VL44.289.790.9
2B models:
UGround-V1-2BQwen2-VL26.677.1-
UI-TARS-2BQwen2-VL27.782.384.7
GUI-Actor-2BQwen2-VL36.786.588.6
GUI-Actor-2B + VerifierQwen2-VL41.886.989.3

Table 2. Main results on the ScreenSpot-Pro and ScreenSpot-v2 with Qwen2.5-VL as the backbone.

MethodBackbone VLMScreenSpot-ProScreenSpot-v2
7B models:
Qwen2.5-VL-7BQwen2.5-VL27.688.8
Jedi-7BQwen2.5-VL39.591.7
GUI-Actor-7BQwen2.5-VL44.692.1
GUI-Actor-7B + VerifierQwen2.5-VL47.792.5
3B models:
Qwen2.5-VL-3BQwen2.5-VL25.980.9
Jedi-3BQwen2.5-VL36.188.6
GUI-Actor-3BQwen2.5-VL42.291.0
GUI-Actor-3B + VerifierQwen2.5-VL45.992.4

πŸš€ Usage#

The verifier takes a language instruction and an image with a red circle marking the target position as input. One example is shown below. It outputs either β€˜True’ or β€˜False’, and you can also use the probability of each label to score the sample.

For more detailed usage, please refer to our github repo.

Image: image

import torch
from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from transformers.generation import GenerationConfig
import json
import re
import os
import numpy as np
from PIL import Image, ImageDraw
from qwen_vl_utils import process_vision_info



# load model
model_name_or_path = "microsoft/GUI-Actor-Verifier-2B"
model = Qwen2VLForConditionalGeneration.from_pretrained(
            model_name_or_path, 
            device_map="cuda:0", 
            trust_remote_code=True, 
            torch_dtype=torch.bfloat16,
            attn_implementation="flash_attention_2"
        ).eval()
output_len = 1

tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True)
processor = AutoProcessor.from_pretrained(model_name_or_path)

def draw_annotations(img, point_in_pixel, bbox, output_path='test.png', color='red', size=1):
    draw = ImageDraw.Draw(img)
    
    # Draw the ground truth bounding box in green
    if bbox:
        # Assuming bbox format is [x1, y1, x2, y2]
        draw.rectangle(bbox, outline="yellow", width=4)
    
    # Draw a small circle around the predicted point in red
    if point_in_pixel:
        # Create a small rectangle around the point (5 pixels in each direction)
        radius = np.ceil(8 * size).astype(int)
        circle_bbox = [
            point_in_pixel[0] - radius,  # x1
            point_in_pixel[1] - radius,  # y1
            point_in_pixel[0] + radius,  # x2
            point_in_pixel[1] + radius   # y2
        ]
        draw.ellipse(circle_bbox, outline=color, width=np.ceil(4 * size).astype(int))
    
    return img

def ground_only_positive(model, tokenizer, processor, instruction, image, point):
  if isinstance(image, str):
      image_path = image
      image = Image.open(image_path)
  else:
      image_path = image_to_temp_filename(image)
  assert os.path.exists(image_path) and os.path.isfile(image_path), "Invalid input image path."

  width, height = image.size
  image = draw_annotations(image, point, None, output_path=None, size=height/1000 * 1.2)

  prompt_origin = "Please observe the screenshot and exame whether the hollow red circle accurately placed on the intended position in the image: '{}'. Answer True or False."
  full_prompt = prompt_origin.format(instruction)

  messages = [
      {
          "role": "user",
          "content": [
              {
                  "type": "image",
                  "image": image,
              },
              {"type": "text", "text": full_prompt},
          ],
      }
  ]
  # Preparation for inference
  text_input = processor.apply_chat_template(
      messages, tokenize=False, add_generation_prompt=True
  )
  image_inputs, video_inputs = process_vision_info(messages)
  inputs = processor(
      text=[text_input],
      images=image_inputs,
      videos=video_inputs,
      padding=True,
      return_tensors="pt",
  )
  inputs = inputs.to("cuda:0")

  generated_ids = model.generate(
      **inputs,  
      max_new_tokens=output_len,
      do_sample=False,
      temperature=0.0
  )

  generated_ids_trimmed = [
      out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
  ]
  response = processor.batch_decode(
      generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
  )[0]

  print(response)
  matches = re.findall(r'\b(?:True|False)\b', response)
  if not len(matches):
      answer = 'Error Format'
  else:
      answer = matches[-1]
  return answer

# given the image path and instruction and coorindate
instruction = 'close this window'
image = Image.open('test.png')
width, height = image.size
point = [int(0.9709 * width), int(0.1548, * height)] # The point should be in pixels
answer = ground_only_positive(model, tokenizer, processor, instruction, image, point) # output True or False

πŸ“ Citation#

@article{wu2025gui,
  title={GUI-Actor: Coordinate-Free Visual Grounding for GUI Agents},
  author={Wu, Qianhui and Cheng, Kanzhi and Yang, Rui and Zhang, Chaoyun and Yang, Jianwei and Jiang, Huiqiang and Mu, Jian and Peng, Baolin and Qiao, Bo and Tan, Reuben and others},
  journal={arXiv preprint arXiv:2506.03143},
  year={2025}
}

Files

15 files Β· 4.43 GBWeights 4.42 GB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 15 files with their sha256
FileSizesha256
.gitattributes1.57 KB34448b82c17d60fec9b65b1f093c115ddbaadc04beb1b0140b6bfed2e012a930
README.md8.86 KB9c164b96ebaff3bbc2bef6d3795972c948bc5150ee163798802ce48f6205424c
added_tokens.json448 B3f9fb2ea8547a9a59e6e23874b2e17bad7fe37f76a010998e6e1643484c30d1b
chat_template.json1.05 KB94174d7176c52a7192f96fc34eb2cf23c7c2059d63cdbfadca1586ba89731fb7
config.json1.35 KB7d4d37a23a6fd786ce3760ea5cae38044aafa0f51e32c02577a3e9d69cf6caf5
generation_config.json131 B59e3be417fcd7f1d275a3ce574b4d18ad3cd220916b24d15b9dfd0042e44df4b
merges.txt1.67 MB8831e4f1a044471340f7c0a83d7bd71306a5b867e95fd870f74d0c5308a904d5
model.safetensors4.42 GBbe70c29b1293b35d097cbb7d0d8bd21473b7392b3f99649e77d0792ff28e0587
preprocessor_config.json570 Bb438be9ea28890c0e8c7d87396145556f518e172ff7252f4f8e3a483346a7ad9
special_tokens_map.json2.44 KB1151b7ce13dc8205fc3b3edf2faa1b20265e2415b983b23451023d25befc47cc
tokenizer.json11.4 MBb5e3b77495dbe08a59f0f76a2b9c8354d594e2c0cab76e88d9513f9facc9bb91
tokenizer_config.json4.74 KB1ad4abbfdd64cbf35ff5a3e3787d30f8bb28272ff53806368d55b41001a96cfd
trainer_state.json102 KB84e841db6f63b12cf8ea2499132e934f84f0f3ff814ddde7d7be7524622290a0
training_args.bin5.82 KB80c85a12c64e0ffc241d7d891ca83b4f2e33884a6c683accc2a9aa8bb8d87462
vocab.json2.78 MBca10d7e9fb3ed18575dd1e277a2579c16d108e32f27439684afa0e10b1440910
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
30dd0db468 pinned now2026-11-15 03:45 UTC15 files Β· 4.43 GB

Use it

$ fw get microsoft/GUI-Actor-Verifier-2B
# manifest sha256 bcb1298070c3… · 4.43 GB · 15 files
$ fw verify ./GUI-Actor-Verifier-2B microsoft/GUI-Actor-Verifier-2B
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/microsoft/GUI-Actor-Verifier-2B.json --dir ./GUI-Actor-Verifier-2B $ python3 fw.py verify ./GUI-Actor-Verifier-2B ./microsoft__GUI-Actor-Verifier-2B.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download microsoft/GUI-Actor-Verifier-2B --revision 30dd0db468762d45df20b5a01c4084c5a3ed3ca3 --local-dir ./GUI-Actor-Verifier-2B
transformersLoad the weights in Python.
import os os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com" from transformers import AutoModelForImageTextToText, AutoProcessor processor = AutoProcessor.from_pretrained("microsoft/GUI-Actor-Verifier-2B", revision="30dd0db468762d45df20b5a01c4084c5a3ed3ca3") model = AutoModelForImageTextToText.from_pretrained("microsoft/GUI-Actor-Verifier-2B", revision="30dd0db468762d45df20b5a01c4084c5a3ed3ca3", device_map="auto")
vLLMServe an OpenAI-compatible API.
$ HF_ENDPOINT=https://freeweights.allternit.com vllm serve microsoft/GUI-Actor-Verifier-2B --revision 30dd0db468762d45df20b5a01c4084c5a3ed3ca3

License

Name
MIT License
Id
MIT
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
9c164b96ebaff3bbc2bef6d3795972c948bc5150ee163798802ce48f6205424c
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: microsoft <huggingface.co/microsoft>Newsgroups: alt.freeweights.textSubject: GUI-Actor-Verifier-2BDate: 2026-11-15Commit: 30dd0dbSigned: 2DC28CC7B26A283B ✓
Upstream
microsoft/GUI-Actor-Verifier-2B
Pinned commit
30dd0db468762d45df20b5a01c4084c5a3ed3ca3
Manifest
GUI-Actor-Verifier-2B.json Β· .minisig
Manifest sha256
bcb1298070c3fa1e43ad8e23c9a373277c2596f041d549b7aa3331e32ba5d88e
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 03:45 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/microsoft/GUI-Actor-Verifier-2B.json $ curl -O https://freeweights.allternit.com/manifests/microsoft/GUI-Actor-Verifier-2B.json.minisig $ minisign -Vm GUI-Actor-Verifier-2B.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

Parent

ByteDance-Seed/UI-TARS-2B-SFT (not in this catalog) Β· this model is a finetune of it

No model in the catalog names this one as its parent.

Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download microsoft/GUI-Actor-Verifier-2B
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. GUI-Actor-Verifier-2B.json. Provenance. Takedown history: none.
From: laion <huggingface.co/laion>Subject: a2-rl-e2egit_large-50-32B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_e2egit-large-15-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_e2egit-v2-10-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_pymethods2test-large-80-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_unitsyn-python-large-10-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_mix_h2_language_proportional-65-8B