If the “venv” directory was created when you still had a version other than Python 3.12, the error will remain.
You must completely delete the “venv” folder and re-run the installation.
NOTE: You will probably also see some red error lines like the ones shown, but they refer to other dependency compatibility issues and will not cause problems with the application.
The important thing is that, when you finish the installation, you run “install.bat” for verification, and if you see that everything is installed and OK, you’re ready to go!
Wow, that’s what I call dedication, my respect for the response .
As for it being subjective, that’s clear. I’m not sure if I expressed myself well, but in my head it was more on a local level, like each person having their own personalized program/AI tailored to their tastes. But hey, maybe in the future it’ll be something more accessible
Good advice; turns out it made a “venv” folder inside FAPS which I needed to delete.
Now just trying to figure out what settings to use for my collection of JOI from IWC/C4S.
Seems it bases the strokes on the audio, so it creates weird scripts due to the model’s talking, mixed with sometimes beats or layered audio.
(Eg. Tsarina Baltic - Goon Candy or Mistress Veronica Vixen - Go NONVERBAL Gooner! type files)
Doesn’t seem to be a way to isolate the audio so it bases it on verbal instructions, or the beats, or base it on something else. A shame, cool idea though.
When trying to run from a computer without a GPU (I verifyed the installation twice):
2026-03-02 03:57:19,883 [INFO] F.A.P.S (Funscript - Audio Processing System) by CaptainHarlock…
Traceback (most recent call last):
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\main.py”, line 368, in
run_app()
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\main.py”, line 226, in run_app
ai_status = check_ai_dependencies()
^^^^^^^^^^^^^^^^^^^^^^^
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\main.py”, line 119, in check_ai_dependencies
import allin1fix as allin1
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\allin1fix_init_.py”, line 15, in
from .analyze import analyze
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\allin1fix\analyze.py”, line 9, in
from .models import load_pretrained_model
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\allin1fix\models_init_.py”, line 1, in
from .allinone import AllInOne
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\allin1fix\models\allinone.py”, line 5, in
from .dinat import DinatLayer1d, DinatLayer2d
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\allin1fix\models\dinat.py”, line 15, in
from natten.functional import na1d_av, na1d_qk, na2d_av, na2d_qk
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\natten_init_.py”, line 69, in
from .na1d import NeighborhoodAttention1D
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\natten\na1d.py”, line 30, in
from .experimental import na1d as experimental_na1d
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\natten\experimental.py”, line 106, in
from .ops import additional_sdpa, merge_attentions
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\natten\ops.py”, line 29, in
from .utils.testing import IS_TORCH_COMPILE_SUPPORTED
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\natten\utils\testing.py”, line 47, in IS_TRITON_SUPPORTED = get_device_cc() >= 70
^^^^^^^^^^^^^^^
File “C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\natten\utils\misc.py”, line 31, in get_device_cc
major, minor = torch.cuda.get_device_capability(device_index)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\torch\cuda_init.py", line 560, in get_device_capability
prop = get_device_properties(device)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\torch\cuda_init.py", line 576, in get_device_properties
_lazy_init() # will define get_device_properties
^^^^^^^^^^^^
File "C:\Users\etk\Downloads\FAPS_v0.7\FAPS_v0.7\venv\Lib\site-packages\torch\cuda_init.py", line 372, in _lazy_init
torch._C._cuda_init()
RuntimeError: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from Download The Latest Official NVIDIA Drivers
Yeah, I understand, but I don’t think this is possible right now. Who knows in the future, given the pace at which AI is progressing, lol
Anyway, I don’t think it would be easy because a direct comparison of moment/action, i.e., training it to learn that the energy of the audio at a specific moment is reflected in the creation of a certain point in the funscript, would not produce the desired results. Rather, it would require “context” training, knowing where it comes from and where it goes, in order to plan the movement properly, otherwise it would only create a series of erratic points.
In fact, although it’s not the same thing, the “JOI Director” mood uses LLM models to which the complete voice transcription is sent so it can understand the context and act accordingly, but it’s not perfect yet, lol
You need an Nvidia GPU between the 10xx and 50xx series for the application to work to its full potential (AI models + GPU acceleration). Perhaps when the application has been polished, I will check the fallbacks to librosa+CPU so that it can work without the need of a GPU, but honestly, I don’t know if it’s worth investing time in this. The best results are obtained using AI models, and GPU acceleration is much faster. In addition, using only the CPU, there are some current features that would not be possible to use.
The JOI moods are experimental. You’ll see that there are several because I did several tests, and to avoid deleting them for the moment, I left them there, but three of them will probably be deleted. I recommend using the most recent and most tested ones, which, although not perfect, should work much better than the others.
“JOI Director” is the most recent and I think it’s the one you should try. It uses LLM models that are sent the entire voice transcription, all the text, so that it understands the general context and acts accordingly. In addition, it produces certain movements/patterns when it hears certain phrases. For example, if it hears “Now stop” or “Just relax,” you will see that the funscript drops and stays at 0 for a few moments, or the movement slows down. If it hears “Cum” at the end, it will start to generate rapid vibrations in the upper area. Etc., etc.
And not only when it hears those exact words/phrases, but it is also able to understand similar things
In addition, this mood has a gear button that allows you to configure all of that. You can change, remove, or add new phrases; you can configure what you want it to do (patterns) and when it should do it (by time, by weight, etc.).
It’s a complex mood, and I think it can be pretty good if the phrases/actions are configured properly, but I’m not going to lie, JOI videos aren’t my favorite, so I haven’t been able to invest the time needed to meticulously fine-tune the phrases/actions. For this, I hope you guys in the community can help me
Another one you can try is “JOI Patterns,” which, unlike “JOI Director,” doesn’t receive the full text to understand the context, but rather reacts to certain words by applying patterns.
The rest, I think are “JOI LLM,” “JOI LLM_A,” and “JOI LLM_B.”, forget about them; they’re tests I did between “JOI Patterns” and “JOI Director” and they’re not finished.
BTW, the “Hypno” mood also has a gear button for configuration, but in this case it’s for keywords, not phrases. The mood moves according to the audio/voice, but reacts to certain words by applying certain patterns.
I had already tried removing all versions of Python and re-installing 3.12 and was still getting errors about not finding an exe (in a folder that didn’t even exist). I’m assuming it had saved that in the venv folder (my Python knowledge is very limited) so I deleted the entire FAPS folder and extracted the archive again. After doing that the install worked.
Yep, that’s exactly right. Since the venv was already created with the problem, even if you delete other versions and install Python 3.12, and try the installation again, it will fail again because the previously created venv still wants to look for your other version of Python. As you have done correctly, you must delete the venv folder from inside the application folder (there is no need to delete the entire application) and re-run the installation.
The new version I’m finishing already has Python embedded and will avoid this type of problem.
Thank you!
I see that many of you are talking about and comparing it to Funscript Dancer, which I wasn’t familiar with, so I checked out its GitHub. I don’t mean to offend anyone, especially its creator, but yep, this application is much more advanced and has many more options.
The problem you report is known and has been fixed, along with others, for the next version, which I hope to upload soon once I’ve finished some tests with the new “Pulse” mood.
Regarding your last question, are you referring to moments where there is no music, for example, like CockHero, where a female voice speaks between songs but without background music or very quiet music?
Yep, you can use “Configure Edge & Cum” to add patterns wherever you want. It’s especially useful for the final part of the video, to add a more ‘explosive’ climax, lol
BTW, you have manuals on how to use the different tabs in “\docs”. It may not be up to date with the latest changes, but it’s definitely worth taking a look
Found one that’s an extreme example, this one has almost a minute with only 1 slow stoke. It is a quieter part of the song, but I don’t want it doing nothing for that long.
This is from about 17 minutes into Tiktok mega blitz 2 by Kepazz.
Maybe it’s just the mode I’m using, have been using relaxed because I prefer lese intense scripts, but I just tried this one using slow and it didn’t have a gap in the same spot.
I downloaded the video and tested it. I see what you mean, although it’s not really a problem, it’s just how the “Relaxed” mood is designed. It uses the Drums stem to calculate the onsets, and then uses the Bass+Other+Vocals stems to calculate the amplitude.
Since what you hear in that part of the video is in the Other stem and not the Drums stem, it doesn’t generate any movement.
In my opinion, this would be one of those parts where it would be ideal to add a pattern to fill it in. You could use a “Build-up,” for example, or if you want it to follow the movement pattern, a “Crescendo.”
In any case, I could also “fix” that by adding a drop-down menu to select the stems to be taken into account, so that in addition to taking the Drums stem into account for the onsets, you could tell it to use others.
Now you can select whether you want to use the following for onset detection:
Drums
Drums + Bass
Drums + Bass + Other
Drums + Bass + Other + Vocals
In the example I sent you, I used all four stems, but to solve the problem you mentioned, three would have been enough.
NOTE: Detecting onsets in more stems can cause more onsets to be detected and therefore “speed up” the tempo of the generated funscript; if this is a problem, you can modify the “Beats per Cycle” slider from 2 to 3 or 4 to slow it down again.
BTW, if you like those slow funscripts, try “Slow” or ‘Simple’ too. Some of them may be even slower (“more relaxed”) than “Relaxed,” lol. Or you could even try “Edging.”