Captcha
Reads a challenge, carries it out, and watches the challenge to confirm the answer was accepted.
Purpose
Gets a flow past a challenge gate in one node. It reads the challenge, performs the answer (types, drags, rotates, or taps), then verifies the challenge's state before deciding whether it was actually solved.
Solved and Unsolved are real ports rather than an output flag, because branching on "did we get through" is the whole point of placing this node.
When to use it
- A challenge gate blocks a flow you otherwise control end to end.
- You need a flow to continue automatically past a routine verification step.
When not to use it
- To read arbitrary text — use Read Text.
- To find an image — use Find Image.
- Where an operator can simply be prompted. A human is more reliable than any automated solver.
Only use this node against systems you own or are explicitly authorised to automate. Challenge gates exist to enforce a policy; bypassing one you have no right to bypass may breach the service's terms.
Requirements
The challenge region and its type are the irreducible minimum: without them there is nothing to read and no way to know how to read it.
The seven challenge types
| Type | The challenge | Answer shape |
|---|---|---|
text | Distorted characters to read and type | Text |
math | A rendered arithmetic expression to read and evaluate | Number |
slider | A piece to drag horizontally into a gap | Drag offset |
puzzle | A jigsaw piece to drag into its notch | Drag offset |
rotate | An image to turn upright | Angle |
clickOrder | Several targets to tap in a stated order | Ordered points |
imageSelect | A grid of pictures; tap the ones matching a prompt | Points |
slider and puzzle produce the same answer shape but stay distinct types so the editor can name what you are actually looking at. clickOrder and imageSelect likewise: in click-order the sequence carries meaning, in image-select it does not.
The two modes
| Mode | Behaviour |
|---|---|
solveAndApply | Default. Read it, then type/drag so the flow carries on past the gate |
solveOnly | Advanced: publish the answer to variables and touch no input |
How it runs
The node does not route Solved because it typed something. It watches the challenge afterwards and only routes Solved once the challenge's state shows the answer was accepted — gone, or verified.
A refused challenge is normally replaced by a new one, so the next attempt is a fresh puzzle, and the correction learned from the refusal is applied on the way round.
Settings
| Setting | Type | Range | Default | Notes |
|---|---|---|---|---|
| Captcha type | choice | the seven above | — | Required |
| Region | rectangle | percentage of screen | — | Required. Where the challenge is drawn |
| Mode | choice | solveAndApply, solveOnly | solveAndApply | |
| Answer field region | rectangle | — | focused field | Where the answer is typed |
| Submit region | rectangle | — | — | Tapped after the answer. Absent = do not submit |
| Handle region | rectangle | — | left edge | Slider/puzzle: where the draggable handle starts. Rotate: the dial |
| Prompt region | rectangle | — | — | Image-select: where the challenge draws its picture prompt |
| Target order | list | ≤ 8 entries | — | Click-order: the target names in tap order. Image-select: the prompt subject |
| Grid columns | integer | 1–8 | 3 | Image-select grid width |
| Grid rows | integer | 1–8 | 3 | Image-select grid height |
| Select count | integer | 1–16 | 3 | How many cells to choose |
| Max attempts | integer | 1–10 | 3 | Re-reads and retries within one execution |
| Timeout | integer | 1–120000 ms | 60000 | Whole-node budget across every attempt |
| Verification delay | integer | 0–30000 ms | 1500 | Wait after the answer before looking |
| Verification timeout | integer | 500–30000 ms | 4000 | Upper bound on polling for a decisive state |
| Save results to variables | list | ≤ 8 | — | Bind output fields to variables |
Verification delay is the knob that matters
A look taken too soon reads the animation, not the outcome. The default of 1500 ms sits in the band that covers real gates' render times — a fast site can lower it, a slow one should raise it.
If your node reports Unsolved on challenges you can see were accepted, this is almost always the setting to change.
The prompt region for image-select
When an image-selection grid draws its prompt as a picture rather than words, the prompt region is what makes the challenge answerable at all. Without it, the solver is being asked "which cells go together" — a different and much harder question.
Max attempts is not node retry
maxAttempts re-reads and retries within one execution, because the challenge usually re-renders after a wrong answer. This is deliberately distinct from the node-level retry policy, which covers operational failure rather than a wrong answer.
Ports
| Port | Taken when | Required |
|---|---|---|
| Solved | The challenge's state confirmed the answer was accepted | Yes |
| Unsolved | Attempts ran out without acceptance | No — lenient; unwired ends the flow gracefully |
| Failure | Operational: no frame, input rejected, engine unavailable | No |
| Cancelled | The run was stopped | No — never followed |
| Fatal | Invalid configuration | No — never followed |
Failure is deliberately distinct from Unsolved: one means the machinery broke, the other means the answer was wrong.
Basic example
A text challenge with a submit button:
- Captcha type: text
- Region: the distorted-characters image
- Answer field region: the input box
- Submit region: the Verify button
Realistic example — gate with a clean give-up
Unsolved and Failure go to different endings, because they are different problems: one is a wrong answer, the other is broken machinery.
Advanced example — solveOnly
Use solveOnly when the flow needs to perform the answer itself — for instance when the answer must be combined with other input, or the submit control needs a specific gesture:
- Mode: solveOnly
- Save results to variables: bind the answer output
- Then use Input Text and Click explicitly
Best practices
- Set the verification delay to match the site. It is the single most impactful setting.
- Wire Unsolved and Failure separately. They need different handling.
- Give the challenge region a tight, stable rectangle.
- Set the submit region so the whole gate is one node.
- For image-select, always set the prompt region when the prompt is a picture.
- Keep max attempts at around 3. More rarely helps, and each attempt costs a full verification cycle.
- Always have a clean give-up path. A flow that loops forever on a challenge is worse than one that stops.
Performance notes
- This is the most expensive node in the product. Each attempt is a read, an input sequence, a delay, and a verification poll.
- Worst case ≈
maxAttempts × (read + apply + verification delay + verification timeout), bounded by the node timeout (default 60000 ms). - The verification delay is paid on every attempt regardless of outcome; the verification timeout only bites when the region never settles.
- Put the node behind a Find Image check so it only runs when a challenge is actually present.
Memory notes
- Each attempt captures and processes challenge imagery; the working set is proportional to the challenge region size.
- Grid solving for image-select processes each cell, so a large grid costs more than a 3×3.
- Nothing persists between runs.
Common mistakes
| Mistake | What happens | Fix |
|---|---|---|
| Verification delay too short | Reads the animation → false Unsolved | Raise it |
| Treating Unsolved and Failure the same | Masks a broken engine as a wrong answer | Wire them separately |
| Region includes surrounding chrome | Poor reads | Tighten it |
| No prompt region on a picture-prompt grid | The solver cannot know what to select | Set it |
| Max attempts at 10 | Long, expensive runs | Around 3 |
| Running it unconditionally | Pays the cost on every run | Gate it behind a Find Image |
| Leaving Solved unwired | Required port | Wire it |
Troubleshooting
Unsolved on challenges that clearly succeeded. Raise the verification delay — the node is looking before the gate has updated.
Always routes Failure. Operational, not an answer problem: no frame captured, input rejected, or the engine is unavailable. Check the device connection and input mode.
Slider drags to the wrong place. Set the handle region so the drag starts where the handle actually is.
Image-select picks the wrong cells. Check grid rows/columns and select count, and set the prompt region if the prompt is a picture.
The node takes a very long time.
maxAttempts × verification cycle. Lower attempts, or lower the verification timeout.
FAQ
How many attempts happen inside one execution?
Up to maxAttempts, default 3.
What is the default grid? 3×3, selecting 3 — which matches every commonly observed nine-image challenge.
Does the node type the answer for me?
In solveAndApply mode, yes. In solveOnly, it only publishes the answer.
Can a later If check the captcha outcome? Yes — If in Node outcome mode offers Captcha solved / Captcha unsolved.
What is the whole-node budget? Default 60000 ms across every attempt.
Related nodes
- Find Image — detect that a challenge is present
- Input Text — typing in solveOnly mode
- Click — submitting in solveOnly mode
- If — branch on the captcha outcome later
Related pages
- Retry and Failures — node retry versus in-node attempts