▮ FEATURES
Example: UI Price-Ticker
![[CLX][#01] Animation - Price Ticker (Marquee)](https://s3.tradingview.com/1/1jhinKYw_mid.png?v=1628458106)
----------------------------------------------------------------------------
Library "Motion"
_getStringMono(_len, _str, _sep)
Parameters:
_len
_str
_sep
marquee(this, _extern, _ws, _subLen, _subStart)
Parameters:
this
_extern
_ws
_subLen
_subStart
transition(this, _subLen, _subStart)
Parameters:
this
_subLen
_subStart
hold(this)
Parameters:
this
keyframe
keyframe A keyframe object.
Fields:
seq
intv
step
length
update_no
frame_no
ltr
hold
- Now as library version :)
- String-based transition-effects
- Performance optimization. Reduced memory consumption up to >90% by kicking the output to the "stdout".
- Use marquee- or loader-effect on any possible string location.
Example: UI Price-Ticker
![[CLX][#01] Animation - Price Ticker (Marquee)](https://s3.tradingview.com/1/1jhinKYw_mid.png?v=1628458106)
----------------------------------------------------------------------------
Library "Motion"
_getStringMono(_len, _str, _sep)
Parameters:
_len
_str
_sep
marquee(this, _extern, _ws, _subLen, _subStart)
Parameters:
this
_extern
_ws
_subLen
_subStart
transition(this, _subLen, _subStart)
Parameters:
this
_subLen
_subStart
hold(this)
Parameters:
this
keyframe
keyframe A keyframe object.
Fields:
seq
intv
step
length
update_no
frame_no
ltr
hold
Release Notes
▮ v2- Bug fix: Removed "typo" in str.format().
- Bug fix: Removed "out of bounds" on string length change.
- Updated: User inputs.
- New: Changelog.
👀 STILL UNDER DEVELOPMENT! Frequently updated!
Added:
nz(_src, _replacement)
Parameters:
_src
_replacement
Updated:
keyframe
keyframe A keyframe object.
Fields:
seq
intv
step
length
update_no
frame_no
pointer
ltr
hold
Release Notes
▮ v3- Bug fix: The `_ws` whitespace parameter in the marquee function should now working like expected. Thx to HeWhoMustNotBeNamed
Release Notes
v4▮ v4
- Removed unnecessary exports
Removed:
nz(_src, _replacement)
_getStringMono(_len, _str, _sep)
Release Notes
v5Release Notes
v6Added:
start(this)
Parameters:
this
stop(this)
Parameters:
this
toggle(this)
Parameters:
this
reset(this)
Parameters:
this
reverse(this)
Parameters:
this
transition
transition A transition object.
Fields:
fx
max_loops
sub_start
sub_length
refill
external_seq
type
dir
side
Updated:
transition(this, _fx, _maxLoops, _subLen, _subStart, _ltr, _autoplay, _refill, _series)
Parameters:
this
_fx
_maxLoops
_subLen
_subStart
_ltr
_autoplay
_refill
_series
keyframe
keyframe A keyframe object.
Fields:
seq
ws
intv
step
update_no
frame_no
loop_no
length
pointer
ltr
__transition
execution
setup
Removed:
marquee(this, _extern, _ws, _subLen, _subStart)
hold(this)
Release Notes
v7Release Notes
v8Updated:
keyframe
keyframe A keyframe object.
Fields:
seq
ws
intv
step
fx
max_loops
sub_start
sub_length
refill
ltr
external_seq
type
dir
side
update_no
frame_no
loop_no
length
pointer
execution
setup
Removed:
transition
transition A transition object.
Bug Fixes:
-- LTR & Placeholder feature should now working like expected.
Release Notes
▮ v9 Major UpgradeThis update is a major upgrade to the library. The library now uses a more object-oriented approach, while the exported functions are now more user-friendly. Additional string effects are added.
Updated:
transition()
keyframe
New Secondary Functions:
prev(this, _skip)
next(this, _skip)
New Simplified Functions:
marquee(this, _seq, _ws, _maxLoops, _ltr)
slideInLeft(this, _seq, _ws, _maxLoops, _refill)
slideOutLeft(this, _seq, _ws, _maxLoops, _refill)
slideInRight(this, _seq, _ws, _maxLoops, _refill)
slideOutRight(this, _seq, _ws, _maxLoops, _refill)
blink(this, _seq, _ws, _maxLoops)
Also refactored most of the utility functions.
================================================================================
▮ Setup
To use this library in your scripts, you must first import it. To do this, add the following line to the top of your script:
import cryptolinx/Motion/1 as motion
Next, create a `keyframe` object by using the `varip` keyword.
varip myKeyframe = motion.keyframe.new(_intv = 1, _steps = 1,)
Based on your needs, you can now use one of the simplified functions to create a transition effect, or you can use the `transition()` or `iteration()` function to create a custom transition effect.
Simplified Functions:
(direct output)
// motion.marquee(keyframe myKeyframe, string _seq, int _ws, int _maxLoops, bool _ltr)
motion.marquee(myKeyframe, 'Hello World!', 3, 0) // 0 = infinite loops
// motion.slideInLeft(keyframe myKeyframe, string _seq, int _ws, int _maxLoops, bool _refill)
motion.slideInLeft(myKeyframe, 'Hello World!', 3, 0) // 0 = infinite loops
// motion.slideOutLeft(keyframe myKeyframe, string _seq, int _ws, int _maxLoops, bool _refill)
motion.slideOutLeft(myKeyframe, 'Hello World!', 3, 0) // 0 = infinite loops
// motion.slideInRight(keyframe myKeyframe, string _seq, int _ws, int _maxLoops, bool _refill)
motion.slideInRight(myKeyframe, 'Hello World!', 3, 0) // 0 = infinite loops
// motion.slideOutRight(keyframe myKeyframe, string _seq, int _ws, int _maxLoops, bool _refill)
motion.slideOutRight(myKeyframe, 'Hello World!', 3, 0) // 0 = infinite loops
// motion.blink(keyframe myKeyframe, string _seq, int _ws, int _maxLoops)
motion.blink(myKeyframe, 'Hello World!', 3, 0) // 0 = infinite loops
(indirect output)
// After you create a transition, you can use the output field of the `keyframe` object to output the result
// motion.marquee(myKeyframe, 'Hello World!', 3, 0)
myKeyframe.output
Note: The transition() function doesn't store anything at the output field, to not overload the object with unnecessary long varip string data.
Example advanced transition() usage:
![[CLX][#01] Animation - Price Ticker (Marquee)](https://s3.tradingview.com/1/1jhinKYw_mid.png?v=1628458106)
================================================================================
Here are some numbers about the update frequency:
Release Notes
v10- code improvements
- bug fixes
- new fx
Release Notes
🚀 v11- new motion color_gradient() fx
- new fadeIn/Out() fx
- added missing simplified blend-effects
📑 ADDED
color_gradient(this, _color_from, _color_to, _transp_from, _transp_to, _steps, _maxLoops, _resetOnEveryBar, _autoplay, _cycle, _timerType, _timerMu, _timerStart, _timerMode)
// --
fadeIn(this, _color_from, _color_to, _steps, _transp_from, _transp_to, _maxLoops, _timerType)
fadeOut(this, _color_from, _color_to, _steps, _transp_from, _transp_to, _maxLoops, _timerType)
// --
blendInLeft(this, _seq, _ws, _maxLoops, _refill, _timerType)
blendOutLeft(this, _seq, _ws, _maxLoops, _refill, _timerType)
blendInRight(this, _seq, _ws, _maxLoops, _refill, _timerType)
blendOutRight(this, _seq, _ws, _maxLoops, _refill, _timerType)
📑 UPDATED:
marquee(this, _seq, _ws, _maxLoops, _ltr, _timerType)
// --
blink(this, _seq, _ws, _maxLoops, _timerType)
// --
slideInLeft(this, _seq, _ws, _maxLoops, _refill, _timerType)
slideOutLeft(this, _seq, _ws, _maxLoops, _refill, _timerType)
slideInRight(this, _seq, _ws, _maxLoops, _refill, _timerType)
slideOutRight(this, _seq, _ws, _maxLoops, _refill, _timerType)
Release Notes
🎬 Motion Library - Dynamic Transitions & Animations for Pine Script™📢 ABOUT
Motion is a powerful animation library designed to bring your Pine Script™ charts to life. Generate smooth transition effects for strings, colors, and positions with per-tick updates. Whether you need scrolling marquees, color gradients, or dynamic label movements — Motion delivers with user-friendly APIs and optimal performance.
✨ FEATURES
🎯 Content FX (Text Effects)
• [c]marquee[/c] — Scrolling text effect (like HTML marquee)
• [c]spot[/c] — Spotlight effect highlighting portions of text
• [c]blink[/c] — Flashing/blinking text visibility toggle
• [c]slide_in_left[/c] / [c]slide_in_right[/c] — Text slides in from sides
• [c]slide_out_left[/c] / [c]slide_out_right[/c] — Text slides out to sides
• [c]blend_in_left[/c] / [c]blend_in_right[/c] — Fade in from sides
• [c]blend_out_left[/c] / [c]blend_out_right[/c] — Fade out to sides
• [c]show[/c] / [c]hide[/c] — Simple visibility control
🎨 Style FX (Color Effects)
• [c]gradient()[/c] — Smooth color transitions between any colors
• [c]fade()[/c] — Fade colors in/out with transparency control
• [c]fade_in()[/c] / [c]fade_out()[/c] — Simplified fade helpers
📍 Position FX (Movement Effects)
• [c]movement()[/c] — Move labels/lines along custom paths
• [c]move()[/c] — Simplified position manipulation
📊 Easing Functions
• [c]linear[/c] — Constant speed
• [c]ease[/c] — Smooth acceleration/deceleration
• [c]ease_in[/c] — Slow start, fast end
• [c]ease_out[/c] — Fast start, slow end
• [c]progressive[/c] — Accelerating progression
• [c]exponential[/c] — Exponential growth curve
• [c]fibonacci[/c] — Based on fibonacci sequence ratios
🔧 TWO WAYS TO USE
🅿️ Primitive Method (Frameworkless)
Ultra-lightweight, zero overhead for simple needs:
import cryptolinx/Motion/VERSION as m
// Simple marquee with one line!
string text = "Hello World!".motion()
// Or with arrays
array<string> items = array.from("A", "B", "C")
string current = items.motion()
🔷 Framework Method (Full Control)
Complete animation framework with keyframes, transitions, timers:
import cryptolinx/Motion/VERSION as m
// Define keyframe with custom timing
var kf = m.keyframe.new(intv = 3, steps = 1)
// Apply transition effect
string animated = kf.transition(
_seq = "Hello World!",
_fx = "marquee",
__opt = m.option.new(reverse = true, bounce = true)
)
💡 EXAMPLES
🔄 Marquee Effect
var kf = m.keyframe.new(intv = 2)
string scrolling = kf.transition(
_seq = "Breaking News: Markets Rally!",
_fx = "marquee",
__opt = m.option.new(ws = 5)
)
label.new(bar_index, high, scrolling, style = label.style_label_down)
🌈 Rainbow Gradient
var kf = m.keyframe.new()
color rainbow = array.from(
color.red, color.orange, color.yellow,
color.green, color.blue, color.purple
).fade(_steps = 8)
label.new(bar_index, close, "✨", textcolor = rainbow)
💫 Slide In Animation
var kf = m.keyframe.new(intv = 1)
string animated = kf.transition(
_seq = "ALERT!",
_fx = "slide_in_right",
__opt = m.option.new(max_loops = 1, prefix = "⚠️ ", suffix = " ⚠️")
)
🔢 Iteration Effect (Cycling Values)
var kf = m.keyframe.new(intv = 5)
string countdown = kf.iteration(
_seqArr = array.from("3", "2", "1", "GO!"),
__opt = m.option.new(prefix = "[ ", suffix = " ]")
)
📍 Label Movement
var label myLabel = label.new(bar_index, close, "Moving!")
var kf = m.keyframe.new()
// Define path: x:y offsets separated by >
kf.move(myLabel, "5:0>0:-5>-5:0>0:5", _yHeight = high - low)
🎭 Multi-Transition Chaining
var kf = m.keyframe.new()
// Chain multiple effects on one keyframe
kf.transition(_seq = "Hello", _fx = "blink", __opt = m.option.new(max_loops = 3))
string final = kf.transition(_seq = "Hello World!", _fx = "marquee")
📊 OBJECT TYPES
keyframe — Main animation controller
• [c]intv[/c] — Interval between updates (Δt)
• [c]steps[/c] — Updates per execution
• [c]exec[/c] — Start/stop control
• [c]offset[/c] — Timeline offset
transition — Effect configuration
• [c]fx[/c] — Effect type (marquee, blink, slide, etc.)
• [c]action[/c], [c]dir[/c], [c]side[/c] — Parsed effect properties
option — Customization settings
• [c]max_loops[/c] — Loop count (0 = infinite)
• [c]reverse[/c] / [c]bounce[/c] — Direction control
• [c]prefix[/c] / [c]suffix[/c] — Text additions
• [c]sub_start[/c] / [c]sub_length[/c] — Subsequence slicing
• [c]easing[/c] — Easing function type
timer — Timing control
• [c]frequency[/c] — on_tick, on_time, on_index, on_input
• [c]start_on[/c] — now, on_open, on_close
• [c]mu[/c] — Time unit fineness
⚡ FREQUENCY MODES
• [c]on_tick[/c] — Update every price tick (smoothest)
• [c]on_time[/c] — Update based on real-world time
• [c]on_index[/c] — Update based on bar index
• [c]on_input[/c] — External control via [c]extern[/c] field
📛 METHOD BADGES
• 🅿️ [c]method-primitive[/c] → Zero-overhead, frameworkless
• 🔷 [c]method-primary[/c] → Core framework methods
• 🔶 [c]method-secondary[/c] → Simplified user-friendly wrappers
• 🔺 [c]method-library[/c] → Internal framework methods
🚀 WHY MOTION?
• 🎬 Dynamic Charts — Bring static labels to life with animations
• ⚡ Optimized — Fine-tuned for minimal memory usage
• 🔧 Flexible — From one-liners to complex multi-transition chains
• 📖 Documented — Comprehensive inline examples
• 🔗 Chainable — Compose effects together seamlessly
• 🎯 Per-Tick Updates — Smooth real-time animations
📋 COMPLETE METHOD REFERENCE
Primitive Methods
• [c]motion()[/c] — Basic string/array manipulation (+4 overloads)
• [c]run()[/c] — Generate oscillating series (+1 overload)
• [c]easing()[/c] — Apply easing curves (+1 overload)
Primary Methods
• [c]transition()[/c] — Text transition effects
• [c]iteration()[/c] — Value cycling/iteration
• [c]gradient()[/c] — Color gradient generation
• [c]movement()[/c] — Position path animation
Secondary Methods (Simplified)
• [c]fx()[/c] — Unified effect wrapper (+3 overloads)
• [c]iterate()[/c] — Simple iteration (+3 overloads)
• [c]fade()[/c] — Color fading (+4 overloads)
• [c]fade_in()[/c] / [c]fade_out()[/c] — Direction-specific fades (+4 overloads each)
• [c]move()[/c] — Position movement (+4 overloads)
Controller Methods
• [c]start()[/c] — Start animation execution
• [c]stop()[/c] — Stop animation
• [c]reset()[/c] — Reset to initial state
🎮 TIP: DEBUGGING
Enable the built-in console insights by creating a copy of the script:
// In script settings:
// Show Console - Insights = true
// Shows: Keyframe state, pointer position, loop count, etc.
Pine library
In true TradingView spirit, the author has published this Pine code as an open-source library so that other Pine programmers from our community can reuse it. Cheers to the author! You may use this library privately or in other open-source publications, but reuse of this code in publications is governed by House Rules.
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.
Pine library
In true TradingView spirit, the author has published this Pine code as an open-source library so that other Pine programmers from our community can reuse it. Cheers to the author! You may use this library privately or in other open-source publications, but reuse of this code in publications is governed by House Rules.
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.
