Version 4 is about 50% done. Here's all the new stuff we have so far.
Some strokers can move along multiple axes. Some vibrators and rotators have multiple motors. In v3, it's not possible to use such devices to their full potential because it doesn't have a concept of a device having multiple similar features.
In v4, this is no longer the case. Now devices have so-called Tracking Settings. You can set each device feature to track a different body part and/or a different character. You can also set them, using the new Phase Shift setting, to be synced to a different frame within the animation loop. And of course, you can also disable them selectively.
All of this means I can finally reprogram my DIY wheel toy to impersonate one UFO TW instead of two Synchros. And so I did.

No more bridge app, this baby is talking straight to Intiface.
The grand vision is to let you select which axis to track (XYZ), and to be able to reenact both linear movement and rotation as well, but that is still a work in progress; right now the Axis and Movement Type settings don't do anything. (Admittedly, this is not top priority, TCode devices are about the only ones that will benefit from this, and Buttplug doesn't have a complete feature mapping for those yet).
This one is pretty straightforward if you're familiar with how vibration patterns work. Stroking patterns implement the same core idea for strokers with Smooth Stroking capability.

There are three built-in stroking patterns to choose from, each one has its own charm. You can also create your own pattern, just like with vibrators.

Strokers, rotators, vibrators and pressure controllers now all use the same logic for deciding how much "intensity" to apply - whatever that means in their respective contexts.

This, in one fell swoop,
Introduces cycle-based and speed-based stroking lengths for strokers while preserving the old Stroke Length Realism behavior (by setting the Intensity Mode to Stroke Length and the Intensity Scale to whatever your Realism value used to be),
Reintroduces the old speed-based vibration intensity behavior that was only available in Koikatsu, but for all games and with cycle-based and stroke length based alternatives,
Replaces the Rotation Speed Ratio for rotators and adds cycle-based and stroke length based rotation speeds as well,
Changes absolutely nothing for pressure controllers,
Simplifies the code a great deal and makes it easier to maintain.
Note that none of these settings are device-specific, you have to scroll down all the way to the bottom.
The Test button now also takes latency into account.
Fast and Slow Stroke Zones have been replaced with a single Stroke Zone setting.
Each stroker now has an Orgasm Shake Zone, and orgasm shaking now happens at the device's max refresh rate (Updates Per Second) to avoid overwhelming devices with piled up packets. If someone wants the old behavior back, I'll consider reinstating the shaking frequency option as an advanced setting. But I'd really prefer not to. It can introduce huge lags and make it seem like the mod is broken.
Features added to an existing device by new versions of Buttplug are no longer ignored by LoveMachine.
Fixed range sliders sometimes not having the white band between the knobs (I think).
Removed the now-obsolete settings Strokes Per Minute, Enable Pressure Control, Speed Sensitivity Range, Rotation Speed Ratio, and Stroke Length Realism.
Uninstalling then reinstalling using the installer no longer results in BepInEx being skipped.
Things I will definitely add:
Multi-axis tracking (mostly useful for OSR2/SR6)
Better syncing for animations that are asymmetric (e.g. the up-stroke takes longer than the down-stroke)
Individual stroke lengths for animations with multiple strokes (mostly useful for KK Studio scenes)
Track the stroke depth along with the stroke length for better realism
Things I want to add but might not be able to:
Real-time tracking (could be used on games that are impossible to support right now, such as Noki Studio games)
A plugin you can configure to add basic LoveMachine functionality to unsupported games using a relatively simple UI (mostly useful for small indie games that wouldn't be worth adding official support to)
I've also noticed some minor issues during testing that I have yet to iron out.
There's still a long way to go, but v4 is looking pretty good for now. Posting a preview build after this post.