Catoptron

fold-stack photo reflector drop / paste an image  ·  drag canvas or WASD = vanishing point  ·  Q/E = zoom  ·  H = hide panels  ·  shift = fine  ·  dbl-click = recenter

Image

Presets

Save snapshots the whole recipe. Export / import moves your preset library as JSON.

Chance

Randomize invents a fold stack. Reseed rerolls Shatter patterns.

Glass

Two-colour symmetry: a mirror flips colour as well as position. The Counterchange fold recolours on its own via its Recolor knob — add it and it just works. This dropdown applies the same to reflecting folds (Polar, Mirror line, Wallpaper, Frieze, Pleat) and, when set, overrides a fold’s own Recolor.
Post grade: Exposure/Contrast/Saturation/Warmth colour-grade the final image; Posterize (0 = off) bands it; Scanlines adds a CRT sweep. All apply to every renderer including Feedback.
Signal glitch: channel split/swap corrupt RGB, block dropout punches holes, dither crushes to a palette, signal noise adds static, interlace combs scanlines. Reseed rerolls the block patterns.

Fold stack

Folds run top to bottom, then feed the renderer. Order matters — reordering the same folds makes a different mirror.

Renderer

IFS — self-similar fold recursion

Wraps the whole fold stack in a self-similar loop: each pass runs your folds, then contracts toward the fixed point (with optional rotation), turning the stack into a fractal generator. More iterations = deeper recursion; lower contraction = tighter nesting. Z-tunnel adds perspective so the recursion tunnels into (+) or bulges out of (−) the screen — a 3D Droste. Off = a single normal pass.

Animation

◆ Animation

Catoptron — User Guide

Catoptron turns a photo (or a built-in pattern) into kaleidoscopic, fractal, and conformal art. You build an effect by stacking coordinate “folds” and choosing a renderer that reflects and recurses the result, then dress it with color, framing, and motion. Everything runs live on the GPU — nothing is uploaded.

The idea in one picture

SOURCE          FOLD STACK              RENDERER          GLASS           MOTION
image   →   fold₁ → fold₂ → …  →   Panes/Droste/… →   color/frame →   animate

Read it left to right. Each fold bends the coordinate grid; folds compose in order, so the same folds in a different order give a different result. The renderer mirrors/repeats that bent grid into the final structure. Glass handles color and framing. Motion animates it for video.

Best habit: add one fold, see what it does, then add the next. Stacks of 2–4 folds already go a long way.

Quick start

  • Source: Load image for your own photo, or pick a built-in pattern (orbs, plasma, rings, stripes, waves, voronoi, truchet, halftone, or a grid/polar/checker probe) and shape it with the Scale / Hue / Variation knobs to learn an effect against a clean reference.
  • Renderer: start on Panes.
  • Fold stack: pick an operator in the add dropdown and click +. Try Polar fold first — instant kaleidoscope.
  • Drag its sliders; add a second fold (Swirl or Spiral).
  • Open Presets to see full recipes. Export PNG when happy, or Record / HQ Video for animation.

Renderers

The renderer decides how the folded plane is reflected and repeated. Same stack + different renderer = very different image, so switch often.

RendererWhat it doesGood for
PanesStraightforward mirrored tilingClean kaleidoscopes, learning a fold
DrosteLog-spiral recursion (image inside itself)Infinite zoom, vortices
RoomOpposed-mirror corridorDeep receding reflections
TubeWraps the plane around a cylinderTunnels, wormholes
StripRepeats along one bandFriezes, ribbons
FeedbackFeeds the previous frame back inTrails, painterly buildup
GridRepeats the image in a wallpaper gridTiled patterns, textiles
KaleidoReflects into N radial mirror wedgesClassic kaleidoscope
SphereWraps the image onto a rotating ballPlanets, crystal balls
Slit-scanEach column samples a different time slice — diagonal motion smearTime-smear, datamosh motion
Poincaré diskHyperbolic disk model — the image crowds infinitely toward the rimEscher-like hyperbolic space
Hyperbolic tilingA reflection group tessellates the disk (Escher “Circle Limit”)Hyperbolic tessellations

