mrkeyoor.com_
Sat 26 Sept 18:47 UTC
Automationevaluationupdated 26 Aug 2026

midscene review

Midscene is a TypeScript GUI automation system that asks a multimodal model to find and operate controls from screenshots. It plugs into Playwright, Puppeteer, Vitest, YAML workflows, and agent skills, with adapters extending the same approach to mobile and desktop interfaces.

+68stars / 7d
Verdict

Our Midscene checkout built in 13 seconds, but its 2,236-package install used 2,057 MB and the full test target exited 1 despite 88 reported passes and 0 failed cases. Trial it for visual surfaces that defeat selectors, especially canvas, cross-origin, and native interfaces. Keep ordinary Playwright or Appium checks for flows where determinism, privacy, and predictable execution cost matter more than natural-language control.

We ran it

Lab card: what happened when we ran midsceneScreenshot of midscene (midscenejs.com)
Install✓ · 222s2236 packages · 2057 MB
Build✓ · 13s
Tests✗ · 156s88 passed · 0 failed · 3 skipped of 91 (vitest)
Repo2154 files~302,770 lines of source · 95.7 MB · 15 CI workflows

Answers from our run

Does midscene build from source?

Dependencies installed in 222 seconds (2236 packages), and the build succeeded in 13 seconds. We cloned commit dfc5a5f into a clean Debian container with 3 CPUs and no project-specific setup.

Do midscene's tests pass?

Yes: 88 of 91 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Who should not use midscene?

Teams whose main need is fast, deterministic regression testing on stable DOM controls: Midscene sends visual tasks to a model, while Playwright selectors avoid that inference step.

What are the alternatives to midscene?

Playwright, Stagehand, Browser Use. Our Midscene checkout built in 13 seconds, but its 2,236-package install used 2,057 MB and the full test target exited 1 despite 88 reported passes and 0 failed cases.

Setup2/5222-second install, 2,057 MB, model setup, and failed test target
Docs4/5Platform guides and API links are clear, but model setup lives off README
Community5/514,714 stars, current pushes, and active issue and pull request work
Maturity3/5v1.12.0 spans many platforms, but reports and test gating need care

Who it’s for

Test teams covering canvas controls, cross-origin frames, native apps, or other surfaces that selectors cannot reach.
Playwright and Puppeteer users who want natural-language actions alongside ordinary test code.
Mobile automation teams willing to configure Android, iOS, or HarmonyOS device tooling.
Developers prepared to evaluate a multimodal model against their own screens and failure budget.

Who it’s NOT for

Teams whose main need is fast, deterministic regression testing on stable DOM controls: Midscene sends visual tasks to a model, while Playwright selectors avoid that inference step.
Projects that cannot send screenshots to a model or operate a suitable model locally: screenshot-based localization is the core mechanism.
Accessibility audits that need semantic truth: pure-vision actions can see an icon or canvas, but the README says DOM inclusion is optional and focused on extraction and understanding.
Small workspaces expecting a light JavaScript dependency tree: our install added 2,236 packages and used 2,057 MB.
Release pipelines requiring a clean full-suite gate on the measured commit: our test command exited 1 even though the reported Vitest cases had 0 failures.
Teams relying on generated HTML reports as evidence without checking them: issue 3041 reports v1.12.0 showing SauceDemo sample data instead of the real captured page after aiAssert.

Setup reality

Our sandbox install at commit dfc5a5f succeeded in 222 seconds, adding 2,236 packages and using 2,057 MB. The build passed in 13 seconds. Tests exited 1 after 156 seconds even though the harness counted 88 passed, 0 failed, and 3 skipped; Nx named @midscene/web:test as the failed task.

A real run needs a multimodal model with UI localization ability and its endpoint or local serving setup. Browser use adds Playwright, Puppeteer, or the Chrome extension; mobile and desktop targets require their platform control stack.

The repository is a 2,154-file pnpm monorepo with about 302,770 source lines. Model choice affects behavior, cost, and image compatibility. Screenshot-only targeting reaches non-DOM surfaces, but it does not remove the need for deterministic assertions around critical flows.

Screenshot targeting reaches canvas and native controls

Midscene's central bet is that pixels are a more universal interface than the DOM. A multimodal model looks at a screenshot, finds the requested target, and decides how to act. That can reach canvas content, icon-only controls, cross-origin frames, native mobile screens, and desktop applications. The same API exposes natural-language actions, queries, and visual assertions, either from JavaScript or YAML.

The project still fits beside conventional tools. Playwright and Puppeteer integrations let a test use explicit browser code for navigation or cleanup, then call Midscene for a visually obvious step that has no durable selector. The README lists browser, Android, iOS, HarmonyOS, desktop, and custom interfaces. This is broader than a web testing helper, though each platform brings a different capture and input mechanism beneath the shared agent API.

