EdgeLoop v1.1.3: Autonomous Biofeedback Edging System
EdgeLoop is an open-source, client-side biofeedback edging engine. It links a Bluetooth heart-rate monitor to your toys and changes the stimulation in real time, so you can stay on the edge without riding a speed slider.
Live, 1.1.3: https://edgeloop.app](https://edgeloop.app
Dev, 1.1.4 https://dev.edgeloop.app](https://dev.edgeloop.app/)
Wiki: https://wiki.edgeloop.app](https://wiki.edgeloop.app/)
Discord:EdgeLoop
Source: GitHub - marshallmims/edgeloop: Edgeloop.App - Autonomous Biofeedback Edging System · GitHub
Dev is a separate site. Pairings and saved settings do not carry over from the live app. The footer says DEV there. That badge is the host, not a second version number.
Wiki
The questions that keep coming up are going into the wiki: how to let the browser see Bluetooth, which heart-rate monitors show up, how to put one into a mode the app can hear, and what the page does with a pulse once it has one. Device notes are what people have actually gotten working, not a claim that every strap on the market has been tested.
It is a work in progress. Pages will get added and corrected as more setups get reported. It will get better. If a step is wrong on your machine, say so on Discord.
Why I built it
I kept finding long videos I wanted to watch with my Handy, and most of them had no funscript. The scripts that did exist were written for someone else’s body. I would either finish too fast to last the video, or the script was so slow it could not keep me going.
Changing a speed slider from a recliner, a TV, or a headset kills the mood. I wanted the toy to drive itself, with some surprise in it, and I wanted to last as long as I meant to. A loop that watches your pulse does not get bored and does not look away.
It is not only for The Handy. The point is any toy, any anatomy. If you have a partner online or in the room, you can set the session for that person’s body and toys and then talk, tease, or do something else while EdgeLoop holds the edge.
Credit
A huge thanks to @zflippz on Discord (@Knot here). Testing his early heart-rate work on the Handy server is what made me believe I could take this in my own direction. EdgeLoop would not exist without that.
Thank you to everyone in this thread. 154 replies is not a pile of feature requests to me. It is the reason I keep opening the editor. A note that something felt good, a careful bug report, a “this is too fast even at the bottom of the slider,” a resting heart rate that is not 70: those change the app, and they also keep me wanting to build the next piece. I read them. They matter more than the feature list.
Cactus (chalyshka / Purple Palm) has been building his own public AGPL fork. We started from the same app and then drifted, on purpose for now. His code is public. If something of his is in EdgeLoop, the credit stays with him. We both want to sit down later and put the two builds back into one app. If he finds something unsafe in a release, he will say so, and I will too.
What 1.1.3 does
It still runs in the browser. No account, no subscription, nothing uploaded.
You set a resting heart rate (default 70, and it can go down to 30), a single max for one toy, and a dual max for both toys together. When a stroker and a second toy are both live, the ceiling is the dual number. There is no hidden 15 BPM offset anymore. Calibration can write those climax numbers for you: one run with the primary toy, and later a run with both. You can also type them.
Hold to is where the toys ease off and where Crawl or Full Stop starts. The edge counter waits until your pulse actually reaches the max, and it releases 5 BPM under that max. At the default of 100% those two marks are the same number.
Strokes and goals sit on one card. Strokes include Classic, Prostate Milker, Glans Protector, Head Play, Ultimate Milker, Ruin & Leak, and Finisher (speed rises with your pulse and stays full on the mark, for when you want to go over). Goals include Tease, Survival, Edge Training, The Oracle, and an NNN practice calendar: a start and end date, missed days roll forward, and at the quota it can finish you or deny you.
Other pieces people in this thread asked for, now on the live build:
- Slowest and fastest speed under the intensity slider, so the bottom of the old slider is no longer as fast as it can go. A real stop is still a stop.
- Keys and a controller. Space starts or pauses, Escape stops (and closes an open panel first), left is Came Early, right is Force Orgasm. Up and down pulse the VacuGlide valves when that toy is connected.
- Pop out on desktop Chrome or Edge: a small cockpit you can keep over a fullscreen video, with Start, Stop, Came Early, and Force Orgasm still tappable. The button stays hidden on a phone, because that floating window cannot take taps there.
- Cue lines on the dashboard. Speech is off until you turn it on. If you install a browser voice such as Kokoro, it shows up in the list.
- Intiface vibrators can pulse instead of sitting on one level.
- OSSM through Intiface is treated as one motor, so Position and Oscillate are not driven together.
- VacuGlide 2. Speed follows the channel you pick. The valves are buttons, not something the app holds open. STOP stops the motor and closes both valves. Keep the power button in reach. If you have notes on it, tell us on Discord.
- If the heart-rate strap drops and will not reconnect, turn it off and on, or forget it in the computer’s Bluetooth list and pair it again. A reboot is not required. The toys pause either way.
- Funscript export and session history are still local. Remote control is still a peer-to-peer room link.
T-Code over USB (OSR2, SR6, OSSM) is there for Chrome or Edge on a desktop, without Intiface.
Dev 1.1.4: the video player
This is not on the live site yet. It is on https://dev.edgeloop.app so it can be tried before it ships.
The Player button in the header loads your video and your .funscript from disk. Nothing is uploaded. Intiface linear toys play the script stroke for stroke. The Handy can too: Beat sync (firmware 4 or later) sends the upcoming strokes over Handy’s own API, a few seconds ahead, so your pulse can still change them. With Beat sync off, the Handy follows the script’s rhythm, speed and depth, instead of each point.
There are two ways the pulse limits that script:
- Shorten and skip is Cactus’s limiter. Strokes get shorter as you climb. At the edge the toy skips strokes and the video keeps playing, so the script and the picture stay together.
- Keep the script leaves the shape alone. A slow long stroke stays a slow long stroke. Your pulse only turns the intensity down. A hold written in the script is a real stop, and the next stroke starts at whatever intensity your pulse allows.
Choose MP4, M4V, WebM, MKV, MOV, or OGV, plus a funscript with the same name. MP4 (H.264) and WebM play in the most browsers. You can also paste a direct file address (a link that ends in .mp4 or .webm). A page link from a video site will not play. Those sites do not hand the file to another page, so the app cannot keep a script in time with it. Download the video and choose the file.
Please try a short script first, especially Beat sync, and say how it felt.
My setup, and the gaps
I still use a Pixel tablet in landscape, Chrome, Intiface on the tablet, The Handy on Wi-Fi, and a Pixel Watch 2 for heart rate. I watch on a TV or in a headset. I develop on Chrome in Fedora and Windows.
I do not own every toy, strap, or operating system. If something misbehaves, say what you connected and what you saw. That is how the device list and the wiki grow.
License
AGPL-3.0. Fork it, change it, host it. Keep the credit, and if you host a modified copy, publish that source under the same license. It does not become a closed product.
Bugs and ideas: GitHub issues, or Discord. Pull requests are welcome. A merge to main is what updates
https://edgeloop.app. Private security reports can go to support@edgeloop.app. Ordinary help belongs on Discord, where the rest of us can see it.