F.A.P.S (Funscript - Audio Processing System) by CaptainHarlock

Made a 30min vid and track compiled with 88 of the blocks settings you can add from edge&cum configuration if you want to get a better idea of how they feel on playback. 15seconds each 5 second pause between. *last 8 10 sec each.

  1. Build-up Int=1 02. Build-up Int=3 03. Build-up Int=5 04. Crescendo Int=1
  2. Crescendo Int=3 06. Crescendo Int=5 07. Slow Up/Down Curve
  3. Slow Up/Down Vibro 09. Tip Care 10. Base Care 11. Milk 12. Torture
  4. Cool Down 14. Aftershock 15. Normal Int=1 16. Normal Int=3
  5. Normal Int=5 18. Random Int=1 19. Random Int=3 20. Random Int=5
  6. Denial Int=1 22. Denial Int=3 23. Denial Int=5 24. Tease Int=1 25. Tease Int=3
  7. Tease Int=5 27. Pulse Int=1 28. Pulse Int=3 29. Pulse Int=5
  8. Wave Train Int=1 31. Wave Train Int=3 32. Wave Train Int=5
  9. Vibro Stepped 34. Vibro Prog. Stepped 35. Vibro Tip Edge
  10. Vibro Base Edge 37. Vibro Tip/Base Edge 38. Vibro Earthquake
  11. Vibro Stutter 40. Vibro Surge 41. Decrescendo Int=1
  12. Decrescendo Int=3 43. Decrescendo Int=5
  13. Build-Up 1 Vib(Freq3 Strg3) 45. Build-Up 3 Vib 46. Build-Up 5 Vib
  14. Crescendo 1 Vib 48. Crescendo 3 Vib 49. Crescendo 5 Vib
  15. Normal 1 Vib 51. Normal 3 Vib 52. Normal 5 Vib 53. Random 1 Vib
  16. Random 3 Vib 55. Random 5 Vib 56. Denial 1 Vib 57. Denial 3 Vib
  17. Denial 5 Vib 59. Tease 1 Vib 60. Tease 3 Vib 61. Tease 5 Vib
  18. Pulse 1 Vib 63. Pulse 3 Vib 64. Pulse 5 Vib 65. Wave Train 1 Vib
  19. Wave Train 3 Vib 67. Wave Train 5 Vib 68. Decrescendo 1 Vib
  20. Decrescendo 3 Vib 70. Decrescendo 5 Vib
  21. Crescendo 1 Freq5 Strg3
  22. Crescendo 135 73. Crescendo 155 74. Crescendo 353
  23. Crescendo 335 76. Crescendo 355 77. Crescendo 553
  24. Crescendo 535 79. Crescendo 555
    10sec
  25. Normal 153 81. Normal 135 82. Normal 155
  26. Normal 353 84. Normal 335 85. Normal 355
  27. Normal 553 87. Normal 535 88. Normal 555

Hello, I’m trying to install this, but my python keeping crashing, i have install to lastest python version 3.14, window 11, AMD Radeon RX 6800, I’m stuck on something simple

wait do i need to set my python path to this?
FAPS_v0.9\python

Python 3.12.8
Python location: D:\LOCKED\ai player\FAPS_v0.9\python
FFmpeg: OK
VLC: OK

— Basic Dependencies —
CustomTkinter: 5.2.2
NumPy: 2.4.2
Librosa: 0.11.0
pygame 2.6.1 (SDL 2.28.4, Python 3.12.8)
Hello from the pygame community. https://www.pygame.org/contribute.html
Pygame: 2.6.1

