tapwithus/tap-web-sdk/tap-vision-models
Claude Code and agent skill by tapwithus/tap-web-sdk
- community
Checking that the SKILL.md file is still in the repository.
Switch the TapSDKWeb2 vision model between TAPPING and AIR_GESTURE, set the op mode, and decode UnifiedAirGestures (swipes, pinches, holds, fist). Use for air gestures, pinch, swipe, fist, model switching, or AirGestures on TapSDKWeb.
Install
npx vskill@latest install tapwithus/tap-web-sdk/tap-vision-modelsSKILL.md
Vision models and air gestures
This SDK delivers raw gesture detections. Python, Web, iOS, and Android all receive those codes. iOS and Android add a processed click / drag / drop layer. This Web SDK does not. Never say swipes or pinches are iOS/Android-only.
TapXR developer firmware and TapBand use the same BLE API and the full set: taps, thumb swipes up/down/left/right, thumb-to-finger pinches with hold, fist with hold. TapBand is coming soon (waitlist). Do not invent a firmware version number.
`TapSDKWeb2` (framed firmware) for model switching. TapSDKWeb air gestures are at the end of this page.
The framed-firmware device runs one vision model at a time:
ModelTypes | Output | Callback | |
|---|---|---|---|
TAPPING | finger taps | registerTapEvents: cb(id, [tapcode]) | |
AIR_GESTURE | swipes, pinches, holds, fist | registerAirGestureEvents: cb(id, [code]) |
VisionSensorOpModes | Meaning | Use with | |
|---|---|---|---|
TRIGGER | Run the model when a tap-like trigger occurs | TAPPING | |
STREAM | Run the model all the time | AIR_GESTURE | |
STREAM_ON_TRIGGER | Start streaming after a trigger | experiments |
Enable and switch
Call these after connect() returns and after you register callbacks. connect() already started notifications. There is no start(). You can switch at runtime, as often as needed. Read the current state with await sdk.getVisionSensorModel() and await sdk.getVisionSensorOpMode(). Each call times out after 2 s if the device does not answer.
To start from a clean state, turn each feature off. Do not loop Object.values(DeviceFeatures) — a numeric enum also lists names.
UnifiedAirGestures codes
Letters: A = thumb, B = index, C = middle, D = ring, E = pinky. "AB" = thumb touches index (pinch).
Verified: tapIncMsg parses MODEL_DETECTION + AIR_GESTURE into { type: 'air_gesture', data: [code] }. TapSDKWeb2 calls registerAirGestureEvents with that array.
| Code | Name | Meaning | |
|---|---|---|---|
| 100 | COMBINED_GESTURE_NONE | No gesture / hand relaxed. Use it as "release" after a hold. | |
| 101 | COMBINED_GESTURE_LEFT | Thumb swipe left | |
| 102 | COMBINED_GESTURE_RIGHT | Thumb swipe right | |
| 103 | COMBINED_GESTURE_UP | Thumb swipe up | |
| 104 | COMBINED_GESTURE_DOWN | Thumb swipe down | |
| 105-108 | COMBINED_GESTURE_AB / AC / AD / AE | Short pinch: thumb + index / middle / ring / pinky | |
| 109 | COMBINED_GESTURE_FIST | Fist | |
| 110-113 | COMBINED_GESTURE_AB_HOLD ... AE_HOLD | Pinch held | |
| 114 | COMBINED_GESTURE_FIST_HOLD | Fist held |
The device sends gesture packets continuously in STREAM mode, so the same code repeats. To act once per gesture, act when the code changes, or ignore repeats within about 40 ms. Holds repeat until the hand relaxes and NONE (100) arrives. Wait for a few NONE packets in a row before you treat a hold as released (see tap-dpad).
tap-knob and tap-dpad are app recipes that build click / drag / drop in the page from these raw codes. That is not an SDK layer.
Example: switch models with a gesture
Fist-hold switches to tapping; all-five-finger tap (31) switches back:
Standby
DeviceFeatures.STANDBY_GESTURE_DETECTION lets the user put the device in standby with a gesture. registerStandbyStateEvents(cb(id, isStandby)) reports changes. await sdk.setStandbyState(false) wakes it. await sdk.getStandbyState() reads it.
TapSDKWeb air gestures (classic firmware)
TapSDKWeb has no model switching. In InputModeController(), registerAirGestureEvents gives cb(id, gesture: number) that matches AirGestures (for example UP_ONE_FINGER, LEFT_TWO_FINGERS, PINCH, THUMB_FINGER, STATE_FIST). registerAirGestureStateEvents gives cb(id, MouseModes) when the air-mouse state changes.
Docs
- Enumerations:
src/enumerations.tsin this repository - Demo: https://tapwithus.github.io/tap-web-sdk/
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingplugins/tap-web-sdk/skills/tap-vision-models/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/tapwithus/tap-web-sdk/tap-vision-models)