OpenAim: A New Kind of FPS Aim Trainer

OpenAim: A New Kind of FPS Aim Trainer

Introduction

OpenAim is a browser‑based FPS aim trainer that provides visual customization, feedback mechanisms, sensitivity calibration, and a coach system, with optional data sharing to a community model. The project was shared on Hacker News, receiving 80 points and 43 comments, and is accessible at https://openaim.pramit.gg/. The author also posted a write‑up on the rationale behind the trainer at https://www.pramit.gg/post/i-made-an-aim-trainer.

Appearance

OpenAim offers theme‑aware, colorblind‑friendly target presets, dynamic backdrops, and eye‑strain reduction features that keep target contrast intact. The appearance section of the source describes:

  • Theme target color presets that are colorblind‑friendly against every theme.
  • Target style and playfield background options.
  • Arena mood: earned backdrop palettes for free play, locked palettes that show what unlocks them.
  • Target finish: earned target skins for free play; rated drills always use the standard target.
  • Living scene: backdrop shifts between drills and drifts slowly to fight visual fatigue, never touching targets or contrast.
  • Reduced eye strain: dims and warms the scene and UI for long sessions, lowering luminance load while targets keep full contrast.
  • Motion reduce: disables UI transitions; auto follows the OS setting.

Crosshair

The crosshair is a 7 px size, 2 px thickness, 4 px gap with optional outline and configurable reaction settings. According to the source:

  • Style: size 7 px, thickness 2 px, gap 4 px.
  • Color theme.
  • Outline: keeps the crosshair visible over targets.
  • On‑target reaction: off by default for clean telemetry.

Feedback

Feedback includes hit markers, sounds, miss flashes, tracking tones, off‑screen cues, a pace metronome, reward moments, eye‑rest reminders, and a HUD that can be hidden in Zen mode. The source lists:

  • Hit marker and hit sound (volume 60%).
  • Miss flash: red flick at the crosshair on a missed shot.
  • Shot feedback sounds: missed shots and magazine reloads.
  • Blocked‑shot cue: multi‑tap drills cap the fire rate; marks pulls that came too early to fire, so they read as timing, not lag.
  • Tracking tone: sustained lock tone that climbs while the crosshair holds a target.
  • Off‑screen spawn cue: panned alert pointing to targets that spawn out of view.
  • Off‑screen spawn marker: brief edge chevron toward a target that spawns out of view (visual twin of the spawn cue).
  • Pace metronome: coached drills – one beat per pace budget.
  • Reward moments: confetti + a flourish when a record is set, rank is raised, or a streak is hit.
  • Eye‑rest reminders: gentle 20‑20‑20 nudge between drills on long sessions.
  • HUD elements: timer, score, accuracy, FPS.
  • Zen mode: hides the whole HUD during runs; results still show everything.

Input & Camera

Sensitivity is expressed as degrees per mouse count, with optional DPI entry, sensitivity import, FOV setting, Y‑invert toggle, and raw‑input detection that depends on the browser/OS. The source states:

  • Sensitivity° per mouse count.
  • Mouse DPI: optional; enables cm/360 and hand‑travel modeling.
  • Import sens: converts in‑game sensitivity.
  • Field of view: horizontal; stamped into every replay (103°).
  • Invert Y option.
  • Raw input: whether the browser delivers unaccelerated mouse motion; OpenAim never accelerates; this is the browser/OS layer, unknown until the first run grabs the mouse.

Coach

The coach uses a 68 % target success rate to set challenge points, provides explanations behind a ?, lets users choose session length and focus, and can auto‑tune sensitivity via AutoGain. According to the source:

  • Challenge point: target success rate drills are solved to .68%.
  • Explanations: full detail always stays behind the ? chip.
  • Session length: drills per coached session.
  • Focus: let the coach choose, or lock the session to one axis.
  • AutoGain: sens auto‑tuning from measured under/overshoot.

Data & Privacy

