Model reference · open weights
ScaleCUA is an open-weight language model from OpenGVLab. ScaleCUA-7B (BF16) weighs 16.6 GB; the smallest configuration that runs it is 2× RTX 3060 12 GB.
Summary of the OpenGVLab/ScaleCUA-7B model card, 2026-10-01
What it is
| Released by | OpenGVLab |
|---|---|
| Released | 2025-09-16 |
| Parameters | 8.3B |
| VRAM | 16.6 GB for the weights |
What it runs on
| Card | Requests at once | Context max | Memory | |
|---|---|---|---|---|
| 8K each | 32K each | |||
| RTX 3060 12 GB … RTX 4060 Ti 16 GB 2 smaller cards | — | — | — | |
| RTX 3090 24 GB | 10 | 2 | 80K | 23.4 GB |
| RTX 4090 24 GB | 9 | 2 | 79K | 23.4 GB |
| RTX 5090 32 GB | 26 | 6 | all 125K | 31.0 GB |
| L40S 48 GB | 53 | 13 | all 125K | 44.0 GB |
| A100 80 GB | 126 | 31 | all 125K | 78.2 GB |
| H100 80 GB | 117 | 29 | all 125K | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | 150 | 37 | all 125K | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | 179 | 44 | all 125K | 107 GB |
| H200 141 GB | 244 | 61 | all 125K | 138 GB |
| B200 180 GB | 323 | 80 | all 125K | 176 GB |
| 2× RTX 3060 12 GB tensor parallel | 5 | 1 | 42K | 11.6 GB a card |
| 2× RTX 4060 Ti 16 GB tensor parallel | 21 | 5 | all 125K | 15.4 GB a card |
| Requests at once | 8K tokens each | 32K tokens each |
|---|---|---|
| 1 | 19.1 GB | 20.6 GB |
| 5 | 21.0 GB | 28.1 GB |
| 8 | 22.4 GB | 33.7 GB |
| 16 | 26.2 GB | 48.7 GB |
| 32 | 33.7 GB | 78.8 GB |
| 64 | 48.7 GB | 139 GB |
One card, with vLLM's small-card settings.
Builds
| Build | Params | Precision | Weights | Smallest setup |
|---|---|---|---|---|
| ScaleCUA-7B (above) ↗ | 8.3B | BF16 | 16.6 GB | 2× RTX 3060 12 GB |
| ScaleCUA-32B ↗ | 33.5B | BF16 | 66.9 GB | H100 80 GB |
From the model card
[📂 GitHub] [📜 Paper] [🚀 Quick Start]
Recent advances in Vision-Language Models have enabled the development of agents capable of automating interactions with graphical user interfaces. Some computer use agents demonstrate strong performance, while they are typically built on closed-source models or inaccessible proprietary datasets. Moreover, the existing open-source datasets still remain insufficient for developing cross-platform general-purpose computer-use agents. To bridge this gap, we scale up the computer use dataset, constructed via a novel dual-loop interactive pipeline that combines an automated agent and a human expert into data collection. It spans 6 operating systems and 3 task domains, offering a large-scale and diverse corpus for training computer use agents. Building on this corpus, we develop ScaleCUA, capable of seamless operation across heterogeneous platforms. Trained on our dataset, it delivers consistent gains on several benchmarks, improving absolute success rates by +26.6 points on WebArena-Lite-v2 and +10.7 points on ScreenSpot-Pro compared to the baseline. Moreover, our ScaleCUA family achieves state-of-the-art performance across multiple benchmarks, e.g., 94.4% on MMBench-GUI L1-Hard, 60.6% on OSWorld-G and 47.4% on WebArena-Lite-v2. These results highlight the effectiveness of our data-centric methodology in scaling both GUI understanding, grounding, and cross-platform task completion. We make our data, models, and code publicly available to facilitate future research: https://github.com/OpenGVLab/ScaleCUA.
We provide an example code to run ScaleCUA using transformers.
from transformers import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
# default: Load the model on the available device(s)
model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
"OpenGVLab/ScaleCUA-7B", torch_dtype="auto", device_map="auto"
)
min_pixels = 3136
max_pixels = 2109744
processor = AutoProcessor.from_pretrained("OpenGVLab/ScaleCUA-7B", min_pixels=min_pixels, max_pixels=max_pixels)
For tasks that require direct GUI grounding (e.g., identifying and clicking a specific button from a description) or serve as grounder in agentic workflow, you can use the Direct Action Mode. This mode focuses on generating immediate, executable actions based on the visual input.
SCALECUA_SYSTEM_PROMPT_GROUNDER = '''You are an autonomous GUI agent capable of operating on desktops, mobile devices, and web browsers. Your primary function is to analyze screen captures and perform appropriate UI actions to complete assigned tasks.
## Action Space
def click(
x: float | None = None,
y: float | None = None,
clicks: int = 1,
button: str = "left",
) -> None:
"""Clicks on the screen at the specified coordinates. The `x` and `y` parameter specify where the mouse event occurs. If not provided, the current mouse position is used. The `clicks` parameter specifies how many times to click, and the `button` parameter specifies which mouse button to use ('left', 'right', or 'middle')."""
pass
def doubleClick(
x: float | None = None,
y: float | None = None,
button: str = "left",
) -> None:
"""Performs a double click. This is a wrapper function for click(x, y, 2, 'left')."""
pass
def rightClick(x: float | None = None, y: float | None = None) -> None:
"""Performs a right mouse button click. This is a wrapper function for click(x, y, 1, 'right')."""
pass
def moveTo(x: float, y: float) -> None:
"""Move the mouse to the specified coordinates."""
pass
def dragTo(
x: float | None = None, y: float | None = None, button: str = "left"
) -> None:
"""Performs a drag-to action with optional `x` and `y` coordinates and button."""
pass
def swipe(
from_coord: tuple[float, float] | None = None,
to_coord: tuple[float, float] | None = None,
direction: str = "up",
amount: float = 0.5,
) -> None:
"""Performs a swipe action on the screen. The `from_coord` and `to_coord` specify the starting and ending coordinates of the swipe. If `to_coord` is not provided, the `direction` and `amount` parameters are used to determine the swipe direction and distance. The `direction` can be 'up', 'down', 'left', or 'right', and the `amount` specifies how far to swipe relative to the screen size (0 to 1)."""
pass
def long_press(x: float, y: float, duration: int = 1) -> None:
"""Long press on the screen at the specified coordinates. The `duration` specifies how long to hold the press in seconds."""
pass
## Input Specification
- Screenshot of the current screen + task description
## Output Format
[A set of executable action command]
## Note
- Avoid action(s) that would lead to invalid states.
- The generated action(s) must exist within the defined action space.
- The generated action(s) should be enclosed within tags.'''
low_level_instruction = "Click the 'X' button in the upper right corner of the pop-up to close it and access the car selection options."
messages = [
{
"role": "system",
"content":[
{
"type": "text",
"text": SCALECUA_SYSTEM_PROMPT_GROUNDER,
}
]
},
{
"role": "user",
"content": [
{
"type": "image",
"image": "/path/to/your/image",
},
{"type": "text", "text": low_level_instruction},
],
}
]
# Preparation for inference
text = processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(
text=[text],
images=image_inputs,
videQuoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.