Skip to content

[Bug] SteamVR few bugs #2

Closed
Closed

Description

@JRDevo

Restored from the old repo (deleted and recreated on 2026-10-23). Originally opened by LazyLazyCoder on 2026-10-21, closed on 2026-10-23. The whole thread is below.

Original report

Tool version

0.5.0

Game

Half Life Alyx, SteamVR

Headset and runtime

VD, VXDR

GPU and driver version

RTX 5090, 596.21

Windows version

Windows 11 25H2

What did you do, and what happened?

Hello

Few bugs. All for SteamVR:

  1. VR180 mode. I have tested only on HL Alyx. Recorded video looks skewed (in different directions depend of head movement) when I look up/down/left/right.

  2. VR180 mode. The video has an incorrect IPD (or likely too much or too little image area on the left/right side). It's similar like recording full frame size from SteamVR. This forces the eyes to cross slightly, which is very uncomfortable and leads to rapid eye fatigue.

  3. SBS mode. Video is skewed too while head movements

EDIT: I had set 80% Horizontal/Vertical FOV tangents options in Virtual Desktop, but I set it back to default 100% and not change. So it's bug.

b.r.

Other OpenXR layers or mods in use

No response

Logs and config (drag the files in here)

log file empty(disabled)

Before you send

  • I use the latest version from the Releases page of this repository (not a copy from somewhere else).
  • I checked the logs for my user name / private paths before attaching them.

Thread

JRDevo · 2026-10-23 08:03 UTC

Hi LazyLazyCoder, thanks for the report and the clear list — it helped a lot!

v0.5.1 is out: https://github.com/JRDevo/VR-EyeCapture/releases/tag/v0.5.1

1) and 3) skewed picture when you move your head (VR180 and SBS) — fixed. Two causes:

  • SteamVR reports the eye's top and bottom view angles "backwards", and VR EyeCapture read them the wrong way round. The vertical view was mirrored: the top of each eye was cut off, and the head smoothing / VR180 placed the picture with the wrong angles, so it bent differently when you looked up, down, left or right.
  • Half-Life: Alyx changes its render resolution every few frames. When the picture got bigger than at the start of the recording, it was stretched by a different amount every few frames. Now the recording is sized from the game's texture and every frame is scaled correctly.

2) VR180 wrong IPD / crossed eyes — fixed. Each headset eye sees more on its outer side. In VR180 that outer strip had picture in one eye and black (or an old picture) in the other, so the eyes could not fuse it. Now each eye paints only the area both eyes see (dome_shared_view = 1, the default; 0 = the old, wider view).

Also new for SteamVR / VR180:

  • Alyx's black lens corners no longer leave black holes in the VR180 picture.
  • Hold both thumbstick clicks for 1 s to start / stop recording in SteamVR games too.
  • Large recordings are scaled to the HEVC maximum (8192 x 4352), so Windows / headset players open the whole picture.

I tested all of this in Half-Life: Alyx on a Quest 3 (Virtual Desktop + SteamVR).

After updating: close Alyx and SteamVR, then open SteamVR games... in the tray and click Repair (or untick / tick Alyx), so the game gets the new recorder file.

Please test with Alyx again and tell me if it looks right. If something is still off, set log_level = debug, record a short clip and attach %LOCALAPPDATA%\VR EyeCapture\logs\eye_capture.log.

Thanks!

LazyLazyCoder · 2026-10-23 09:44 UTC

Many Thanks! I'll test it all give you reply :)
Good job!

LazyLazyCoder · 2026-10-23 12:54 UTC
  • skewed video fixed

I reply about Alyx in second issue. They start to double, so maybe close this one and I'll put all info in one thread?
I have grayed out "repair" button. Alyx was ununticked when I installed new version, so I tick it again. If this matter, then let me know.

Here is log from recording session. I set 100% FOV tangent in VD:

