Skip to content
publik.
Browse appsAppsPricingSupport buildersSupport
+Publish a repoPublish
Browse appsHow it worksPublish a repoSupport buildersGet helpPricingDevelopersGitHubPrivacy
© 2026 Publik
← All apps

SurfCam

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

by @mann

SurfCam interface

On your phone?

You install SurfCam from a computer. Send yourself the link and open it there.

Available for macOS and Windows.

No hosted AI — nothing to pay for.

Vote on SurfCam
1
Read the install guide→Open in GitHub↗Make this yours→Fork SurfCam, change it, publish your version. About 30 minutes. No experience needed.

199 downloads through publik

Having trouble? Tell us

Where SurfCam’s AI runs, and what it costs

Prices are for one typical use: one request of about 1,500 words sent and 375 words back. A higher quality score is better.

On your computer

Price
Free per use. Your computer does the work.
Runs with
MediaPipe
Memory
—
Quality
—

publik API

Price
$0.0100 per use, $10.00 per 1,000 usespublik-balanced, the default level
Quality
MiMo-V2.6-Pro: 46
Setup
Not built into SurfCam yet. A publik API key works wherever SurfCam takes an OpenAI-compatible address.

Your own key

Price
$0.0013 per use, $1.31 per 1,000 usesMiMo-V2.6-Pro at OpenRouter’s list price, before its fee for buying usage
Quality
MiMo-V2.6-Pro: 46
Setup
Open a provider account, add a card, paste the key into SurfCam.

Quality and price, side by side

Quality score and cost per 1,000 typical uses for local models and the three publik API levels
ModelQualityPer 1,000 uses
On your computer (Ollama, 4-bit download size)
Granite 4.2 3B2.2 GB9$0
Phi-4 Mini2.5 GB6$0
Llama 3.1 8B4.9 GB7$0
gpt-oss 20B14 GB9$0
Gemma 4 31B20 GB19*$0
Qwen3.5 35B-A3B24 GB19*$0
publik API
publik-fastGLM-5.3 Flash42$1.00
publik-balancedMiMo-V2.6-Pro · SurfCam46$10.00
publik-smartGPT-6 Sol48$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.

What you pay for

  • On your computer: nothing per use. You pay in disk space, memory and electricity, at lower quality.
  • publik API: publik’s published price for each use, in dollars, from your publik balance. It is above the model’s cost; the difference runs publik and pays the app’s builder.
  • Your own key: the provider’s price, billed to an account you keep with the provider.
See plans and prices →How publik API pricing works →

How to install SurfCam

Every step written out. No terminal experience needed. Pick your setup.

  • How to install SurfCam on Mac →
  • How to install SurfCam on Windows →

README

Open in GitHub ↗

SurfCam

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.

Run from source

git clone https://github.com/Blueturboguy07/surfcam && cd surfcam
npm install
npm start

Zero engine installs. Node + npm only. Camera permission is asked once.

Play

  1. Stand back so the camera sees at least your hips. Feet visible gives the strongest jump detection.
  2. Click the game once (or press the Focus game button / f) so Unity has keyboard focus.
  3. Step left / right to change lane. The HUD strip shows which of the three camera zones you are in.
  4. Jump to jump. Crouch to roll under barriers. Jogging in place does nothing.

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.

How detection works (renderer/pose-logic.mjs, tested by npm test)

  • Every vertical measure is divided by torso length, so distance from the camera does not matter.
  • Jump = both ankles rise past a rolling-median baseline in the same frame AND hips rise. Jogging alternates feet, so it never satisfies this. With ankles out of frame it falls back to hips + nose rising together.
  • Duck = nose drops well below its 4 s rolling baseline. Jogging bounces it a little, a crouch drops it a lot.
  • Lanes = mirrored hip-centre x in three bands with hysteresis so a boundary never flaps.

Swapping the output

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.

Verification hooks

  • 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.

Releasing

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