— AI Dependencies —
[WARNING] Unexpected error running offload-arch: [WinError 5] Access is denied
PyTorch: 2.9.1+rocmsdk20260116
[WARNING] Unexpected error running offload-arch: [WinError 5] Access is denied
[WARNING] Unexpected error running offload-arch: [WinError 5] Access is denied
[WARNING] Unexpected error running offload-arch: [WinError 5] Access is denied
NATTEN: NOT INSTALLED
All-In-One: NOT INSTALLED
Demucs: OK
[WARNING] Unexpected error running offload-arch: [WinError 5] Access is denied
Whisper: OK
[WARNING] Unexpected error running offload-arch: [WinError 5] Access is denied
Whisper-Timestamped: OK
[WARNING] Unexpected error running offload-arch: [WinError 5] Access is denied
Transformers: 5.2.0
Flash Attention: N/A (CUDA-only, not supported on AMD ROCm)
[WARNING] Unexpected error running offload-arch: [WinError 5] Access is denied
Audio-Separator (BSRoformer + MDX23C): OK
[WARNING] Unexpected error running offload-arch: [WinError 5] Access is denied
Beat This: OK
[WARNING] Unexpected error running offload-arch: [WinError 5] Access is denied
EasyOCR: OK
OpenCV: 4.13.0

— Application Files —
app.py: OK
main.py: OK

This is a PORTABLE installation - you can move the entire folder anywhere.

Request: simple JOI beat detection

many unvoiced JOI videos have a very simple heartbeat sounding beat indication sound

sometimes a tick, sometimes another sound

perhaps be able to select section of video to match the audio and scan for all of that sound on video to generate simple up+down for each beat or alternating up / down every second one.

or if the AI detection can just detect “oh this sound keeps repeating over and over lets detect for it”

1 Like

That feature would be awesome!

Feature Request: Wispher and Director Configuration customizable for other languages eg. de (german) :folded_hands:

I’ve used and enjoyed F.A.P.S for a long time, and eventually made a fairly large set of personal tweaks around the way I like to generate and edit scripts. I cleaned them up into one overlay update in case anyone else finds them useful.

This is an update pack for the original F.A.P.S v0.9 folder, not a standalone release. Back up your existing folder first, then extract this archive into the F.A.P.S root and overwrite when prompted. It does not include Python, models, or AI weights.

What I changed:

  • Fap Mixer improvements

    • Restored the normal/full Fap Mixer layout and generation approach.

    • Default setup is now intentionally simple: Primary = Drums, 1 beat, 100% intensity, range 0–100.

    • Secondary, Texture, Vibration, and Voice are disabled / “Do not use” by default, with zero extra influence.

    • Removed the repeated stem-role decision prompt; the default mapping is applied directly.

    • Added reusable stroke-shape options, including Linear, Bounce Hill, alternating-depth variants, and 50%/75% light-stroke variants.

    • Alternating shapes are designed around complete strokes rather than accidentally shortening half of a stroke.

    • The “Lower” alternating variants keep the lighter motion near the bottom; the “Upper” variants place it higher.

    • Bounce variants insert intermediate points to create a more rounded / elastic trajectory instead of a simple two-point triangle.

  • Force Full Range / speed behavior

    • Reworked Force Full Range so it is applied late in generation, after the musical pattern is made.

    • It now tries to expand motion toward the configured speed limit without erasing alternating-depth behavior.

    • Deep strokes get priority when timing is tight; lighter strokes preserve their intended relative range rather than flattening everything into the same movement.

    • The max-speed system is kept at 500 mm/s and was updated consistently across the generator, processing flow, metrics, and relevant UI displays.

  • SixthSense fixes

    • Simplified SixthSense around the Drums / Rhythm workflow.

    • Added the same shape-selector support used by Fap Mixer.

    • Fixed selector propagation so shape choices actually reach the generated script.

    • Corrected beat-clock handling for multi-song / sectioned analysis: beats are normalized to one canonical timeline before SixthSense uses them.

    • This should avoid the “DJ drift” feeling where the motion slowly falls off BPM and then snaps back into alignment every few bars.

    • The main bottom-impact timing is kept locked to the musical beat; shape processing only changes the path between those timed events.

  • Pulse

    • Reverted the experimental Pulse shaper changes after they proved too chaotic for normal use.

    • Kept Pulse closer to its original behavior.

    • Default minimum interval is now 35 ms.

  • Auto Director

    • Expanded Auto Director so it can choose between Fap Mixer, SixthSense, and Pulse by musical section instead of treating the whole track as one static mode.

    • The intention is stable verses/choruses leaning toward Fap Mixer or SixthSense, with Pulse available for less rhythmically stable intros, bridges, and transitions.

    • It reassesses on musical structure rather than a fixed four-second grid.

    • Improved section repetition so repeated chorus / verse sections are handled more consistently.

    • Current defaults:

      • Fap Mixer: Drums primary, 1 beat, alternating upper 75% shape.

      • SixthSense: alternating upper 75%, 0.5× strokes.

      • Pulse: spacing 1.

      • For motion below roughly 100 SPM, it can prefer Bounce Hill.

  • AI analysis and local processing

    • Added a batch analysis workflow for multiple selected files or a folder.

    • Batch defaults are set for multi-song videos and section-based mixing, with automatic section confirmation.

    • Added caching and local-first behavior for the main F/S/P analysis paths.

    • Reduced unnecessary repeat work while avoiding the unsafe whole-track cache shortcut that could cause audio/script timeline mismatches.

    • Voice classification is disabled by default to avoid unnecessary Hugging Face requests during normal analysis.

    • Added hardware utilization information in the UI.

  • Output files

    • Removed unnecessary DEBUG funscript output.

    • Generated filenames include the mood and shape in the parentheses, for example:
      APPETITE (Fap Mixer-BH-L50).funscript

    • Regenerating the same mood + shape overwrites that same file, so repeated parameter tweaks do not produce a pile of numbered duplicates.

  • Combinator workflow

    • Made the source-script list much more compact so more candidates fit on screen.

    • Reworked source layout into two banks: the first ten sources can be selected with number keys, while additional sources are available in the second bank with scrolling when needed.

    • Added “Cut Here” workflow for source switching at the current playhead.

    • Numeric switching and cuts work while paused as well as while playing.

    • Removed the old “Set as Base” dependency from that workflow.

    • Added playback shortcuts: Space for play/pause, J/L for ±5 seconds, and arrow-key playhead movement.

    • Reduced visual clutter while paused by hiding the colored source control-point overlays and leaving the clean waveform view.

  • Point Editor

    • Playback / timeline updates were streamlined to reduce unnecessary redraws and mouse-hover work during playback.

    • Added playback isolation work so opening Combinator does not unintentionally make a Point Editor video play at the same time.

