Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
117 commits
Select commit Hold shift + click to select a range
290fe3c
Update vcpkg
ButterscotchV Jan 16, 2026
c69900c
WIP Add support for fingers via protobuf
Erimelowo Jun 21, 2025
fcfe3c3
Add version and input support via protobuf
Erimelowo Jul 4, 2025
1cd2fe8
WIP working on inputs
Erimelowo Jul 12, 2025
898078b
get finger bone index properly
Erimelowo Nov 6, 2025
f0de33f
Add initial structures for allowing full controller input forwarding …
Sebane1 Nov 19, 2025
7f9af89
Update protobuffs
Sebane1 Jan 13, 2026
ebc7d70
Adjust protobuf data for proper controller input support.
Sebane1 Jan 17, 2026
c5f9327
Add controller input message
Sebane1 Jan 17, 2026
fabb90f
Temporarily comment out finger code.
Sebane1 Jan 17, 2026
7234495
Add perenthesis.
Sebane1 Jan 17, 2026
35e828f
Comment out inputs.
Sebane1 Jan 17, 2026
417b6bf
Update header file.
Sebane1 Jan 17, 2026
168681e
Add menu/recenter mappings.
Sebane1 Jan 17, 2026
4ad037b
Update interface to include controller inputs
Sebane1 Jan 17, 2026
54e238f
Adjust component creation fields
Sebane1 Jan 17, 2026
fceea0e
Fix syntax.
Sebane1 Jan 17, 2026
2b3761a
Fix strings.
Sebane1 Jan 17, 2026
7e87cbe
Fix strings differently.
Sebane1 Jan 17, 2026
fcc39e2
Fix argument type for ControllerInputMessage in interface.
Sebane1 Jan 17, 2026
8d7279a
Change input strings to match with standard Quest Touch controllers.
Sebane1 Jan 17, 2026
a31c546
Remove c_str() conversion.
Sebane1 Jan 17, 2026
6a9f86b
Adjustments for proper controller detection.
Sebane1 Jan 18, 2026
9db4b8f
Adjust inputs, and device type reporting.
Sebane1 Jan 18, 2026
524770d
Use Quest Touch bindings
Sebane1 Jan 18, 2026
c0420c8
Fix input strings
Sebane1 Jan 18, 2026
1c03ed7
Update controller bindings.
Sebane1 Jan 18, 2026
0d07eb4
Dont bother displaying oculus touch
Sebane1 Jan 18, 2026
1c119f2
Fix double haptic_component_
Sebane1 Jan 18, 2026
8ac1e0a
Temporarily assume anything mapped to hands wnts to be a controller.
Sebane1 Jan 18, 2026
28fe202
Lets actually remember to map the right hand too.
Sebane1 Jan 18, 2026
a8d11fa
Try a different render model.
Sebane1 Jan 18, 2026
4004640
Revert to the original model.
Sebane1 Jan 18, 2026
fdf66a2
Update OpenVR, switch to UpdatePoseComponent when tracker is a contro…
Sebane1 Jan 18, 2026
3716600
Use HMD matrix.
Sebane1 Jan 18, 2026
955a51b
Update header
Sebane1 Jan 18, 2026
2e7f14a
Fix class implementation for ToHMDMatrix
Sebane1 Jan 18, 2026
7fb2a12
Use TrackedDevicePoseUpdated for both controllers and tracker.
Sebane1 Jan 18, 2026
8c4c0fd
Attempt to get pointer working.
Sebane1 Jan 18, 2026
f013001
Further adjustments to help inputs work correctly.
Sebane1 Jan 18, 2026
2c73da2
Add additional tweaks to try and get input to register.
Sebane1 Jan 18, 2026
a7b1726
Remove invalid function.
Sebane1 Jan 18, 2026
4a24e64
Cleanup inputs. More attempts to get inputs to register.
Sebane1 Jan 18, 2026
fddc0a6
Remove invalid syntax
Sebane1 Jan 18, 2026
88981f7
Fix missing references
Sebane1 Jan 18, 2026
2c87468
Fix incorrect references.
Sebane1 Jan 19, 2026
28a50fd
Fix invalid syntax
Sebane1 Jan 19, 2026
34f434b
Adjust bindings to more closesly match valve index config.
Sebane1 Jan 19, 2026
5ed6a3a
Adjust vr compositor bindings.
Sebane1 Jan 19, 2026
cc7b684
Add output to sources.
Sebane1 Jan 19, 2026
5e6c903
Set more properties.
Sebane1 Jan 19, 2026
7c2d0aa
Set more properties p2
Sebane1 Jan 19, 2026
493a9af
Use our own virtual controller.
Sebane1 Jan 19, 2026
8d55300
Dont offset the pointer position for now.
Sebane1 Jan 19, 2026
00930b7
Whats happens if we dont update the pose component
Sebane1 Jan 19, 2026
d6a61cd
Dont really need to check if we're a controller if receiving buttons.
Sebane1 Jan 19, 2026
a276136
Fix syntax error
Sebane1 Jan 19, 2026
f5a1a7d
Serial numbers confuse VRChat for some reason
Sebane1 Jan 19, 2026
1584b7a
More hecking bindings. More trail and error getting SteamVR to take o…
Sebane1 Jan 19, 2026
711f431
Fix syntax error.
Sebane1 Jan 19, 2026
0becf5f
Tweak mappings slightly se see if that gets mappings to work.
Sebane1 Jan 20, 2026
5bdd1b2
Fix syntax error.
Sebane1 Jan 20, 2026
ef7dc1e
Add actions.json
Sebane1 Jan 20, 2026
9e1442c
New day, more binding stuff.
Sebane1 Jan 20, 2026
2ff3a22
Log literally everything.
Sebane1 Jan 21, 2026
44dc905
Fix syntax issues.
Sebane1 Jan 21, 2026
3aaf30c
More syntax adjustments
Sebane1 Jan 21, 2026
5d326b4
Fix syntax issues.
Sebane1 Jan 21, 2026
89a4143
Fix syntax issues.
Sebane1 Jan 21, 2026
8730341
Fix syntax issues.
Sebane1 Jan 21, 2026
eb24861
Fix syntax issues
Sebane1 Jan 21, 2026
ef80737
Increase logging.
Sebane1 Jan 21, 2026
47c136e
Adjust path for logging.
Sebane1 Jan 21, 2026
ba828cd
Check that inputs have been activated before trying to use them.
Sebane1 Jan 21, 2026
217fb02
Log handle references
Sebane1 Jan 21, 2026
6ca5847
Fix syntax error.
Sebane1 Jan 21, 2026
453773b
Even more logging
Sebane1 Jan 21, 2026
4b3826b
Fix syntax errors
Sebane1 Jan 21, 2026
26e1b31
Additonal logging, move input updates to RunFrame
Sebane1 Jan 21, 2026
9f280f0
Only do input updates if we're a controller.
Sebane1 Jan 21, 2026
c38dd45
Debug input values.
Sebane1 Jan 21, 2026
741e7f8
Adjust log messages.
Sebane1 Jan 21, 2026
ae6e7f8
Let tap inputs be available regardless of being a controller.
Sebane1 Jan 21, 2026
1857068
Only controllers should do steam input.
Sebane1 Jan 21, 2026
7169931
Fix system click debug
Sebane1 Jan 21, 2026
400e33d
Change stick mapping to thumbstick
Sebane1 Jan 21, 2026
c4575c9
Re-introduce finger mappings.
Sebane1 Feb 6, 2026
5112959
Add missing finger bone rotations to protobuff.
Sebane1 Feb 7, 2026
a8d8c44
Add missing input message type
Sebane1 Feb 7, 2026
af99906
Experiment with swapping pose input to Quest hand tracking when hands…
Sebane1 Feb 20, 2026
d7e594c
Add static keywords.
Sebane1 Feb 20, 2026
9e978b1
Add check before swapping pose data.
Sebane1 Feb 20, 2026
b668aaa
Adjust blending logic between SlimeVR to VD Controllers.
Sebane1 Feb 20, 2026
a59eb60
Remove smoothing transition logic.
Sebane1 Feb 20, 2026
c127780
Make algorithm for swapping between SlimeVR pose and virtual desktop …
Sebane1 Feb 20, 2026
f55c177
Make sure we arent accidentally grabbing ourselves in pose detection.
Sebane1 Feb 20, 2026
eaba28b
Remove logic for attempting to prevent flicker, as it doesnt appear t…
Sebane1 Feb 20, 2026
1617091
Use hemisphere in front of the user to calculate whether we should sw…
Sebane1 Feb 20, 2026
531f5e5
Adjust pose swapping calculations
Sebane1 Feb 20, 2026
781d42b
Temporarily remove pose swapping.
Sebane1 Feb 21, 2026
7de9f98
Ensure only one spot is setting position.
Sebane1 Feb 21, 2026
0ff6170
Re-introduce hand swapping.
Sebane1 Feb 21, 2026
f5baaec
Attempt to make transition smoother.
Sebane1 Feb 21, 2026
a8656f1
Dont write fingers if there is no data.
Sebane1 Feb 21, 2026
cefcbe7
Makes swapping to SlimeVR hand tracking more responsive
Sebane1 Feb 21, 2026
58879bd
Fix type issues.
Sebane1 Feb 21, 2026
b75238b
Increase allowed hand distance.
Sebane1 Feb 21, 2026
c71afcd
Add config file resource for hand tracking/slimevr skeleton ratios.
Sebane1 Feb 21, 2026
a20fd41
Add slower lerp when tracking system swaps.
Sebane1 Feb 27, 2026
9d6e158
Update vcpkg
Sebane1 Apr 19, 2026
ba40e5b
Re-number indexes
Sebane1 Apr 19, 2026
e88e43a
Fix code post rebase
Sebane1 Apr 19, 2026
51236fa
Compile error fix attempt for universe
Sebane1 Apr 19, 2026
a89f96a
Attempt to merge button states from virtual desktop. Add configurable…
Sebane1 Apr 19, 2026
190c3b4
Fix some incompatible API functions.
Sebane1 Apr 21, 2026
37c10db
Attempt to fix API mismatch
Sebane1 Apr 21, 2026
009179a
Remove stalwe pose detrction as it false positives too much.
Sebane1 Apr 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
41 changes: 41 additions & 0 deletions driver/slimevr/resources/input/actions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"action_manifest_version": 1,
"controller_type": "slimevr_virtual_controller",
"interaction_profile": "/interaction_profiles/valve/index_controller",
"description": "SlimeVR virtual controller",
"app_key": "openvr.component.slimevr",
"actions": {
"pose": [
{ "name": "/actions/main/in/PoseRaw" },
{ "name": "/actions/main/in/PoseAim" }
],
"haptic": [
{ "name": "/actions/main/out/Haptic" }
],
"boolean": [
{ "name": "/actions/main/in/DoubleTap" },
{ "name": "/actions/main/in/TripleTap" },
{ "name": "/actions/main/in/A" },
{ "name": "/actions/main/in/B" },
{ "name": "/actions/main/in/System" },
{ "name": "/actions/main/in/TriggerClick" },
{ "name": "/actions/main/in/GripTouch" },
{ "name": "/actions/main/in/TrackpadClick" },
{ "name": "/actions/main/in/TrackpadTouch" },
{ "name": "/actions/main/in/ThumbstickClick" },
{ "name": "/actions/main/in/ThumbstickTouch" }
],
"scalar": [
{ "name": "/actions/main/in/TriggerValue" },
{ "name": "/actions/main/in/GripValue" },
{ "name": "/actions/main/in/TrackpadX" },
{ "name": "/actions/main/in/TrackpadY" },
{ "name": "/actions/main/in/ThumbstickX" },
{ "name": "/actions/main/in/ThumbstickY" }
],
"skeleton": [
{ "name": "/actions/main/in/SkeletonLeft" },
{ "name": "/actions/main/in/SkeletonRight" }
]
}
}
109 changes: 109 additions & 0 deletions driver/slimevr/resources/input/slimevr_controller_bindings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
{
"jsonid": "input_profile",
"controller_type": "slimevr_virtual_controller",
"device_class": "TrackedDeviceClass_Controller",
"resource_root": "slimevr",
"driver_name": "slimevr",
"input_bindingui_mode": "controller_handed",
"should_show_binding_errors": true,
"compatibility_mode_controller_type": "knuckles",
"input_bindingui_left": {
"image": "{slimevr}/icons/slimevr_tracker_icon.png"
},
"input_bindingui_right": {
"image": "{slimevr}/icons/slimevr_tracker_icon.png"
},
"input_source": {
"/input/system": {
"type": "button",
"binding_image_point": [ 34, 45 ],
"order": 1
},
"/input/a": {
"type": "button",
"binding_image_point": [ 26, 42 ],
"order": 5
},
"/input/b": {
"type": "button",
"binding_image_point": [ 18, 37 ],
"order": 6
},
"/input/trigger": {
"type": "trigger",
"binding_image_point": [ 11, 60 ],
"order": 2
},
"/input/trackpad": {
"type": "trackpad",
"binding_image_point": [ 27, 37 ],
"order": 3
},
"/input/grip": {
"type": "trigger",
"binding_image_point": [ 47, 86 ],
"order": 7
},
"/input/thumbstick": {
"type": "joystick",
"binding_image_point": [ 31, 26 ],
"order": 4
},
"/input/pinch": {
"type": "pinch",
"binding_image_point": [ 27, 37 ],
"value_source": "/input/trigger",
"capsense_source": "/input/finger/index",
"force_source": "/input/trackpad",
"order": 7
},

"/input/finger/index": {
"type": "trigger",
"visibility": "InputValueVisibility_AvailableButHidden",
"binding_image_point": [ 56, 86 ],
"order": 7
},
"/input/finger/middle": {
"type": "trigger",
"visibility": "InputValueVisibility_AvailableButHidden",
"binding_image_point": [ 56, 86 ],
"order": 8
},
"/input/finger/ring": {
"type": "trigger",
"visibility": "InputValueVisibility_AvailableButHidden",
"binding_image_point": [ 56, 86 ],
"order": 9
},
"/input/finger/pinky": {
"type": "trigger",
"visibility": "InputValueVisibility_AvailableButHidden",
"binding_image_point": [ 56, 86 ],
"order": 10
},

"/pose/raw": {
"type": "pose",
"binding_image_point": [ 5, 35 ]
},
"/input/skeleton/left": {
"type": "skeleton",
"skeleton": "/skeleton/hand/left",
"side": "left",
"binding_image_point": [ 5, 35 ]

},
"/input/skeleton/right": {
"type": "skeleton",
"skeleton": "/skeleton/hand/right",
"side": "right",
"binding_image_point": [ 5, 35 ]
},

"/output/haptic": {
"type": "vibration",
"binding_image_point": [ 5, 35 ]
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"bindings": {
"/actions/legacy": {
"haptics": [
],
"poses": [
{
"output": "/actions/legacy/in/Left_Pose",
"path": "/user/hand/left/pose/raw"
},
{
"output": "/actions/legacy/in/Right_Pose",
"path": "/user/hand/right/pose/raw"
}
],
"sources": [
]
}
},
"controller_type": "slimevr_virtual_controller",
"description": "Default binding values for legacy apps using the soft knuckles controller",
"name": "SlimeVR Legacy Defaults",
"simulated_actions": []
}
Loading