ASSEMBLY EYES
STANDBY
agent eyes ↗ AI agents for engineers ↗
the browser is watching the line.
every fastener accounted for — inserted, tightened, logged. point it at an assembly station and it counts INSERTED n/M and FASTENED n/M, live, with an event log a QA system could sign. no model, no training data, no upload — your video never leaves this tab.
ASSEMBLY EYES · QA VISION
00:00.0 · PX-DIFF ENGINE
ALL FASTENED ✓
8 of 8 verified · 0 missed

⊕ drop a video of your line

fastening, insertion, kitting — any repetitive station shot from a fixed camera. it plays locally; nothing is uploaded anywhere.

then click each fastener position to place a watch zone, and press play.

EVENT LOG

— engine idle. pick a clip or drop your own video.
recording captures video + overlay to a .webm you can post anywhere. keys: space play · 1/2/3 clips · R record
HOW IT COUNTS

no neural network. a state machine and some pixel math.

the demo is deliberately model-free — that's the point. most "AI vision QA" pilots die waiting for training data. you can get a working count from a fixed camera today, and graduate to a detector later.

01

watch zones

a human (or a detector) marks each fastener position once. a zone is just a circle: {x, y, r}. thirty seconds of setup per station.

02

pixel evidence

every frame, the engine reads two numbers per zone: motion (mean abs-diff vs the last frame) and presence (brightness vs the ring around it). that's the entire feature set.

03

dwell & latch

a tool must dwell in a zone before it counts as a rundown, and must leave before it counts as done. an inserted part must persist before it latches — and once latched, a hand crossing over it can't un-count it.

04

the log is the product

the overlay is for humans; the event log is for QA: timestamped RUNDOWN START / TORQUE OK / INSERTED per position — the audit trail a traveler sheet wishes it was.

view the core of the engine — it fits in one screen
// per frame, per zone — the whole trick:
const motion   = meanAbsDiff(gray, prevGray, zone);   // tool working here?
const presence = mean(gray, zone) - mean(gray, ring); // something bright seated?

// dwell: sustained motion → RUNNING; sustained quiet after a real run → TORQUED ✓
if (state === 'wait'    && motion > thr        && ++hi >= DWELL_ON)  state = 'running';
if (state === 'running' && motion < thr * 0.6 && ++lo >= DWELL_OFF
                        && runLength >= MIN_RUN)                    state = 'torqued';

// latch: presence must persist to count — and once counted, occlusion can't undo it
if (state === 'empty' && presence > base + delta && ++seen >= LATCH) state = 'inserted';
HONEST LIMITS

what this doesn't do (yet)

handheld cameras break fixed zones. the hero cut above was rendered offline with keyframed tracking — a production version puts a tracker or a per-frame detector in front, and the state machine stays identical.

it verifies sequence, not torque. "TORQUE OK" here means the tool dwelled and finished — real torque values come from the tool's controller. the vision layer's job is which position, when, and how many — the thing paper travelers get wrong.

lighting changes need adaptive thresholds. the sensitivity slider is the manual version. all of this is solvable — that's the fun part, and it's what the community below builds together.

BUILD THIS WITH US

engineers are turning 15 years of floor experience into agents.

this demo was built in an afternoon with an AI agent doing the heavy lifting — the engineering judgment (what counts as "fastened"? what does QA actually need?) is the human part. that's the skill we practice, in public, every week.