Skip to content

Why FunscriptForge?

A funscript is a list of timestamps and positions. When it works well, you don't think about it — the device follows the content and everything feels natural and engaging. When it doesn't, the experience ranges from underwhelming to uncomfortable.

Most raw funscripts — whether hand-scripted or algorithmically generated — have the same problems. FunscriptForge was built to fix them.


The full picture

FunscriptForge is one step in a larger workflow. Here is where it fits:

flowchart TD
    A["📹 Source content\nvideo / audio"] --> B

    B["✍️ Generate a funscript\nhand-scripted or auto-generated"]
    B --> C

    C["🔥 FunscriptForge\nAnalyze · Edit · Transform · Export"]
    C --> D
    C --> E

    D["🎮 Device funscript\n.device.funscript\nVelocity-capped for mechanical devices"]
    E["⚡ Estim funscript\n.estim.funscript\nClean waveform for electrostim routing"]

    D --> F["▶️ Play on device\nMultiFunPlayer · Intiface · native app"]
    E --> G["🔧 funscript-tools\nby Edger — L/R channel alpha/beta/pulse/volume"]
    G --> H["⚡ Estim device\nMk312 · 2B · ET312"]

Step 1 — Generate a funscript

FunscriptForge improves existing funscripts. You need a .funscript file before you can do anything with it.

Where to get funscripts

Community scripts — Sites like STASH and the EroScripts community host thousands of hand-crafted funscripts for popular content.

Hand-scripting — Create your own script frame by frame using dedicated tools:

  • OpenFunscripter — the most widely used free tool; keyboard-driven, precise
  • ScriptPlayer — lightweight, good for quick scripting and playback

Auto-generation — Generate a first draft from video automatically:

  • PythonDancer — optical flow + beat detection; produces a rough draft you then refine
  • Motion capture pipelines — OpenCV optical flow, motion magnitude estimation

All auto-generated scripts benefit from a FunscriptForge pass — the output is structurally valid but behaviorally flat.

FunscriptForge Editor (coming soon)

We are building a dedicated funscript editor — FunscriptForge Editor — that integrates generation, editing, and the FunscriptForge improvement pipeline in a single tool. Beat-driven, audio-synced, designed for the whole workflow from scratch to export.

Until it ships, OpenFunscripter + FunscriptForge is the recommended path.


Step 2 — Forge it

This is what FunscriptForge does. Load your script, see its full motion structure, fix what is wrong, and export improved outputs for device and estim.

Raw .funscript
  Structural analysis
  Phases → Cycles → Patterns → Phrases → BPM transitions
  Behavioral classification
  Each phrase labeled: stingy, giggle, plateau, drift, frantic...
  Interactive editing
  Click any phrase. Choose a transform. Live before/after preview.
  Export
  .device.funscript  →  velocity-capped for mechanical devices
  .estim.funscript   →  clean waveform for electrostim routing

See Forge Your First Funscript → to get started.


Step 3 — Play it on a device

Mechanical devices

Load the .device.funscript into any compatible player:

  • MultiFunPlayer — the most capable open-source player; supports multi-axis devices, multi-script sync, fine-grained control
  • Intiface Central + a Buttplug.io compatible app — wide device support including the Handy, OSR2, and SR6
  • ScriptPlayer — simple, lightweight, good for quick playback
  • HereSphere — VR player with built-in funscript support

Electrostim devices

FunscriptForge prepares your funscript for estim playback. The Stim tab generates channel funscripts (alpha, beta, frequency, volume) and the Export tab can render stereo WAV audio files for audio-based devices.

For playback, use Restim by diglet48 or CHPlayer — open-source estim players that load the exported channel funscripts and drive your device in real time.


What gets better after forging

Stroke depth (amplitude)

Scripts with tiny strokes waste the device's range. Scripts with strokes that are too large strain it. FunscriptForge shows you exactly where amplitude is wrong and fixes it without touching the timing.

Tempo control

Very fast sections (above 200 BPM) exceed what most mechanical devices can execute. FunscriptForge detects these and can halve the tempo while preserving the feel.

Centering

Strokes confined to the top or bottom half of the range lose half the device's capability. FunscriptForge detects off-center phrases and recenters them.

Monotony

Long sections with no variation fatigue quickly. FunscriptForge detects drone behavior and can add beat accents, contrast, or variation to break it up.

Transitions

When adjacent phrases get different transforms, the boundary between them can produce a velocity spike. Seam blending detects these and smooths only the transitions — leaving the phrases themselves untouched.

Device safety

Velocity above 300 pos/s can damage some mechanical devices. The quality gate flags everything above safe limits before you download.


What FunscriptForge does NOT do

  • It does not generate a funscript from a video (that is coming — see FunscriptForge Editor above)
  • It does not drive your device — use MultiFunPlayer or Intiface for playback
  • It does not sync audio automatically — BPM detection shows you where tempo changes, but beat alignment is a manual step
  • It does not require an internet connection — everything runs locally

Next steps

I want to… Go to…
Get the app running Install FunscriptForge →
Load my first script Forge Your First Funscript →
Understand the vocabulary Concepts →
Learn every transform Transforms →
Use the command line CLI Reference →
Understand device vs estim Device Safety →