Shared controls: Depth (reflection/recursion steps), Step scale (zoom per level), Twist (rotation per level), Shift X/Y & Zoom (pan/zoom), mirrored (flip alternating tiles), and Feedback amount + Mosh (datamosh block-displacement of the fed-back frame) — both Feedback renderer only. Feedback also has a Reaction-diffusion mode — Gray-Scott Turing patterns grown from the image, where Pull/Rotate become Feed/Kill (pattern type) and Feedback becomes Image drive (how strongly the photo shapes the pattern: 0 = free patterns, 1 = photo dominates).

The fold stack

  • Add from the dropdown; it appends to the bottom.
  • Reorder with ↑/↓ — order matters (Swirl-then-Mirror ≠ Mirror-then-Swirl).
  • Remove with ×.
  • Reset to defaults (button at the bottom of each fold) returns that fold’s parameters, origin and angle to their factory defaults — undoable.
  • Numeric params are sliders; choice params are dropdowns (mode, style, symmetry group…).
  • Mode-aware: multi-mode folds show only the current mode’s parameters.
  • Origin (⊕): click it and drag on the canvas to place that fold’s center — great for off-center swirls and lenses.

Operator reference

All 127 folds, grouped by what they do. The big multi-mode banks are described below the tables.

Basic transforms

FoldWhat it doesKey params
RotateSpins coordinatesAngle°
ScaleZooms coordinatesFactor
ShiftTranslates the planeX, Y
ShearSlants the planeX, Y
MosaicSnaps to a blocky gridCells

Kaleidoscope & symmetry

FoldWhat it doesKey params
Polar foldWedge kaleidoscope — mirrors N slicesSegments, Offset°
Rosette CnRotational (Cn) symmetry, no mirror — pinwheelsSegments, Offset°
Triangle foldTriangular kaleidoscopeScale
Mirror lineReflect across a lineAngle°, Side
Mirror tileTiles X×Y with mirror/repeatTiles X/Y, Mode
Abs foldBox fold — reflects past ±fold back inwardFold
BrickBrick-wall tiling, offset rowsScale X, Scale Y
BravaisSoftly pulls points toward a latticeScale, Pull
ChainmailInterlocking-ring tilingScale, Ring ratio
HexagonalHex-cell tiling (cube-coordinate)Scale
HoneycombSoft pull toward a hex latticeScale, Pull
WallpaperAll 17 wallpaper groupsGroup, Cell, Angle°
FriezeThe 7 frieze (strip) groupsGroup, Angle°, Period
HyperbolicHyperbolic {p,q} tiling (Poincaré disk)p, q, Scale
PolyhedralSpherical/polyhedral {p,q} symmetryp, q, Scale
AperiodicQuasicrystal tilings (Penrose, Ammann)Grids, Cell, Gamma, Mode, Levels, Inflation
Quasicrystal5-fold quasicrystal interferenceFreq, Amp
Penrose foldGolden-ratio Penrose lattice foldScale
Shape warpShape-boundary warp bank (below)Shape, Warp mode, +
TessellatedGrid/distort tiling bank (below)Mode, Symmetry, Scale, +
Tri latticeTriangular-lattice foldScale, Morph
Truchet2Truchet arc tilingExponents, Widths, Tiles, Seed
WeaveOver/under basket weaveScale, Warp

Swirls, spirals & waves

