Releases: countlessbats/SilksongPS5Haptics
Release list
v0.3.4 — Wired haptics without DSX + latency presets
Wired haptics with no DSX, and a latency selector
The big one: wired DualSense now works with nothing else running. No DSX, no
companion app — just plug in USB and go.
Why wired needed DSX before (and doesn't now)
The DualSense leaves its internal audio path unpowered by default, so the
haptic audio we stream to actuator channels 3/4 drained from Windows but moved
nothing. DSX happened to keep that path enabled by continuously sending the
controller HID reports — which is the only reason haptics seemed to require
it, even over USB. The bridge now sends that enable itself (and re-asserts it
so the game can't steal it back), so a plain wired pad just works. DSX-driven
wireless is unaffected and works exactly as before. Opt out with --no-hid.
This also turned out to be the real cause of the earlier "chime plays once,
then haptics go dead" reports — it was the audio path reverting, not a
Bluetooth issue. With the path properly enabled, the 0.3.3 keepalive tone
became a constant felt buzz, so it's been removed. The render-clock watchdog
stays as the genuine stall safety net.
New: Latency presets in the tray menu
Right-click the tray icon → Latency:
- Reliable (default) — survives Bluetooth & busy PCs
- Snappy — lower latency, best on wired USB
- Minimal — lowest latency, wired only (may glitch)
The menu explains the trade-off inline and remembers your choice. Leave it on
Reliable unless haptics feel laggy.
Log
A healthy wired session now shows HID: audio haptics enabled (1 USB controller) and Output: timer-driven, 100 ms latency.
Install: unzip over your Silksong folder, or replace both
BepInEx/plugins/SilksongPS5Haptics/SilksongPS5Haptics.dll and
.../HapticsBridge/HapticsBridge.exe.
v0.3.3 — Bluetooth keepalive + stall self-heal
Bluetooth "haptics go dead" fix
Completes the wireless fix started in v0.3.2. That release stopped the
rapid reconnect loop, but some Bluetooth DualSense setups still lost
haptics after a while: the startup chime worked, then everything went
silent — test chime included — with a clean-looking log. Cause: some BT
audio stacks idle the link when the stream is digitally silent for long
enough, and never resume rendering.
What changed — three layers:
- Keepalive — the bridge now mixes an imperceptible pilot tone
(100 Hz at −56 dBFS) into the haptic channels so the stream is never
digitally silent and the Bluetooth link never idles. Disable with
--no-keepaliveif you ever need to. - Stall detection that can't misfire — the watchdog now monitors the
device's hardware render clock, which always advances while audio is
playing (even silence). If it freezes for ~3 seconds the endpoint has
genuinely stopped consuming audio, and the bridge reopens the session
(render clock frozenin the log). - Gentle recovery — if an endpoint keeps re-stalling, reopen attempts
back off (2s → 30s) instead of hammering it every few seconds, and
reset once a session stays healthy for a minute.
Also fixed: a stall during the startup chime could previously hang the
bridge's audio engine.
Log check: a healthy 0.3.3 session shows
Output: timer-driven, 100 ms latency, keepalive on and no
Reopening audio session lines. An occasional render clock frozen
reopen is the self-heal working.
Reminder for wireless users: if the tray dot is gray / no chime, DSX
isn't running or its BT Audio/Haptics toggle is off — Windows only
exposes the controller's audio endpoint while that's active.
Install: unzip over your Silksong folder, or replace both
BepInEx/plugins/SilksongPS5Haptics/SilksongPS5Haptics.dll and
BepInEx/plugins/SilksongPS5Haptics/HapticsBridge/HapticsBridge.exe.
v0.3.2 — Bluetooth audio stall fix
Bluetooth audio stall fix
Fixes haptics cutting out — and, on older builds, a rapid reconnect loop —
on wireless / Bluetooth DualSense controllers.
The bridge drove the controller's audio endpoint with low-latency
event-sync WASAPI (20 ms). Bluetooth DualSense endpoints don't reliably
deliver the buffer-ready event at that cadence: the render client stops
pulling, the buffer freezes, and haptics stall. Builds carrying the old
stall watchdog reacted by reopening the audio session every few seconds
(the audio session stalled (buffer not draining) → game connect/disconnect
loop some of you saw in HapticsBridge.log).
What changed: the bridge now drives WASAPI in timer/push mode at 100 ms
latency by default, which doesn't depend on that event callback and rides
out Bluetooth transport jitter. On wired endpoints it's indistinguishable.
- New bridge flags:
--latency-ms <n>(default 100) and--event-sync
(opt back into low-latency event mode — only worth it on rock-solid wired
setups; pair with--latency-ms 20for the old behaviour). HapticsBridge.lognow records the active mode, e.g.
Output: timer-driven, 100 ms latency. A healthy session shows no
Reopening audio sessionlines.
Install: unzip over your Silksong folder (same as before), or just
replace BepInEx/plugins/SilksongPS5Haptics/HapticsBridge/HapticsBridge.exe
— the fix is entirely bridge-side.
v0.3.0 — multi-instance support
The bridge now serves multiple game instances at once, mixing their haptic streams into the controller — e.g. a coop host + client running on the same machine (each install needs the mod). Single-game behavior is unchanged.
Also includes the v0.2.1 reliability fixes (device watchdog, chime-anytime).
Install: extract, run Install.bat (point it at each install if you have more than one).
v0.2.1 — bridge reliability
Fixes two silent-failure modes in the bridge:
- Device watchdog: when DSX recreates its virtual DualSense endpoint (controller idle, Bluetooth hiccup) or the controller is replugged, WASAPI can keep "playing" into a dead session without reporting an error. The bridge now detects the endpoint being replaced/removed — or the audio buffer stalling — and reopens automatically within ~3 seconds.
- Test chime anytime: the tray "Play test chime" now works while a game is connected (it previously only worked while waiting for a connection).
Install as with v0.2.0: extract, run Install.bat.
v0.2.0 — first release
Play Hollow Knight: Silksong's shipped-but-unused PS5 haptic waveforms on PC with a DualSense controller — wired, or wireless via DSX (v3.2 beta + DSX+, BT Audio/Haptics enabled).
Install: extract the zip, run Install.bat. It finds your Steam install automatically (or asks — paste the path in any format). Launch the game; first run extracts the haptic data from your own game files, then the controller plays a confirmation chime.
What you get: all 314 authored PS5 haptic waveforms — footsteps, nail strikes, bench rests, bells, bosses — instead of two-motor rumble approximations. Events without PS5 haptic data fall back to normal rumble automatically.
No Team Cherry assets are distributed; clips are extracted locally from the game files you own. Requires a DualSense; .NET Framework 4.8 (preinstalled on Windows 10/11).