JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 27
  • Score
    100M100P100Q56185F
  • License Apache-2.0

Local UI-grounding specialist for hybrid AI agents. Screenshot + text target → strict JSON bbox. Qwen3-VL-2B LoRA. Drop-in for Claude Code, Codex, browser-use, Skyvern. Cuts GPT-4V cost & latency on click grounding.

Package Exports

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (browserground) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    browserground logo

    browserground

    The local UI-grounding specialist for hybrid AI agents.
    Drop in a screenshot + text target, get a strict JSON bbox.


    Why this exists — the hybrid AI argument

    Today, most AI agents route every screenshot to a cloud frontier model (GPT-4V, Claude Vision, Gemini) just to find click coordinates. That's a $0.01–0.05 multimodal call adding 800ms–2s of latency, repeated 20–50× per agent run. Cost and latency compound. Screenshots full of private UI leave your machine.

    A general 200B-parameter LLM is overkill for "where is the Submit button?" — that's a narrow vision task. The right shape is a hybrid one: cheap fast specialist local models for the dedicated tasks they handle better, and a cloud LLM only for the planning and reasoning it's uniquely good at.

    That's exactly what browserground is — the click-grounding specialist you drop in next to your Claude / GPT-4o / Codex agent.

    Hybrid AI agent architecture: a local specialist grounds the click target; cloud LLM does planning only

    Pure-cloud agent Hybrid (+ browserground)
    Per-screenshot cost $0.01–0.05 $0
    Latency 800ms–2s round-trip ~1.8s local
    Tokens billed by cloud 1500+ multimodal ~40 text
    Screenshots leave machine yes no
    Rate limits yes no

    What you get

    browserground parse screenshot.png --target "Submit button"
    # {"bbox_2d": [344, 612, 478, 658]}

    Single-line strict-JSON bbox of the element to click. 100% format compliance on the eval set — no markdown fences, no <ref> tokens, parseable every time.

    Install

    npm install -g browserground
    # or: bun install -g browserground

    Prerequisite (one-time)

    The CLI shells out to Python for inference. Install once:

    # Recommended: uv
    brew install uv     # or: pipx install uv
    uv pip install --system 'torch>=2.4' torchvision 'transformers>=4.55' 'peft>=0.13' huggingface_hub pillow
    
    # Or pip:
    pip install 'torch>=2.4' torchvision 'transformers>=4.55' 'peft>=0.13' huggingface_hub pillow

    On first browserground parse, the model auto-downloads to ~/.cache/huggingface/:

    • base Qwen/Qwen3-VL-2B-Instruct (~4.3 GB)
    • LoRA adapter renezander030/browserground (~67 MB)

    Use

    # one-shot (loads model each call — slow first time)
    browserground parse screenshot.png --target "Submit button"
    
    # daemon mode (loads once, fast subsequent calls)
    browserground serve &
    browserground parse a.png --target "Chrome icon"
    browserground parse b.png --target "the back arrow"
    browserground stop
    
    # raw model output (for debugging)
    browserground parse screenshot.png --target "X" --text
    
    # status
    browserground status

    Hook into your agent stack

    Claude Code

    mkdir -p .claude/skills/browserground
    curl -sL https://raw.githubusercontent.com/renezander030/browserground/main/plugins/claude-code/SKILL.md \
      > .claude/skills/browserground/SKILL.md

    Codex CLI

    Add to your AGENTS.md — spec at plugins/codex/AGENTS.md.

    browser-use / Skyvern (Python)

    import subprocess, json
    def ground(screenshot_path, target):
        out = subprocess.check_output(["browserground", "parse", screenshot_path, "--target", target])
        return json.loads(out)["bbox_2d"]

    Benchmark

    ScreenSpot-v2 point-grounding accuracy (300 items, 100/split):

    Model Params Overall Mobile
    GPT-4o (cloud) — 18.3% —
    browserground v0.1 2 B 45.3% 64.0%
    SeeClick 9.6 B 55.1% —
    ShowUI-2B 2 B 75.5% —
    UI-TARS-2B-SFT 2 B 89.5% —

    v0.1 = one-epoch / 12k-example LoRA. v0.2 (Tier 2, target ≥ 60%) in development.

    Limitations

    • v0.1 desktop & web accuracy lag mobile (training mix is mobile-heavy)
    • English-only training data
    • Single-target per call (batch mode in v0.2)
    • No mouse-action prediction (only location — pair with an action predictor for full computer-use loops)

    License

    Apache 2.0.