FAQ
Short answers to the questions that come up most often. This page has two parts: a few general questions here at the top, and below them every plug-in's own Questions & answers — the same text that closes each user guide, collected in one place. Click a question to open its answer; the links inside point at the section of the guide where the long version lives.
GIF Dither: there is a sparse band along the top and left edge (v1.2 and earlier)
That was the error diffusion "cold start": the sweep began at the layer's top-left corner with an empty error budget, so the first rows and columns were starved. Version 1.3 added Edge Warm-up (Diffusion group, on by default), which runs a warm-up lap on a mirrored margin around the layer before the real sweep begins. Projects saved with an older version open with it on. See Diffusion in the GIF Dither guide.
GIF Dither open the guide →
I switched Method from Bayer to Floyd-Steinberg and the panel changed — which controls belong to which method?
The two families make their decision differently, so they have different dials. Ordered (Bayer) decides every cell from its own value and a fixed matrix: its own dial is the matrix size (2×2 → 16×16 = 4 → 256 tone steps, a less visible repeat), and Corner Mode is Bayer-only (it re-orders how the matrix dots switch on; it greys out for error diffusion, and does nothing at 2×2). Bayer is locked to the layer, so it is perfectly stable in animation with nothing to tune. Error diffusion (Floyd-Steinberg, Atkinson, Stucki, Jarvis, Burkes, the Sierras, Stevenson-Arce) pushes each cell's rounding error onto its neighbours, and its whole character lives in the Diffusion group, which is dead for Bayer: Serpentine Scan, Diffusion Gain, Stability, Crawl Speed, Edge Warm-up. Everything else — Cell Size, Grid, Grid Offset, QR Style, Palette, Dither Alpha, Jitter, Blend — is shared and behaves identically. One thing that surprises people: the method never changes the dot size; that is Cell Size. See Cells and Diffusion.
I applied the effect to a black-and-white graphic and nothing happened. Why?
Dithering needs mid-tones to work on: it decides, cell by cell, whether a grey is closer to ink or to paper, and a picture that is already pure black and pure white gives it nothing to decide. Apply it to video, a photo or a gradient and the raster appears at once. If the graphic has soft edges or a drop shadow, those are mid-tones — and with Dither Alpha a feathered edge or a shadow gets punched into the pattern too. See Quick start and Transparency.
How do I reduce the flickering between frames?
Some frame-to-frame boiling is in the nature of dithering, and error diffusion is the worst at it: one grain of noise can flip a cell, and one flipped cell shifts every cell after it. Three controls exist for exactly this. Stability (Diffusion group) anchors the dots and adds a dead-zone on the input — 100 % is the calmest, 40–60 % keeps the organic texture. Serpentine Scan on chops the long diagonal chains that carry a flip a long way. Average Fill (Pixel grid) or the Relative grid feeds each cell the average of the area it covers, so a single noisy pixel can no longer decide a cell. If you need it dead still, a Bayer method is stable by construction. And if the flicker is in the source, calm the source first: precompose the footage and put Wide Time (Effect → Time), a temporal denoiser or an optical-flow smoother on the precomp, then dither that — the plug-in can only be as stable as the picture it is given. A future edition is planned to carry its own temporal tools; until then this is the recipe. See Diffusion → Stability and Average Fill.
I actually want the crawling "worms". How do I get them on purpose?
Turn the anti-worm switches off: Serpentine Scan OFF (the name describes the scan path, and ON is the anti-snake setting), Stability 0 %, then Crawl Speed 20–40 % so the worms swim even on a completely still image. Method Floyd-Steinberg, Cell 2. Diffusion Gain above 100 % makes them fat and aggressive; below 100 % the picture drifts toward clean posterization instead. Keyframe Crawl Speed, or drive it from audio, for worms that dance. This is the Living worms recipe — see Diffusion and Recipes.
How do I make a logo or text disintegrate into the dither?
Switch on Dither Alpha (Transparency group): soft transparency — a feathered mask, a gradient matte, a drop shadow — is then dithered too, every cell fully opaque or fully transparent, on the same grid as the colour. Put a big feathered mask on the logo layer, Method Atkinson, Cell 2, and keyframe the mask feather (or the mask path): the logo crumbles into the pattern instead of fading. Add Size Modulation 200 % and the edges crumble into big blocks; Blend With Original 50 % gives half-punched, half-feathered edges. See Transparency and the Disintegrating logo recipe in Recipes.
How do I make the dither react to music?
Select the music layer → Animation → Keyframe Assistant → Convert Audio to Keyframes, then pick-whip a parameter to the Audio Amplitude slider. Gain is the classic target (0.6 + value/30, tune the divisor): the picture pulses between more ink and more paper. Four others read the same track differently: Cell Size (keep it to 1–4 or the look changes rather than pulses), Dither Strength (dissolves toward flat quantization between hits), Size Modulation (the QR blocks pump) and Crawl Speed (worms that dance). Convert Audio to Keyframes writes one keyframe per frame, so divide the value well down and run Window → The Smoother over the slider if it stutters; keep the multiplier small enough that the quietest frame still looks like your shot. See the Audio-reactive raster recipe in Recipes.
Can I animate the raster itself — a slowly scrolling CRT grid, a nervous shake?
Yes: Grid Offset X / Y slides the whole grid — cells, the QR coarse grid and the error-diffusion field together — by a pixel amount with sub-pixel precision. Keyframe X for a slowly scrolling raster over a still image, wiggle() both for a nervous CRT feel, or pick-whip them to audio. The offsets are in layer pixels and follow the preview resolution, so Half-res previews match the final. For a jump rather than a slide, Jitter shifts the pattern in discrete steps over time (100 % = 12 jumps per second) — the restless shimmer of animated GIFs, visible during playback. See Cells → Grid Offset and Jitter.
LED wall or different delivery sizes — should I use the Pixel or the Relative grid?
Pixel when the raster must match a physical pixel pitch: LED walls, tiling across displays, matching an existing raster by counting pixels. Cell Size is in pixels and the QR coarse grid is Cell Size × 2^n with no ceiling, so two walls of different heights get the same physical grid. Relative when the same comp is delivered at several resolutions — proxy → final, 720p → 4K, a square crop and a wide master: the cell is a percentage of the layer height, so the look survives the resolution change instead of turning into a different texture, and the biggest QR block is capped at the layer height. Two details in both modes: Grid Offset stays in pixels (it is a nudge, not a layout unit — for a resolution-independent anchor use Grid Origin: Center instead), and Relative is bit-identical across resolutions only where the cell works out to whole pixels — otherwise "the same picture", not the same bits. See Which grid should I use?
How do I build the "QR wall" — and why does Size Modulation seem to restart at the top of the slider?
QR Style makes the cell size depend on brightness: dark areas collapse into big blocks, bright areas stay fine. Recipe: Cell 2, Size Modulation 300 %, Duotone; Invert Modulation on bright footage; Corner Mode for corner-connected clumps. Cells stay powers of two, so the sizes tile without seams. The "restart" is a known property of Pixel mode: with a large Cell Size and Size Modulation above ~300 % the biggest block can outgrow the frame, its brightness class is then decided by a single pixel, and the whole frame can flip to small cells. Either keep Size Modulation ≤ 300 % at Cell Size 3, or switch Grid → Relative, where the biggest block is capped at the layer height and every block reads the average of its area, so the top of the slider stays smooth. See QR Style.
My colours are not in the Preset list — can I use the colours of the shot, or a brand palette?
Yes: Mode → Custom Palette. The same quantizer runs as for the presets (nearest colour, then dithered by the current Method), so QR Style, Diffusion and Dither Alpha behave exactly as before — only the allowed colours change. Two things to know. In this mode Levels means the palette size, not steps per channel: Levels 6 makes Color 1–6 live and Color 7–8 grey out. And the wells are ordinary colour parameters: eyedropper them off the footage itself for a raster that belongs to the shot rather than to 1985, type in the hex values of a machine the preset list lacks (MSX, Apple II, Teletext) or of a brand guide, and keyframe them — drifting two wells through a hue recolours the whole image without moving a single dot. See Palette.
Do Half and Quarter previews show me what the final render will look like?
Yes. Cell Size, Grid Offset and the QR coarse grid all follow the preview resolution, so a Half-res preview shows the same raster the full render will — the cells are simply drawn at the preview's scale. Two things still belong to the final render: set the comp to 100 % resolution for the actual output, because the cell grid is computed in layer pixels; and error diffusion at Cell Size 1 on 4K is the slow path (roughly half a second per frame per core) — Cell Size 2–3 is 4–20× faster and usually looks better anyway. See Tips and the performance note in Diffusion.
Quadtree open the guide →
I applied the effect and the picture looks untouched. What am I missing?
Three usual causes, all settings. Fill Mode → Original Pixels with Stroke Width 0 (and Extrude off) shows the footage and no grid — that mode only draws the structure through the stroke, so give it 1 px. A very high Detail Threshold leaves every cell at Min Levels: pull the threshold down and the mosaic breaks down region by region. And the effect needs tonal variation: a flat graphic has no detail to split on. Fastest way to see what the plugin sees: Original Pixels + 1 px white stroke, then sweep Detail Threshold — small cells where the detail lives, one big cell over the flat wall. See Quick start and Subdivision.
The cells jump and crawl frame to frame on grainy footage. What actually cures it?
Not Stability — Cell Sampling. The default Center Pixel judges a cell from nine individual pixels, so a grain speck can force a split or change a cell's colour. Switch Cell Sampling → Average: Both: the split decision compares the averages of the cell's sub-cells (a speck disappears into the average of hundreds of pixels while a real edge still splits), and the fill colour and extrude height come from the cell average, so a bright speck drifting across a cell centre no longer flickers it. The measured result on noisy footage is markedly bigger, calmer cells at the same threshold. In the averaged metric modes Stability is ignored — the averaging is the smoothing. If you stay on Center Pixel, push Stability to 75–100 % (or 0) rather than leaving it in between, where a region can sit on the decision boundary. See Cell Sampling and Subdivision → Stability.
I pushed Grid Scale past 200 % and the subdivision went dumb — why?
With Center Pixel sampling a huge root cell is judged from nine taps spread across it, and that saturates: the metric stops seeing detail. Switch Cell Sampling → Average: Metric (or Both) and the averaged metric keeps resolving as you push Grid Scale to 200 %, 400 % and beyond. Grid Scale itself is resolution-independent (100 % = the layer height; ~178 % spans the full width on 16:9) and fully keyframable — animating it zooms the whole structure. See Cell Sampling and Subdivision → Grid Scale.
How do I make the mosaic shatter on the beat?
Convert Audio to Keyframes on the music layer, then pick-whip Detail Threshold to the Audio Amplitude slider with a negative multiplier: on the kick the threshold drops, the image shatters into fine cells, then heals. Two other targets on the same slider: Extrude Height (the city rises and settles — the most physical) and Grid Scale (the whole mosaic breathes). Divide the value well down and run Window → The Smoother over it if percussive material stutters. And keep Max Levels capped while you do this: a loud frame that drives the threshold to zero subdivides to the ceiling everywhere and costs accordingly (a 4K frame at Max Levels 12 peaks around 125 MB; at 10 the visible difference is usually nil). See the Beat-shatter recipe in Recipes and Cell Sampling → Cost.
Thermal camera, blueprint, stained glass — which settings give the classic looks?
Three fills, three looks. Thermal cam: Fill Mode → Gradient Map (Luma), Gradient Thermal, Stroke 0, Min Levels 3 — the cell's brightness picks a colour from the lookup (Nightlight, Fire, Ice, Neon are the same trick with other ramps, and Custom (4 Colors) builds one from your own four stops, dark to bright). Blueprint: Original Pixels, Stroke 1 px white, Metric Edge (Gradient), Threshold ~8 % — the footage stays, only the analysis grid shows. Stained glass: Flat Cell Color, Stroke 3–4 px black, Threshold 20–30 %, Luma Bias +30 % so the bright end breaks down finer. See Appearance and Recipes.
In Extrude, how do I make only one thing rise — the dancer, the logo colour — and drive the relief from something else?
The height sources add up, each with its own weight, so pick the one that names your subject. Height from Luma raises the bright cells; Invert Luma the dark ones ("the crowd comes out of the wall, the DJ stays flat"). Height from Color Match + Match Color + Color Tolerance raises only cells close to a picked colour — a costume, a neon sign, a logo. Height from Detail raises the finely subdivided cells, so faces and edges become tower clusters over flat ground. Height Map Layer + Height from Map lets any layer drive the height by its luminance — and like every AE layer parameter it reads the layer's source, ignoring its own effects and masks, so precompose your Fractal Noise or gradient and pick the precomp; an animated noise gives a stepping block-wave. With Radial (From Center) remember that Center lives in the layer's coordinate space: on a scaled layer the crosshair can sit off-screen — drag it rather than typing comp coordinates. See Extrude → Height sources.
My extruded blocks are needle-thin columns. How do I get a chunky relief?
That is real geometry, not a rendering fault: with Max Levels 7–8 the cells are tiny, and a tall Extrude Height turns each one into a thin column. For a chunky relief use Max Levels 5–6 and a Height of 30–80 px at 1080p (scale up for 4K). Side Shading around 50 % makes the wall read as part of the block; at 100 % the tops are clean squares on black trails; Stroke Walls draws the column edges so the shape reads at any shading. See Extrude → What a block looks like on screen.
Can I get just the wireframe, on its own layer, to glow or offset over the footage?
Yes. Duplicate the footage, put Quadtree on the top copy with Stroke Only (transparent fill) on: the output is only the outlines on a transparent layer (alpha = stroke coverage, colour = Stroke Color, straight alpha). Add Stroke Walls with an Extrude Height and the vertical corner edges and base edges of every column are drawn too, hidden edges removed — a see-through wire relief. Glow, offset, blend or time-shift that layer independently of the untouched picture underneath. Blend With Original mixes the alpha as well. See Appearance → Stroke Only and Extrude → Stroke Walls.
My artwork is symmetric but the mosaic is not. How do I get a mirror-exact result?
Turn on Grid Origin: Center (Grid group): the root squares and every subdivision grow outwards from the middle instead of the top-left corner, resolution-independently, so a centred subject sits inside a cell structure rather than on a seam. Then set Cell Sampling → Average: Fill (or Both): with centre-pixel sampling an even-sized cell's "centre" sits half a pixel off the mirror axis, whereas a cell average is symmetric (measured: 86 700 differing channel values → 0). The one caveat belongs to the grid, not the sampling: cells that are a fraction of a pixel (1080 px at level 4 = 67.5 px) can differ by a pixel's worth of averaging on the boundary rows — invisible, but not bit-exact. For a bit-exact mirror use a layer height that halves cleanly (512, 1024, 2048 px). See Grid → Grid Origin: Center.
How do I make a still image move — a scrolling or drifting mosaic?
The effect is time-independent, so motion comes from keyframes. Grid Offset X from 0 to 500 px over 10 seconds gives a scrolling mosaic over a still — the whole subdivision structure travels with the grid; wiggle() on both offsets gives nervous energy. Grid Scale keyframed zooms the entire structure in or out, and a Height Map Layer precomp with an animated Fractal Noise turns an extruded mosaic into a stepping block-wave. See Grid and the Scrolling mosaic recipe in Recipes.
Can I trust the Half and Quarter previews?
Yes. Grid Scale is a percentage of the layer height, Max Levels stops at 2 px cells at any resolution, and in Extrude the Center, the Height and the extrusion distance all follow the preview resolution — Full, Half and Quarter put the blocks in the same place to within a pixel, and the same holds while you scrub under Adaptive Resolution. The averaged Cell Sampling modes are exact too: the pyramid is built from sums, so the result does not depend on tile order, on the region requested or on preview resolution. See Extrude → Previews are trustworthy and Cell Sampling.
PixelRun open the guide →
The matte is exactly right and the picture still does not change. Is it broken?
No — it follows from what sorting is. Sorting is a permutation: the same pixels, on the same stretch, in a different order; nothing is added and nothing travels past the run's ends. Two consequences catch everyone once. A one-pixel run sorts to itself — scattered bright specks give runs one pixel long, and one pixel has one order. Content that is already in order sorts to itself — a sky that is bright at the horizon and dark at the top is already descending along an upward sort; flip Order to Ascending and the same area turns inside out, which proves it was selected all along. Block Width / Block Height amplify both, so set them back to 1 before suspecting anything else. If you want material to travel or grow, sorting is the wrong tool: Shift Mode → Float / Stretch move it, and Extrude gives every selected pixel a height instead of an order — it is the mode that works on one-pixel runs, and it is why the mode exists. See Why does nothing happen here?
How long are the runs? Max Length seems to do nothing.
Because by default it does not cut: Limit Length is off, and a run is exactly the stretch the picture nominates — from where the driver crosses Threshold to where it crosses back — however long that is. Five things decide the length, and only one is a number you type: Threshold / Upper Threshold (the picture decides — the clean way to shorten runs, it never produces a repeating edge), Anim Growth (a percentage of each run's own length), Limit Length + Max Length (an absolute cap — and every cut is an edge, a copy of the boundary shifted by Max Length; Max Length Random and Clip Instead of Split are the two cures), Length by Driver (the cap modulated by brightness — the control most people are actually looking for) and Amount in Stretch mode. From v0.4 every parameter that cannot affect the render is greyed out, so a switched-off control looks switched off. And the slider is not the limit: Max Length drags to 1000 but accepts 8192 typed in. See How long are the runs?
My selection came out as a thin sliver of the right shape. Where did the rest go?
Three stages narrow what gets sorted, in three different groups. Switch Output Mode → Matte (white = what will be sorted) and check in order: the white has the wrong shape → Threshold / Upper Threshold; the white breaks into regular or scattered pieces → Limit Length + Max Length or Break Noise; the white is a thin sliver of the right shape → Anim Growth, in the Animation group, which at 15 % silently throws away 85 % of every run. That third one is the one that catches people, because it does not look like a size control. See Why is my selection thinner than I expect?
I only want the mid-tones sorted — not the blacks, not the blown highlights.
That is the one selection a single threshold cannot express, and it is what Upper Threshold is for: Threshold 40 %, Upper Threshold 60 %, Range 20 %, Affect Inside turns the pair into a window, so only drivers between the two are selected. It is the setting that usually survives a client note. For the complement — everything but the mid-tones — set Affect → Outside Thresholds, which inverts any selection (and is why the plugin has no Invert checkbox). See Selection and the Mid-tones only recipe in Recipes.
Sort, Float, Stretch, Spaced Out, Extrude — which mode does what to the rest of the frame?
Sort (in place) re-orders the run and moves nothing; outside the runs the frame is untouched, bit for bit. Float slides the whole sorted run along the band by Amount × its driver value — what appears in the vacated space is Fill Mode's business (Original, Transparent, Wrap, Clamp) — and a run that travelled further passes in front. Stretch keeps the run where it is and lengthens it to L + Amount × driver; nothing is vacated, so it cannot open holes — this is the hanging-curtain mode. Two modes are the honest exceptions to "the rest of the frame is untouched". Spaced Out packs the runs of each band end to end from the start of the band, and the unselected pixels between them are gone — the picture becomes a bar chart of its own selection, sheared band by band (widen Band Width to calm the shear). Extrude is not a permutation at all: every selected pixel grows a column Base Height + Height by Driver × driver along the band, a skyline drawn by the picture. See Shift, Spaced Out and Extrude.
How do I make it move — grow in from nothing, or loop seamlessly?
Two ordinary keyframable parameters in the Animation group; the plugin never reads the time. Anim Growth 0 → 100 % over two seconds: at 0 the frame is bit for bit the source, then each run fills from its Growth From end, short runs finishing first — an organic fill-in, not a wipe (for a wipe, animate Threshold). Cycle rotates the sorted sequence inside its run, wrapping around the end, so 360° returns it exactly where it started — the Endless flow recipe: Mirror on, Order Ascending, Limit Length off, two Linear keyframes on Cycle, 0° at the first frame and 360° at the last. The last frame joins the first with no crossfade (measured: 0°, 360°, 720° and 1080° render byte for byte identically); 0° → 1080° is three loops in the same time. One caveat: the rotation is a whole number of pixels, so on short runs a small Cycle rounds to nothing and a frame full of 20-pixel runs visibly steps — let the runs be long. See Animation.
How do I make the sorting react to music?
Convert Audio to Keyframes on the music layer, then pick-whip a parameter to the Audio Amplitude slider — three targets, three readings of the same track. Anim Growth (value*8) is the safest and the most musical: the sorting grows into each run on the hit and heals between, and at 0 the frame is bit-identical to the source, so the quiet passages are untouched footage. Threshold with a negative multiplier (60 - value*3) lets more of the picture qualify as the track gets louder, so the effect spreads rather than deepens. Offset Random in Float (value*10) is the violent one — the frame comes apart on the kick and reassembles. Divide the raw value well down and run Window → The Smoother over the slider if percussive material stutters; and leave Seed alone — a moving Seed re-casts every run every frame, which reads as noise, not rhythm. For the beat in the timing rather than the amount, drive Break Noise instead. See the Audio-reactive sorting recipe in Recipes.
The Half-resolution preview shows a different pattern from the final render. Which one is right?
Both — since v0.4 every random number (the Noise driver, the noise field, Break Noise, Break Evolution, Offset Random, Max Length Random) is drawn in composition space, so a reduced preview draws the same numbers as the full render (measured: Full-vs-Half agreement went from 50 % to 100 %). What remains is arithmetic: a Half preview takes half as many samples, so at Band Width 1 and Driver Cell 1 it can only show half of the full render's decisions — a true subset, not a different picture. Preview recipe: keep Driver Cell and Band Width at 2 or more while you work, and the preview is pixel-identical to the final. Driver Cell 4 alone also recovers most of the build time at 4K. See Previewing at Half and Quarter resolution.
How do I keep the sorting inside a mask — or outside it — and make a soft mask really fade the effect?
Draw the masks on the layer and switch Use Masks on; the effect reads them itself. The mask acts on the selection, before the runs are found, so a run starts and stops at the mask edge instead of being cut out of a longer one. Where the coverage comes from is the thing to know. Mask: From Layer Alpha (on by default) uses AE's own mask composite, so every mask mode, feather, expansion, opacity and variable-width feather comes across for free — but where the alpha is fully zero there is no material to sort, so Mask: Subtract then only works on the mask's soft rim. For a true "everything outside the mask", switch From Layer Alpha off (PixelRun composites the shapes itself, hard-edged) and turn Subtract on. A soft edge by itself moves the run boundary rather than fading the effect (sorting has no "half"; in Extrude the towers do get shorter towards the edge) — switch Mask Fades Effect on and the coverage also becomes a per-pixel Blend With Original, an exact cross-dissolve along the feather. See Masks.
Can I get the sorting as a matte, or as a depth map, to use elsewhere in the comp?
Both, from the same settings. Output Mode → Matte throws the picture away and returns white where a run is and black everywhere else — no gradient in it, so a Set Matte, Track Matte or luma key has nothing to slip on; add Feather Start / End 6 px for a soft-edged matte. Depth Ramp Only replaces the picture with a greyscale map of every pixel's position along its run: under Per Streak it is a direction indicator, under Global a map of run length (short runs stay dark). Feed it to a Displacement Map or a Levels-driven key, or duplicate the layer and grade, blur or delay the depth pass on its own. One rule: Matte overrides Depth Ramp Only — for the depth map keep Output Mode on Sorted Pixels. See Output and Depth Ramp Only.
How do I get the glitch / datamosh looks — and why has Seed stopped doing anything?
Glitch: Sort By Hue, Break Noise 20–40 (cuts per 100 px), Driver Cell 8, Limit Length on with Max Length 64, Band Width 3, Threshold ~35 % — the hue key does the damage, Break Noise the timing; swap Sort By to XOR to go past glitch into corruption. To make it travel, keyframe Break Drift (the cuts migrate along the band) and Break Evolution 0° → 360° (the cuts tip over one at a time to the next seed) — nothing boils, every frame is a deterministic function of the two. Datamosh tiles: Block Width 8–16, Block Height = Band Width, Band Width 8–16 — the picture is re-shuffled in recognisable fragments instead of combed. The dead Seed: Break Noise is rolled at Driver Cell boundaries, so it saturates above 100 ÷ Driver Cell — at Driver Cell 4 anything over 25 cuts every cell boundary, there is nothing left to randomise, and Seed, Drift and Evolution go inert. Lower the slider or lower Driver Cell. See Selection → Break Noise and Recipes.
My clean test image grew a run structure of its own — a grid of little blocks. Where does it come from?
From the file, not the plugin. A JPEG is built from 8×8 blocks, and the faint edges between them are exactly the kind of local contrast the driver looks for: a Driver Cell of 4 or 8 will happily turn the compression grid into runs. Feed PixelRun a PNG (or any lossless frame) when you are matching a reference still or building a test, and raise Driver Cell when you want the selection to follow the shapes of a real, noisy picture rather than its texture. See the note on demo material in Recipes and Selection → Driver Cell.
RuttEtra open the guide →
What does "FM" mean here, and why do the waves get denser on bright areas?
A carrier wave runs along every line, and its only property is Wavelength — the carrier length on black. The picture does not change how tall that wave is (that would be amplitude modulation); it changes how fast the phase turns: per pixel the phase advances by 2π · (1 + FM Depth · luma) / Wavelength. On black the bracket is 1, so you get the wavelength you dialled; on white at FM Depth 2 it is 3, so the wave is a third as long there. Brighter = higher frequency = denser wave is the rule everywhere in the effect, and FM Depth 0 means the picture never touches the carrier. Because the phase accumulates, a bright patch also shifts everything downstream of it along the line — that is why the pattern seems to stream out of highlights; Phase by Luma is the opposite, it kinks the wave in place at the patch's own rim. Two controls ride on the one phase: Path Wave (the wave as position) and Intensity Wave (the same wave as brightness), so the stripes always sit on the crests. See FM in ten minutes.
A whole group of controls does nothing. Are they broken?
No — three groups are inert by design until one switch wakes them, bit-exactly. The FM Modulation group is dead while Path Wave = 0 and Intensity Wave = 0: Phase Geometry, Phase by Luma, Line Phase Scatter, Amp by Luma and Wave Along all wait for a wave. The Demodulator is skipped entirely at Demodulate 0 % (and has nothing to demodulate at FM Depth 0). The 3D Mesh group is grey in Classic 2D — and in 3D Mesh it is Displace Along, Wave Along and Edge Mode that go grey instead, because the camera does their job. Smaller cases: Glow is dropped under Flat (Tint), Center is grey while neither radial mode is active, Overscan Fade is dead at Overscan 0, Segment Length is grey in Dots. Raise the wave, the Demodulate mix or the mode and the group comes to life. See FM Modulation, Demodulator and 3D Mesh.
The waves sweep sideways like a flag. How do I make them belong to the picture?
Plain FM reads as one sheet waving sideways because the phase runs along every line in the same direction. Four controls pin it to the image, and they stack. Amp by Luma — dark areas stay straight, bright areas carry the full wave (the cheapest fix). Phase by Luma — bright patches kink the wave in place. Line Phase Scatter — every line gets its own starting phase, so the textile sheet becomes a bundle of independent oscilloscope traces. And to organise the waves around a point instead of a direction: Phase Geometry → Radial (Rings) plus Wave Along → Radial (Breathe), then animate Phase — the rings breathe in and out of Center instead of crests sliding along the lines (Radial (Perspective) makes the swell grow with distance from the centre). Known artifact of the radial modes: on the axis through Center that runs parallel to the lines the wave's visible component dies — move Center off that band or use Grid. If a radial displacement empties the frame edges, raise Overscan (20 % is plenty). See FM Modulation → Wave Along and recipe 6 in Quick start.
The lines jitter on noisy footage. Input Smooth or Line Smooth — which one, and what does it cost?
Two different jitters, two controls. If a single line shakes along its own run, Line Smooth (px) filters what each line samples along its length — nearly free at any radius, it filters colour with the luminance, and it runs forwards and backwards so nothing shifts sideways. If neighbouring lines disagree with each other — the relief looks like a bundle of independent noisy wires instead of one surface — that is Input Smooth's job: it blurs the whole frame in both directions, so it is the only one that smooths across the lines. They are companions, not alternatives. Since v0.8 Input Smooth costs the same whatever you set it to (measured 1.5–2× the default raster), and Line Smooth 12 about 1.2×. A third route: a GPU Fast Box Blur placed before RuttEtra in the effect list feeds its result straight in — the one difference being that Input Smooth softens only what the lines sample, so Background: Original stays sharp. See Displace → Input Smooth / Line Smooth and Notes.
How do I get the analog overshoot and ringing — and why does it look like torn noise sometimes?
That is the Demodulator (Classic 2D only): the line's luminance is transmitted as a frequency, the modulated carrier is lowpassed, and the value is read back from the damaged phase. Because the recovery divides rather than averages, the error comes back non-linearly — as overshoot past white and past black, then ringing. A blur can only flatten; this shoots past. Start by shortening the carrier: Wavelength 8 (the default 50 is meant for the Path Wave), Demodulate 100 %, then Carrier Lowpass 6 px, Filter Order 2, Demod Smooth 0, Oversample 2 for the hard, line-like artifact; Demod Smooth 24 px melts it into soft painted shapes. Carrier Lowpass 0 is an exact identity — show that first. Signal Path aims it: Along Line trails in the scan direction, Symmetric rings on both sides of an edge, Radial radiates from Center. Torn noise is Nyquist: the phase must advance less than half a turn per sample, so Wavelength > 2 · (1 + FM Depth) px at Oversample 1, and every doubling of Oversample halves that requirement — raise it, or lengthen Wavelength. Keep Segment Length well below Wavelength for the same reason. See The artifact, Nyquist and Demodulator.
How do I stand the relief up in real 3D, and keep a 4K comp responsive?
Render Mode → 3D Mesh: every sample point becomes a vertex, the luminance relief and the Path Wave go into Z, and an internal camera projects it with a z-buffer — near lines are drawn thicker and hide the ones behind. Rotate X (default 25°) tips the terrain, Rotate Y / Z turn it, Camera Distance sets the lens (smaller = stronger perspective), Z Offset moves it toward you. Combine with Radial (Rings) + Path Wave + animated Phase and the rings breathe out of Center in depth. Mesh costs about 2.9× the default raster, so the speed controls matter: Segment Length thins the vertex grid instead of removing lines — 4 runs about 2× faster, 16 about 3× — and Spacing removes lines. A vertex closer to the camera than Camera Distance ÷ 1000 is clipped (that is the near plane, not a bug), and under strong rotation you may see the border of the surface. See 3D Mesh and Notes.
With a transparent background, are the lines composited additively — or does the nearer line cover the farther one?
That is decided by Occlusion, not by Background. Occlusion off: the lines are added together wherever different lines overlap (colour sums, coverage unions), in Classic 2D and in 3D Mesh alike — the "shining wires" look. Occlusion on: the nearer line covers the farther one (in 2D the lower line, in 3D the z-buffer decides). Background only chooses what is placed under that result — black, the original picture, or nothing — so Transparent + Occlusion off is additive lines with a coverage alpha, and Transparent + Occlusion on is covering lines with the same alpha. Because the output is straight alpha, additive overlaps can carry more colour than their alpha, which reads as a brighter spot when the layer sits over something else; that is the additive look, not an error. Lighting works in both modes, since it scales each line's colour before the lines are combined. See Look → Occlusion and Look → Background.
How do I light the relief — and does Flat (Tint) cancel the shading?
Lighting → Shade (3D Mesh only). At 0 the lines are self-luminous, as they always were; raise it and each line takes its brightness from how its bit of surface faces the light — a slope toward the light is bright, the far side of a ridge is dark, 100 % makes that side black. The light comes from the top of the frame at 45° by default; Light Azimuth walks it around (the dial points at the light), Light Elevation 90° is a headlight, Light Color tints only what the light reaches. Shadow adds self-shadowing from a depth map rendered from the light's view — a plateau lit from the top at 45° throws a shadow as long as it is high — and Shadow Softness blurs its edge. No, Flat (Tint) does not cancel it: the colour source decides the base colour and the shading multiplies it afterwards, so a constant base is exactly the cleanest lit relief — the picture then contributes only the geometry. With Original the luminance and the shading multiply, which reads as a lit photograph. Depth Fade is not a shadow (it darkens by displacement) and the two stack. See Lighting and Look → Depth Fade.
I turned Shadow up and nothing changed. What has to be true for a shadow to appear?
Four things, in this order. Render Mode must be 3D Mesh — in Classic 2D the whole Lighting group is greyed out and not read. Shade must be above 0: it is the master amount of the group, and Shadow only scales the light term inside that mix, so at Shade 0 the depth map is not even built — Shadow 100 % over Shade 0 is the unlit render, bit for bit. Light Elevation must be below 90°: a headlight from the camera cannot put anything in shadow, because whatever the camera sees, the light sees too; at 45° a raised area throws a shadow exactly as long as it is high, and a lower light throws a longer one. And there has to be something to be shadowed: a smooth slope never shadows itself, a line never shadows itself, and a vertex with alpha 0 casts nothing — shadows appear where the relief stands up above what lies behind it in the light's direction, so raise Amount (px) or lower the light. Once the shadow is there, Shadow sets how dark it is (100 % = the light contributes nothing in the shadowed part; the ambient share 1 − Shade always remains), and Shadow Softness sets the edge — if thin lines leave a comb pattern in it, the default 2 px already hides that. See Lighting.
Green CRT, rainbow, thermal, RGB split — where do the colours come from?
Color Source decides. Mono (Tint) + a green or white Tint is the vintage monitor (raise Glow a little, add Depth Fade). Flat (Tint) is a constant colour, the plotter look — note the geometry still comes from the image, only the colour is fixed. Spectral colours the line by the wavelength its displacement maps to, through the real CIE colour matching functions — a true spectrum, so it never passes through magenta; Spectral Center / Span pick the band (usable 400–680 nm), and Color Drive → Luma (Thermal) drives it by brightness instead, cold to hot like a FLIR image. For the split: Channel Shift is dispersion that grows with the relief, Shift R / G / B (px) is a flat registration error everywhere — use both — and Channel Add makes overlapping channels add up instead of covering, the classic additive RGB split (it only does something once a channel is actually offset). See Look.
Lines, grid or dots — and what does each cost?
Direction picks the raster: Horizontal or Vertical Lines is the classic, Grid draws both families at once (they add together; occlusion applies within each family, and in 3D Mesh the two families occlude each other properly), Dots turns the image into a displaced dot lattice where Thickness is the dot diameter and Y Spacing Ratio the horizontal pitch. Measured at 4K against the default horizontal raster: Grid ≈ 2.0×, Dots ≈ 0.44×, 3D Mesh ≈ 2.9×, Mesh + Grid ≈ 6.8×, Spacing 2 ≈ 2.6×, Demodulate at Oversample 2 ≈ 2.5×; Overscan and Spectral are nearly free, and Segment Length is the one control that makes things faster (4 ≈ 0.77×). See Lines and the cost table in Notes.
How do I animate it — and make a loop that closes exactly?
Nothing moves by itself: animate Phase. One full turn is exactly one carrier cycle, so Phase keyframed 0° → 360° is a seamless loop; with Radial (Rings) the rings travel outward as Phase increases. Beyond the waves, everything is keyframable: Amount for the relief growing in, Center drifting across the frame, Rotate X/Y/Z in mesh. When a displaced line runs off the frame, Edge Mode decides its fate — Crop slides off (the CRT), Wrap re-enters from the other side (the "vertical hold" roll, but an animated line teleports at the moment it wraps), Fold bounces back and stays continuous, Compress squashes toward the edge like an overdriven signal. See FM Modulation → Phase and Displace → Edge Mode.
How do I put the lines over the original picture, or over anything else in the comp?
Background decides what sits behind the lines. Black is the classic monitor look; Original keeps the source image visible in the gaps between the lines; Transparent cuts real alpha holes (the gaps have alpha 0), so the lines can be composited over any layer underneath, glowed or blended on their own. Blend mixes the whole result back toward the untouched source — 0 % is a bit-exact passthrough. See Look → Background.
My layer has transparency — a mask, a feathered edge — but the lines run right across the transparent area. Can they fade with the alpha?
Yes — Alpha Affects in the Look group (v0.9). By default the plugin draws every line from the luminance and never reads the alpha, so a transparent area (luma 0) gives flat lines that a constant colour source still paints at full strength — with Flat (Tint) the whole frame fills with lines, the masked-out area included; Background → Transparent only cuts the gaps between the lines, and Edge Mode is about the frame edge. Set Alpha Affects → Thickness and the line weight itself follows the alpha: along a feather the line tapers, a dot shrinks in diameter, and where the alpha reaches zero nothing is drawn. Opacity fades the lines instead of thinning them; Both does both. The alpha is read through the same smoothing and segmenting as the colour, so the taper stays consistent with whatever the line samples, and the relief itself is not flattened — a line that ends does not need to. With Background: Black the output keeps the layer's alpha, so the surroundings of a cut-out stay transparent rather than black; put a solid behind the layer for a frame. On v0.8 and earlier the workaround was Mono (Tint) plus a precompose over a black solid, which turns the alpha into luma — a brightness fade, not a change of line weight. See Look → Alpha Affects and Look → Background.