-
Notifications
You must be signed in to change notification settings - Fork 21
Add Coyote 3.0 support (experimental) #26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
add inactivity_reduction volume setting to restim.ini
- Add 13 new threephase patterns - Implement pattern service architecture - Fourphase moved to same design but not extended - Add pattern preferences UI to Preferences with enable/disable controls and .ini storage - Enhance volume widget with red line master volume indicator - Add Windows run.bat script for easy startup - Added a (currently unused) amplitude system for pattern shape scaling - default=1.0 which is the full -1 to +1 ranges
…hancement Threephase patterns enhancement
* remove unused signal * refresh patterns in combobox after closing preferences dialog * use OK/Apply/Cancel pattern in preferences dialog instead of immediately saving changes * use *.ui files and code generator for preferences dialog
Patterns and Volume Display Enhancement
This already was the case for audio-based stim.
- Combined Coyote device settings with pattern preferences system - Added both bleak (Coyote) and stm32loader dependencies - Resolved merge conflicts by integrating both feature sets
- Integrated Coyote smoothing settings with pattern preferences system - Combined ema branch changes with latest master updates - Resolved merge conflicts in settings.py
…l jitter; simplify envelope preview. Remove full-range LFO sweep; keep per-pulse intensity smoothing.
…nel state with set_new_packet for readiness. No behavior change to scheduling.
… by horizon, pop 4 pulses per packet, atomic A+B updates. Keep debug prints and proactive scheduling when queues low.
…minate A/B duplication. Controllers manage queues, smoothing, and packet assembly; algorithm orchestrates and schedules. Keep debug prints.
…annelController instances to avoid AttributeError during construction.
…amp residual on bounds; fix queue debug to show coverage not absolute end time. Keep debug prints.
…e on durations: depth from pulse_width (normalized), speed from carrier (mapped to 0.5–5 Hz), combined with pulse_interval_random jitter. Keep average rate anchored to pulse_frequency via fractional ms accumulator. Debug logs include texture info.
…ent residual blowup on clamping and bound residual to ±0.49ms. This preserves funscript base while allowing jitter/texture within limits.
…se float headroom up/down; symmetric sine when both sides available; one-sided rectified-sine with DC removal when at a boundary; keep zero-mean so average rate stays at pulse_frequency. Improve debug to show tex_up/tex_dn.
…l's preferred range. Normalize using kit pulse_freq_limits, then scale to channel [min,max]. Update debug to show pf_raw/pf_norm/mapped.
…: repurpose Coyote envelope widget to 'Pulse Period Preview (last 2 s)'; remove waveform dropdown; draw pulses over time with normalized duration per channel range; stop polling algorithm envelope.
…pulses; decimate drawing to ~200 points; dots now span the full width over time rather than clustering at the right edge.
…normalized duration across the 2s window, add intensity dots and right-side current Hz labels, add light grid. Decimate to ~300 points for performance.
…ax, jitter %, count). Keeps polyline + dots but surfaces actionable numbers.
…ection, legend, timer, fetch method, and preview updates in on_pulse_sent. The two per-channel graphs remain as the primary visualization.
- Rename "Min (Hz)" to "Min Freq (Hz)" and "Max (Hz)" to "Max Freq (Hz)" - Makes it clearer these are frequency range controls - Affects both Channel A and B frequency controls
|
Thank you, that is a lot. I'm very busy at the moment as I'm working on some e-stim hardware that is close to completion. It will be some time before I can do a proper review. I do want to give some insight on why I never added support for the coyote. The theory behind Restim is that all alpha/beta coordinates have the same subjective intensity, only the location of the sensation. This requires some elaborate signal generation that the coyote hardware simply cannot handle. The coyote hardware can only do 1D movement with constant intensity instead of 2D, so the alpha/beta coordinate system makes absolutely no sense for the coyote. |
|
I wanted to try this out and stumbled into the Following Error: I cant really Code anything, only fix i found to this was skipping the Battery Subscription... :) |
This PR seeks to delight a wider audience of distressed casual e-stim users ("Coyote owners") with best-effort Restim support for the DG-LAB Coyote 3.0 power box (within limits).
With a new device option in Setup Wizard, Restim can now be bolted straight to the Coyote's square pulse dual-channel crankshaft at its maximum Bluetooth packet rate, mapping barycentric alpha/beta coordinates into a convoluted packet scheduler that feels as surprising as its vibe code reads: raw, immediate and sensibly insightful.
restim.mp4
After calibrating a basic triphase setup (A- and B- to common electrode), proud Coyote 3.0 owners find themselves with a consumer-grade gateway substance to higher fidelity DIY stereostim kits - no soldering required!
It works on Windows, macOS and Linux. The new pulse graph works without a Coyote connected, which helps with experimentation. Debug Logging can be enabled in Settings. More algorithm settings will be added.
E-Stim Underdog for TENS Refugees
Historically, Coyote owners missed out on the multi-axis triphase funscript revolution pioneered by Restim and much digital signal processing research was lost on them.
After impulse buying a $84 power box with a USB-C port, owners initially find themselves condemned to fall asleep to the same 'breathing' or 'heartbeat' massage playlist from a Chinese smartphone app. Post-electrocution clarity leads to sunk cost experimentation amongst a growing number of howlers.
One such study concluded: "the Coyote 3.0 keeps enticing disillusioned Redditors to fry OEM parts to the tune of a calibrated-but-tired Dropbox chockfull of confusingly-named MP3 files from 2004". After inevitably losing a partner to such experiments, accessories like Paw Print buttons (sold separately) can be used to shock strangers over a WebSocket.
Another popular add-on is a UK-made 'triphase cable' ($30), which works just as well as (if not better than) a piece of rubber.
Xtoys to the Rescue?
Xtoys has become a household name in the e-stim community.
Unsurprisingly, the final stage of Coyote cope approximates a duct-taped Rube Goldberg relay chain of Xtoys and System Audio plugins to convert funscript into stereo audio (from a strategical Restim instance or two). After audio latency, Xtoys re-interprets said beeps into an unfaithfully scrambled pulse train at a padded packet rate using a closed-source algorithm, whilst VLC is kept in sync with a spare hand.
In expert testing, Xtoys ignored the right channel (confirmed via DevTools), so despite occasional surprises from Windows alerts or Siri activations, a 'triphase' effect remained absent (even for those committed to the British cable). Thankfully, setting everything up was at least half of the fun!
Restim for Coyote 3.0
Coyote owners can't ask for much from a free third party application like Xtoys. The first party bar is also low, as the Coyote itself is marketed as a step-up from the garden variety TENS box without any software at all.
Thankfully, the Coyote 3.0 hardware is capable of more joy than is typically believed. All software innovation (like Howl app for Android by @Amethyst-Sysadmin) can be considered (and experienced as) a howling relief from the future. Awoo!
restim2.mp4
Existing Restim functionality is unaffected and mostly extends to the Coyote, including the new built-in patterns by @abacaba-100.
MACB, Clutch, Magik Number 3, Electric Dreams, Tranquilizer, the Euphoria series (h/t Emily) and most other Restim ecosystem content now produce an interesting triphase experience with the Coyote. Special thanks to @edger477 for converting many creations to Restim. A wider variety of content makes it more rewarding to work on these projects.
About this PR
Most diffs live under
device/coyote; coyote/algorithm.py drives most of the signal. All is highly experimental and frequency modulation ('texture') is subject to change. It goes without saying that there are many ways to skin a dog.As a work in progress (draft), this fork is nowhere near completion and will likely see continued development even if the Coyote isn't deemed a worthy platform for
master.coyote.mp4
All feedback is welcome. Experiment at your own risk!