By default, only summary drill data is saved; full raw mouse/camera streams require the Full capture level, replays are saved as .oar files, and settings are stored in each replay’s header for accurate analysis. The source explains:

  • Capture level: summary skips raw mouse/camera streams; deep analysis needs Full.
  • Auto‑download replay: saves the .oar after every completed run.
  • Your data: (no further detail in the source).
  • Settings that change the meaning of telemetry (FOV, sens, target style, crosshair, invert, capture level) are recorded in each replay’s .oar header, so analysis reflects the settings the run used.

Aim Commons

Anonymous drill summaries are contributed to a shared, science‑based player model unless opted out; leaderboards, public handles, and replay sharing require explicit consent. The source describes:

  • Anonymous drill summaries are contributed by default to train the shared, science‑based player model everyone starts from and that renormalizes ratings to real peers. No raw mouse traces, no identity, no device info — and you can opt out or revoke anytime.
  • Contribute runs: sends drill summaries + capability features (no raw mouse, no device info) to sharpen the population model.
  • Leaderboard: rank on the task‑Elo boards under a public handle.
  • Handle: your public leaderboard name.
  • Share replays: advanced – uploads raw mouse‑movement traces (mildly biometric) for deeper analysis and spectating; requires the two above.
  • Status sharing: runs, replays.

Community Feedback

Users reported a range of experiences, from performance issues and calibration difficulties to suggestions for new features and requests for openness. Selected comments are reproduced below.

The aiming is very choppy because it feels like my cursor is "on rails", or stuck in some kind of grid. Not representative of any modern shooting game I've played. I think this would teach the wrong habits if someone were to use it as an aiming coach. – @pprotas

So cool! but somehow the simulation does not work on firefox. the crosshair is just stuck in the middle – @Tox46