FoldWhat it doesKey params
SwirlWhirlpool — rotation grows with radiusAmount
SpiralSpiral distortionAmount
Log spiralLogarithmic spiral armsScale, Turn°, Arms, Mirror
Wave warpSine/triangle/saw/square displacementAmp, Freq, Wave
Curl noiseDivergence-free swirlFreq, Strength
ChladniStanding-wave nodal warpm, n, Amplitude
FaultHard shift across a lineAngle, Displacement
Jet streamHorizontal gaussian shear jetSpeed, Width, Center
Karman vortexVon Karman vortex streetFreq, Strength, Sep
PDJFour-sine PDJ warp (phase offsets)a, b, c, d, e, f
Popcorn2Parametrized popcorn jitterX, Y, C
SuperpositionTwo-frequency interference ringsFreq1, Freq2, Phase
SatinDiagonal double-sine sheenFreq, Sheen
StwinTwin-swirl distortionDistort, Offsets
ScrewRadial screw / helix twistPitch
MaelstromSwirl-warped exponential spiralSwirl, Freq, Scale
OscilloscopeMirror inside a cosine bandSeparation, Frequency, Amplitude
MitosisCell-division pinch/splitSeparation, Width, Phase
MushroomCap/stalk vertical profileCap radius, Cap width, Stalk
Wave bank17-style mega wave warper (below)Style + per-style
PleatFolded-paper pleatsAngle°, Width, Tilt°
PetalFlower-petal lobesLobes, Amp
WedgeAngular pie-slice fan with swirlAngle, Hole, Count, Swirl
WhorlInside/outside differential spiralInside, Outside
Tidal lockAngular ratio spin + wobbleRatio, Ecc
Wood grainConcentric wood-ring displacementFreq, Amp, Grain
TargetLog-ring alternating rotateEven, Odd, Size
Target spTarget with log-spiral tweakTwist, N, Size, Tightness

Lenses, rings & bubbles

FoldWhat it doesKey params
SphericalSpherical inversion (1/r²) — fisheye bubbleRadius
LensRadial magnificationCurve
Ring foldFolds into concentric ringsDensity
FresnelConcentric Fresnel ringsRings, Gain
BubblesCircle-packing bubblesScale, Floor, Iters
Circle mirrorReflect across a circle (ball/window)Radius, Mode
Radial powRaises radius to a powerAmount, Power
Gear teethRadial gear-tooth rippleTeeth, Depth
HammerHammer-Aitoff map projectionScale
MercatorMercator map projectionScale
PerspectiveApophysis perspective tiltAngle, Dist
Stereographic planeStereographic plane projectionScale
SupernovaSpinning ring-shell shockwaveRadius, Boost, Spin
ProjectiveFull 9-coefficient projectiveA–C2
Quadrupole4-pole cos(2θ)/r² fieldStrength, Smooth
Rainbow arcBends radius bands into an arcRadius, Width, Arc
KleinCircle inversion inside a radius, twistInner radius, Twist
MembraneDrumhead ring bulgeRadius, Height, Stiff
Moebius stripHalf-twist ring wrapRadius
OuroborosRadius wraps into a twisting ringRadius, Twist
LoonieCircle-inversion bubbles (below)Mode, Amount, +
Lens bankOptical lens bank — 12 modes (below)Mode + per-mode

Conformal & complex maps

FoldWhat it doesKey params
Complex4-stage complex-function pipeline (below)Stage 1–4, Freq, Reflect
Complex sum26-weight complex accumulator (below)weights, affine, Reflect
MobiusSimple Möbius transformOffset X/Y, Rotate°
Mobius abcdFull Möbius (az+b)/(cz+d)Re/Im a,b,c,d
FociHyperbolic foci warpAmount
MurlMurl / Murl2 curl-coilType, c, Power
McarpetMagic-carpet twist/tilt warpX, Y, Twist, Tilt
MaskComplex sin/cosh mask warpshifts, scales
BipolarBipolar conformal map — lens/eyeAmount, Shift
EllipticElliptic conformal mapAmount, Mode
DiscDisc-family maps (disc, idisc, spiral, squircle…)Mode, Amount, Twist, Petal
ZhukowskiJoukowski airfoil conformal mapc

Fractal folds

