Play Subway Surfers with your body: step between lanes, jump and duck on camera, jog in place all you want
AI runs on your computer
publik verified: the founder reviewed this exact version for malware and approved it

Prices are for one typical use: one request of about 1,500 words sent and 375 words back. A higher quality score is better.
| Model | Quality | Per 1,000 uses |
|---|---|---|
| On your computer (Ollama, 4-bit download size) | ||
| Granite 4.2 3B2.2 GB | 9 | $0 |
| Phi-4 Mini2.5 GB | 6 | $0 |
| Llama 3.1 8B4.9 GB | 7 | $0 |
| gpt-oss 20B14 GB | 9 | $0 |
| Gemma 4 31B20 GB | 19* | $0 |
| Qwen3.5 35B-A3B24 GB | 19* | $0 |
| publik API | ||
| publik-fastGLM-5.3 Flash | 42 | $1.00 |
| publik-balancedMiMo-V2.6-Pro · SurfCam | 46 | $10.00 |
| publik-smartGPT-6 Sol | 48 | $18.00 |
Quality: Artificial Analysis Intelligence Index v4.3.2, read 2026-09-22 (publik API models 2026-09-25); * = estimated by Artificial Analysis. Sizes: the Ollama library, read 2026-09-22.
Every step written out. No terminal experience needed. Pick your setup.
Webcam pose controller + HUD wrapped around the official Subway Surfers web build on Poki. The game is not modified or copied. An Electron window hosts poki.com in a webview, runs MediaPipe Pose on your webcam in the host page, draws a HUD over the game, and fires arrow keys into the game through Electron's trusted input API.
git clone https://github.com/Blueturboguy07/surfcam && cd surfcam
npm install
npm start
Zero engine installs. Node + npm only. Camera permission is asked once.
f) so Unity has keyboard focus.Game only (default ON) hides everything on the Poki page except the game iframe and pins it to the full
window. It is one injected stylesheet: every element visibility: hidden, #game-element visible and
position: fixed; inset: 0. Nothing is reparented, so the game never reloads. Toggle it off if you need
Poki's own UI. Fullscreen takes the whole app fullscreen (Esc exits).
HUD buttons: Keys: ON/OFF (or k) pauses key sending so you can use the mouse on Poki's UI.
Recenter lane (or c) tells the controller the character is back in the centre lane.
renderer/pose-logic.mjs, tested by npm test)KeystrokeOutput in renderer/app.js is the only thing that knows about Poki. Replace it with a
direct binding once the game is ours; the controller emits lane / jump / duck intents only.
npm test — the detector's unit tests (jogging = no events, jumps, ducks, lanes, crouch regressions).
npm run smoke — launches the app with Chromium's synthetic camera and passes only once the pose
model is loaded and frames are flowing. node test/smoke.mjs <path-to-binary> runs the same check
against a packaged build; CI runs it against the Windows installer's installed copy.
SURFCAM_STATUS=/path/status.json npm start writes live tracking state twice a second.
SURFCAM_PROBE=1 npm start injects a keydown counter into the game iframe, fires a test key,
and logs what the game frame received.
npm run dist:mac # signed + notarized universal dmg in dist/ (needs the Developer ID in the keychain
# and APPLE_KEYCHAIN_PROFILE=<notarytool profile>)
git tag vX.Y.Z && git push origin vX.Y.Z # CI builds + launch-tests the Windows installer and attaches it
gh release upload vX.Y.Z dist/*.dmg # after opening the dmg here and running the smoke test on it