Help & Documentation

Introduction#

The Edgy is an edging control application for The Handy. It provides an inverted arousal potentiometer - the higher you turn it (closer to orgasm), the more the device reduces stimulation, keeping you on the edge.

The app has two main modes: Game Mode for live sessions with the device, and Editor Mode for creating and customizing behaviors with visual curve editing.

Getting Started#

The Edgy works with The Handy (WiFi), 750+ Bluetooth toys via Intiface Central, and T-Code devices (OSR2, SR6) via serial. Pick your connection mode in the connection panel.

The Handy - Enter your connection key (found on your Handy account at handyfeeling.com). The app communicates directly with the device through the official Handy API over WiFi.

Firmware v4 or later is required. Visit handyfeeling.com/update to update your device if needed.

Intiface - Install Intiface Central (intiface.com/central), start the server, pair your device via Bluetooth, then enter the WebSocket URL (default: ws://localhost:12345) in The Edgy's connection panel. Supports 750+ devices.

T-Code - Serial devices (OSR2, SR6) connect via USB. Select the COM port and baud rate (default: 115200) in the T-Code tab. Alternatively, you can bridge through Intiface Central.

Note: Bluetooth devices may experience latency with fast commands (vibrato, tremolo). For best responsiveness, WiFi (Handy) or serial (T-Code) connections are recommended.

No device? The app works in simulator mode - all behaviors run locally so you can explore the interface and editor without hardware.

Creator's pick

The Edgy was originally built for The Handy, and it remains the device I use. The WiFi connection gives the best responsiveness for edging sessions.

For the sleeve, I use the TrueGrip Gen 2. The texture make a real difference in how you feel the strokes.

That said, edging is deeply personal - everyone responds differently, so experiment to find what works best for you.

Arousal Knob#

The central knob controls your arousal level from 0% (rest) to 100% (limit). Drag it clockwise to increase, counter-clockwise to decrease. You can also use arrow keys (Β±5) or Ctrl+mouse wheel.

The key concept: as arousal increases, the device automatically reduces speed, amplitude, and increases hold pauses. This creates the edging dynamic - you report your arousal, and the device responds inversely.

25

Try dragging the knob - watch the zone and color change

The knob displays 6 zones with distinct colors: Rest (0-15%, full stimulation), Rising (15-35%), Excited (35-55%), Very Excited (55-75%), Edge (75-90%, emergency braking), and Limit (90-100%).

Behaviors#

Behaviors are movement personalities that define how the device responds to your arousal level. Each has unique characteristics - some tease, some dominate, some are unpredictable.

A behavior is defined by two layers: base curves that control the continuous motion (velocity, stroke zone, amplitude, hold pause), and variations - temporary movement patterns that occasionally interrupt the base motion to add variety and surprise.

The app includes 7 built-in behaviors, plus any custom behaviors you create in the Editor.

🎭
Tease
Teases the tip, surprises with full strokes
πŸ‘‘
Dominant
Firm and controlled rhythm, imposed pauses
πŸ’
Gentle
Fluid caresses, micro-movements at the edge
😈
Cruel
Generous trap then brutal denial - can ruin the orgasm
🎲
Player
Unpredictable - picks from a gesture repertoire
πŸ”₯
Intense
Maximum stimulation, cheats to maintain pressure
πŸ†
Deepthroat
Slow descents, fast pullbacks, gag reflex vibrato

Session Controls & Orgasm#

Start a session with the Start button or Space bar. Once running, use Pause/Resume (Space) and Stop (Escape). The behavior runs continuously, reading your arousal level in real-time.

SpacePlay / PauseEscapeStop

Press the Orgasm button (or O key) to trigger orgasm mode. The device switches to a dedicated orgasm pattern for a set duration. Duration can be Fixed (exact time) or Range (random between min/max).

Funscript Video Mode#

The Edgy can play videos synchronized with .funscript files - the standard format for scripted interactive content. The device follows the script in sync with the video, and your arousal level dynamically modulates the intensity in real-time. This turns any scripted video into an edging session.

Loading Files

Click the video area or drag-and-drop a video file to load it. If a .funscript file with the same name exists in the same folder, it loads automatically. Otherwise, click "Load .funscript" to add one manually. The seek bar shows the script waveform so you can see upcoming intensity.

Behavior vs Funscript

Two playback modes are available: Behavior mode uses your selected behavior pattern (ignoring the funscript), while Funscript mode follows the script. Toggle between them with the Behavior/Funscript buttons below the video. You can switch freely during a session - clicking a behavior automatically switches to Behavior mode.

Arousal Response Remapping

Arousal Response Remapping (ARR) is the core of funscript edging. It modulates the script amplitude based on your arousal level. Open the Funscript Settings (gear icon) to configure the Neutral ARR slider.

At the neutral point, the script plays exactly as written. Below neutral, movements are amplified - the device exaggerates the script. Above neutral, movements are progressively compressed toward the average position. At 100% arousal, the device barely moves. Set the neutral point higher (e.g. 60-70%) to get more edging range before dampening kicks in.

Orgasm Programs

Orgasm programs define what the device does when you trigger orgasm during funscript playback. Open the Funscript Settings to select a program. Four presets are included: Fast & Intense, Progressive, Slow & Deep (default), and Edging Release.

When you press the Orgasm button (or O key), the selected program temporarily overrides the funscript. The device follows the orgasm curves instead of the script. The program runs through its duration, then continues with the base curve values - the video keeps playing throughout. You can cancel the orgasm at any time. Create custom orgasm programs in the Editor (Orgasm Funscript tab).

To create or customize orgasm programs, switch to Editor Mode and select the "Orgasm Funscript" tab in the sidebar. Each program has its own velocity, stroke zone, amplitude, and hold curves - plus optional variations. Programs created there appear in the Funscript Settings selector.

Fullscreen Controls

In fullscreen video mode, touch and mouse gestures let you control the session without leaving the immersive view:

  • Single tap - show or hide the control overlay
  • Double tap - play or pause the video
  • Swipe up/down - adjust arousal level (mobile)
  • Back button - exit fullscreen (mobile)
  • Mouse wheel - adjust arousal level (desktop)

Tips: Use Cinema mode for a focused viewing experience with all controls accessible. In fullscreen, behavior shortcuts and variations are overlaid on the video (desktop). Favorite your most-used behaviors to access them quickly during playback.

Editor Overview#

The Editor Mode lets you create and customize behaviors using visual curves. Each parameter (velocity, stroke zone, amplitude, hold) is defined as a curve that maps arousal level to a value.

The editor has 3 columns: a behavior browser on the left, the curve editor in the center, and a real-time emulator on the right. The Edging tab defines normal behavior, the Orgasm tab defines orgasm-specific overrides.

Understanding Curves#

Every behavior parameter is controlled by a curve. The X axis is arousal (0-100%), the Y axis is the parameter value. Click to add points, drag to move them, double-click to remove.

Velocity curve: controls stroke speed. Typically decreases as arousal rises (slower near the edge).

Velocity
033671000%25%50%75%100%
30%

Drag points to reshape the curve - click to add, double-click to remove

Stroke Zone: two curves (min/max) define the physical movement range. The device moves between these boundaries.

Stroke Zone
03367100

Stroke zone min/max curves

Amplitude curve: what portion of the stroke zone is used per stroke. At 100% the full zone is used, at 50% only half.

Hold curve: pause duration (ms) between strokes. Typically increases at higher arousal to slow things down.

Range mode adds a second curve - the engine picks a random value between the two curves for each stroke, adding natural variation.

Stroke Zone#

The stroke zone defines the physical boundaries of movement. Stroke Min sets the bottom limit, Stroke Max sets the top limit. The visualization shows the active range.

Amplitude determines how much of the zone is actually used per stroke. A narrow amplitude within a wide zone creates subtle movements.

Stroke Zone23% - 77%
2377
40%

Adjust the sliders to see how stroke zone and amplitude interact

50%
50%

Device simulator

Variations#

Variations are temporary movement patterns that layer on top of the base curves. At each engine cycle, a weighted random draw decides whether a variation fires or the base motion continues. When a variation is selected, its shape takes over the device for one or more loops, then hands back to the base curves. This creates moments of surprise and personality within a behavior's steady rhythm.

Base curves alone produce a smooth, predictable motion - pleasant, but eventually monotonous. Variations break that predictability. A sudden slow full stroke, a quick vibrato, a lingering hover at the top - these are what make a behavior feel alive. They are entirely optional: a behavior with zero variations still works perfectly using its base curves alone. But adding even one or two variations transforms the experience from "mechanical" to "expressive".

Shape

The shape is the heart of a variation. It defines the exact movement pattern the device will follow. The X axis is time in milliseconds, the Y axis is position from 0% (bottom) to 100% (top). You draw the shape as a curve with control points - the device will interpolate smoothly between them.

A simple full stroke is just three points: 0% at 0ms, 100% at 500ms, 0% at 1000ms. A sinuous wave might be: 10% β†’ 70% β†’ 30% β†’ 90% β†’ 10% over 1200ms. You can create anything: quick jabs, slow plateaus, complex multi-point patterns. The shape can be as simple or intricate as you want.

Probability

Each variation has a probability curve that controls how often it triggers at each arousal level. The curve maps arousal (0-100%) to a trigger chance (0-100%). At any given arousal level, the engine reads each variation's probability, then makes a weighted random draw.

If a variation reads 30% at the current arousal, it fires roughly 30% of the time. If you have two variations at 25% and 15%, there's a 40% combined chance that one fires, and a 60% chance the base motion plays instead. When the total across all variations exceeds 100%, a variation always plays - the base motion never gets a turn. Use this intentionally: leaving room for base motion (keeping totals around 60-80%) often sounds better than variations playing non-stop.

Stroke Zone

Stroke Zone controls where the shape positions land on the device. In "Absolute" mode, shape values map directly to 0-100% of the full device range - the variation ignores the current stroke zone entirely. In "Γ—Zone" mode, the shape is compressed into the stroke zone defined by the base curves at the current arousal level. As the zone narrows at high arousal, the variation narrows too. A multiplier lets you scale the effect: Γ—0.5 compresses more, Γ—2.0 expands beyond the zone.

Speed

Speed controls how fast the shape plays. In "Shape timing" mode, the X axis of the shape is used as-is: a 1000ms shape always takes 1 second regardless of arousal. In "Γ—Speed" mode, the shape duration is scaled by the base velocity curve. When velocity is low (high arousal), the shape slows down. When velocity is high, it speeds up. This keeps the variation feeling cohesive with the base rhythm. The multiplier adjusts the scaling factor.

Think of it as stretching or compressing the shape in time. In "Γ—Speed" mode at high arousal, a 1-second shape might take 3 seconds to play. At low arousal, the same shape might play in half a second. The shape itself stays the same, only the playback speed changes.

Amplitude

Amplitude controls how much of the stroke zone the variation actually uses. In "Full range" mode, the shape uses the entire available width. In "Γ—Amplitude" mode, the width is scaled by the base amplitude curve. At high arousal where amplitude is typically low, the variation becomes a micro-movement. This is especially effective for subtle gestures near the edge. The multiplier adjusts the effect.

Hold

Hold controls pauses between loops. In "No pause" mode, loops play back-to-back with no interruption. In "Γ—Hold" mode, a pause is inserted after each loop, scaled by the base hold curve. At high arousal where hold is typically long, the variation breathes more between repetitions. This creates a natural pacing that matches the base behavior. The multiplier adjusts the pause duration.

Loops

Loops control how many times the shape repeats before the engine moves on. You set a min and max - the engine picks a random number in that range each time the variation fires. Loops 1-1 means the shape plays once. Loops 3-5 means 3 to 5 repetitions. More loops means the variation dominates longer before returning to base motion.

Drift

Drift adds organic randomness to repeated loops. When enabled, the center position of each loop shifts randomly within the available zone. Instead of the shape repeating from the exact same starting point, each repetition starts from a slightly different position - creating a more natural, less mechanical feel. Drift is automatically disabled when loops = 1 (nothing to vary between) or when amplitude fills the entire zone (no room to shift the center).

Preview

You can preview each variation directly in the editor. The thumbnail and parameter readouts next to each variation show the calculated values at the current arousal level. Note: when a base curve uses Range mode, the preview displays a static value from the primary curve - during actual playback, the engine picks a random value between the two curves on each cycle. For a live test, click the Play button on a variation card - this forces the variation to play on loop in the emulator, bypassing probability and using the full runtime including range randomization. You can see exactly what the variation feels like at the current arousal, then stop to return to normal behavior.

Collection & Linking

Variations are stored in a shared collection, independent from behaviors. When you add a variation to a behavior, you choose between two modes:

  • Link - Link - the variation is shared. If you edit it in one behavior, the changes appear everywhere it is used. A chain icon and a count badge show how many behaviors reference it. This is ideal for signature patterns you want consistent across multiple behaviors.
  • Copy - Copy - the variation is duplicated as an independent copy. Edits only affect the current behavior. Use this when you want to customize a variation without impacting others.

You can unlink a shared variation at any time by clicking the unlink button on the variation card. This creates a private copy for the current behavior while leaving the original intact for other behaviors. This action is irreversible.

You can also create standalone variations in the collection that are not attached to any behavior. These are useful for building a library of reusable patterns - for example, orgasm variations you want to pick from when configuring different behaviors.

Orgasm Configuration#

When orgasm is triggered, the device switches from arousal-based curves to orgasm-specific curves. The X axis becomes orgasm progress (0% start to 100% end) instead of arousal.

Orgasm curves override each parameter independently. If not defined, the behavior falls back to using arousal-based curves with a fixed arousal level.

Orgasm gestures work like regular gestures but use orgasm progress for their probability curves instead of arousal level.

Orgasm duration can be Fixed (exact time) or Range (random between min and max). The progress bar shows remaining time.

Creating a Behavior#

1. Open the Editor and click "New behavior" in the browser sidebar.

2. Set a name, icon, and description in the Meta tab.

3. Draw the 4 base curves: velocity, stroke zone (min/max), amplitude, and hold. These define how the behavior responds to arousal.

4. Add variations in the Variations section: define shapes, set probabilities, configure dependencies and loops.

5. Optionally configure orgasm curves in the Orgasm tab for custom orgasm behavior.

6. Test in the emulator - use manual or sweep arousal mode to preview all arousal levels.

Example: Gentle#

Let's walk through a real behavior to see how curves and gestures work together. Gentle is built around soft, flowing movements that become increasingly subtle as arousal rises.

Base Curves

Velocity starts moderate (35%) and drops steadily to almost nothing (4%) at the edge - strokes get slower and slower. Amplitude is 100% at rest (full range) but shrinks to just 5% at the limit - near orgasm, the device barely moves. The stroke zone narrows gradually: from nearly the full range (5-95%) at rest, to a tight band (45-55%) at the edge. Hold pauses are zero until 50% arousal, then climb steeply - 100ms at 75%, 400ms at 90%, 800ms at the limit. The result: gentle, unhurried movements that become micro-caresses at high arousal.

Gestures

Gentle has 3 gestures, each with a different role:

1. Warming Caress

Warming Caress - A slow, full stroke (bottom β†’ top β†’ bottom over 1200ms). High probability at rest (35%), fading to 5% at the edge. Uses Curve dependencies for velocity and hold, Zone for stroke: it adapts naturally to the current base motion. Repeats 1-2 times. This is the "signature move" at low arousal.

2. Flowing Wave

Flowing Wave - A sinuous wave pattern (10% β†’ 70% β†’ 30% β†’ 90% β†’ 10% over 1200ms). Moderate probability (18% at rest, 8% at edge). Same Curve/Zone dependencies. Plays once. Adds fluidity and unpredictability.

3. Lingering

Lingering - Stays high (80% β†’ 95% β†’ 85% β†’ 100% over 1000ms). Rare at rest (5%) but common near the edge (22%). Repeats 1-3 times. This creates the "hovering at the top" feeling that's characteristic of gentle teasing near orgasm.

Orgasm Configuration

During orgasm (35-55 seconds, random), the Gentle uses dedicated curves: velocity starts at 40% and eases to 15%, amplitude goes from 70% to 30%, no hold pauses. Two orgasm gestures - "Afterglow Caress" (gentle full strokes, increasingly likely) and "Soft Tremor" (delicate vibrato in a narrow band, appearing late in the orgasm).

Notice how all the pieces reinforce the personality: the curves create a smooth, decelerating base, the gestures add character at specific arousal ranges, and the orgasm config provides a distinct finish. This layered approach is what makes each behavior feel unique.

Keyboard Shortcuts#

KeyAction
SpaceSpace: play/pause
EscapeEsc: stop
↑ / ↓Up/Down: arousal +-5
← / β†’Left/Right: arousal +-25
Ctrl+WheelCtrl+wheel: arousal
OO: orgasm
1-91-9: switch favorite behavior (keyboard or numpad)
00: switch to funscript mode

About The Edgy#

I'm Glavious, a freelance developer trying to make my way in an increasingly tough world. I build things I care about, and The Edgy is one of them.

I've always been a fan of edging. The sync-based approach with interactive devices is great, but I felt it lacked real-time control - the ability to tell your device exactly where you are, and have it respond inversely. That's what The Edgy is built for. I hope everyone finds something they enjoy in using it.

The Edgy is and will remain completely free. No accounts, no subscriptions, no data collection. Everything runs in your browser.

Supporting the project

The Edgy is sustained through affiliate links with The Handy and voluntary donations via Ko-fi. If you enjoy the app, a tip helps keep it free and actively developed.