Virtual.ink Refine - Adobe Plugin Guide
Light-painting accumulation and decay trails for video footage. Turn any pre-recorded clip into a long-exposure light painting inside Adobe Premiere Pro or After Effects.
This guide covers the Adobe .aex implementation of Virtual.ink Refine, which runs inside Adobe Premiere Pro and After Effects.
Light-painting is about revealing reality in a way our eyes can't see. We all know the magic of long-exposure photography. But what if that same magic could live in video?
Installation
Windows
Virtual.ink Refine is distributed as a zip file containing virtualink-refine.aex. To install:
Close Premiere Pro / After Effects if running.
Extract the zip file.
Copy
virtualink-refine.aexto:C:\Program Files\Adobe\Common\Plug-ins\7.0\MediaCore\Virtual.ink\Create the
Virtual.inksubfolder if it does not exist.Launch Premiere Pro or After Effects.
macOS (Intel and Apple Silicon)
Virtual.ink Refine is distributed as a zip file containing virtualink-refine.plugin. Both Intel and Apple Silicon (arm64) Macs are supported. To install:
Quit Premiere Pro / After Effects if running.
Extract the zip file.
Copy
virtualink-refine.pluginto:/Library/Application Support/Adobe/Common/Plug-ins/7.0/MediaCore/Virtual.ink/Create the
Virtual.inksubfolder if it does not exist.If macOS Gatekeeper blocks the plugin the first time, allow it in System Settings > Privacy & Security.
Launch Premiere Pro or After Effects.
Uninstallation
Quit Premiere Pro / After Effects, then delete the Virtual.ink folder from the MediaCore plug-ins directory shown above for your platform.
Getting Started
- In the Effects panel, find Virtual.ink > Refine.
- Drag the effect onto a video clip.
- Open Effect Controls for the clip.
- Adjust parameters (see below).
- Play back or export from the beginning of the clip for correct paint accumulation.
Important: The light-paint effect accumulates frame-by-frame in sequence. Always start playback, render, or export from the beginning of the clip when judging the result. Scrubbing and out-of-order previews can reconstruct or approximate the paint history, but they are not the authoritative view.
Known limitation: Apply other effects (Lumetri Color, and other GPU-accelerated effects) at the clip/timeline level, not the Master/source-clip level. Premiere renders source-level effect stacks through a separate render context from the one Virtual.ink Refine runs in, which breaks the strictly sequential frame stream the accumulation depends on. This causes visible glitches such as trails that look out of order or jump between older/newer states, and worse artifacts on export than in a "Render in to out" preview. Instead, drag other effects onto the clip in the timeline, or use an adjustment layer above it, so everything stays in one render context. This is a Premiere rendering-architecture limitation, not something the plugin can fully work around.
Premiere Pro Tips
- The best way to reveal the full light-painting result in Premiere Pro is to render the sequence from the Sequence menu. Because the effect builds over time, a rendered preview is often more reliable than real-time playback.
- To test only part of your timeline, set In and Out points first, then render just that section.
- If your computer struggles with high-resolution footage, create proxies before testing. This plugin is computationally demanding, and proxies can make iteration much smoother.
Parameters
About Virtual.ink Refine
| Type | Button |
Opens the about dialog, showing the installed version number, credits, and links to virtual.ink, lightpainting.store, and xangleapps.com.
Account...
| Type | Button |
Opens the account dialog, showing your Refine license status and expiry, with sign-in/activation and links to purchase or manage a license at virtual.ink/refine. This license is separate from any Virtual.ink desktop app subscription.
Decay Mode
| Type | Popup |
| Options | Linear, Natural, Gentle, Smooth, Soft Landing, Steps, Pulse, Blink, Dissolve, Sputter, Ember |
| Default | Linear |
| Keyframeable | Yes |
| Applies to | Peak accumulation mode only |
Controls the mathematical curve used when paint fades out.
Scope: Decay Mode only shapes the fade in Peak accumulation mode (see Accumulation below). Light/Color Separation, Animate (Zoom/Gravity), and Slow burn accumulation each decay their buffer at a fixed exponential rate driven only by Fade Duration, regardless of the Decay Mode selection. Premiere cannot dynamically grey out a control depending on other settings, so this popup stays visible and editable even when it has no effect.
| Mode | Behaviour |
|---|---|
| Linear | Holds, then fades in a straight line. Predictable and uniform. |
| Natural | Holds, then fades exponentially: a faster initial drop with a longer tail. |
| Gentle | Holds, then fades with a cosine curve for a softer roll-off. |
| Smooth | Fades with a quintic (smootherstep) curve: zero slope at both the start and end of the fade, for the smoothest possible transition. |
| Soft Landing | Fades quickly at first, then eases into its final approach to black. |
| Steps | Fades in five discrete brightness plateaus instead of a continuous ramp, for a stepped/posterized look. |
| Pulse | Fades out while a subtle pulsing/breathing brightness ripple plays over the trail. |
| Blink | Holds, then blinks off in three square flashes with shrinking on-time near the end of the fade. |
| Dissolve | Individual pixels drop out at full brightness (a sparkle/dissolve pattern) instead of dimming uniformly -- never fades to grey. |
| Sputter | Fades with random flicker/dropouts that become more frequent toward the end of the fade. |
| Ember | Fades with a cooling color tint (white to yellow to orange to red) instead of dimming toward grey, like a fading ember. |
Paint Duration (ms)
| Type | Slider |
| Range | 0 -- 20,000 ms |
| Default | 0 |
| Keyframeable | Yes |
| Applies to | Peak accumulation mode only |
How long paint stays at full brightness before fading begins under the selected Decay Mode curve.
- A value of
0means the fade begins immediately. - If Paint Duration and Fade Duration are both
0, paint is permanent. - If Paint Duration is greater than
0and Fade Duration is0, paint holds and then drops away immediately.
Scope: like Decay Mode, this hold plateau only applies in Peak accumulation mode. Light/Color Separation, Animate, and Slow burn accumulation start decaying as soon as paint stops being deposited and ignore this control.
Fade Duration (ms)
| Type | Slider |
| Range | 0 -- 20,000 ms |
| Default | 3,000 |
| Keyframeable | Yes |
How long it takes for paint to fade from full brightness to invisible after the Paint Duration has elapsed.
- Short values (500--1,500 ms): snappy, short-lived trails.
- Medium values (2,000--5,000 ms): flowing tails that linger naturally.
- Long values (8,000--20,000 ms): the paint hangs around for a very long time, building up dense layers.
Paint is only permanent when Paint Duration and Fade Duration are both 0.
Scope: Fade Duration applies in every mode, but works differently outside Peak. In Light/Color Separation, Animate, and Slow burn accumulation, Fade Duration sets a fixed exponential decay rate for the buffer (Decay Mode's curve shape and Paint Duration's hold plateau do not apply there);
0still means permanent paint.
Paint Opacity (%)
| Type | Slider |
| Range | 0 -- 100% |
| Default | 100 |
| Keyframeable | Yes |
Overall opacity of the accumulated paint layer before it is composited with the original footage. Lowering this creates a more transparent, ghostly trail effect.
This is a display-side control. Changing it does not clear the stored paint history.
Blend Mode
| Type | Popup |
| Options | Lighten, Screen, Soft Light, Luminosity, Color, Normal |
| Default | Lighten |
| Keyframeable | Yes |
| Applies to | Peak, Light/Color Separation, and Animate -- not Slow burn |
Controls how the accumulated paint layer is composited onto the original footage.
Scope: Blend Mode has no effect in Slow burn accumulation mode, which always uses its own photographic exposure composite instead (see Accumulation below). It applies normally in Peak mode and alongside Light/Color Separation or Animate.
| Mode | Result |
|---|---|
| Lighten | Each pixel takes the brighter of the original or the paint. Clean, never over-brightens. |
| Screen | Additive blend that avoids clipping. Bright, airy trails. Good default for most footage. |
| Soft Light | Subtle, smooth overlay. Paint gently tints the image without dominating. |
| Luminosity | Mirror of Color: keeps the scene's own hue and saturation and uses the paint's brightness to lighten it. Often reads as a softer, more natural glow than Lighten for bright/white trails, since the scene's own color shows through instead of flattening toward grey-white. |
| Color | Applies the paint's hue and saturation while preserving the original luminance. Useful for tinting scenes with colored light sources. |
| Normal | The paint replaces the scene outright wherever it's present, instead of being math-blended against it. Use this if you want to control how the trail combines with layers below using Premiere/After Effects' own track/layer blend mode instead of this plugin's internal one. |
This is also a display-side control. Changing it does not clear the stored paint history.
Reset Paint
| Type | Checkbox |
| Default | Off |
| Keyframeable | Yes |
When checked, clears all accumulated paint on that frame -- the entire internal buffer is wiped to black.
Typical workflow:
- Leave Reset Paint off during normal playback.
- On the frame where you want to clear all trails, keyframe Reset Paint on.
- On the very next frame, keyframe it back off.
This lets you create multiple independent light-paint segments within a single clip without splitting it. For example, if a scene has two separate performances, you can reset between them so paint from the first doesn't bleed into the second.
Separation
| Type | Popup |
| Options | None, Light, Color |
| Default | None |
| Keyframeable | Yes |
Selects how the plugin separates the displayed paint from the rest of the scene, so the scene can be dimmed or desaturated independently before the paint is composited back in.
| Mode | Behaviour |
|---|---|
| None | No separation. The scene is untouched. |
| Light | Classifies bright content as paint versus scene using Sep Strength, which directly darkens the non-light background. Good default for isolating bright light sources. |
| Color | Classifies paint using a target hue (Target Color), Color Tolerance, and Saturation Minimum. Useful when the paint has a distinct color from the rest of the scene. |
The controls below apply depending on the selected mode.
Sep Strength
| Type | Slider |
| Range | 0 -- 100 |
| Default | 80 |
| Keyframeable | Yes |
| Applies to | Light mode |
How aggressively bright content is classified as paint versus scene. 0 leaves the scene untouched; 100 suppresses the background fully so only light and trails remain.
Target Color
| Type | Color picker (eyedropper) |
| Default | Red (255, 0, 0) |
| Keyframeable | Yes |
| Applies to | Color mode |
The hue used to classify paint versus scene when Separation is set to Color.
Color Tolerance
| Type | Slider |
| Range | 1 -- 180 |
| Default | 30 |
| Keyframeable | Yes |
| Applies to | Color mode |
Hue distance (in degrees) from Target Color that still counts as paint. Lower values are more selective; higher values accept a wider range of hues.
Saturation Minimum
| Type | Slider |
| Range | 0 -- 100 |
| Default | 50 |
| Keyframeable | Yes |
| Applies to | Color mode |
Minimum saturation a pixel must have to be considered paint in Color mode. Raises the bar so desaturated/grayish content is treated as scene, not paint.
Sep Softness
| Type | Slider |
| Range | 0 -- 100 |
| Default | 0 |
| Keyframeable | Yes |
| Applies to | Light and Color modes |
Controls the softness of the separation edge. Lower values create a harder edge; higher values produce a smoother transition.
Scene Dim
| Type | Slider |
| Range | 0 -- 100 |
| Default | 0 |
| Keyframeable | Yes |
| Applies to | Light and Color modes |
Darkens non-paint areas before the paint is composited back in. At 0, the scene is left untouched. At 100, non-paint areas are driven fully to black.
Scene Desat
| Type | Slider |
| Range | 0 -- 100 |
| Default | 0 |
| Keyframeable | Yes |
| Applies to | Light and Color modes |
Desaturates non-paint areas. At 100, the scene becomes grayscale while the paint retains its color.
Paint Tint
| Type | Color picker (eyedropper) |
| Default | White (255, 255, 255) -- no tint |
| Keyframeable | Yes |
Applies a color tint to the displayed paint. White means no tinting. Pick any color to shift the paint hue for stylistic effects or to match a grade.
Animate
| Type | Popup |
| Options | None, Zoom, Gravity |
| Default | None |
| Keyframeable | Yes |
Animates the accumulated trail over time instead of leaving it static.
| Mode | Behaviour |
|---|---|
| None | No trail animation. |
| Zoom | Trails grow or shrink outward/inward using Zoom Direction. |
| Gravity | Trails drift in a direction using Gravity Direction. |
Zoom Direction
| Type | Popup |
| Options | Out, In |
| Default | Out |
| Keyframeable | Yes |
| Applies to | Zoom mode |
Gravity Direction
| Type | Popup |
| Options | Down, Up, Left, Right, Spiral |
| Default | Down |
| Keyframeable | Yes |
| Applies to | Gravity mode |
Animation Length
| Type | Slider |
| Range | 0.01 -- 40 |
| Default | 14.0 |
| Keyframeable | Yes |
| Applies to | Zoom and Gravity modes |
Controls how far the animation travels before a trail segment is fully spent.
Animation Speed
| Type | Slider |
| Range | 0.05 -- 40 |
| Default | 14.0 |
| Keyframeable | Yes |
| Applies to | Zoom and Gravity modes |
Controls how fast the animation plays out.
Subject In Front (%)
| Type | Slider |
| Range | 0 -- 100% |
| Default | 0 |
| Keyframeable | Yes |
Display-only control that attenuates accumulated paint where the live input is bright, so a subject reads in front of the trails instead of being painted over. 0 disables the effect.
Subject Distance (px)
| Type | Slider |
| Range | 0 -- 500 px |
| Default | 0 |
| Keyframeable | Yes |
Expands the Subject In Front occlusion outward from the subject silhouette so trails keep a clearance gap around the subject. 0 means trails touch the subject (original behavior). Only active when Subject In Front is greater than 0.
Accumulation
| Type | Popup |
| Options | Peak, Slow burn |
| Default | Peak |
| Keyframeable | No -- changing this resets the paint history (see What Resets the Paint History) |
Selects the underlying accumulation model.
| Mode | Behaviour |
|---|---|
| Peak | Classic per-channel max: each pixel latches the brightest value ever seen at that position, then fades according to Decay Mode, Paint Duration, and Fade Duration. |
| Slow burn | Photographic long-exposure model: brightness is integrated over time as light energy (dwell time drives the tonality) instead of latching a peak, then passed through a film-style response curve for display. This restores smooth gradients in scenes where Peak produces harsh, flat plateaus -- for example, moving water reflections. Decay Mode, Paint Duration, and Blend Mode do not apply in this mode; Fade Duration sets the exposure window (0 = permanent). |
The three controls below apply only when Accumulation is set to Slow burn.
Slow burn (%)
| Type | Slider |
| Range | 1 -- 1,000% |
| Default | 100 |
| Keyframeable | Yes |
| Applies to | Slow burn mode |
Display-only gain on the integrated light energy. Raise it to bring out dim trails sooner; around the default, roughly one second of full-white dwell time saturates.
Bloom (Slow burn)
| Type | Slider |
| Range | 0 -- 100 |
| Default | 25 |
| Keyframeable | Yes |
| Applies to | Slow burn mode |
Adds a soft halation glow around bright accumulated trails. 0 disables it.
Highlight Limit (Slow burn)
| Type | Slider |
| Range | 0 -- 100 |
| Default | 0 |
| Keyframeable | Yes |
| Applies to | Slow burn mode |
Soft-knee ceiling on the displayed exposure. Very bright areas (long dwell times, stacked reflections) are compressed toward a ceiling while their hue is preserved, instead of clipping to flat white. 0 disables it.
Quick Reference
| Parameter | Type | Default | Notes |
|---|---|---|---|
| About Virtual.ink Refine | Button | -- | Opens the about/credits dialog |
| Account... | Button | -- | Opens the account and license dialog |
| Decay Mode | Popup | Linear | Peak accumulation mode only; 11 curves |
| Paint Duration (ms) | Slider | 0 | Peak accumulation mode only |
| Fade Duration (ms) | Slider | 3,000 | All modes (fixed rate outside Peak) |
| Paint Opacity (%) | Slider | 100 | Display-only |
| Blend Mode | Popup | Lighten | Display-only; no effect in Slow burn |
| Reset Paint | Checkbox | Off | Clears accumulation on that frame |
| Separation | Popup | None | None / Light / Color |
| Sep Strength | Slider | 80 | Active in Light mode |
| Target Color | Color | Red | Active in Color mode |
| Color Tolerance | Slider | 30 | Active in Color mode |
| Saturation Minimum | Slider | 50 | Active in Color mode |
| Sep Softness | Slider | 0 | Active in Light/Color mode |
| Scene Dim | Slider | 0 | Active in Light/Color mode |
| Scene Desat | Slider | 0 | Active in Light/Color mode |
| Paint Tint | Color | White | White = no tint |
| Animate | Popup | None | None / Zoom / Gravity |
| Zoom Direction | Popup | Out | Active in Zoom mode |
| Gravity Direction | Popup | Down | Active in Gravity mode |
| Animation Length | Slider | 14.0 | Active in Zoom/Gravity mode |
| Animation Speed | Slider | 14.0 | Active in Zoom/Gravity mode |
| Subject In Front (%) | Slider | 0 | Display-only |
| Subject Distance (px) | Slider | 0 | Active when Subject In Front > 0 |
| Accumulation | Popup | Peak | Peak / Slow burn |
| Slow burn (%) | Slider | 100 | Active in Slow burn mode |
| Bloom (Slow burn) | Slider | 25 | Active in Slow burn mode |
| Highlight Limit (Slow burn) | Slider | 0 | Active in Slow burn mode |
How It Works
Paint Detection
How a pixel qualifies as "paint" depends on the active mode:
- Peak with Separation = None (the classic path): each frame, the plugin compares pixel brightness against what's currently displayed there. A pixel is only treated as new paint when it's brighter than that value. This motion gate keeps static bright objects from being continuously re-painted, keeping the effect focused on moving light sources.
- Light Separation: any pixel above a continuous brightness threshold (Sep Strength) accumulates every frame, with no motion requirement, so a static light source keeps painting.
- Color Separation: any pixel matching Target Color within Color Tolerance and Saturation Minimum accumulates every frame, also with no motion requirement.
- Slow burn accumulation: every pixel's brightness is continuously integrated as light energy over time regardless of motion; Light/Color Separation can still be used to decide what counts toward that energy.
Accumulation
- Peak: paint pixels are merged into a persistent buffer using a per-channel MAX operation, so the buffer keeps the brightest value ever seen at each position. A per-pixel frame index tracks when each position was last painted, driving the age-based Decay Mode curve.
- Slow burn: instead of latching a peak, brightness is integrated as light energy every frame, and that energy buffer decays exponentially at a rate set by Fade Duration. Bloom and Highlight Limit are applied when the energy is converted into a displayed image.
Decay
Over time, accumulated paint brightness is reduced:
- In Peak mode, brightness follows the selected Decay Mode curve, computed from each pixel's paint time plus Paint Duration and Fade Duration. If both are
0, paint is permanent. - In Light/Color Separation, Animate (Zoom/Gravity), and Slow burn accumulation, the buffer decays continuously at a fixed exponential rate set only by Fade Duration (
0= permanent); Decay Mode and Paint Duration do not apply.
Compositing
The visible paint is optionally tinted, scaled by Paint Opacity, and composited with the original input frame using the selected Blend Mode -- except in Slow burn mode, which always uses its own photographic exposure composite instead (Blend Mode is ignored there). If Separation is set to Light or Color, scene pixels are dimmed and/or desaturated before the paint is blended back in. If Animate is set to Zoom or Gravity, the trail is animated as it composites. Subject In Front and Subject Distance can attenuate the trail where the live subject is bright. In Slow burn mode, Bloom adds a halation glow and Highlight Limit compresses very bright highlights before display.
Paint Opacity, Blend Mode, Scene Dim, Scene Desat, Paint Tint, Subject In Front, Subject Distance, Slow burn (%), Bloom, and Highlight Limit are display-side controls -- changing them does not clear the stored paint history. Separation mode itself (and its Sep Strength / Target Color / Color Tolerance / Saturation Minimum / Sep Softness controls) affects what gets accumulated as paint, not just how it's displayed, so changing it does reset the paint history (see below).
Playback and Scrubbing
The accumulation buffer is still fundamentally forward-looking: frame N depends on the frames before it. Sequential playback and export are the authoritative paths.
- Same-frame re-renders reuse the current accumulation without mutating it.
- Small forward gaps are reconstructed automatically.
- Larger timeline jumps and scrubbing may reconstruct from cached snapshots or show an approximate result, especially at higher resolutions where snapshot caching is limited.
This is why Sequence > Render and proxies are the best way to judge the final result in Premiere Pro.
What Resets the Paint History
The accumulation state is rebuilt when any of these controls change:
- Accumulation (Peak / Slow burn)
- Decay Mode
- Paint Duration
- Fade Duration
- Separation mode, Sep Strength, Target Color, Color Tolerance, Saturation Minimum, Sep Softness
- Animate mode, Zoom Direction, Gravity Direction, Animation Length, Animation Speed
- frame rate
- the locked working resolution
After changing one of those core controls, replay or re-render from earlier in the shot.
Licensing
Virtual.ink Refine is licensed separately from the Virtual.ink desktop app; a desktop app subscription is not required. Without a valid Refine license, the effect still renders, but the plugin composites a watermark over the output. Activate a license from the Account... button to remove it.
Tips
- Always play, render, or export from the start of the shot when judging accumulation.
- Re-render after changing Decay Mode, Paint Duration, Fade Duration, Separation, Animate, or Accumulation because those controls rebuild the paint history.
- Try Lighten or Screen blend mode as a starting point for most footage.
- Use Slow burn accumulation for scenes where Peak looks flat or plateaued, such as moving water reflections; pair it with Bloom and Highlight Limit to control the glow and clipping.
- Combine Scene Dim + Scene Desat with Separation (Light or Color) when you want the paint to stand out from the plate.
- Use Reset Paint at scene cuts or between separate performances inside one clip.
- Use Animate (Zoom or Gravity) to give trails motion instead of a static hold.
- Use Subject In Front to keep a performer readable in front of dense trails.
- Use proxies for high-resolution footage if full-resolution previews are too heavy.
- Apply other effects at the clip level, not the Master/source-clip level, to avoid render-context glitches (see Known limitation above).