EdgeLoop Update v1.1.3: Autonomous Biofeedback Edging System

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.

55 Likes

This is interesting. Ordered a HRM. Hopefully I’ll get to try this out Saturday or Sunday. Any tips? Is the stop button like the edge button if your heart rate doesn’t do the trick?

1 Like

Please let me know how it goes! Stop button is basically a kill switch. It will completely stop the session, and the timer and metrics. When you start the session, the start button turns into a pause button (for lube, water breaks, too close, etc) but the idea is that you set your max heart rate to around 10-15 below the your heart rate when you actually orgasms. for me thats around 140, so that became default.

when you press the force orgasm butt, it starts creeping up the max heartrate till you orgasm.

1 Like

With the Handy 2, it seems like it’s receiving a position command rather than speed. At 100% it just locks to position 100 and doesn’t move.

1 Like

Did a short test with the slider. Can’t wait till HRM comes in mail.

Can you add an edge ride. Where stroke goes to the top and not the bottom like the others.

Is the forcing orgasm timed or do you push it when you going past the edge

1 Like

correct - the thought process is, the closer you get to your max heart rate, the more it will slow down to keep you from cumming. if you do reach your target heart rate, the toy will stop. thats what triggers the software to detect an “edge” and stop the toy, when you reach your max heart rate.

I still have a lot of playing with the play settings, and i agree with you, i dont want only short strokes when i’m very close to the edge all the time.

Maybe i put in a button to “only adjust speed, leave stroke at max length?”

i’ll try that, give me your thoughts.

Thanks for the feedback!!

1 Like

9/10/2026 Updates :

  1. Head Play Mode: As your heart rate approaches maxHr, strokeMinPercent smoothly creeps upward from 0% to 75% while strokeMaxPercent stays pegged at 100%. This locks The Handy into the upper quarter of its physical travel, teasing the glans while respecting the 25% minimum stroke safety floor.
  2. Ultimate Milker Cadence: Once heart rate climbs past 40% of your calibration spread, it stops using a static contracted range. Instead, it cycles through four distinct stroke profiles every 2.5 seconds (base tickle $\to$ glans tease $\to$ mid-shaft $\to$ deep dive), breaking up mechanical predictability while the prostate vibrator cross-fades up to full power.
  3. Always Full Length Toggle: When checked, it immediately overrides all mode contractions and forces strokeMin: 0 and strokeMax: 100 to be sent to The Handy’s /slide endpoint, giving you biofeedback speed regulation while retaining maximum physical travel.
3 Likes

This sounds absolutely amazing! Does your app have support for rotational devices through Intiface? Rotational devices seem to take commands differently compared to strokers and vibrators.

1 Like

It doesn’t currently, mainly because I don’t have one and don’t have a good way to test, but I can attempt to add it if you tell me what type of device it is and we’ll see how good Gemini is it figuring it out LOL. It’s done pretty good so far. This was basically 4 hours of me letting my autism, ADHD, and OCD run wild and vibe coding the hell out of it LOL

Thanks for your response, Zersty. I have a Vorze A10 Cyclone that is supported through Intiface.

As far as I know, running wild is how people create cool stuff. :zany_face:

:rocket: EdgeLoop Update: Multi-Axis Support, Head Play Mode & UI Overhaul

  • Rotational & Thrusting Hardware Support: Added dynamic actuator detection for Intiface Central, introducing native support for rotational toys (e.g., Vorze A10 Cyclone) and reciprocating crank machines (e.g., Lovense Sex Machine). Speeds scale inversely with heart rate just like linear strokers, and rotational axes automatically reverse spin direction upon hitting an edge cutoff to disrupt sensory accommodation.

  • New “Head Play” Experience Mode: Introduces glans-focused teasing by dynamically contracting stroke boundaries upward to isolate the top 25% of travel as heart rate climbs toward your climax ceiling.

  • Dynamic Cadence for “Ultimate Milker”: Replaced static stroke shortening with an active 4-phase polyrhythmic cadence (short base, head tease, mid-shaft sweep, and full dive) that cycles every 2.5 seconds at higher arousal levels to eliminate mechanical predictability while surging secondary prostate milking to 100%.

  • “Full Length Strokes Only” Sliding Switch: Replaced the checkbox with a modern animated toggle switch that dynamically displays “Full Length Strokes Only” when engaged, ensuring complete 0–100% physical travel across all modes.

  • Balanced Dual-Column Desktop Cockpit: Restored the wide two-column layout to prevent vertical scrolling on desktop monitors. The Manual HR Simulator has been moved to the bottom of the left column beneath the session controls and metrics, keeping real-time telemetry on the left and mode/duration settings on the right.

1 Like

how accurate is the heart rate thing? i know i’ve seen a lot of different ways to detect the edge, but they seem to be less accurate than the moon phases.

Thanks for the update! I’ll give it a try once I receive my heart rate monitor in the mail

1 Like

This is exactly what I was thinking it needed. Can you add those different stroke patterns to an on off for each stroke setting. I haven’t got my HRM yet but I’m thinking one steady stroke will be more numbing then pleasure but idk for sure. I do like where this is going tho.

1 Like

if your just wanting different stroke patterns to a set pace, i would look at Player | The Edgy

not mine, but i’ve used it and like it.

adding features that dont integrate the heart rate monitor is just outside the scope of what i’m wanting to build with this app.

Thanks for the idea though! keep them coming! excited to see what you think when your HRM comes in!

@X333 with the heart rate max set at 140, it does a great job of stopping me and holding on the edge without cumming. thats kinda the design philosphy, you have to know your body well enough to have a rough idea of where your heart rate lands during orgasm, and set it 10-15 bpm below that seems to be my happy spot.

If i set it at 155-160, i’ll make me cum. if i keep it at 135-140, it will edge/deny me over and over again, and is quite frustrating, but i’ve gone over 2 hours with it working me over without cumming. Thats using the handy 2 pro and the lovense edge 2.

1 Like

interesting. what heart rate monitor would you suggest for this?

@X333 i use a pixel watch 2, but only because its what i had. it works well enough, but i think theres some inexpensive heart rate only bluetooth things on youtube in the 30-50 dollar range.

Obviously i havent tested them, but by design, this will work with any Bluetooth BLE Heart Rate Monitor.

is the secondary channel purely vibrators and stuff, or does it support linear rail stuff like OSSM?

i have the software programmed to be able to control strokers, fucking machines, vibrators, rotational devices, and such through Intififace, i would say just try it and let me know! I tried to give some control over what role each control axis plays.