Skip to content
v2.9.0

Crosshair Studio, and a controller that stops fighting you on Remote Play

A crosshair drawn at the exact centre of your screen, for the games that do not draw one well or at all. Twenty-one shapes, forty-four ready-made designs, a builder for placing several shapes yourself, your own image if you would rather, and every one of them saveable, shareable by code, and assignable to a game. It is free. Alongside it, OmniControl now recognises a PS5 Remote Play client and warns you about the thing that makes a character walk by itself: the client merges every connected controller with your keyboard, so a pad resting on the desk with a little stick drift beats you. This release also carries a set of fixes that were prepared a week ago and never published, including a recorded trigger replaying at full pull.

Highlights

  • Crosshair Studio, a new section in the sidebar. A crosshair at the centre of your screen, over whatever is running, in its own window that cannot take a click meant for the game.
  • Twenty-one shapes and forty-four ready-made designs, each drawn by the real renderer in its own tile, so what you see in the gallery is what lands on your screen.
  • Build your own out of up to eight shapes you place yourself, on a canvas whose centre is the aim point. Or import your own PNG, JPEG, WebP or GIF.
  • Colour cycling and a rainbow that runs across the shape, an outline for legibility on bright ground, and pulse or breathe motion. Every one of them optional.
  • Save a crosshair, switch between saved ones, share one as a code, and set a game to load its own automatically.
  • It draws on whole device pixels at any display scaling, including custom percentages, and it can sit on your second monitor.
  • OmniControl now detects a PS5 Remote Play client, and warns you when a real controller is still visible to it or when your output is set to Xbox where the presets need a DualShock 4.
  • The 65 PS5 Remote Play presets now carry setup steps and name the client they need, in the app's import preview and on the website.
  • Forty-one macros that were written for game packs but had never reached a customer are now shipping. Macros across the catalog go from 133 to 174.
  • New accounts get a public profile, with the disclosure in front of them. Existing accounts are asked rather than switched. An OG badge for anyone who was here in the first month.
  • A recovery email you can add on the Account screen, so an account created inside the app is no longer a dead end if you forget the password.

Fixes

  • A recorded trigger replayed as a full pull. Anything past about 12 percent came back as 255, so a saved lap played with the throttle and brake floored.
  • Turning Emulation off did not stop a Ghost replay. It stopped the output, and turning Emulation back on handed your pad straight back to a replay you believed had finished.
  • A recording that reached its length limit left the app sending input at full rate until you restarted it, which defeated the performance saving that stands down while a game is in front.
  • Two account-takeover paths closed: a login lockout that a burst of simultaneous attempts walked straight through, and an email change that needed only a session rather than your password.
  • The updater now trusts only the app's own certificate roots, and a published signature is bound to the exact file it signs rather than to a version number.
  • A driver install that needs a reboot now says Restart needed instead of showing you the same Install button you just pressed.
  • The first-run tour opened its Pro and sign-in dialogs underneath itself, and its Start button could tell a signed-out user to email support.
  • Emulation no longer offers Pro to someone who is already paying for it.
  • Two Dead by Daylight presets were titled identically and appeared as the same entry.
  • Deleting your account from the dashboard has been removed and is handled by support instead. See below.

A crosshair for the games that do not give you one

Plenty of games draw a crosshair you cannot see against a bright wall, put one only on some weapons, or leave it out entirely. Crosshair Studio draws one at the centre of your screen, over whatever is running.

It is its own window: transparent, always on top, and click-through, so it can never swallow a shot. It reads nothing from the game and injects nothing into it. It is a sticker on your monitor that you can redesign.

Four ways to get one, and they are alternatives rather than steps. A library of forty-four ready-made designs, each drawn in its own tile by the same renderer that draws the real thing. A single shape you tune yourself, from twenty-one of them - crosses, dots, rings, brackets, chevrons, a scope, a mil-dot, a duplex. A builder, where you place up to eight shapes on a canvas whose centre is the aim point. Or your own image, if you have artwork you would rather use.

Then the details that finish it: an outline so it stays legible against bright ground, colour cycling or a rainbow that runs across the shape rather than flashing it, pulse and breathe motion, opacity, and an offset for the games that do not aim at the centre of the screen.

Save one and it becomes yours to move around. Saved crosshairs switch with a click, copy to a share code you can paste to someone, and attach to a game so it loads when that game launches and goes back afterwards.