Pure vision trades selector maintenance for model uncertainty

Selectors can break after markup refactors, and semantic trees cannot describe every rendered surface. Screenshots solve those coverage gaps. They also remove useful certainty: a model must interpret what it sees, locate the intended control, and produce an action. The README names several multimodal model families and allows open models to be self-hosted, but it does not claim that every model behaves the same.

A practical suite should divide work by risk. Use visual instructions where UI structure is unavailable or changes often. Keep explicit locators for payments, destructive buttons, authorization boundaries, and other steps where the exact target must be reviewable in code. Midscene can include DOM information for extraction and page understanding, yet its action localization is presented as screenshot-only. That is reach, not a guarantee of accessibility semantics or repeatable intent resolution.

What happened when we ran it

Our sandbox installed commit dfc5a5f in 222 seconds. Pnpm added 2,236 packages and the dependency tree occupied 2,057 MB. The build then completed successfully in 13 seconds. The checkout already contained 2,154 files, about 302,770 lines of source, and 95.7 MB, which matches the project's wide platform and reporting surface.

The test command exited 1 after 156 seconds. Our harness summary recorded 88 passed, 0 failed, and 3 skipped out of 91. The log tail showed green Vitest output, then Nx reported that the test target for 19 projects failed and named @midscene/web:test as the failed task. The visible tail does not show a failed assertion, so assigning a deeper cause would be guesswork.

The run used a Node 22 container with 3 CPUs, 8 GB of RAM, and no secrets. It did not configure a vision model or operate a browser or device. The result therefore measures repository setup and its available build and test commands, not action accuracy or speed. Any claim about reliability needs a screen set, a pinned model, and repeated runs on the application being tested.

The model is part of the test environment

Midscene lists Qwen, Doubao, GLM, Gemini, and UI-TARS families as examples of models with UI localization ability. Some can be self-hosted. That flexibility prevents one provider from becoming the whole architecture, but it makes the model as important as the browser version. A prompt that works with one image format, screen scale, or model release may behave differently after a provider change.

Version those choices alongside the test. Record the model identifier, endpoint settings, image format, viewport, device scale, and locale. Release v1.12.0 added model-call timing summaries and support for another vision model, while current pull requests are working on WebP screenshot input with a JPEG fallback. Those changes are useful, and they show why a Midscene test result cannot be reproduced from test code alone.

v1.12.0 has a report-data bug under investigation

Issue 3041 reports that actions and an aiAssert ran against the correct page on Midscene 1.12.0, but the generated HTML report displayed SauceDemo sample content instead of the captured UI. The reporter says the runtime screenshot was taken and the model's analysis matched the real page. That makes the report itself the disputed component, which matters when an HTML artifact is used to explain a failure or prove a visual assertion.

The same release shipped changes to test running, report timing, Android binary paths, and screenshot persistence. GitHub showed a last push on August 26, 2026, 14,714 stars, and 73 open issues and pull requests combined. Same-day fixes cover Android device IDs, a scrcpy upload memory leak, YAML assertion reporting, and machine-readable CLI output. This is active maintenance, but the volume also calls for pinning versions rather than following main in CI.

Use it where selectors genuinely fail

Midscene earns a trial when the target is visible to a person but absent from a useful automation tree. Canvas editors, remote desktops, mobile apps, and cross-origin content are credible cases. A small pilot should include repeated actions, ambiguous labels, loading states, visual assertions, and failure reports. Compare every case with the simplest deterministic route before expanding the suite.

Our 13-second build shows the repository can compile cleanly in a fresh container, while the 2,057 MB install and unresolved test-target exit make contribution heavier than the concise README suggests. Midscene is best treated as a visual layer inside a testing strategy. If ordinary locators already describe the interface, Playwright or Appium will usually be easier to reason about, cheaper to run, and clearer when a test fails.

Alternatives

ProjectWhat it isPick it when
Playwright gh↗A browser automation and test framework built around explicit locators and browser APIs.pick this instead when deterministic web checks and low per-action overhead matter most.
Stagehand gh↗An AI browser automation framework that combines natural-language actions with browser code.pick this instead when web automation is the sole target and Browserbase integration is useful.
Browser Use gh↗A Python framework for agents that navigate and operate websites.pick this instead when the task is an autonomous Python browser agent rather than cross-platform E2E testing.
AppiumA long-running cross-platform automation server for native and mobile applications.pick this instead when explicit native locators and the Appium driver ecosystem are preferable to visual inference.

What people are saying

  1. [github-trending] web-infra-dev/midscene

Sources

  1. Midscene repository
  2. Midscene documentation
  3. Midscene v1.12.0 release
  4. v1.12.0 HTML report data bug
  5. Android scrcpy upload memory fix
  6. WebP screenshot input change

More automation reviews

runner-images · agent-fleet-manager · kargo · Rose · alchemy · laya · the whole board →