2026-10-23 14:38:33.405 [pid 23672] INFO  control: hotkey F9 pressed
2026-10-23 14:38:33.405 [pid 23672] INFO  control: stop requested
2026-10-23 14:38:33.406 [pid 23672] INFO  recorder: lens mask after 118 frames: left 0.0%, right 0.1% of the eye never showed picture (not painted into the dome)
2026-10-23 14:38:33.416 [pid 23672] INFO  steamvr: pose check end (142 pairs): pose from Submit 142, WaitGetPoses 0, none 0, bad Submit pose 0 (max rot err 0.000) | Submit vs WaitGetPoses pose: 142 pairs, mean 0.01 max 0.02 deg | head turn per pair mean 0.01 max 0.03 deg | WaitGetPoses on another thread than Submit 0, 0 calls since the last pair 0, 2+ calls 0
2026-10-23 14:38:33.425 [pid 23672] DEBUG control: recorder state recording -> stopping
2026-10-23 14:38:33.432 [pid 23672] INFO  recorder: sidecar H:\Video\Beat Saber\hlvr_20261023_143831_VR180.json (vr180, 8192x4096) for H:\Video\Beat Saber\hlvr_20261023_143831_VR180.mp4: {"projection":"vr180","layout":"left_right","eyes":2,"width":8192,"height":4096,"dome_width":4096}
2026-10-23 14:38:33.432 [pid 23672] INFO  recording summary: OK | H:\Video\Beat Saber\hlvr_20261023_143831_VR180.mp4 | 8192x4096 AV1 VBR 300 Mb/s 60 fps nominal | layout vr180 dome | 10-bit, sharpen 1.00 | frames written 118, dropped 0 (ring full 0, gpu busy 0, encoder stall 0), duplicates 0, over max_fps 24 | variable frame rate (real timestamps) | duration 1.96 s | audio AAC (94560 frames = 1.97 s) | finalize 0x00000000 | st3d+sv3d: off (tag_3d = 0)
2026-10-23 14:38:33.432 [pid 23672] INFO  re-projection summary (dome vr180, fill black): 118 frames | dome: 118 frames painted, 0 frames without pose | D yaw +2.08 deg | re-projection 8192x4096: GPU 0.120 ms avg, 1.754 ms max (117 samples), worker CPU 0.025 ms avg, 0.044 ms max
2026-10-23 14:38:33.432 [pid 23672] INFO  dome: lens mask = eye pixels that never showed picture (never painted): left 0.0%, right 0.1% of the eye
2026-10-23 14:38:33.445 [pid 23672] DEBUG control: recorder state stopping -> idle
2026-10-23 14:38:34.805 [pid 23672] INFO  frame layout (pair 5032): ONE_TEXTURE_TWO_RECTS (wide texture, bounds) | L 3781x4017+0+0 slice 0 | R 3781x4017+3781+0 slice 0
2026-10-23 14:38:34.805 [pid 23672] INFO    left : R8G8B8A8_UNORM_SRGB 8698x4621 array 1 samples 1 | right: R8G8B8A8_UNORM_SRGB 8698x4621 array 1 samples 1 | sRGB-encoded | pose: Submit (TextureWithPose)
2026-10-23 14:38:34.875 [pid 23672] INFO  frame layout (pair 5037): ONE_TEXTURE_TWO_RECTS (wide texture, bounds) | L 4058x4311+0+0 slice 0 | R 4058x4311+4058+0 slice 0
2026-10-23 14:38:34.875 [pid 23672] INFO    left : R8G8B8A8_UNORM_SRGB 8698x4621 array 1 samples 1 | right: R8G8B8A8_UNORM_SRGB 8698x4621 array 1 samples 1 | sRGB-encoded | pose: Submit (TextureWithPose)
2026-10-23 14:38:34.943 [pid 23672] INFO  frame layout (pair 5042): ONE_TEXTURE_TWO_RECTS (wide texture, bounds) | L 4349x4621+0+0 slice 0 | R 4349x4621+4349+0 slice 0
2026-10-23 14:38:34.943 [pid 23672] INFO    left : R8G8B8A8_UNORM_SRGB 8698x4621 array 1 samples 1 | right: R8G8B8A8_UNORM_SRGB 8698x4621 array 1 samples 1 | sRGB-encoded | pose: Submit (TextureWithPose)
2026-10-23 14:39:57.934 [pid 23672] INFO  steamvr: shutdown -- 1 vtable(s) restored
2026-10-23 14:39:57.934 [pid 23672] INFO  indicator: SteamVR overlay destroyed
2026-10-23 14:39:57.934 [pid 23672] INFO  steamvr: VR_ShutdownInternal after 10739 frame pairs (Submits L 10739 R 10739, replaced 0, runtime errors 0, WaitGetPoses 11117)
2026-10-23 14:39:57.934 [pid 23672] INFO  control: published final status to the tray: saved H:\Video\Beat Saber\hlvr_20261023_143831_VR180.mp4
JRDevo · 2026-10-23 13:41 UTC

Thanks for confirming, LazyLazyCoder! Yes, let's keep everything in one thread: I'm closing this one, and we continue in #1.

Summary of this issue:

  • 1) and 3) skewed video: fixed in 0.5.1, and you confirmed it.
  • 2) crossed eyes in VR180: fixed in 0.5.1 with dome_shared_view = 1. That is also why the picture is narrower now; I explain it in [Feature] Encoding settings #1.

About your two other points:

  • "Repair" greyed out: that is normal. The button is only active when an enabled game needs a repair (game updated, older recorder version, or VR EyeCapture moved). You ticked Alyx again, so it had the new recorder already and there was nothing to repair.
  • Alyx unticked after the update: an update over the old version should keep it ticked. Did you uninstall the old version first, or switch from the zip to the setup (or the other way)? Both start with a fresh games list. If neither, tell me in [Feature] Encoding settings #1 and I'll look into it.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions