In short: OCR Recognize = "tell me what's written there"; OCR Compare = "is what's written there XXX?".
The OCR Compare node also supports "click after a successful match", with click logic similar to image search.
OCR accuracy is affected by many factors. Troubleshoot in order of priority:
The Windows version uses the built-in Windows OCR engine, with no extra installation required. If a system language pack is missing, you'll need to add the corresponding language in Windows Settings → Time & Language → Language.
"Expected text" is only used in the OCR Compare node. It means "the text you expect to be shown on screen".
After the engine recognizes the on-screen text, it compares it with the expected text:
Example: the expected text is "OK", and the button on screen also reads "OK" → success, and you can proceed to click it.
If left empty, no comparison is performed — the node succeeds as long as any text is recognized.
No. The Windows version of MacroAI uses the system's built-in Windows OCR engine (Windows.Media.Ocr), which ships with Windows 10/11 — zero installation.
However, if you need to recognize Chinese, make sure the Chinese language pack is installed on the system:
English is included by default, so no extra steps are usually needed.
The supported languages depend on the language packs installed on your system. The most commonly used are Simplified Chinese and English, and it also supports Traditional Chinese, Japanese, Korean, and more (depending on the system language packs).
In the OCR node configuration, there's a "Language" dropdown for selecting the recognition language.
Note: choosing the wrong language drastically reduces accuracy. For example, recognizing Chinese in English mode will produce garbled text or nothing at all.
If the language you need isn't in the dropdown, you'll need to install the corresponding language pack in your operating system first.
Tolerance controls the leniency of color matching. Because on-screen colors may not exactly match your expectation due to lighting, anti-aliasing, translucent overlays, and so on.
Recommendation: start at 30. If it doesn't match, increase gradually; if you get false matches, reduce it.
Use point mode (point) + a condition:
color)color_is function to check:color_is(color, "red", 30) — checks whether it's red, with a tolerance of 30You can also check precisely with RGB values: color_is(color, {r=200, g=30, b=30}, 40)
If you don't want to check "a single point" but rather "find where red is within a large area", you should use search mode instead.
Color detection returns the color in multiple formats for convenience in different scenarios:
In most cases, just use the color_is() function to check — you don't need to parse these values yourself.