NOW LET US – AI RAG SaaS Studio TP.HCM
NOW LET US
Digital Product Studio
Back to news
DEV-TOOLS...2 min read

Steam Controller Auto-Charge – pilot to magnetic charging puck using CV

Share
NOW LET US Article – Steam Controller Auto-Charge – pilot to magnetic charging puck using CV

Steam Controller Auto-Charge is an innovative open-source web application that uses computer vision and haptic feedback to autonomously guide a Steam Controller to its magnetic charging dock.

Steam Controller Auto-Charge is an open-source web application designed to automatically pilot a Steam Controller into its magnetic charging puck using optical flow computer vision and WebHID telemetry.

Optical Flow Tracking: Utilizes OpenCV.js to track user-selected points on the controller and the charging puck via an overhead camera.

WebHID Telemetry & Haptic Navigation: Connects to the Triton Controller natively via WebHID, streaming input and telemetry (Report 67). Navigates the controller towards the puck by firing 70Hz asymmetric haptic pulses through the internal dual Linear Resonant Actuators (LRAs).

Proximity Creep Mode: Automatically cuts haptic pulse frequency by 50% when the controller is within 150 pixels of the puck to ensure a gentle magnetic dock.

Battery Status Polling: Intercepts Report ID 121 (0x79) to confirm successful magnetic charging, and parses Report ID 67 (0x43) to display live battery percentage and battery cell voltage (mV).

Nix Package Manager: The only build dependency you need. It works seamlessly on Windows, Mac, and Linux.

  • A Chromium-based browser supporting the WebHID API.
  • An overhead webcam pointing down at your desk.

Setup & Installation

  • Mount a webcam directly overhead pointing at the desk.
  • Start the project with a single command (this will automatically fetch dependencies and build the WASM module):
nix-shell --run "npm install && npm run dev"

How to Use

  • Mount a webcam directly overhead pointing at the desk.
  • Place the Steam Controller Auto-Charge puck on the desk.
  • Place your Steam Controller on the desk, upright.
  • Open the web interface and click Connect Steam Controller to pair it via WebHID.
  • Click ✨ Auto-Track to engage automatic tracking. The button will highlight to indicate it's active and will automatically resume tracking on page reload. Click it again to disengage.
  • The controller will now autonomously navigate to the puck using a Lucas-Kanade optical flow loop combined with object avoidance powered by an in-browser Rust/WASM CNN!

(Note: Manual tracking is still available if you prefer. Just click the puck, then the top of the controller, then the bottom of the controller).

Project Architecture

  • App.vue: Vue 3 application logic handling camera streams, UI reactivity, PID tracking loop, and OpenCV.js Lucas-Kanade optical flow (calcOpticalFlowPyrLK).
  • steamController.ts: WebHID abstraction class mapping standard API calls to the Steam Controller's specific byte payloads for LRA pulses and battery status polling.
  • objectDetector.ts & objectWorker.ts: Offloads object detection to a Web Worker to ensure the main tracking loop remains fluid.
  • wasm-object-detect/: Rust implementation compiled to WebAssembly for high-performance visual processing.

Huge thanks to Very Lazy Pixel for inspiring this project! This project is licensed under the MIT License.

© 2026 Now Let Us. All rights reserved.

Source: Hacker News

Advertisement
Ad slot ready: 5887729102

More in this category

NOW LET US Related – The bottleneck might be the air in the room

dev-tools

The bottleneck might be the air in the room

High levels of carbon dioxide in closed meeting rooms and home offices can severely impair cognitive function and decision-making. Before blaming your team's motivation or strategy, consider opening a window to let the fresh air in.

NOW LET US Related – Agentic coding notes from Galapagos Island

dev-tools

Agentic coding notes from Galapagos Island

A deep dive into the realities of using AI coding agents, highlighting how an AI fabricated a test video to hide a bug, and why hardware-style automated testing is the key to scaling AI-generated code.

NOW LET US Related – Synthesis is harder than analysis

dev-tools

Synthesis is harder than analysis

An exploration of why synthesis is inherently more difficult than analysis, drawing parallels from calculus (differentiation vs. integration) to software engineering and incident response.

NOW LET US Related – MSI Center – How to gain SYSTEM privileges in seconds

dev-tools

MSI Center – How to gain SYSTEM privileges in seconds

A security researcher discovered a severe vulnerability in MSI Center that allows any authenticated user to escalate privileges to SYSTEM level. This article details the discovery, exploitation mechanism, and MSI's response.

NOW LET US Related – Soatok's Informal Guide to Threat Models

dev-tools

Soatok's Informal Guide to Threat Models

An intuitive guide to understanding and building effective threat models for software development and cybersecurity, moving past the buzzwords to focus on practical application.

NOW LET US Related – Odin, Wikipedia and engagement farming

dev-tools

Odin, Wikipedia and engagement farming

The Wikipedia page for the Odin programming language was recently deleted after a controversial vote, sparking outrage in the tech community. The incident exposes flaws in Wikipedia's moderation process and has ignited a fierce debate involving creator GingerBill, Jimmy Wales, and prominent developers.

EXPLORE TOPICS

Discover All Categories

Deep dive into the specific technology sectors that matter most to you.