It is free on every plan, and it ships off. Picking a design does not switch it on, because a crosshair appearing over your desktop the moment you look at the page is not a decision you made.

Exactly centred and exactly sharp

Those are the two things a crosshair is for, and both are harder than they look.

A stroke is drawn centred on its own path, so a line an odd number of pixels wide sitting on a whole-pixel coordinate straddles two pixels and renders soft. Correcting for that with a half-pixel nudge works at 100 percent display scaling and is wrong at every other setting. OmniControl reads your display's actual scale factor and snaps each part of the crosshair to whole device pixels at that scale, including the custom percentages Windows allows rather than only the eight in its dropdown.

Centring has the same shape of problem. The window is sized so its side is always an even number of device pixels, because an odd one cannot sit centred on a display with an even width - it lands half a pixel off, which quietly undoes all of the above.

It also notices when the ground moves. Changing resolution, switching a cable or unplugging a second monitor does not reliably tell an application anything, and "off centre after a monitor change" is a common complaint about the tools people use for this today. The crosshair checks its display and re-centres itself when it finds it has changed.

The controller that plays the game without you

If you use keyboard and mouse through PS5 Remote Play and your character has ever walked off by itself, this is why, and it is not OmniControl.

The Remote Play client does not choose an input source. It merges every controller it can see together with its own keyboard state, taking whichever value is furthest from centre. A real pad left plugged in with a small amount of stick drift therefore beats you: its drift is further from centre than the zero a released key produces, so the character walks, letting go does not stop it, and no error appears anywhere.

OmniControl now detects a running Remote Play client and warns you while a real controller is still visible to it, offering Hide my controller, which is the actual fix - with your real pad out of the picture there is nothing left for the client to merge. Where a pad cannot be hidden it says to unplug it, and where the status could not be read it says nothing at all, because warning you about a state we could not determine is worse than silence.

The same detection catches a second silent failure. Every PS5 preset binds the touchpad, and a touchpad bind does nothing at all on an Xbox output. With a client connected and the output left on Xbox, the bindings all read correctly in the editor and simply do nothing in the game. The preset picker now says so and offers the switch, but only when a client is genuinely detected and the target is genuinely wrong.

The 65 Remote Play presets also now carry their setup steps and name the client they need, both in the app's import preview and on the pack's page here.

The macros that were written and never arrived

An audit of the live pack catalog found that twenty-three published packs had drifted from the configurations that authored them, and that forty-one macros written for customers had never actually shipped. Valheim was authored with two macros and shipped one. Elden Ring was authored with four and shipped one. Nine packs were authored with four macros each and shipped one.

Nothing looked wrong from the outside, because the notes describing each pack were generated from the same stale content and read "One ready-to-use macro".

The cause was a rule doing its job too well. A published pack must never change what it resolves to, or a link somebody has already shared would quietly start meaning something else. The consequence nobody had noticed is the other half of that rule: editing an already-published pack was a silent no-op that reported success.

Those twenty-three packs have been regenerated, with the full set of pack codes verified identical before and after, so nothing already shared resolves to anything different. Macros across the catalog go from 133 to 174.

Ghost, finished properly

The trigger fix is the one that matters: a recorded trigger past about 12 percent replayed as a full 255 pull, so a saved lap came back with throttle and brake floored.

Two more went with it. Turning Emulation off stopped the output but not the replay, so switching it back on handed your pad to a ghost you thought had finished. And a recording that hit its length limit left the app sending input at full rate to every window until a restart, defeating the performance saving that exists to stand down while a game is in front.

Getting back into your account

Registering from inside the app has always been a username and a password with no address, and password recovery keys entirely off email. For most of this product's life, someone who bought a key, redeemed it into an app-created account and later forgot the password had no way back in on their own.

The Account screen now has a Recovery email card. It asks only when there is nothing on file, and otherwise shows one quiet line with the address and whether it is verified.

Account deletion has moved to support

This is a behaviour change. The Delete account button on the dashboard is gone, and the path behind it is closed rather than merely hidden.

Deleting an account removed the account, its entitlement and its subscription record, and told Stripe nothing. Somebody could subscribe, delete, and be left paying for a product they no longer had access to, with nothing on our side to find them by. It happened, three times.

That is the wrong shape for a self-service form: it is rare, irreversible and next to money, and a person handling it can cancel the subscription in the same motion. Deletion requests are still honoured in full - contact support and it is done properly, including the payment side.