Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

XOutputRedux

Streamlined Xbox controller emulator for Windows. Maps inputs from multiple gaming devices (steering wheels, joysticks, gamepads) to a single emulated Xbox 360 controller.

Features

  • Multi-input to single output - Map multiple physical buttons to the same Xbox button using OR logic (e.g., wheel B button + handbrake = Xbox B)
  • DirectInput & RawInput support - Works with virtually any gaming controller
  • Force Feedback - Route rumble/vibration from games to physical devices (steering wheels, gamepads with FFB)
  • Device Hiding - HidHide integration to hide physical controllers from games, preventing double-input issues
  • Game Auto-Profile - Automatically start profiles when specific games launch, stop when they exit
  • Profile management - Create, duplicate, and switch profiles easily
  • Interactive mapping - "Press button to map" configuration interface
  • System tray integration - Minimize to tray, double-click to restore, run in background
  • Quick Add Game hotkey - Press Ctrl+Shift+G while a game is focused to add it to the running profile
  • CLI support - Command-line interface for scripting and automation
  • Toast notifications - Windows notifications when profiles start/stop or games are detected
  • Backup/restore - Export and import all settings via .xorbackup files
  • Crash reporting - One-click GitHub issue creation with diagnostic info
  • Axis response curves - Per-axis sensitivity tuning with visual curve preview (less sensitive near center for high-rotation wheels, or more sensitive for low-rotation)
  • Inner/outer deadzones - Per-axis deadzone configuration to eliminate drift or snap to full deflection
  • Digital-to-axis mapping - Map HAT switches or D-pad buttons to analog stick axes (e.g., HAT left/right → RightStickX)
  • Visual preview mode - Test mappings in the profile editor without creating a virtual controller
  • Plugin system - Optional plugins for device-specific features (e.g., Moza wheel settings)

Requirements

Installation

Download

Download the latest release from the Releases page:

  • Setup installer (XOutputRedux-x.x.x-Setup.exe) - Recommended, includes options for PATH and startup
  • Portable mode - Drop a portable.txt file next to XOutputRedux.exe to store all config in a data\ subfolder (useful for USB drives or no-install setups)

Prerequisites

  1. Install the ViGEmBus driver (required)
  2. Optionally install HidHide for device hiding (XOutputRedux will prompt to install if missing)

Usage

GUI Mode

Simply run XOutputRedux.exe to open the graphical interface.

  1. Devices tab - View all detected input devices with "Listen for Input" highlighting
  2. Profiles tab - Create and manage mapping profiles
  3. Games tab - Configure game-to-profile associations for auto-start
  4. Status tab - Check driver status and active emulation
  5. Options tab - Configure startup behavior and settings
  6. Test tab - Visual Xbox controller showing real-time output state
  7. About tab - Version info and links to GitHub

Creating a Profile

  1. Click "New Profile" and enter a name
  2. Double-click the profile to edit (or right-click → Edit)
  3. In the profile editor:
    • Double-click an Xbox output to start capturing, or select and click "Capture Input"
    • Press the button or move the axis you want to map
    • Add multiple inputs to the same output for OR logic
    • Configure Force Feedback routing in the "Force Feedback" tab
    • Set up device hiding in the "Device Hiding" tab
  4. Click "Save" to save your mappings

Tip: If a profile is running, you can still view its mappings (read-only mode).

Running a Profile

  1. Select a profile from the list
  2. Click "Start" to begin emulation
  3. The app will minimize to system tray and continue running
  4. Click "Stop" or right-click the tray icon to stop

CLI Commands

# Start the default profile (launches GUI if not running)
XOutputRedux start

# Start a specific profile
XOutputRedux start "My Profile"

# Stop the running profile
XOutputRedux stop

# Check status of running instance
XOutputRedux status [--json]

# Enable/disable game monitoring
XOutputRedux monitor on
XOutputRedux monitor off

# List detected input devices
XOutputRedux list-devices [--json]

# List available profiles
XOutputRedux list-profiles [--json]

# Show help
XOutputRedux help

Stream Deck Integration

XOutputRedux includes a native Stream Deck plugin for controlling profiles directly from your Stream Deck.

Installation:

  1. Download com.xoutputredux.streamDeckPlugin from the Releases page
  2. Double-click to install

