Turn your entire flat PC library into immersive 6DOF VR with a single click. Stereix Engine hooks the graphics pipeline while your game runs, reconstructs real-time stereo depth, and hands it straight to your OpenXR headset.
What happens per frame
The game never knows it is being watched. Stereix Engine detours the swapchain, finds the camera on its own, and rebuilds the frame in stereo before the game's own present call ever returns.
A MinHook detour lands on the swapchain's present call. One hook manager owns the whole lifecycle — installation, trampolines and teardown — so nothing is left patched in the process on exit.
The lifecycle manager validates the epoch and pulls the live backbuffer — the exact surface the game was about to show your monitor. A resize or a device reset bumps the epoch, and every cached view is dropped rather than reused.
Candidate matrices are collected from constant buffers and scored until the real view and projection lock in. Scoring is what makes this general: no per-game patching, no hex editing, no signature that breaks on the next update.
The depth buffer is identified the same way — candidates in, scored, locked. Depth is what turns a flat image into geometry your eyes can actually converge on. Without it both eyes receive almost the same picture and the scene reads as a photograph.
Compute shaders reproject the frame into a left and a right eye, then fill the disocclusions that reprojection opens up along every silhouette edge — the slivers of world that one eye can see and the other never had pixels for.
Both eyes go to your runtime — SteamVR, Meta Quest Link, WMR — in the runtime's own frame loop rather than on the game's clock. Depth ships alongside the colour layer so the runtime's spacewarp has something to reproject against when a frame runs late.
Three graphics APIs
The six stages are the same everywhere. What changes is where the hook lands and what the API demands in return — DirectX 12 and Vulkan hand you explicit control of submission, and getting that ordering wrong is how an injector deadlocks a game instead of rendering it.
Present · ResizeBuffersThe forgiving one. The runtime manages submission, so the work is mostly state hygiene — capture what the game had bound, do the stereo pass, put it all back exactly as found.
Present · Present1Every stereo dispatch and copy is submitted to the game's own command queue rather than a private one. A second queue would race the game's rendering and tear; single-queue FIFO is the contract that keeps the frame coherent.
vkQueuePresentKHR
Resolution goes through the original
vkGetDeviceProcAddr, never the hooked one — returning a
patched pointer to a lookup for that same pointer is an infinite
recursion. Devices created before injection are passed through
untouched.
A wrapper that targets a game engine only works on that engine. Hooking at the API layer means the engine underneath — Unreal, Unity, RE Engine, something in-house — stops being a question the injector has to answer.
Shipped profiles
Every game hands its matrices over differently. A profile records what that game does — depth direction, matrix order, colour space — so Stereix gets it right on the first launch instead of the fifth. These ship in the box.
Profiles are plain JSON in profiles/. Adding a game takes about
three minutes and no C++. Community profiles also verified for Mortal Shell and custom DirectX titles. Game names are used only to identify compatibility;
all trademarks belong to their respective owners, who are not affiliated with
this project.
What the flags mean
Each flag is a convention the game chose and never documented. Guess wrong and the failure is specific and recognisable — which is what makes these worth reading before you file a bug.
Depth stored from 1 at the near plane to 0 at the far plane instead of the other way around — it buys back floating-point precision in the distance. Read it backwards and the world turns inside out: distant geometry converges in front of your face.
Which way the matrix is laid out in memory. Transposed against the game's actual convention, the extracted camera basis is wrong in a very visible way — the horizon tilts, or the view ends up rotated ninety degrees off.
Whether the backbuffer is already gamma-encoded by the time Stereix sees it. Apply the transform twice and the image washes out; skip one that was needed and the blacks crush and the midtones go muddy.
Whether the depth buffer is submitted to OpenXR alongside the colour layer. Runtimes use it for spacewarp and late-stage reprojection, so submitting it is what keeps motion smooth when the GPU misses the deadline.
A profile is the seven fields the cards above are drawn from, and
nothing else. Drop the file in profiles/ and restart the
launcher — there is no build step, no registration list, and no C++.
An unprofiled game is not blocked. The matrix and depth search runs regardless; a profile just means the search starts from known-correct answers instead of converging on them. Unprofiled titles are more likely to lock slowly, lock wrong, or not lock at all.
// profiles/palworld.json
{
"name": "Palworld",
"engine": "Unreal Engine 5",
"api": "DX12",
"reverseZ": true,
"rowMajor": true,
"srgb": true,
"depth": true
}
Inside the engine
Wrappers that target Unreal only work on Unreal games. Stereix Engine hooks at the DirectX and Vulkan layer instead, so the engine underneath stops mattering.
DX11 · DX12 · Vulkan — MinHook detour
Press the controller menu button or gamepad combo (L3+R3) to summon the native ImGui VR overlay. Tweak IPD, convergence depth, and world scale live in stereo.
Universal ImGui overlay · DX11 · DX12 · Vulkan
Dedicated shaders watch for the motion that causes sickness and vignette the periphery before it reaches you.
Peripheral vignette — strength adjustable
Adaptive interpolation fills in for the frames a heavy scene cannot deliver, so the headset stays at rate even when the GPU does not.
Depth layer submitted with every frame
The launcher reads your local Steam libraries, matches what it finds against known profiles, and lists what it can run.
Reads libraryfolders.vdf from disk
Reads the active OpenXR runtime from the registry (Quest Link, SteamVR, Virtual Desktop, PSVR2) and streams live per-stage hook telemetry as you play.
ActiveRuntime auto-resolve · streamed live telemetry
Injecting into a multiplayer game protected by Easy Anti-Cheat, BattlEye or Vanguard can get your account permanently banned. Stereix Engine detects those systems and refuses to inject — there is no override switch and no flag to turn it off. Use it on single-player and unprotected titles.
It also will not attempt to defeat kernel-level anti-cheat, and it never will. That is a line the project does not cross.
Single-player, no anti-cheat. Nothing is watching the process and nothing can be banned (e.g. Cyberpunk, Hogwarts Legacy, Sekiro).
SupportedMod-friendly / Offline mode. Client anti-cheat disabled (e.g. Elden Ring offline with EAC disabled). Supported strictly in offline single-player.
Supported OfflineKernel-level or active online multiplayer. Vanguard, BattlEye, Ricochet, live EAC. Refused before injection touches memory to safeguard your accounts.
Refused (Safe)The check runs before any hook is installed, on the target process rather than on a list of game names — so a title that adds anti-cheat in a later patch is covered without waiting for an update here.
Setup
Run the Windows installer. It places the launcher, the injector DLL and all six shipped profiles. Nothing is installed into your games.
It reads your Steam libraries from disk and lists the titles it recognises, along with which of them have a profile.
Quest Link, SteamVR or WMR — whichever you already use. The active OpenXR runtime is detected from the registry, not asked for.
Launch the game, then attach. Watch the log for the camera and depth locks; when both land, the flat panel resolves into stereo.
Attaching to an already-running game is the supported path. Injection is runtime — the DLL is loaded into the live process, no game files are modified, and closing the game unloads everything.
Troubleshooting
On a single-player game with no anti-cheat there is nothing watching the process and nothing to ban. On a protected multiplayer game, injecting a DLL into the render pipeline is precisely the behaviour anti-cheat exists to catch — which is why Stereix Engine refuses to attach to those processes at all. Treat any title shipping Easy Anti-Cheat, BattlEye or Vanguard as off-limits.
That is the passthrough fallback, working as designed. Stereo engages only once both the view matrix and the depth buffer are locked, and menus, loading screens and cutscenes frequently present neither. Rather than go black, the flat frame is copied into both eyes. Move into actual gameplay and it should converge within a second or two.
It may. Profiles are an accelerant, not a requirement — the matrix and depth search runs on every title. A profile means the search starts from known-correct answers instead of converging on them, so unprofiled games are more likely to lock slowly, lock wrong, or fail to lock.
If it works, the settings that made it work are a profile. Write them
down and drop the JSON in profiles/.
Stereo asks for close to twice the pixels of the flat game. Reprojection and spacewarp absorb some of that cost, not all of it. The reliable predictor is headroom: if the game already runs comfortably above your headset's refresh rate on a flat monitor, you have somewhere to spend. If it barely holds 60, stereo will not rescue it.
No. Injection, profile matching and OpenXR submission are entirely local. The launcher reads your Steam library from disk and your active runtime from the registry.
No. The DLL is loaded into the running process at runtime and every hook is removed on exit — the hook manager owns installation and teardown as one lifecycle specifically so nothing is left patched behind. Closing the game returns it to exactly the state it shipped in.
Get it
Get early access
Leave your email to receive early access the moment Stereix Engine lands. One message when Engine lands — no spam, nothing else.
🔒 Secured via Cloudflare KV. Single notification upon launch. No ads, tracking pixels, or third-party sharing.
What the installer places
profiles/Nothing is written into your game directories, and no launch options are changed.
Requirements
Known headsets
Runtimes
Whichever one is registered as active is the one that gets the frames. Set it in your runtime's own settings before attaching.