FoldWhat it doesKey params
KIFSKaleidoscopic IFS fractal foldIters, Fold, Angle°, Scale
Multi-fold IFSMulti-attractor KIFS — each step folds toward the nearest of N ring centresIters, Centres, Scale, Angle°, Radius, Fold, Offset°, Radius decay, Variation, Shear, Softness, Precession°, Pull
Koch foldKoch-curve foldingIters, Scale
DModulusDouble-modulus fractal tilingSize X/Y, Angle°, Iters
ShatterTilted cells (shattered glass)Cells, Tilt
BedheadChaotic-attractor warp — organic, glitchya, b
IkedaIkeda attractor — swirl-collapse chaosu
PickoverPickover attractor — chaotic sine mapa, b, c, d
SvenssonSvensson attractor — sine/cos mapa, b, c, d
Symmetric iconSymmetric-icon quadratic mapLambda, Alpha, Beta, Omega
KleinianKleinian-group inversion fractalCircles, Radius, Iters, Scale, Bound, Spin°, Twist°, Frame
FuchsianFuchsian group (hyperbolic tilings)trace ta/tb/tab, Iters
ApollonianApollonian gasket circle packingIters, Radius, Scale
Inversive IFSChaos-game circle-inversion IFS — inverts through the nearest of N ring circles each stepIters, Circles, Circle radius, Ring radius, Spin°, Offset°, Mode, Blend
Mandelbox foldBox-fold + sphere-fold iteration — crunchy alien-machine structureIters, Scale, Min radius, Fixed radius, Fold limit, Blend
Power IFSConformal IFS — complex power about the nearest of N centres (curved spirals)Iters, Centres, Power, Radius, Spin°, Offset°, Scale, Blend
Flame IFSApophysis-style IFS — 17 nonlinear variations about the nearest centre, + symmetry/precessionIters, Centres, Variation (17 modes), Radius, Spin°, Offset°, Scale, Blend, Var amount, Precession°, Radius decay, Symmetry
JuliascopeJulia-set wedge mappingPower, Dist, Wedge, Iters
JulianJulia mappingPower, Dist, Wedge
WorleyWorley / cellular (F1) noise foldScale, Jitter
Voronoi foldVoronoi-cell fold toward nearest siteScale, Fold

Glitch folds

Digital-corruption folds — all keyed to the global Seed, so Reseed rerolls their block / tear patterns.

FoldWhat it doesKey params
Block displaceQuantizes into blocks and jumps each a hashed distanceSize, Shift, Density
Row tearOffsets horizontal bands sideways (VHS tearing)Bands, Shift, Density
Bit crushSnaps coordinates to a coarse grid (chunky mosaic)Levels, Mix
Shear cascadePer-band horizontal shear that jumps at hashed stepsSteps, Shear
DCT ring8×8-style block quantize with a cosine wobble (JPEG ringing)Size, Ring, Freq
Block shuffleSnaps whole blocks to a different grid cell (tile-swap)Size, Density, Spread

Image-driven folds

These read the photo itself — sampling brightness, colour, or the local gradient and letting image content steer the warp. Order matters: placed after another fold, they read the already-folded image. No Seed dependence.

FoldWhat it doesKey params
Luma displacePushes coordinates along the image's own brightness (self-melt)Push, Freq
Gradient displacePushes along the brightness gradient — relief or contour flowPush, Detail, Mode
RefractBrightness as a height field, refracted like wet glassIndex, Detail
Flow marchMarches along the image's flow for N steps — streamline smearSteps, Step len, Detail
Edge shockDisplaces only where edges are strong; flat areas stay putPush, Detail, Gate
Channel driveSteers by a chosen channel (R/G/B) or hue instead of lumaPush, Channel, Freq
Value slideSlides sample position by banded brightness — a pixel-sort cousinSlide, Bands, Direction

