[OFS Extension] StrokeScale - Gradually compress/expand stroke patterns (Version 1.2 Released)

StrokeScale

Extension for OpenFunScripter by gayrobot


strokescalepreview-ezgif.com-speed

What Is This?
I got tired of doing this manually and I couldn’t find anything that worked the way I wanted, so I decided to make my own tools.

Check out the companion extensions:
StrokeSpeed
StrokeSlide

StrokeScale is an extension that automates tedious stroke transformations in OpenFunScripter. Instead of manually adjusting dozens of points one by one, you can transform entire sections of your script in seconds with live preview.
Gradually compress or expand strokes to create intensity build-ups, fade-outs, or smooth transitions between different stroke depths.


Download
Current Version
StrokeScale v1.2 - Download

Added:
New Feature: Wave Modulation
Intensity Range slider now allows expansion of strokes
Intensity Range slider now has a Swap Start/End button
‘Default’ position buttons for all sliders


Installation

• Download the .rar file and extract the StrokeScale folder
• Copy it to your OFS extensions folder (In OFS Click Extensions→Extension directory)
• StrokeScale will appear in your extensions menu


How to Use

• Select the points you want to transform in your script
• Open StrokeScale from the extensions menu
• Turn on Live Preview to see changes in real-time
• Adjust the settings until it looks right
• Turn off Live Preview to commit the changes


Settings Explained

Live Preview
• Shows you changes instantly as you adjust settings
• Uncheck to commit changes


Stroke Detection Mode
This tells the tool how to group your points into “strokes” before transforming them.

Peak-to-Peak
• Groups points from one valley/bottom to the next
• Best for regular up-down stroke patterns

Direction Changes
• Starts a new group every time the stroke changes direction
• Best for complex multi-point strokes like 0-20-100-80-0

Time Windows
• Groups points that happen within X milliseconds of each other
• Best for when timing matters more than pattern

Point Count
• Groups every X points together, no matter what
• Best for consistent grouping regardless of pattern or timing

All Selected as One
• Treats your entire selection as a single stroke
• Best for applying one smooth transformation across everything


Intensity Range

Start %
How much compression at the beginning of your selection

  • 0% = no change (original stroke depth)
  • 100% = maximum compression (completely flat)
  • -100% = maximum expansion (max stroke length)

End %
How much compression at the end of your selection

  • 0% = no change (original stroke depth)
  • 100% = maximum compression (completely flat)
  • -100% = maximum expansion (max stroke length)

Example Uses:

  • Start: 0%, End: 100% = Strokes gradually compress to nothing (fade out)
  • Start: 100%, End: 0% = Strokes gradually expand from nothing and stop at regular stroke length(build up)
  • Start: 0%, End: -100% = Strokes will gradually expand from regular stroke length
  • Start: 50%, End: 50% = Uniform 50% compression across all strokes
    NOTE:
    Right now, the logic for the slider will seem counter-intuitive. I plan to fix this later, but for now, sliding to positive values means compression instead of expansion.

Buttons

  • Each slider has a button labeled “100 %” that resets it to its default value.
  • Swap Start/End – A button underneath the sliders that swaps the start and end values.

Transformation Type

Compress to Center
• Squishes strokes toward their middle point
• Best for natural-looking compression that maintains stroke balance

Scale Proportionally
• Shrinks the entire range while keeping the stroke shape
• Best for when you want to preserve the exact motion path

Compress to Top
• Everything moves toward position 100
• Best for creating high-position gentle movements

Compress to Bottom
• Everything moves toward position 0
• Best for creating low-position gentle movements


Interpolation Curve
This controls HOW the transformation happens between your start and end values.

Linear
• Smooth, even progression from start to end
• Best for most situations, predictable results

Ease In
• Starts slow, speeds up toward the end
• Best for gradual build-ups that accelerate

Ease Out
• Starts fast, slows down toward the end
• Best for quick changes that settle gently

Ease In-Out
• Starts slow, speeds up in middle, slows down at end
• Best for smooth, natural-feeling transitions


Wave Modulation
This new feature lets you add a periodic wave to the intensity change. Check the box to enable Wave Modulation Mode and see the settings.

Type
The shape of the wave applied to the strokes.

  • Sine: Smooth, gradual, up and down wave.
  • Triangle: Sharp, straight, up and down wave.
  • Sawtooth: Gradual downward wave, then abrupt jump back to top at end.
  • Square: No compression at beginning, then abrupt jump to max compression in the middle.

Amplitude
Controls how far the wave deviates from the base curve. Higher values mean more intense waves, while lower values will give you very subtle waves

Cycles
Controls how many full waves fit within the selection.

Phase
Controls the offset of the wave

Buttons

  • Each slider has a button next to it that will set the slider to its default value.

Changelog

v1.2(Current)
Added:
New Feature: Wave Modulation
Intensity Range slider now allows expansion of strokes
Intensity Range slider now has a Swap Start/End button
‘Default’ position buttons for all sliders

v1.1
Added:
Point Count detection mode
Fixed:
Crash when no points exist after selection
Crash when selecting too few points

v1.0
Initial release


Possible Future Plans

  • Randomization, to add slight variations into the patterns
  • Saving/Loading presets
  • Reverse button
  • Functions for creating ‘wave’ patterns
  • Point Count Detection Mode
  • Set to Zero buttons/Default Settings button

Links
Version 1.2 Download: StrokeScale1.2.rar ~ pixeldrain
Version 1.1 Download: StrokeScale1.1.rar ~ pixeldrain
Version 1.0 Download: StrokeScale.rar ~ pixeldrain

Join my Discord to get the latest versions, updates, report any issues, or leave feedback.

patreon kofi

HUGE thanks to my Backstage Supporter(s)
pup null

11 Likes

And once again: Our laziness is our super power :wink:

Cool simple - and uncluttered - tool.

Are you aware of Limitlessman’s Mytools? It needs some more steps and is a bit hard to navigate because of the size of the menu but Scale by Function and Linear function does basically the same (except for the neat live preview), wouldn’t you agree?

I suppose there is some overlap, although the live preview is a big part of why I made this. Being able to adjust things and see the results instantly makes it so much easier to experiment and dial in what you want. I also focused more on stroke detection and grouping so it behaves in a way that matches how I usually script, rather than treating everything as one generic scale operation.

So yeah, probably a bit of overlap. MyTools can get similar results if you know exactly how to set it up. This extension is just aimed at making that specific workflow faster and more straightforward, without all the extra bloat.

1 Like

Stroke Scale v1.2 Released.

New Feature added: Wave Modulation (Coming soon to Stroke Speed and Slide, too!)
Intensity Range slider now allows expansion of strokes
Intensity Range slider now has a Swap Start/End button
‘Default’ position buttons for all sliders

1 Like