This is still a personal mod pack rather than an official branch, so please keep a backup of your original folder. If you try it, I’d be interested to hear which generation shapes or Auto Director behaviors work best for you.

FAPS_v0.9_Community_Update_v1.0.zip.txt (1.7 MB)
(remove .txt this is a zip pack)

2 Likes

How do I create a fan script for “Hentai Joi”?
I tried it, but it didn’t work.

I made a request earlier for “JOI Beat Detection”

it has been nearly a month so i took the matter into my own hands and got “JOI Ticker” add-on created

however i had previously installed havoooc’s Community update and therefore already had a modified app.py file, so it is likely that you need to install havoooc’s Community update, and then be able to install JOI Ticker

installation Guide:

  1. Download FAPS_v0.9_Community_Update_v1.0 (get from the post i am replying to)
  2. Download Joi Ticker
  3. Unzip Community Update into FAPS_v0.9 main folder
  4. Unzip Joi Ticker into same folder

Joi Ticker Download

JOI Ticker quick start

  1. Load the JOI video and select JOI Ticker as the mode.

  2. Open Configure Ticks, seek to a clean occurrence, and mark a tight clip around one sound (typically 50–300 ms). The waveform is the timeline: drag it to seek, use the mouse wheel to zoom, right-drag to pan, or drag the orange clip handles. The transport also has exact previous/next-frame buttons.

  3. Add extra reference clips when the sound changes or appears at a noticeably different speed.
    Use Test detection and review matches with Previous/Next. Raise confidence to remove false matches; lower it to recover missed ticks. Increase the minimum gap if one sound is detected more than once.

  4. Choose Alternating or Full up and down for every tick, save the configuration, and generate the script normally. Enable Handy Safe Mode to enforce Max Speed. When a tick rate is too fast for the full stroke, choose whether shortened strokes use the upper, middle, lower, or a non-repeating random range.

(havoooc if you are fine with it, we could merge these two into one download)