
Phone Remote: Android Capture, Demo & QA
Your phone becomes a device your scripts can drive
Making a phone tutorial normally costs an afternoon: screen-record by hand, dig the file off the device, crop it, draw arrows in an image editor, re-shoot the step you fumbled. Automating an app-only chore is worse — most mobile apps have no API at all.
This skill collapses both into scripts. The phone is driven over Wi-Fi, every tap is logged as it happens, and the recording is annotated from that same log — so the cursor in the finished video sits exactly where the tap actually went.
What it does
Capture and annotate
Screenshot any screen, then turn it into an instruction graphic with numbered badges, highlight boxes, and labels placed at real coordinates. Labels flip above or below their mark and pull inward at the frame edge, so nothing clips.
Record demos with a visible cursor
Record the screen, drive the phone with a script, and composite a cursor that glides between actions with a ripple on every tap. Speed it up 2× or 4× afterwards. Works on every device — unlike the OS touch indicator, which several vendor skins draw only for a physical finger.
Drive apps that have no API
Find elements by their text rather than hardcoded coordinates, so flows survive layout changes and different screen sizes. Includes non-ASCII text input for languages adb can't type on its own.
Test builds on real hardware
Install an APK, walk it through the screens you list, capture each one, and collect crashes into a dated report folder. The old phone that can't run your newest tooling is exactly the device your users complain from.
Read notifications
Some events surface only as a push notification. Watch for matching ones and act on them. Read-only — it never taps anything.
Run a fleet
Register several devices and fan one command across all of them. A mixed fleet of phones and tablets covers your store's screenshot sizes in a single pass.
Included
scripts/
doctor.mjs verify prerequisites before anything fails mysteriously
devices.mjs device registry (model, Android version, resolution)
capture.mjs screenshot
annotate.mjs numbered callouts, boxes, arrows, labels
record.mjs screen recording + speed-up
pointer-overlay.mjs virtual cursor composited from the action log
ui.mjs find/tap elements by text, ASCII and UTF-8 input
qa.mjs install, walk, capture, collect crashes
notifications.mjs read notifications (read-only)
fanout.mjs run one command across the fleet
lib/driver.mjs drive the phone while logging every action
references/
connecting.md pairing, port pinning, reboot recovery, driver-free setup
automation.md element lookup, non-ASCII input, resilient flows
tutorials.md turning a capture into a finished guide or video
troubleshooting.md every failure this skill has already hit
Requirements
- Android platform-tools (
adb) andffmpeg— both free, installed locally - Node 18+ — the scripts use only Node built-ins, nothing to
npm install - An Android phone with developer options enabled
No cloud service, no paid API, no subscription. Android 11+ pairs wirelessly; Android 10 and older need one cable connection to switch over, and references/connecting.md walks through both.
Notes
The reference docs record the decisions behind the design — why wireless beats USB, why the port gets pinned, why the cursor is derived from a log instead of the OS setting. Each one came from something that broke.
This is ADB, so Android only — no iOS. No root required. It won't defeat app-level automation detection, and it shouldn't: if an app forbids automated use, honor that. Anything that publishes, sends, pays, or signs in should stop and ask a human first.
API esterne
Android platform-tools (adb) + ffmpeg