Available Actions:

  • Start/Stop Profile - Toggle a specific profile on/off (select from dropdown)
  • Game Monitor - Toggle game auto-profile monitoring on/off
  • Launch App - Open the XOutputRedux GUI

The plugin communicates directly with the running GUI via IPC. If the GUI isn't running when you press an action, it will start automatically (minimized to tray).

Plugins

XOutputRedux supports optional plugins that add device-specific features to the profile editor.

Moza Wheel Plugin

Adds a Moza Wheel tab to the profile editor with hardware settings that are sent directly to your Moza wheel base when a profile starts. This lets you store per-game wheel settings inside your XOutputRedux profiles.

Requirements:

  • Moza racing wheel (R5, R9, R12, R16, R21, etc.)
  • Moza Pit House running (the plugin communicates via Pit House's SDK)

Available Settings:

Setting Range Description
Wheel Rotation 90-2700° Total steering angle lock-to-lock
FFB Strength 0-100% Overall force feedback intensity
Max Torque 50-100% Caps peak force to prevent jarring jolts
FFB Reverse On/Off Flip FFB direction
Damping 0-100% Resistance that slows wheel movement
Center Spring 0-100% Force pulling wheel back to center
Natural Inertia 100-500% Simulated weight of the steering wheel
Speed Damping 0-100% Resistance increasing with turning speed
Natural Friction 0-100% Constant grip resistance, wheel feels "connected" even without game FFB
Speed Damping Start Point 0-100% Threshold speed where Speed Damping engages
Hands Off Protection 0-100% Safety feature, caps torque when hands leave wheel

Installation:

  1. Download XOutputRedux-x.x.x-MozaPlugin.zip from the Releases page
  2. Create a plugins\Moza folder next to XOutputRedux.exe
  3. Extract the ZIP contents into that folder

Your directory should look like:

XOutputRedux.exe
plugins\
  Moza\
    XOutputRedux.Moza.Plugin.dll
    MOZA_API_CSharp.dll
    MOZA_API_C.dll
    MOZA_SDK.dll
  1. Restart XOutputRedux — the "Moza Wheel" tab will appear in the profile editor

Advanced FFB Features:

  • ETSine Rumble Translation - Converts Xbox rumble motor data to Moza SDK's native ETSine periodic effect for actual wheel vibration (instead of a dull constant force push)
  • Ambient Effects - Always-on Spring, Friction, and Damper effects that layer on top of game FFB, giving the wheel a baseline "driving feel" in arcade games with no native wheel support

Note: The plugin is completely optional. XOutputRedux works exactly the same without it. Profiles with Moza settings will still load if the plugin is removed (the data is preserved in the profile JSON but the tab won't appear).

Startup Options

# Start with a specific profile
XOutputRedux --start-profile "MyProfile"

# Start minimized to system tray
XOutputRedux --minimized

# Combine options
XOutputRedux --start-profile "MyProfile" --minimized

Building from Source

# Clone the repository
git clone https://github.com/d-b-c-e/xoutputredux.git
cd xoutputredux

# Build
dotnet build -c Release

# Run
dotnet run --project src/XOutputRedux.App

# Run tests
dotnet test

# Create release (requires Inno Setup 6)
.\scripts\release.ps1

Project Structure

XOutputRedux/
├── src/
│   ├── XOutputRedux.Core/           # Core abstractions, config, interfaces
│   ├── XOutputRedux.Input/          # DirectInput, RawInput device handling
│   ├── XOutputRedux.Emulation/      # ViGEm Xbox controller emulation
│   ├── XOutputRedux.HidHide/        # HidHide integration
│   ├── XOutputRedux.App/            # WPF GUI + CLI application
│   │   └── Assets/                  # Icons, banners, branding assets
│   ├── XOutputRedux.StreamDeck/     # Stream Deck plugin
│   ├── XOutputRedux.Moza.Plugin/   # Moza wheel plugin (optional, built separately)
│   ├── XOutputRedux.Moza.Helper/   # Out-of-process Moza SDK helper (keeps SDK alive)
│   └── XOutputRedux.HidSharper/    # Forked/slimmed HidSharp library (Windows-only HID)
└── tests/
    └── XOutputRedux.Tests/

Current Status

v0.9.7-alpha - Moza FFB enhancements (ETSine rumble, ambient effects, 3 new SDK settings); portable mode with release ZIP; code signing evaluation complete.

What's Working

  • Device detection (DirectInput and RawInput/HID devices)
  • Stable device IDs - Devices maintain same ID across USB port changes (VID/PID-based)
  • Profile creation and editing with interactive "press to map" capture
  • Double-click to capture - Double-click any output to start input capture
  • Real-time input monitoring with output highlighting in profile editor
  • Multi-input OR logic (multiple buttons can trigger same Xbox output)
  • ViGEm integration for Xbox 360 controller emulation
  • Force feedback routing from games to physical devices
  • HidHide integration (auto-hide devices, auto-install prompt)
  • Application whitelist management - Add apps like Moza Pit House to see hidden devices
  • System tray with minimize/restore
  • Device renaming and info display
  • Verbose logging for debugging device issues
  • Dark mode UI theme with dark tooltips and dialogs
  • Synthwave branding - New logo and gradient color scheme
  • Visual Xbox controller test display (reusable in both main window and profile editor)
  • Options for startup profile and "Start with Windows"
  • Profile editor with tabbed interface (Mapping, Test, Force Feedback, Device Hiding) and collapsible Advanced Settings
  • Test tab in Profile Editor - Start/Stop profile and see live Xbox controller output without leaving the editor
  • Per-axis sensitivity/response curves with visual curve preview
  • Live profile testing in editor - Start/stop profiles directly from the editor's Test tab with real-time controller visualization
  • Toast notifications - Windows notifications when profiles start/stop
  • CLI/IPC - Control running instance from command line (start, stop, status, monitor on/off)
  • Default profile - Set a profile as default for quick CLI start
  • Add to System PATH - Option to add XOutputRedux to PATH for CLI access from anywhere
  • Game auto-profile - Automatically start/stop profiles when games launch/exit
  • Steam game browser - Browse installed Steam games with smart executable detection
  • Stream Deck plugin - Native plugin with profile toggle, monitoring toggle, and launch actions
  • ViGEmBus auto-install - Prompt to download and install if missing
  • Auto-update - Check for updates on startup with in-app download and install
  • Crash reporting - Detailed crash dialog with one-click GitHub issue creation
  • Backup/restore settings - Export all settings and profiles to .xorbackup file for easy migration
  • About tab - Version info, GitHub links, and acknowledgments
  • Quick Add Game hotkey - Ctrl+Shift+G adds focused game to running profile (configurable in Options)
  • Plugin system - Optional device-specific plugins loaded from plugins/ folder
  • Moza Wheel plugin - Per-profile wheel settings (rotation, FFB, damping, etc.) sent via Moza Pit House SDK

Devices Tested

  • MOZA R12 steering wheel base (DirectInput)
  • Turtle Beach VelocityOne Multi-Shift gear shifter (RawInput)
  • X-Arcade dual joystick (RawInput)

Coming Soon

  • Chocolatey package - Easy install/update via choco install xoutputredux

Background

XOutputRedux is a modernized reimplementation inspired by the archived XOutput project.

XOutputRedux vs XOutput

Feature XOutputRedux XOutput
Framework .NET 8.0 (current LTS) .NET 5.0 (end of life)
Mapping Logic OR logic (multiple inputs → one output) One-to-one mapping
Emulation ViGEmBus only ViGEmBus + SCPToolkit
Device Hiding HidHide (actively maintained) HidGuardian (deprecated)
Architecture Simple WPF app + CLI WPF + REST API + WebSockets
Controller Types Xbox 360 only (universal support) Xbox 360 + DualShock 4
Game Integration Auto-profile with Steam browser Manual profile selection
Automation CLI + Stream Deck plugin + IPC Web API only
Settings Backup One-click export/import Manual file copy
Crash Reporting One-click GitHub issue creation None

Why XOutputRedux?

  • Simpler: No web server, no REST API, no WebSockets - just a clean WPF app
  • Focused: Xbox 360 emulation covers 99% of games; DS4 adds complexity without benefit
  • Modern: Built on current .NET with maintained dependencies
  • Powerful: OR mapping lets you combine inputs (wheel button + handbrake = same Xbox button)
  • Scriptable: Full CLI control for gaming frontends, launchers, and Stream Deck

License

MIT License

Acknowledgments

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages