CloudXR 3.2 Client Profiles

EDIT: Looks like the info I’m looking for is here:

For anyone else looking, you’ll need to create a file called CloudXRClientDescriptor.txt in C:\Users<username>\AppData\Local\NVIDIA\CloudXR

This might’ve been easier to find if a common phrase like “Device Profiles” was used, but I’m glad I found it.

The issue I’m seeing now is any game that is launched before the actual client connects does not have audio. SteamVR has audio though. If the game is launched after the actual client connects, the game audio is fine. So far, I’ve only tested this with VRChat and Beat Saber, but it was consistent.

I’m looking to create a device profile for Quest 2 on a remote AWS instance, so I can pre-launch games for users of our service, PlutoSphere.

I’ve read the above blog post that describes what parameters are needed to create a device profile, and have found those parameters in the CloudXR logs.

However, I’m not sure what to do with them at this point.

deliveryType : 2
width : 1832
height : 1920
maxResFactor : 1.2
ipd : 0.058038
fps : 72
proj : -1.279942 1.279942 -1.191754 1.191754  -1.279942 1.279942 -1.191754 1.191754
ctrlType : 2

How do I get the CloudXR 3.2 server to load this profile on launch? Is it invoked using a server side launch option?

Our ultimate goal is to have VRChat already running when a Quest 2 client connects.

From Nvidia Documentation
You may also pre-configure the server for a particular client device which will allow you to start the server side application before a client connects.
The tradeoff is that the server will now only accept connections from the pre-configured client and reject any other client devices.
To use this feature you will need to create a file named CloudXRClientDescriptor.txt and place it in the C:\Users\*user-name*\AppData\Local\NVIDIA\CloudXR\ folder.

Worth mentioning, the projection matrix values are IPD dependent. If you change your IPD, the matrix values will be different for your config file. Also if you set your matrix values from the sample config, it assumes the IPD listed. If it’s different, the display will appear “warped” within the HMD.

This seems to be not like correct.
From client source, projection matrix is calculated from fov only.
const auto projectionMatrix = ovrMatrix4f_CreateProjectionFov(
EyeFovDegreesX, EyeFovDegreesY, 0.0f, 0.0f, VRAPI_ZNEAR, 0.0f);
these values are matched with guide from cloudxr document( it said we can get from server log)

And IPD is also updated realtime in client during stream:
inside DoTracking function:
float newIPD = vrapi_GetInterpupillaryDistance(&tracking);

Could you double check my understandings?