-
Notifications
You must be signed in to change notification settings - Fork 10
Funscripts
Funscript files are normally used with single axis "stroker" type toys. They contain a series of timestamps and positions that tells the stroker how to move. They are typically enjoyed alongside a video, with the motions reflecting what's happening in the video.
Howl plays funscripts by converting that series of motions into output suitable for a stereo estim device in real-time. Key features of our algorithm include: -
- A positional panning effect between both channels so that actions feel like they're taking place in the right positions.
- Amplitude scaling based on continuously calculated velocity and acceleration values. Slower movements will feel more gentle, and common script embellishments like rapid small movements have a natural feel.
- Can compensate for latency in order to get correct sync between the video and your estim device output (when using our Kodi add-on).
- Various tweakable parameters to tune the output to your liking.
Howl's algorithm is designed for the most common type of funscript, where the actions it contains represent up/down movements (the same funscripts that a stroker toy would use).
Funscripts designed for Restim will not work well, as it uses them in a different way (they represent the various parameters that its algorithm uses rather than vertical movements).
Use Howl's suggested electrode setup (where channel A feels lower down than channel B), otherwise the positions of actions won't feel right.
The most convenient way to use funscripts is through the Howl Sync add-on for Kodi. That allows Howl to automatically play funscripts that accompany videos, and to automatically sync its playback position with Kodi's video player. If you aren't using the Kodi add-on, you'll just need to have the .funscript files on your device, and manually press the play button at the same time as you start the video on whatever device you're using to view that.
Howl generally tracks time exactly in real-time from when you pressed the play button, so as long as your player is also correct in this regard, it should not go out of sync during file playback. Use the "Mute pulse output" function if you need to make adjustments to your electrodes - this stops sending pulses, but the file keeps playing so it will remain in sync.
Avoid having Howl's recorder in active (switched on) mode when playing back funscripts. Recording mode is not time accurate, so it will cause your funscripts to go out of sync (and any latency adjustments will not work).
I found "action based" funscripts (where the motion corresponds to the physical actions in a video) gave a more immersive and enjoyable experience compared to other types (that might follow the beat of the music for example). But this is by no means a requirement, any funscript should play.
Keep in mind that funscripts are originally for physical "stroker" devices, which cannot just jump instantly from the bottom to the top like an estim device can, and will have a maximum movement speed. So even a very well written script cannot always mirror a video perfectly, because the author will probably have been observing these limitations. That being said, there are also a few really bad funscripts around that just aren't synced very well. So do try different ones!
This section explains the function of all the advanced funscript settings Howl offers (found in the player settings). Tweaking these is not required and the default settings are expected to work well.
Scaling coefficient Controls how our algorithm scales amplitude. At higher values, slow and medium speed movements will produce more powerful output (fast enough movements will be high power regardless of the setting). At lower values, there will be more dynamic range, and you will notice a bigger difference between fast and slow movements. At 1.0 every action is full power, and all dynamic range is lost.
The default value of 0.8 has been carefully considered and should give good results with most funscripts. This setting controls an exponent rather than a linear value, so small adjustments will have a large impact. For example try 0.75 if you would like a bit more dynamic range, or try 0.85 if you want more powerful slow movements than the default.
Positional effect strength This adjusts the strength of the positional effect that Howl uses to "pan" between the channels when playing funscripts. At 0 there is no positional effect, and both channels always have the same power level. At 1 there is the maximum possible positional effect, with only channel B used for funscript positions at the very top, and only channel A used for positions at the very bottom.
The default value is 1, which should usually give the best results. If you are only using a single channel setup, set this to 0, as the positional effect cannot work in a single channel configuration.
Selects the algorithm that Howl will use to calculate the output frequency when play a funscript.
- Position (default): The frequency is the same as the position the "stroker" device would have when playing the funscript. So low positions will always have a low frequency, and high positions will always have a high frequency.
- Varied: The frequency is based on simplex noise generated by Howl, and will vary smoothly over time. It's essentially random, so may give more interesting output, but it's completely unrelated to what's happening in the funscript.
- Blend: Blends together output from the "Position" and "Varied" algorithms in the configured ratio. It's an attempt to produce output frequencies that are partially random, but are also influenced by what's happening in the funscript.
- Fixed: The output frequency on each channel is a fixed value, and is always the same.
A/B frequency time offset (position algorithm only) Take channel A's position (and resulting frequency) from the configured amount of time in the past or future. Channel B's frequency is always based on the current player time. This time offset specifically affects only the frequency calculation (not the positional effect, which is always based on the current player time). Setting a frequency time offset usually results in us playing slightly different frequencies on each channel, which seems to give a more pleasing effect.
The default value is -0.08. Values in the range of -0.15 to 0.15 seem to give the best results, too large a time difference often just results in things feeling weird and out of sync.
Frequency vary speed (varied/blend algorithm only) Controls how quickly the frequency noise Howl generates moves around. Frequencies will shift around the range slowly at low values, or quickly at high values.
Blend ratio (blend algorithm only) Controls what proportion of the "Position" algorithm and the "Varied" algorithm to blend into the final result. 0.0 is the same as just using "Position". 1.0 as the same as just using "Varied". 0.5 is a 50/50 split between the two algorithms.
Channel A/B fixed frequency (fixed algorithm only) Controls which fixed frequency we will use on each channel. For example 0.0 would use the lowest frequency in the available frequency range. 0.8 would use a fairly high frequency that is 80% of the way up the range.