The big multi-mode banks

  • Complex — up to four complex functions in sequence (1/z, z², sqrt, exp, log, the trig/hyperbolic families and their inverses), with per-axis frequency and optional mirror.
  • Complex sum — instead of chaining, add functions with individual weights: a pre-conditioner tier (reciprocal, log, sqrt, exp) plus a 15-function sum tier, with an input affine.
  • Wave bank — one fold, 17 wave styles (waves22, dc_gnarly’s 8 nested-trig modes, vibration2, waves2b Jacobi/Bessel, waves_julia/spiral/noise/mobius/power/fisheye/swirl…). Pick Style; only that style’s knobs show. Weight blends; Seed feeds input back.
  • Lazy — the classic lazy-susan family: Susan (circular swirl, movable center via x/y), Travis (square swirl), Jess (n-gon swirl), plus a Sensen post-fold. For Travis/Jess try Amount ≈ 0.5–0.6 to stay in frame.
  • Loonie — circle-inversion bubbles: Loonie (circle), Loonie2 (n-gon/star/circle blend), Loonie3 (parabolic). Radius sizes the bubble independently of Amount; Rotate spins the Loonie2 polygon.
  • Lens bank — the optical zoo in one fold, 12 modes: Brown-Conrady, Mustache, Division, four Fisheye projections (stereographic/equisolid/equidistant/orthographic), Tangential, Petzval swirl, Panini, Anamorphic, Tilt-shift. Pick Mode; only that mode’s knobs show.
  • Shape warp — a warp bank in one fold: pick a Shape (square, circle, diamond, triangle, pentagon, hexagon, flower, star, cloud…) whose boundary drives an inner→outer falloff, then a Warp mode (rotate, scale-radial, swirl, scale-XY, fisheye, shear). Shape-specific knobs appear only for the relevant shape.
  • Tessellated — a tiling/distortion bank: pick a Mode (square power/sine/radial, hex offset, true hex, radial tiling, exp-log, tangent, polynomial, Julia) and a Symmetry (none, X/Y-reflect, quadrant, D4, Dn). Scale sets cell density, Edge blend softens seams, and Grid/Cell rotate with a Rotate pattern spin whole cells. Mode-specific knobs show only when relevant.
  • BusyBrad — the grid version of the lazy family: tiles the plane (Grid size), each cell a Susan/Jess/Combined swirl, with Spin/Twist/Space/N and a Sensen fold. Grid size 0 = a single centered swirl.

Recolor

Counterchange is the one fold that changes color, not geometry: it splits the plane into stripes/checker/pinwheel/rings and recolors alternating regions (negate, hue 180°, desaturate, tint). Use Cell for scale, Angle° for orientation. (The Glass panel has a second, global counterchange.)

Glass — color & framing

  • Frame / Frame width — border vignette-frame.
  • Tint — color + blend amount.
  • Counterchange (global) — off / negate / hue 180° / desaturate / tint, with a fold scale.
  • Chroma — chromatic-aberration fringing. Ripple — final rippling pass. Vignette — darken edges. Grain — film grain. Hue / depth — shift hue with recursion depth.
  • Post grade (every renderer): Exposure, Contrast, Saturation, Warmth, Posterize (0 = off), Scanlines (CRT sweep).
  • Signal glitch: Channel split / Channel swap corrupt RGB, Block dropout punches holes, Dither crushes to a palette, Signal noise adds static, Interlace combs scanlines. Block patterns reroll with Reseed.

Motion — animation

  • Drift slowly evolves fold parameters. Spin rotates the whole view. Rotate is a fixed (animatable) rotation. Wobble gently undulates the whole pattern over time — it animates every fold, plus the Wave folds and Ripple.
  • Pulse breathes the zoom, Sway drifts the framing, Hue cycle rotates all colours over time.
  • Motion glitch: Stutter quantizes the clock into hold-then-jump steps, Jitter shakes framing/rotation per frame, and Glitch burst spikes channel-split/noise/dropout on a beat (fires even with the glass-glitch sliders at 0).
  • Loops are built to close seamlessly when exported as HQ Video.

Presets, export & recording

  • Presets: load a factory recipe, save your own, Randomize, Reseed, and Copy/Paste or Import/Export as text to share.
  • Export PNG at 1×/2×/4× the live view or a fixed height (1080p–2880p) — supersampled (2× SSAA) and downsampled for clean edges when it fits under the GPU limit; Feedback is rebuilt at export resolution.
  • Record (WebM) captures the live canvas; HQ Video renders offline frame-by-frame (loops close exactly, Feedback rebuilt at full res).
  • Aspect locks the composition to any common ratio before export.

Recipes to try

  • Kaleidoscope portrait: Polar fold (6–12) → Swirl (small) → Panes + Tint.
  • Infinite vortex: Spiral → Droste, raise Step scale & Twist.
  • Stained glass: Wallpaper (p6m) → Counterchange (checker, tint) → Panes.
  • Liquid chrome: Wave bank (dc_gnarly) → Feedback, add Chroma + a little Drift.
  • Bubble field: Loonie (Loonie2, sides 6, some Star) → Spherical → Room.
  • Spiral galaxy: Log spiral → Wave bank (waves_spiral) → Droste, Vignette up.
Muddy? Remove the last fold — over-stacking is the usual culprit. Flat? Switch the renderer before adding more folds.