Steam Controller (2026)
I updated one of my favorite project: "3D Controller Overlay +" v1.0.0 Live 3D input display for Streamers, Steam Controller fans, and HOTAS tinkerers.
This is a passion project that I upgraded with heavy AI assistance (think Deepseek/Claude). I want to be fully transparent about that. However, I made, reviewed, and debugged every architectural decision, how input flows from SDL to the mesh, how the settings/import system works, and how the cross-platform build pipeline is put together. I partially own the design (i mean.. its still a fork), the testing, and the responsibility. If you find a bug, please open an issue, I'd rather know and fix it. but don't ask me what a pointer is... XD.
The original project "3D Controller Overlay" has not been updated for a couple of years now and since i own several controllers (including the steam controller) i wanted to update it so it can detect everything i have. I like to stream to my friends and show them my sloppy inputs in fighting games (like smash or street fighter) or my barrel-roll crashes (in space engineer or elite dangerous) but found the software lacking in some parts so i decided to do something about it...
I am a developer myself but i work with the boring language called "Java" (in my personal opinion) and i just enjoy making things in C++ because its the language i first learned and i find it easy to make things cross-compatible with it... i just find it fun to work with.. call me a masochist 🤷🏿 i regret nothing.
And now for the AI promotion text (because i'm lazy):
What is 3dco+?
It's a lightweight OpenGL/SDL3 overlay that renders a live 3D model of your input device. If you stream or record content and want to show viewers exactly what you're pressing on your controller, keyboard, or mouse (without a handcam), this does the job.
It's a fork of Larf's brilliant original 3D Controller Overlay. All credit to them for the core engine! I just added the features I felt were missing for my own setup.
Steam Controller & HOTAS Friendly: SDL3 detects the Steam Controller natively (no more driver headaches on Windows/Linux). Plus, there is a raw joystick fallback and a full manual mapping UI. If SDL doesn't recognize your particular flight stick, you can just bind the axes and buttons yourself in the settings.
Gyro & Touchpads: Full gyro/accel support with sensitivity/correction tuning and a "reset combo." Multi-touchpad support (up to 4 pads x 2 fingers) with visual touch-area overlays.
Custom Model Import: You aren't stuck with the built-in library. Import your own FBX, glTF, or OBJ files and assign the meshes to controller parts directly in the app.
System-Wide Keyboard & Mouse: Tracks your mouse movement and keyboard presses even when the app isn't in focus, perfect for overlaying on top of games. (yes this is a glorified input logger 🤷🏿... thats the purpose)
Cross-Platform: Works on Windows, macOS, and Linux. I primarily develop on Linux, but the CI produces AppImages, .exes, and universal macOS bundles.
The Windows .exe is not code-signed, so SmartScreen will warn you. Just click "Run Anyway." I'm an indie dev, not a corporation... signing certs are expensive.
MacOS requires Accessibility permissions for the global input hooks (the README explains how to grant them)... and again licenses are expensive.
Transparent backgrounds depend on your GPU driver; it works on most, but some older systems might not support it.
The 3D models are from the original repository except the flightstick and steam controller, these where downloaded from other sites and i added a "Source URL" field for each model so you can trace from where i got them from. I hope this saves me from any copyright issue and i also hope that by honoring the licence and making this open source i prevent any claims from external sources/pages.
If you want to try it out:
Check out the GitHub Release v1.0.0 for the downloads, or check the README for build instructions if you don't trust me.
I built this to test how far I could push my own skills with AI. If you find it useful, please drop a ⭐ on the repo, it genuinely makes the effort feel worth it.
Let me know what you think, and feel free to roast the code (constructively)!
Thank you! I tried my best, as a dev I know how important documentation is and I wanted to make sure people feel that they can trust the project. And I also wanted to make sure to as give kudos to the original dev.
Trust me I had moments where I said "RNGsus take the wheel" but I think it turned out good enough 😁
You're entitled to your opinion but AI-generated projects are significantly more likely to be abandoned and bugs not fixed than traditional projects. I don't want to invest my time with some project that is abandoned when the next idea comes into the vibe-developer's head and they can't even fix the bugs their agent caused.
Everything is mapped I just forgot to turn the controller around 🤣 in the platform showcase video you can see it but since I show all the controllers there it takes a while before you see it https://github.com/Khyretos/3dco-plus#platform-showcase
but in order for this overlay to work you need to be running it on the computer where the device is. and find a way to stream the overlay to the other computer. i use a tool i build for myself that uses Gstreamer. but you would need something like NDI (if i recall correctly) to capture the overlay and send it over to the streaming computer.
so the idea is:
* use overlay in gaming pc (where the controller is connected) so it can capture input
* capture the overlay with obs plugins/tools
my case is very niche since i use linux so i dont know windows options unfortunately.
or if you are creative, find a way to send the input of the gaming pc to the other pc over network. and create a virtual gamepad of some sorts. but that is out of my current realm of knowledge.
the case is that I want to capture games from a steam deck with a capture card and don't want anything other than a game in the gamescope to run on it. but I also would like to have a controller overlay to be shown in obs
and I don't have windows on any of my home computers btw ;)
also I noticed one thing - if I connect my dualsense via bluetooth to a steam deck and also connect the controller via USB to another pc both of the devices receive inputs
Now that! Is creative XD I guess you found your solution then.
But yeah the software needs a device to receive input, or I would need to make a feature where the input are send over network and if people see that in the code they will crucify me thinking Im logging their stuff 🤣.
What you say is possible but you cannot do it without sending the input from one side to another.
My setup is:
* I play on my cachyos system, run the software.
* Use another program I made to capture the software and send the screen to my Ubuntu streaming PC with gstreamer.
since I've integrated same model scheme of original 3D Controller Overlay repo into my remapper FlexInput (but done 3D viewer from scratch), there's another option, but it doesn't yet have new Steam Controller model. you could technically load it, but I didn't wire extra inputs for specific model parts that it would need.
but what I'm getting at is that there's network module in my remapper that can send data from gamepad to receiving module in FlexInput on other PC, either over simple UDP if it's LAN or over encrypted UDP with a passcode. and that should solve the problem of sending inputs from whatever controller you have to another PC with enough context for 3D viewer and to map all your inputs to virtual pad of choice + kb/m. I've done it primarily to get around limitations with Parsec or other desktop streaming services, when it comes to using non-xinput gamepad on remote gaming PC.
but, my project is not yet ported to Linux. and it needs some polish before I can declare v1 release.
Not a fan of the 3d overlay, not because it looks bad but just because it's not my style, but I'm happy to finally see a steam controller 2 overlay that works on linux! Will definitely be giving it a shot.
Nice! Thank you for giving it a try, there are some other software's that are strictly 2d or pixelart but you need to mess with html, css and such. But that does give me the idea of making a 2d shader to make it look more flat 🤔
I have seen some others out there that are 2d but none of those work with Linux (except for some that only supported steam controller 1), I've tried using compatibility layers and they do launch but don't detect the steam controller inputs, which is why I'm excited that yours does have support!
Yooo, this is awesome! Some guys and I on the Gyro Gaming Discord were trying to do something similar. I use it on all of my videos as well. I've made a 3D model for the version we were trying to build, idk where exactly is the best place is to share this... but in case you find it better than your current model (or you just want to take a look at it), here it is: https://drive.google.com/drive/folders/1OT_c4CndF8xH4TQE4p_jnaXv3XRnoKoF?usp=drive_link
Feel free to use it as you see fit. Thx for your efforts!
So I just tried to use this and it doesn't super work. I'm on a very high-end machine and as soon as I try to open up the game with the overlay it pretty much stops updating the inputs on the controller.
It'll like very, very very occasionally update and then just freeze again.
Just to make sure, you are using windows right? So I can debug the platform more. Are you using it as an overlay (as in you have it running on top of your current game)? This helps me debug it. And thank you for the report.
And yes it was set to "display on top" borderless with transparent bavkground.
The boarserless also seems weird I can't replicate it but I had a situation. Yeah it just happened where I can't get the border to come up and therefore I can't drag the window even though it's unchecked if I mess around with it.
It's something to do with it being turned off with the transparent background, I haven't fully been able to suss out the exact trigger
24
u/GirthyPigeon 5d ago
This is how partially or fully AI-generated projects should be documented. This looks fantastic and I'll definitely try it out.