Effects System
ASCII Motion includes a procedural, non-destructive effects system. Effects are timeline-based blocks that process content at render time without modifying source data.
Overview
Effects are non-destructive — they process content at render time and can be toggled, keyframed, and removed at any point. Original canvas data is always preserved.
Looking for GPU effects? Effects operate on ASCII cells (characters and colors). For pixel-level post-processing like blur, glow, and distortion, see Shaders.
The effects system provides eight effects in four categories:
Adjustment
| Effect | Purpose |
|---|---|
| Levels | Brightness, contrast, and gamma via input/output range controls |
| Hue & Saturation | HSL color manipulation |
Mapping
| Effect | Purpose |
|---|---|
| Remap Colors | Color replacement with auto-detection and palette mapping |
| Remap Characters | Character replacement with canvas analysis |
Filter
| Effect | Purpose |
|---|---|
| Scatter | Cell displacement with dithering patterns and noise |
| Motion Trails | Screen-space trailing with configurable colors |
Distortion
| Effect | Purpose |
|---|---|
| Wave Warp | Sine wave distortion along horizontal or vertical axis |
| Wiggle | Global displacement via wave or Perlin noise |
Effect Blocks on the Timeline
Effects are added as blocks on the timeline with in/out points:
- Each effect block has a start frame and duration that define when it's active
- Drag block edges to adjust timing
- Multiple effects can stack on a single layer — array order determines processing order
- Toggle effects on/off with the eye icon without removing them
Application Scope
Effects can be applied at three levels:
| Scope | Description |
|---|---|
| Per-Layer | Applied to a single layer's content before transforms |
| Per-Group | Applied to a layer group's intermediate composite |
| Global | Applied after all layers and groups are composited |
Adding Effects
Keyframeable Properties
Every effect parameter can be animated over time:
Properties use either numeric interpolation (smooth transitions between values) or hold interpolation (snaps to the most recent keyframe value, used for enums and mappings).
Processing Pipeline
Effects are applied in this order during rendering:
Layer Content
→ Apply layer effect tracks (array order)
→ Apply layer transforms (position, scale, rotation)
→ Composite into group
→ Apply group effect tracks
→ Apply group transforms
→ Composite all groups/layers
→ Apply global effect tracks
→ Final output
Effect processing order matters. Effects higher in the stack are applied first. Drag effect tracks to reorder them.
Baking Effects
To permanently apply an effect's results to the canvas data:
- Right-click an effect block → Bake Effect
- Time-dependent effects (Wave Warp, Wiggle) generate per-frame output
- Content frames are split at effect boundaries as needed
- This operation is undoable
Effect Reference
Levels
Input/output level adjustments for tonal range. Controls shadows, midtones (gamma), and highlights with output min/max clamping. → Levels
Hue & Saturation
HSL color space manipulation. Shift hue ±180°, adjust saturation and lightness ±100%. → Hue & Saturation
Remap Colors
Visual color replacement with auto-detection. Supports manual mapping, palette-based remapping, and closest/by-index algorithms. → Remap Colors
Remap Characters
Character-for-character replacement with auto-detection from canvas content. → Remap Characters
Scatter
Random cell displacement using four patterns (Noise, Bayer 2×2, Bayer 4×4, Gaussian). Supports deterministic seeding and color blending. → Scatter
Wave Warp
Sine wave distortion along a configurable axis with amplitude, frequency, speed, and phase controls. Time-dependent — output varies with frame. → Wave Warp
Motion Trails
Screen-space trailing effect with configurable trail count, frame delay, and up to 10 per-trail colors. → Motion Trails
Wiggle
Global displacement via horizontal/vertical wave or Perlin noise with independent axis control. Time-dependent. → Wiggle