Interesting project! I am relatively skilled at FPS with a mouse, but would like to improve with my trackball (so that I don't have to change my setup when playing an FPS). This could cone in handy, though I imagine that there aren't multiple "mouse profiles" built-in? It could be useful for players to understand how much of a difference different mice make. – @MayeulC

CS 1.6 scouts and knives was the ultimate aim trainer – @King-Aaron

You might want to look into this page - it slows my PC to a crawl :-( – @lelanthran

Interesting project. One suggestion I'd make is to reduce the configuration complexity up front on new users. It is kind of overwhelming before you have a feel for how your settings translate to the actual training experience. – @poly2it

I might use it to compare different mice I have, have you considered adding a comparison option? – @mherdelight

It needs some way of clearing all data. I chose "don't know" on calibration because I couldn't be bothered to try to work it out (but my mouse will be on the low end because it's just some random cheap mouse). Then, the training was ridiculous having to move my mouse miles between targets, but there's no way to change the initial calibration step. Not even in settings / data / delete. I'm not really the target user though. I guess those who are will already know exactly how many DPI their mice are. – @ralferoo

Cool app! I also had some ideas a while ago that I think the current breed of aim trainers are still missing. In-game practice like the Range, DM, and Team DM still feels like the gold standard to me. I generally only use aim trainers when they offer a noticeably higher return per minute, rather than just teaching me how to get good at aim trainer specific mechanics. Here are a couple of things I think an aim trainer should have: - Dynamic difficulty: I feel it works best when trying to keep accuracy relatively high, but fluctuating the target accuracy threshold over time and adjusting difficulty dynamically to match it. That keeps you challenged without breaking form. - Dynamic scenarios: Instead of picking scenarios manually, I think a trainer should ideally detect what you suck at and launch those directly. - Habit coaching: It would be awesome if a coach flagged bad habits in real time—like clicking too fast (low accuracy), doing a slow tracking movement instead of a sharp flick (mircoflicks), or using tracking when click timing is needed. - Biomechanics: Finding the exact "perfect" sensitivity feels less important to me than ensuring your arm and wrist are working together properly, altough this might depend on your aiming style. - Simplicity: A lot of trainers overwhelm you with numbers and menus. I image a simple "click here to start and follow feedback" workflow with nothing else for the user to learn. Seeing a bunch of numbers is less important to me then just getting better (maybe with a final score). Valorant-specific focus: Trainers often feel too generic for tactical shooters like Valorant, where angle holding, target reading, and micro-corrections dominate. I built a small aim trainer to experiment with these ideas myself: https://mousecontrol-thomaswelter-fceff2dbe456668c6bedef32db... (the aim trainer is very basic, only made for myself, fixed sens etc). - In this tool, difficulty scales dynamically while playing (the parameter in parentheses changes on the fly): - Angle Hold (enemy speed increases): Practicing holding angles against multiple targets. Holding angles is crucial in Valorant (just look at how Primmie plays). - Follow (standstill window decreases): Forces active mouse correction and reading the target before shooting. I tend to click too fast, so this forces me to slow down and micro-correct. - Jiggle (jiggle speed increases): Targets perform tight jiggles. I find players who spam small jiggles really hard to hit, so this directly targets that weakness. - Micro Flicks (snap distance increases): Micro flicks are easy enough to train in the Range, so I mostly use this mode when I am away from my gaming PC. - Static (target size decreases): Standard static clicking, but with dynamic scaling as targets shrink. - Strafe (movement speed increases): Moving targets with limited hit windows. When watching pro DM VODs, most kills are on stationary targets, but hitting moving players is still vital and tricky to isolate in-game. I am still not very good at Valorant but the aim train ideas are interesting. Let me know what you think! – @thomasikzelf

very cool. project, will evaluate this in detail. one note, on the "Feel your sensitivity." page, it says " raw input off — OS mouse acceleration is active. Your browser couldn’t give OpenAim raw mouse input, so your OS acceleration curve is reaching the game: the same hand motion turns further when you move faster, which no aim training survives. On Linux: set your mouse’s libinput acceleration profile to “flat” (unaccelerated). Chrome and Edge deliver raw input directly." but my mouse is definitely unaccelerated (confirmed via xinput list-props pointer:"Logitech PRO X 2"). i am unsure if this leads to erroneous results when aim training. i'm on: Chromium 150, linux, x11 kde plasma. – @hoechst

This looks pretty cool, but I'm pretty sure my imported sens from Deadlock has gone wrong. I have 0.68 in game and it feels significantly slower on the app. – @isqueiros

the calibrated sensitivity is correct but the in-game sensitivity is waaaaay higher, it's a bug – @WithinReason

Very cool, would you open source the code? did you start this from scratch? – @juliendsv4real

Random note, the biggest single thing you can do to improve your aim is to crank down your sensitivity and learn to strafe with the target rather than try to track with the mouse. The second biggest thing you can do is stop trying to exactly track them, and instead try to predict their strafe patterns based on their surroundings so you can place shots where they're likely to be, at least for any weapon with a travel time. – @CuriouslyC

This seems to suffer from what a lot of vibe coded projects suffer from, which is just a whole lot of unnecessary text everywhere. I find one shot outputs always have a lot of jargon, extra "micro copy" and displays the same information multiple times in multiple places. It makes it difficult at a glance to understand what you're looking at. I'm not sure what in the training set causes the models to do this, even in my own experience I'll be specific about the feature I'm building and the model will add an unnecessary status message for no reason. – @miguel-muniz

Neat project. I wonder how a small model could interpret movement data to provide personalized improvement suggestions e.g. "you're weaker targeting left than right, but only under these conditions" – @danielrmay

This is really cool! The calibrate part could be easier to tweak, so I can dial in what a 360 is on my system, instead of having to go back back next next try, and then I can't re-calibrate again? Or at least, it's not obvious where to change those settings. – @fragmede

Wow nice! I am so rusty This can be really useful for kids and elderly people I think. Great job – @pugdogdev

Can right mouse escape during calibration as well as ESC please. Make it easier to re-calibrate – @djmips

I got semi average score of 2.4k not trying super hard, but the "moving click" exercise seems dubious, got literally zero off it. Not sure if it's comparable to any actual game? – @maxlin

It's called "Open"Aim. Where is the source code then? – @emsign

Conclusion

OpenAim provides a highly configurable, browser‑based aim‑training environment with visual aids, feedback systems, sensitivity calibration, and a coaching layer, while offering optional contribution to a communal skill model. Community feedback highlights both strengths—such as the wealth of settings and eye‑strain considerations—and areas for improvement, including performance on Firefox, calibration clarity, and requests for open‑source code or additional comparison tools.

Sources