How To Call It
Capture is a global table: call its functions with a dot (Capture.<method>(...)), not a colon.
Measures repeated-character rows against the trailing reference glyph in two Base64 crops. Uses no OCR label or expected count; requires upright, separated printed characters on mostly uniform backgrounds. Mixed or ambiguous rows do not match.
Documented for app version 1.0.57Updated:
Capture is a global table: call its functions with a dot (Capture.<method>(...)), not a colon.
In detection flow, refresh the screen with Snap.screenRefresh() first, then narrow the search area and confidence using Region and FindParam.
left is the reference Base64 image; right contains target rows. Each image is limited to 950000 Base64 characters and 2000000 pixels. The result contains width, height, referenceWidth, referenceHeight, reference and rows; each row has x, y, w, h, count, score and matched. Coordinates are crop-relative. A score is not an accuracy percentage; do not act on an empty result. Work is bounded to 64 rows, 128 glyphs per row and an approximately two-second budget; invalid input or cancellation raises an error.
It is typically combined with Snap, Region, Asset, and FindParam; you can feed the result into quickTap(), click(), or a follow-up OCR step.
The snippet below is a starter pattern that can be applied directly in runtime flow.
local reference = Capture.regionToBase64(Region(0, 0, 200, 60), "png", 100)
local targets = Capture.regionToBase64(Region(0, 100, 200, 400), "png", 100)
local result = Capture.repeatedGlyphRows(reference, targets)
for _, row in ipairs(result.rows) do
if row.matched then print(row.count) end
endFrom foundation to combined usage, each level is provided as a separate code block so you can copy the level you need and adapt it directly.
local reference = Capture.regionToBase64(Region(0, 0, 200, 60), "png", 100)
local targets = Capture.regionToBase64(Region(0, 100, 200, 400), "png", 100)
local result = Capture.repeatedGlyphRows(reference, targets)
for _, row in ipairs(result.rows) do
if row.matched then print(row.count) end
endlocal stepOk = true
local reference = Capture.regionToBase64(Region(0, 0, 200, 60), "png", 100)
local targets = Capture.regionToBase64(Region(0, 100, 200, 400), "png", 100)
local result = Capture.repeatedGlyphRows(reference, targets)
for _, row in ipairs(result.rows) do
if row.matched then print(row.count) end
end
if stepOk then
wait(200)
endlocal ok, err = pcall(function()
local reference = Capture.regionToBase64(Region(0, 0, 200, 60), "png", 100)
local targets = Capture.regionToBase64(Region(0, 100, 200, 400), "png", 100)
local result = Capture.repeatedGlyphRows(reference, targets)
for _, row in ipairs(result.rows) do
if row.matched then print(row.count) end
end
end)
if not ok then
print("API step failed: Capture.repeatedGlyphRows: " .. tostring(err))
requestStop()
end-- In detection flow, refresh the screen with Snap.screenRefresh() first, then narrow the search area and confidence using Region and FindParam.
local function run_repeatedglyphrows_step()
local reference = Capture.regionToBase64(Region(0, 0, 200, 60), "png", 100)
local targets = Capture.regionToBase64(Region(0, 100, 200, 400), "png", 100)
local result = Capture.repeatedGlyphRows(reference, targets)
for _, row in ipairs(result.rows) do
if row.matched then print(row.count) end
end
end
local ok, err = pcall(run_repeatedglyphrows_step)
if not ok then
toast("Step failed")
print(err)
endSnap.screenRefresh()
local reference = Capture.regionToBase64(Region(0, 0, 200, 60), "png", 100)
local targets = Capture.regionToBase64(Region(0, 100, 200, 400), "png", 100)
local result = Capture.repeatedGlyphRows(reference, targets)
for _, row in ipairs(result.rows) do
if row.matched then print(row.count) end
end
local target = Region():find(Asset.image("target"), FindParam.timeout(3000))
if target then
quickTap(target)
end
toast("Detection step completed")