This guide is for all of you who are new to scripting. It covers the fundamentals and contains some tips and tricks that might be valuable for both new and intermediate scripters.
This guide was originally written by Sentinel, but lots of tips and tricks have later been added from numerous users who posted in other forum threads. Thanks goes to:
raser1, realcumber, jacecolm, relax, scibbles, dungeon_master, slibowitz, ricster89, husky5383, dabmerino, remc_ren, cloudyfire
This guide was originally written for JoyFunScripter (JFS), but it can be applied to OpenFunscripter (OFS) just as easily. They are very similar when it comes to core functionality.
OpenFunscripter is available for download here:
JFS download and installation instructions are available here:
OpenFunscripter and JoyFunScripter are similar tools but they have their own unique set of features. Choose the one that suits your needs best. The most important difference is that the end user license for JFS prohibits that you use JFS for any commercial use unless you are a vendon on realsync.us. OFS has no restrictions about what you do with the scripts you create.
There are several scripting modes and this guide will only cover On The Fly recording briefly and focus on Default .
Starting a new scripting project couldn’t be simpler.
- Select Open… from the File menu.
- Select a file you want to script.
You are now ready to start scripting. Both JFS and OFS will automatically create a script file with the same name as the video, but with the funscript file extension, when you save your work with Ctrl+S (File > Save) the first time.
Read the Tips and tricks section for advice on how to select a video as a beginner.
The scripting mode can be selected in the right-hand side panel. Hover the mouse pointer over a scripting mode name and you will get a tooltip that explains what the mode is.
Default is what I call frame by frame scripting. You step through the video frame by frame and set points where you want them. It is in general the most accurate way of creating scripts.
On The Fly recording uses the mouse, joystick or gamepad to follow the movement in the video and points are automatically based on the movement.
Dynamic Top/Bottom Injection is used to automatically add the opposite point. Dynamic Top Injection will automatically insert the top positions and you only add the bottom position yourself. Dynamic Bottom Injection automatically insert the top positions. This is supposedly suited for repetitive actions, but it’s seldom accurate so you usually have to manually edit in Default mode afterwards.
Alternating Mode is best used to sync to videos with a beat, or so I’ve heard. When you push a key once it will insert a point according to its position and when pressed again a point will be added as it was a mirror image. So, if 0 key is pressed then one a point is added at 0%. When the 0 key is pressed again a point is added at 100% and so on.
Auto Centering Mode adds a point at the selected level between two existing points so that it is equally far to the previous point as it is to the next point.
On The Fly recording is probably the easiest to start with for many new scripters because you script your video with a joystick, gamepad or mouse. It is not very precise because it depends on your reaction time and how you move the mouse or other controller, but it is an easy way to start scripting something.
- Select a view mode in the upper left corner. Fill will use the available space. It is possible to zoom in using the mouse scroll wheel which will automatically switch JFS into Custom view mode. Select something that suits you. OFS has a View menu and in that a drop down menu for different view modes.
- Make sure that the stroke visualizer / simulator is rather big. Unless you move your mouse with perfect precision you need the size. Which size depends on you, your mouse settings etc. The simulator can be resized by dragging the edges, both height and width. Move it by clicking inside it and drag it to a suitable position. It can also be rotated by holding down the mouse button in the triangle part of the simulator and move the mouse.
- Make sure that you have disabled mouse precision pointer in Windows control panel or in the mouse vendor provided software if you use a gaming mouse. Disabling mouse precision pointer will make mouse movement consistent instead of varying depending on how fast you move the mouse.
- If you want to use a joystick/gamepad make sure it is connected and that Windows recognize it. Select Devices > Connect Gamepad (or Connect Joystick ) from the menu.
- Select On The Fly scripting mode in the right hand menu (the box with the number 2 in image 2).
- Reduce video playback speed from 1.00 (normal speed) to something around 25% speed to begin with. It is 0.24 in the picture below (the box with the number 3 in image 2).
- Start tracking movements in the green simulator box on screen by enabling Toggle Joystick Mode in the toolbar at the bottom (arrow with the number 4 in image 2). The shortcut key is Pause . When movements are tracked and recorded there is a red border around the green simulator on screen and the triangle shape is also red. If the simulator is green then it is not recording.
Start and stop video playback by pressing Space. There is a button in the toolbar too, but when tracking with the mouse you want the mouse pointer in or close to the simulator.
When recording is enabled and the video is playing just follow the movements on screen up and down using the mouse, touch pad, joystick or gamepad. If you have a drawing tablet you can use pen strokes to record motions. The movements can be seen live in the graph below the video.
It is possible do delete recorded points. The points are the small gray ones (5 in image 2) in the recorded mouse movement in the points graph below the video. The vertical red line (6 in image 2) is where the script position is for the currently shown video frame. When pressing the Backspace key the last point is deleted based on where the script currently is, i.e. the point closest to the left of the vertical red line.
By clicking in the heatmap area (7 in the larger picture below) it is possible to jump in the video. The small vertical white line is where the current frame is in the video. It is also possible to click and drag the vertical white line and see a video preview while moving it.
Image 1: A heat map for a fully scripted video compared to the small fragment (7) in the image 2.
Image 2: Scripting using On The Fly recording.
On The Fly recording is fast and easy to get started with, but it is hard to make it precise. It is easier, but much more time consuming, to use the Default mode and set points manually.
Select Default in the scripting mode panel to the right.
The simplest form of scripting is to just alternate setting points where the sleeve is at its highest or lowest point. This will create a triangular shaped curve alternating high and low. Time is on the horizontal axis. The points represent the vertical position of the sleeve and the slope is the speed. The color of a line segment is an indication of the speed and it goes from dark green > light green > yellow > orange > red. Dark green is the slowest and red is the fastest. Speed is calculated based on the Launch with an 85 mm stroke length. Red is therefore the limit of the Launch. It is not directly transferrable to The Handy, which has a stroke length of 100-110 mm. The Handy firmware limits the movement speed to a maximum of 400 mm per second. The ORS2 is capable of higher speeds though. It is also worth mentioning that the Launch firmware has a critical bug, which makes it stutter when exceeding the limit. Players like ScriptPlayer help restricting the speed in case it exceeds the maximum limit so the scripter should not need to think too much about exceeding any speed limits.
There is a statistics section in the right-hand side panel with information of the movement for the slope intersecting the vertical red marker in the points graph. These are calculated values and are approximations. Different devices have different physical limitations that affect the real values. However, the statistics section and the line colors in the points graph are very good tools when scripting.
There are two things you need to know to be able to set points, how to step forward in the video and how to set points at different levels. Stepping forward can be done in several ways and you will use a combination of them while scripting.
To script in a way that resembles On The Fly recording you can start playback with Space (or the Play button in the lower left toolbar) and then set points as the video progress. You can easily go back afterwards and adjust the points you set. This can be useful when the action is repetitive over time with little or no variation.
To fast forward until you get close to where you want to set your next point you can holding down the right arrow key (rewind using the left arrow key).
Step frame by frame using by pressing right or left arrow key repeatedly.
Use the up and down arrow keys to step to the next and previous point in the script.
To set a point you use the numeric keypad (numbers on the main keyboard works too). Think of it as if the full range of the sleeve is 0-100%. 0% is the lowest position closest to the body and 100% is the highest position using a Launch or The Handy. Use numpad 0-9 to set points at 0%-90% and use . for 100%. You can also use the mouse and click on the buttons at the bottom of the right sidebar called Insert Position .
Step forward until you find the next min or max position and set a point there at an appropriate level depending on the action in the video. It’s as simple as that.
Image 3: Scripting using Default mode.
The tools you use to edit points will in general affect the point closest to the vertical red marker in the points graph. That means that you don’t have to stand exactly on a point to be able to adjust it, just close enough.
To adjust a point 1% up or down, use Shift + Up or Down arrow key.
To adjust a point right or left, use Shift + Right or Left arrow key.
If you are very close to a point, pressing 0-9 or . on the numpad will replace the closest point with a new point at the level you selected. The point will be set on the vertical red marker so it might move sideways compared to where it was before. If you are not close enough to an existing point there will be a new point inserted without removing any other point. This can be used to add points, e.g. if you realize that you want to create a plateau with no movement or just divide a long movement into several movements in the same direction, but with different speeds in different sections.
Select multiple points by left clicking in the graph to a set start point. A blue vertical line will appear. You can use the arrow keys to move the graph to the desired area, if needed, where you want to set the end point. Place the end point by left clicking in the points graph a second time. The selected points will change color to blue.
Image 4: First point set.
Image 5: Blue points are selected.
If needed you can zoom in and out in the points graph using the scroll wheel while hovering the mouse inside the graph.
It is possible to select multiple ranges by continuing to left and right click in different parts of the points graph.
It is also possible to select points by clicking and holding left mouse button and then drag the mouse and release just like selecting text in a text editor.
Right click in the graph to deselect points, or press Ctrl + D .
When one or more points are selected you can move them in the same way as moving a single point by using Shift + arrow keys. All the selected points will be affected.
There are some special selections available in the Select menu. Select Left / Right Points selects everything to the left or right of the vertical red marker in the points graph. Select Top / Bottom Points Only require a selection first. You can use it to increase or decrease the stroke length in a section of your script. There is also a Select All Points available.
I prefer to use 180 SBS mode when scripting VR. Before switching to that view mode, go to Fill mode and drag the Launch/Handy/… simulator to a position inside the left half of the screen. This will make it visible after switching to 180 SBS . You can only position the simulator in Fill mode, not in 180 SBS mode.
Remember that you can use the scroll wheel to zoom in/out in 180 SBS and also move the camera by holding down the left mouse button while holding the cursor over the video area, but not over the simulator.
Use the simulator while playing the video in slow motion. The video speed is controlled by a slider at the bottom of the screen. Use a value that you feel comfortable with, but somewhere around 0.20-0.25 should be a good start for beginners. Look at the movement in the video and compare it in real time with the simulator graphics. If you feel that the video and the stroke simulator are a bit off, adjust your points even if they seem to not be at min/max in the movement when you look at it frame by frame. It is the immersion that is important.
Don’t make the simulator too small or exactly the same length as the movement in the video. It is better that it is slightly longer than the stroke length in the video. This makes it easier to see when the script is ahead or behind the action because the out of sync delay will be more noticeable due to the longer movement in the simulator. In general, it is the end points of the movement of the actress/actor that are of interest, not the movement in between. Don’t try to micro manage the script by adjusting movement between top and bottom when the movement is faster at the end compared to the beginning for example. This is not completely true in slow sections where the long distance between two points is long enough to add points in between. In that case it is possible to adjust the script to reflect different movement speeds between the end points.
Cowgirl scenes where the girl moves towards the camera while moving up and away from the camera when moving down can easily feel out of sync due to difficult angles, especially if the guy is moving at the same time. Use the simulator to get it right!
I haven’t really figured out how to use it successfully yet. As I understand it this feature tries to identify the next point to insert based on movement between video frames. Sometimes it works rather well, sometimes not. I haven’t figured out how the Wiggle settings affect the function so I leave Wiggle for now.
Understanding how points are translated into real movement is crucial to understanding how to set your points in the script and get a good and enjoyable script.
My experience is that many new scripters try to be too true to the video (been there done that) and that often causes very small movements or too many commands being executed in a limited time. Quite often it is the opposite as well, i.e. there is no variation, only full strokes regardless of what happens in the video.
First we need to understand how different devices differ.
The stroke length is the distance between end positions on the devices. The full length might not be fully utilized. Software like ScriptPlayer has a setting where the user can limit the stroke length and firmware might also add limitations to avoid technical complications. Consider the following more as a theoretical excercise.
Total stroke length = 85mm (3.35 inches)
10% = 8.5mm (0.335 inches)
Total stroke length = 115mm (4.53 inches)
10% = 11.5mm (0.453 inches)
A 50% move on Launch = 42.5mm
A 50% move on The Handy = 57.5mm
Given that the 50% move is executed in 0.2 seconds:
Launch 212.5 mm/s
Handy 287.5 mm/s
Given the same percentage and time, different devices require different speeds to move from one point to another.
The Handy has a speed limit of 400 mm/s. The hardware is capable of going faster, but the firmware limits the max speed.
I’m unsure of the speed limit on the Launch. I’ve read that it can handle 180 full strokes per minute. That is three full length strokes per second. With a full stroke being 85mm the speed limit would be 255 mm/s. However, this calculation is probably only valid for when operating the Launch in manual mode. It should be able to run faster in scripts.
Use at least 100 ms between each command (point). If you put them closer then commands will be delayed by the player or firmware.
I have no specs on the OSR available, but from what I have read it is supposed to have better performance than The Handy.
Acceptable minimum stroke length is dependent on the device, but also on the sleeve used. However, the latter is out of our control as a scripter. If you don’t create a general script, but do it for a specific device, then you can adapt your script accordingly. Stroke length is also a personal preference.
Scripting fast repeated 10% movements will usually cause a stuttering in the device that doesn’t feel good due to the short movement. Remember that 10% on a Launch is 8.5 mm (at best).
Blowjobs can often benefit from short, but slow, strokes. Read more about that in the section about scripting blowjobs.
If you script strokes that exceeds the capabilities of the device be aware that the player software and/or the fireware will deal with that is some way. The stroke will either be shorter because a new command will be executed before reaching the end point or the next command will be delayed until the first is completed.
There is a need to worry about speed and length in some situations. There is a bug in the launch that won’t do a slow stroke after a fast stroke if it’s over a 350 speed. That’s why PMV’s with giant red lines in them don’t work correct on the launch.
Blowjobs are usually a challenge to script because you are limited by a device that moves a sleeve up and down. However, a blowjob often involves licking, deep throat, handjob that don’t stimulate the head, handjob combined with blowjob and so on. You have to be creative. Try to be as precise as possible and try to be true to the 0-100% range. Don’t do full strokes when the head is being teased.
If you script a blowjob it is usually ok to do short strokes, mainly because there are often slow movements. In my scripting attempts I’ve used shorter strokes (10-20%) when the girl only works the head. I sometimes switch up/down direction when she reaches the left or right and circles back with her tongue. That creates constant movement even if she isn’t really moving up and down, but left and right. Prolonged slow movements on the head or intense stimulation on the head, e.g. using her hand, can sometimes be translated to a long and slow movement instead of many shorter strokes. It can create a more intense stimulation without really make it feel like an up down stroke. What to use depends a bit on what happens afterwards. You need to adapt some movements to position the sleeve based on what happens next. It is mostly better to skip a stroke than adding a non-existing stroke. A really slow (i.e. long duration in time) extra stroke can be used to position the sleeve when there is a pause for several seconds because a really long and slow move usually don’t break the immersion.
The general concepts of scripting using JFS and OFS are simple, but it is hard and time consuming to create high quality scripts. This section will give some tips that might improve your scripting speed and/or the quality of your script.
Start small: Scripting require lots of time. Experienced scripters need a full day or more to script a VR video (45-60 min) and inexperienced scripters need several times more than that. A 5-10 minute 2D clip is pretty good to begin with.
Start simple: Starting with a scene comprised of mostly penetration and maybe a bit of blowjob or handjob will help you get down the basics before you move on to trickier scenes. Blowjobs and handjobs are much harder to script well than simple penetration.
Break down the work into manageable chunks: Scenes are often divided into different positions. It might start with a blowjob followed by a cowgirl position and then missionary. Finish a section and take a break before going to the next.
Make scripting more enjoyable: It takes a long time to script. If you treat it like a hobby to unwind, it’ll be more enjoyable. You can also combine scripting with another activity like listening to music, a podcast, or an audio book. If you treat it like a task, it’ll feel like it takes forever.
Learn the hotkeys: Scripting will be so much faster if you learn to use the keyboard shortcuts.
Don’t script self-touching except at climax: It tends to distract from the action of him being touched by someone else.
Don’t worry so much about speed: As already mentioned in this guide, the player software and/or the device firmware will deal with it.
Don’t worry about being frame-perfect: No one can feel the script being one frame out of sync. Two frames are probably on the limit of what you can feel so if you are +/- 1 or 2 frames you should be safe.
Beware of stroke length: Avoid strokes less than 20% in general. The exception is during a blowjob. Read more about stroke length and blowjobs in other sections in this guide.
Learn by others: Load already scripted videos and have a look at how others do their scripts.
Use the Request Feedback section at EroScripts: If you want to learn then you need practice and constructive feedback. Use the Request Feedback section at EroScripts for that.
Test your own script: When you are new you really need to test your script before publishing it. You will learn what works and what doesn’t and get rid of the obvious flaws in the script. Too short strokes are a common mistake, which has been discussed in this guide.
Just keep going : The start is rather rough. It can be overwhelming and time consuming. Even for experienced scripters, 1 minute of video might take 5 to 15 minutes to script “on the fly”. If you choose to script frame by frame for more accuracy, 1 minute will probably take more than 20 minutes in the beginning. However, you will get faster with practice. Factors like experience, learning hotkeys, video angle and movement simplicity influence the time needed to script. Remember that scripting is easy to learn, but hard to master.
Once you have the scripting basics down frame by frame you might want to improve your on-the-fly scripting skills. Try playing around with PMV’s. These will improve your reaction time and decision-making, and they are kind of fun for practice. Remember that JFS has a reaction time setting and a playback speed setting that can be used to compensate for what you lack in reaction time.
Not all videos are suitable for scripting when you are new to scripting. This is some recommendations for selecting a video to script:
- Pick a POV video or a video with a fixed camera position when scripting 2D video. Drifting and shaky cameras can be challenging. Videos with moving cameras often move away so you don’t see what you are supposed to script.
- Pick a slow BJ or a nicely paced riding scene (particularly female on top) in 2D. The latter can be suitable for VR as well, but it depends on “riding direction”. The important thing is that the action is not obscured by body parts.
- Don’t pick a video with fast scenes. This is to avoid being forced to manage script where the hardware isn’t fast enough.
- Pick a video with 1-on-1 action or solo action when scripting 2D. Threesomes and gangbangs are very hard in 2D. It is not an issue when scripting in VR though since the script shall represent what happens to the viewer in VR.
- Avoid picking a video where the male actor has an enormous penis. It messes with the perspective ruining all the normal reference points for mapping strokes, partly because the actor can never fully penetrate the female actress.
- Be aware of camera angles in VR videos. Sometimes the action is obscured, or even outside of the visible area, and you have to improvise the scripting based on the body movement, which is kind of hard to do well. This is probably most common in scenes with the missionary position and face to face scenes.
Remember that it is the actual hardware that set the limits, not software. JFS and OFS only try to help you with limits based on common hardware like the Launch.
Avoid setting points too close to each other. The Handy can manage six commands per second at best according to the manufacturer and only two commands per second are guaranteed. With a video loaded as 30 frames per second in JFS this means that you at best can position points as x - - - x - - - x where x are frames with a point and - represents video frames without a point. A preferred minimum distance is x - - - - x - - - - x. This must be adjusted if the video is not loaded as 30 fps in JFS of course. When JFS can’t identify the real fps it defaults to 30 fps and shows a message about it in the upper right corner when the video is loaded. OFS usually loads the video in its original fps (often 60).
Don’t be afraid to set points that causes dark orange or even red lines. Red indicates that the speed is above 400 mm per second and in the case of The Handy it is capped to max 400 mm per second. Red could be bad, but it can often be ok as well. The calculations are estimates and are not completely accurate. The hardware is what set the limits.
In fast sections of a video it is often better to accept that there will be red lines instead of reducing the vertical distance between points into orange/yellow/green. The firmware in the hardware is usually written to deal with commands that is received before the previous movement is completed. If the movement is not complete it will be interrupted and the new speed and position will take precedence. Too short movements in fast sections, typically when movement direction change every 3-4 frames in a video loaded as 30 fps, it won’t feel as if the sleeve is moving if the script use short vertical movements to avoid red lines. The sleeve will feel as it is stuttering on in the same place. By not avoiding red lines it will ensure that the sleeve moves as much as possible before interrupted by the next command. The firmware will handle the limitations of the hardware for you.
Test your script before releasing it!
It is often best to place a point when the movement starts in the opposite direction, especially when there is a plateau at the end of a movement (i.e. several frames with very little or no movement). It is also often desirable to set it when the movement starts to accelerate if the first frames contain almost no movement. Assume that the up movement is fast but it deaccelerates a couple of frames before the frame with the absolute peak position. Then the movement slowly starts to accelerate downwards for e.g. two frames before the movement really speeds up. This is the end point frames in the scenario _ – ’ – _ . Don’t set the point at '. Rather set it at the second – or _. Setting the point at peak max might be experienced as if The Handy/Launch starts moving too soon due to the low movement speed in the first couple of frames. Two frames at 30 fps is almost 1/10 second and that is enough to feel that the script is slightly out of sync. If this is relevant all depends on the video so it is just a guideline that helped me. Use the simulator to check if the script is in sync.
Don’t make too short vertical movements. It is often better to exaggerate the movement than to be completely true to the position in the video for several reasons.
- Slow movements may need a long vertical movement to be felt even if the movement distance is not that long on screen.
- The maximum stroke length supported by the device is usually shorter than the “actor stroke length” in the videos. The script is defined in % of the total available stroke length on the device. If the actor moves 30% of his length and that exact move is scripted as 30% then that translates to 30% of the device max stroke length. Hand jobs are notorious for being a mix of “short strokes” combined with “long strokes”.
- The hardware might not run smoothly at slow speeds and exaggerating the vertical distance in the script will increase the movement speed.
- And most importantly, many have the opinion that it feels better
My experience is that stepping frame by frame often tends to lag. It seems to go away temporarily when pressing play and rewinding or holding right arrow to fast forward and then go back. There is a better solution to improve frame by frame performance by re-encoding the scripted video first.
- Make it smaller. 4K+ is not necessary.
- Lower the image quality. A super crisp image is not necessary.
- Make every frame a full frame instead of having a lot of partial frames with the difference from the previous frame. This means that stepping to the next frame is stepping to a full frame, not a partial frame, and that means less decoding.
You need ffmpeg to re-encode the video, which can be downloaded from https://ffmpeg.org/ .
Use the following command line after changing paths and video file names:
“C:\ffmpeg\bin\ffmpeg.exe” -i “C:\MyScriptingFolder\source_video_file_name” -filter:v “scale=2048:-1” -intra -qp 30 -acodec copy “C:\MyScriptingFolder\destination_video_file_name.mp4”
This will create a new video file where every frame is 2048 pixel wide and a full frame with lower image quality than the original. My scripting speed improved a lot once I started scripting with re-encoded videos. Thanks to raser1 for this awesome tip.
JFS seems to open all files in 30 fps (frames per second) mode regardless of the video source. OFS opens videos in their true fps, which often is 60 fps. This fidelity is usually not necessary for scripting and it only forces you to press keys on the keyboard more often to step through the frames to where you want your next point. You can reduce the fps in the re-encoded video by adding a parameter to the command line, -r 30. This will be the new command line:
“C:\ffmpeg\bin\ffmpeg.exe” -i “C:\MyScriptingFolder\source_video_file_name” -r 30 -filter:v “scale=2048:-1” -intra -qp 30 -acodec copy “C:\MyScriptingFolder\destination_video_file_name.mp4”
The FunExpander software has now a feature to do the conversion for you if you want to avoid the command line. However, it might not reduce the fps to 30 though (I haven’t confirmed that). Look for the latest version in the software section of EroScripts.
It is also possible to use a tool like Handbrake. The preset Production Proxy 1080p in the Production category should work well.