comfyui_pcg docs

Image: Simulation#

Reaction-diffusion, fluids, solvers and other iterative image processes.

7 nodes.

Back to the reference index

Contents#

  • COP Eikonal (PCG) — Solves the eikonal equation to give the arrival time (or geodesic distance) from seed pixels through a speed field.
  • COP Flow Solve (PCG) — Projects a 2-channel velocity layer to be divergence-free, or runs a stable-fluids simulation that advects density layers.
  • COP Ocean (PCG) — Evaluates an FFT ocean surface (Tessendorf) into height, displacement, normal and foam layers.
  • COP Reaction Diffusion (PCG) — Runs a reaction-diffusion simulation (Gray-Scott, multi-scale Turing or Maginu) for a number of steps.
  • COP Ripple (PCG) — Simulates 2D waves with a leapfrog wave-equation solver.
  • COP Solve Poisson (PCG) — Solves the Poisson equation on the image.
  • COP Turing Patterns (PCG) — Repeatedly blurs and sharpens a layer to grow stripes and spots while keeping the large-scale shape of the input.

Nodes#

COP Eikonal (PCG)#

PCG_COPEikonal · category PCG/cop · Houdini: Eikonal (COP)

Solves the eikonal equation to give the arrival time (or geodesic distance) from seed pixels through a speed field.

COP Eikonal (PCG): input and result

Solves |grad T| = 1/F with a Godunov upwind scheme and fast sweeping, starting from the pixels of seed_layer that are above 0.5. The speed F is the speed layer multiplied by speed; a speed of 0 is a wall. With a constant speed of 1, the result is the geodesic distance in pixels around obstacles.

Unreachable pixels are written as -1. If an id layer name is given, the id of the nearest seed region (connected component of the seed mask) is propagated and written as well.

The scheme is first order: diagonal directions close to the seeds have the largest error (around 10% within a few pixels), falling to around 1% far away.

Inputs

InputTypeDescription
copCOPIMAGEImage containing the seed layer and optionally a speed layer.

Outputs

OutputTypeDescription
copCOPIMAGEImage with the arrival time layer (and id layer) added.
reportSTRINGText report with the number of sweeps and whether the solve converged.

Parameters

ParameterTypeDefaultDescription
Seed Layer seed_layerstringmaskLayer whose pixels above 0.5 are the starting points (time 0). Errors if no seed pixel exists.
Speed Layer speed_layerstring(empty)Optional layer giving a per-pixel speed multiplier; 0 marks a wall. Empty means speed is speed everywhere.
Speed speedfloat [0..]1Global speed multiplier.

Solver

ParameterTypeDefaultDescription
Max Sweeps max_sweepsint [1..10000]60Maximum number of full sweep iterations. A point source typically converges in 2 to 3.
Tolerance tolerancefloat [0..1]1e-06Convergence threshold: sweeping stops when the largest change falls below this.
ParameterTypeDefaultDescription
Output Layer out_layerstringarrivalName of the arrival time layer.
ID Layer id_layerstring(empty)Name of an output layer holding the index of the nearest seed region. Empty skips it.

COP Flow Solve (PCG)#

PCG_COPFlowSolve · category PCG/cop · Houdini: Flow Block Begin (COP), Flow Block End (COP), Flow Project Non-Divergent Multigrid (COP)

Projects a 2-channel velocity layer to be divergence-free, or runs a stable-fluids simulation that advects density layers.

Covers Flow Block Begin/End and Flow Project Non-Divergent Multigrid. Velocity is a 2-channel layer in pixels per step (v pointing up, like the rest of COP).

project performs one Helmholtz projection, turning any vector field into an incompressible flow. simulate runs Stam's stable fluids for steps iterations, each consisting of: add force, advect velocity, project, advect the density layers, then multiply by 1 - dissipation.

Both edge modes are solved directly: Wrap uses an exact FFT projection; Clamp makes the borders walls using a mirrored extension and FFT, also exact. The velocity and density layers are written back under their original names, so the result can be fed into the next segment. The report states the maximum remaining divergence and where it was computed.

Inputs

InputTypeDescription
copCOPIMAGEImage containing the velocity layer, density layers and optional force layer.

Outputs

OutputTypeDescription
copCOPIMAGEImage with updated velocity and density layers.
reportSTRINGText report with the maximum divergence and the compute device.

Parameters

ParameterTypeDefaultDescription
Velocity Layer velocity_layerstringvel2-channel velocity layer in pixels per step.
Mode modemenuSimulate (Stable Fluids)project only makes the velocity divergence-free; simulate advances the fluid for several steps. Options: Simulate (Stable Fluids) (simulate), Project Non-Divergent (project).
Density Layers density_layersstringdensitySpace-separated layers carried along by the flow (any channel count). Used by Simulate. Hidden when mode ≠ simulate.
Steps stepsint [0..]10Number of simulation steps (Simulate only). Hidden when mode ≠ simulate.
Time Step dtfloat [0..100]1Time step per simulation step, scaling forces and advection. Hidden when mode ≠ simulate.
Force Layer force_layerstring(empty)Optional layer whose first two channels are added to the velocity each step. Empty adds no force. Hidden when mode ≠ simulate.
Force Scale force_scalefloat1Multiplier on the force layer. Hidden when mode ≠ simulate. Disabled when force_layer = "".
Dissipation dissipationfloat [0..1]0Fraction of density removed per step; 0 keeps density constant. Hidden when mode ≠ simulate.
Boundary edgemenuWrap (Periodic)Boundary condition: wrap is periodic, clamp makes the image borders walls. Options: Wrap (Periodic) (wrap), Closed (Walls) (clamp).
Tolerance (Unused) tolerancefloat [1e-14..1]1e-08No longer has any effect, since both boundary modes are solved directly. Kept so older graphs stay compatible.
Compute computemenuAutoDevice: auto picks the GPU when it is worthwhile, otherwise cpu or cuda are forced. Options: Auto (auto), CPU (cpu), CUDA (cuda).

Tips

  • Run project on a hand-painted or noise-generated vector field to get a swirling, incompressible field, then feed it to COP Distort.

COP Ocean (PCG)#

PCG_COPOcean · category PCG/cop · Houdini: Ocean Evaluate (COP), Ocean Spectrum (COP)

Evaluates an FFT ocean surface (Tessendorf) into height, displacement, normal and foam layers.

COP Ocean (PCG): input and result

Combines Houdini's Ocean Spectrum and Ocean Evaluate. A wave spectrum (Phillips or TMA) generates random complex amplitudes, which are advanced in time with the dispersion relation (deep water, or finite depth when Depth is above 0) and transformed with an inverse FFT. The result tiles seamlessly because the FFT is periodic. With the same seed, changing Time animates the surface; changing Amplitude only scales it (height proportional to the square root of the amplitude). With the default Amplitude the significant wave height is about 0.21*V^2/g for a fully developed sea; Grid Size should be at least an order of magnitude larger than V^2/g, or the longest waves are cut off and the sea looks low.

Output layers, in metres, named after Output Layer:

  • <name>: height.
  • <name>_disp: 3-channel displacement (du, height, dv): horizontal choppy displacement along the image u and v directions plus vertical displacement, to push a mesh.
  • <name>_N: tangent-space normal (u, v, up).
  • <name>_foam: foam, where the displacement Jacobian drops below 1 - Foam Threshold, mapped linearly to 0-1.

If cop is connected, layers are added to it and its resolution is used; otherwise Resolution applies. report lists the maximum wave height and the imaginary residual of the inverse FFT (should be 0).

Inputs

InputTypeDescription
cop (optional)COPIMAGEOptional image to add the ocean layers to. Its resolution is used. Without it a new image of the given Resolution is created.

Outputs

OutputTypeDescription
copCOPIMAGEImage with the ocean layers.
reportSTRINGText summary with the maximum wave height and the FFT imaginary residual.

Parameters

ParameterTypeDefaultDescription
Grid Size sizefloat [0.01..]100Width of the whole image in metres (height follows the aspect ratio).
Depth depthfloat [0..]0Water depth in metres. 0 means deep water.
Gravity gravityfloat [0.01..1000.0]9.81Gravitational acceleration used by the dispersion relation and spectrum.
Resolution resolution_x resolution_yint [1..16384]512, 512Output width and height in pixels. Used only when cop is not connected.
Time timefloat0Time in seconds at which the surface is evaluated.
Loop Period loop_periodfloat [0..]0Period in seconds after which the animation repeats exactly (wave frequencies are quantized to multiples of 2*pi/period). 0 disables looping.
Seed rand_seedint [0..]0Seed for the random wave amplitudes and phases.

Wind

ParameterTypeDefaultDescription
Spectrum Type spectrum_typemenuPhillipsWave spectrum. Phillips is the classic Tessendorf spectrum; TMA is a depth-aware spectrum with a Hasselmann directional distribution (it ignores Amplitude and Wind Direction Bias). Options: Phillips (phillips), TMA (tma).
Wind Speed wind_speedfloat [0.01..100]12Wind speed in metres per second. Sets the dominant wavelength (V^2/g).
Wind Direction wind_directionfloat [-360..360]0Direction the wind blows, in degrees.
Swell swellfloat [-10..10]0TMA only: negative values reduce directionality and add waves against the wind, positive values concentrate energy. Hidden when spectrum_type ≠ tma.
Fetch (km) fetch_kmfloat [0.001..]100TMA only: distance in kilometres over which the wind has blown, which sets how developed the sea is. Hidden when spectrum_type ≠ tma.
Wind Direction Bias alignfloat [0..32]2Phillips only: how strongly waves align with the wind. Higher values give more wind-aligned waves. Hidden when spectrum_type ≠ phillips.
Directional Movement directional_movementfloat [0..1]0Phillips only: reduces waves travelling against the wind by a factor of 1 - value. Hidden when spectrum_type ≠ phillips.

Waves

ParameterTypeDefaultDescription
Distribution distributionmenuGaussianRandom distribution of the wave amplitudes (phases are always uniformly random). All four options have the same mean energy; they differ in distribution shape. Options: None (none), Uniform (uniform), Gaussian (gaussian), Log Normal (log_normal).
Amplitude amplitudefloat [0..1]0.00088Phillips only: overall spectrum constant. Wave height scales with its square root. Hidden when spectrum_type ≠ phillips.
Min Wavelength small_cutfloat [0..100]0.1Waves shorter than this length in metres are suppressed.
Chop choppinessfloat [0..10]1Strength of the horizontal displacement that sharpens crests.
Foam Threshold foam_thresholdfloat [0.001..2]0.3Foam appears where the displacement Jacobian falls below 1 - threshold; it is also the width over which foam ramps to 1.
ParameterTypeDefaultDescription
Output Layer out_layerstringoceanBase name of the output layers (<name>, <name>_disp, <name>_N, <name>_foam).

Compared with Houdini

One node replaces Houdini's Ocean Spectrum and Ocean Evaluate pair. The TMA directional spread is Hasselmann with Horvath's swell term; the sign handling of Swell (negative adds against-wind waves) is chosen by the plugin because the documentation is not specific.


COP Reaction Diffusion (PCG)#

PCG_COPReactionDiffusion · category PCG/cop · Houdini: Reaction-Diffusion Block Begin (COP), Reaction-Diffusion Block End (COP)

Runs a reaction-diffusion simulation (Gray-Scott, multi-scale Turing or Maginu) for a number of steps.

COP Reaction Diffusion (PCG): input and result

One node advances the simulation by Steps iterations. The state is stored in extra layers next to the output: <Output Layer>_u and _v for Gray-Scott, _g for Turing and _a / _b for Maginu. Feeding the output back into the input continues the run from that state (the seed layer is then ignored).

Gray-Scott presets are common feed/kill pairs; Feed Layer and Kill Layer allow per-pixel values. Maginu solves A' = Da*lap(A) + alpha*(A - A^3) - B and B' = Db*lap(B) + beta*(A - gamma*B). Turing uses the listed activator radii. An optional boundary SDF restricts where the reaction takes place.

The second output is a text report of the run.

Inputs

InputTypeDescription
cop (optional)COPIMAGEOptional image providing resolution, the seed layer, and the state to continue from.

Outputs

OutputTypeDescription
copCOPIMAGEImage with the pattern layer and the state layers.
reportSTRINGText summary of the simulation run.

Parameters

ParameterTypeDefaultDescription
Model modemenuGray-ScottSimulation model. Options: Gray-Scott (gray_scott), Turing (Multi-Scale) (turing), Kenjiro Maginu (maginu).
Steps stepsint [0..]1000Number of iterations performed by this node.

Gray-Scott

ParameterTypeDefaultDescription
Preset presetmenuCoralCommon Gray-Scott feed/kill pairs. Custom uses the Feed and Kill Rate values. Options: Coral (coral), Mitosis (mitosis), Spots (spots), Worms (worms), Maze (maze), Custom (custom). Hidden when mode ≠ gray_scott.
Feed Rate feedfloat [0..0.2]0.055Gray-Scott feed rate F. Disabled when a Feed Layer is given. Hidden when mode ≠ gray_scott } { preset ≠ custom. Disabled when feed_layer ≠ "".
Kill Rate killfloat [0..0.2]0.062Gray-Scott kill rate k. Disabled when a Kill Layer is given. Hidden when mode ≠ gray_scott } { preset ≠ custom. Disabled when kill_layer ≠ "".
Diffusion U (A) dufloat [0..1]1Diffusion rate of chemical U (A). Hidden when mode = turing.
Diffusion V (B) dvfloat [0..1]0.5Diffusion rate of chemical V (B). Hidden when mode = turing.
Time Step dtfloat [0.01..1]1Time step. Requires max(Du, Dv) * dt <= 1 for stability. Hidden when mode = turing.
Boundary edgemenuWrapBehaviour at the image border. Options: Wrap (wrap), Clamp (clamp). Hidden when mode = turing.

Initial State

ParameterTypeDefaultDescription
Seed Layer seed_layerstring(empty)Layer whose values above 0.5 place chemical V (for Maginu, A = 1). Empty scatters Spot Count circles at random. Not read when continuing a run. Hidden when mode = turing.
Spot Count spotsint [0..]20Number of random seed circles. Hidden when mode = turing. Disabled when seed_layer ≠ "".
Spot Radius spot_radiusfloat [0.5..1000]4Radius of the seed circles in pixels. Hidden when mode = turing. Disabled when seed_layer ≠ "".
Seed rand_seedint [0..]0Random seed for the initial state. Disabled when mode = gray_scott seed_layer ≠ "".

Spatial Variation

ParameterTypeDefaultDescription
Feed Layer feed_layerstring(empty)Optional layer giving the feed rate per pixel. Hidden when mode ≠ gray_scott.
Kill Layer kill_layerstring(empty)Optional layer giving the kill rate per pixel. Hidden when mode ≠ gray_scott.

Turing

ParameterTypeDefaultDescription
Scales (Radii) scalesstring32 16 8 4Space-separated activation radii in pixels, any number of them. Hidden when mode ≠ turing.
Step Size step_sizefloat [0..1]0.02Update step size of the Turing model. Hidden when mode ≠ turing.

Kenjiro Maginu

ParameterTypeDefaultDescription
Alpha α maginu_alphafloat [-1000.0..1000.0]1Alpha in A' = Da*lap(A) + alpha*(A - A^3) - B. Hidden when mode ≠ maginu.
Beta β maginu_betafloat [-1000.0..1000.0]0.5Beta in B' = Db*lap(B) + beta*(A - gamma*B). Hidden when mode ≠ maginu.
Gamma γ maginu_gammafloat [-1000.0..1000.0]1.5Gamma in the equation for B. Hidden when mode ≠ maginu.

Reaction

ParameterTypeDefaultDescription
Scale Multiplier scale_multiplierfloat [0.0001..10000.0]1The reaction term is divided by this value: larger means slower reaction and bigger patterns. Hidden when mode = turing.

Boundary

ParameterTypeDefaultDescription
Boundary SDF Layer boundary_layerstring(empty)SDF layer limiting where the reaction runs; the reaction happens where the SDF is at or below the threshold. Empty means unrestricted. Hidden when mode = turing.
Invert Boundary invert_boundarytoggleoffReverses which side of the boundary reacts. Hidden when mode = turing. Disabled when boundary_layer = "".
Boundary Threshold boundary_thresholdfloat0SDF value that separates reacting from non-reacting area. Hidden when mode = turing. Disabled when boundary_layer = "".
Boundary Smoothing boundary_smoothingfloat [0..1024]0Softens the transition at the boundary. Hidden when mode = turing. Disabled when boundary_layer = "".

Output Correction

ParameterTypeDefaultDescription
Normalize Model normalize_modeltoggleoffNormalizes the model output. Hidden when mode = turing.
Invert invert_outputtoggleoffInverts the output values. Hidden when mode = turing.
Clamp Min clamp_minfloat0Lower clamp value. Hidden when mode = turing.
Clamp Minimum use_clamp_mintoggleoffEnables the lower clamp. Hidden when mode = turing.
Clamp Max clamp_maxfloat1Upper clamp value. Hidden when mode = turing.
Clamp Maximum use_clamp_maxtoggleoffEnables the upper clamp. Hidden when mode = turing.
ParameterTypeDefaultDescription
Output Layer out_layerstringrdName of the layer that receives the pattern; state layers use it as a prefix.
Resolution resolution_x resolution_yint [1..16384]512, 512Image size, used only when no image is connected.
Compute computemenuAutoBackend: Auto, CPU (NumPy) or CUDA. Options: Auto (auto), CPU (NumPy) (cpu), CUDA (cuda).

Tips

  • Chain several nodes, wiring each output into the next input, to continue a long simulation across runs.

COP Ripple (PCG)#

PCG_COPRipple · category PCG/cop · Houdini: Ripple Block Begin (COP), Ripple Block End (COP)

Simulates 2D waves with a leapfrog wave-equation solver.

Solves the 2D wave equation for Steps iterations. The Source Layer gives the initial displacement on the first run, or with a Drive Frequency keeps driving the source continuously with a sine. The Obstacle Layer defines walls. State is stored in <Output Layer>, <Output Layer>_prev and <Output Layer>_t; wire the output back in to continue the run.

Wave Speed is limited to 0.707 pixels per step, the CFL stability limit. The second output is a text report.

Inputs

InputTypeDescription
cop (optional)COPIMAGEOptional image providing resolution, source, obstacles and the state of a previous run.

Outputs

OutputTypeDescription
copCOPIMAGEImage with the wave height layer and state layers.
reportSTRINGText summary of the simulation run.

Parameters

ParameterTypeDefaultDescription
Source Layer source_layerstringmaskLayer used as initial displacement on the first run (or as the driven source). Ignored when no image is connected.
Obstacle Layer obstacle_layerstring(empty)Layer where values above 0.5 are walls.

Wave

ParameterTypeDefaultDescription
Wave Speed speedfloat [0..0.707]0.5Wave speed in pixels per step; at most 0.707 for stability.
Damping dampingfloat [0..1]0Energy loss per step; 0 means undamped.
Steps stepsint [0..]100Number of iterations performed by this node.

Drive

ParameterTypeDefaultDescription
Drive Frequency drive_frequencyfloat [0..0.5]0When above 0, the source is driven by a sine at this frequency (cycles per step). Disabled when source_layer = "".
Drive Amplitude drive_amplitudefloat1Amplitude of the driven source. Disabled when drive_frequency = 0 } { source_layer = "".

Boundary

ParameterTypeDefaultDescription
Boundary edgemenuReflectBorder behaviour: reflect bounces waves back, wrap loops around, absorb damps waves in a border band. Options: Reflect (reflect), Wrap (wrap), Absorb (Sponge) (absorb).
Absorb Width absorb_widthint [1..4096]16Width of the absorbing band in pixels. Hidden when edge ≠ absorb.
ParameterTypeDefaultDescription
Output Layer out_layerstringrippleName of the wave layer; state layers use it as a prefix.
Resolution resolution_x resolution_yint [1..16384]512, 512Image size, used only when no image is connected.
Compute computemenuAutoBackend: Auto, CPU (NumPy) or CUDA. Options: Auto (auto), CPU (NumPy) (cpu), CUDA (cuda).

COP Solve Poisson (PCG)#

PCG_COPSolvePoisson · category PCG/cop · Houdini: Solve Poisson (COP)

Solves the Poisson equation on the image.

Solves lap(u) = f with the five-point stencil and a pixel spacing of 1. With Input Type Gradient it solves lap(u) = div(g) instead, which reconstructs a height from a gradient field (for example slopes derived from normals), and enables gradient-domain editing and Poisson blending.

Periodic and Neumann boundaries are solved directly with an FFT (Neumann via mirror extension). Dirichlet uses conjugate gradients, preconditioned with the direct Neumann solve. The second output is a text report.

Inputs

InputTypeDescription
copCOPIMAGEImage containing the input layer (and fixed pixel layers for Dirichlet).

Outputs

OutputTypeDescription
copCOPIMAGEImage with the solution layer.
reportSTRINGText report of the solve.

Parameters

ParameterTypeDefaultDescription
Input Layer layerstringrhsLayer holding the right-hand side: the Laplacian f, or a 2-channel gradient.
Input Type sourcemenuLaplacian (f)Whether the input layer is the Laplacian itself or a 2-channel gradient field. Options: Laplacian (f) (laplacian), Gradient (2-Channel) (gradient).
Boundary boundarymenuNeumann (Mirror)Neumann mirrors the image at the edge, Periodic wraps it, Dirichlet keeps chosen pixels at fixed values. Options: Neumann (Mirror) (neumann), Periodic (Wrap) (periodic), Dirichlet (Fixed Pixels) (dirichlet).

Dirichlet

ParameterTypeDefaultDescription
Fixed Layer fixed_layerstring(empty)Layer where values above 0.5 mark pixels held fixed. Hidden when boundary ≠ dirichlet.
Value Layer value_layerstring(empty)Layer giving the values of the fixed pixels. Empty means 0. Hidden when boundary ≠ dirichlet.
Tolerance tolerancefloat [1e-14..1]1e-08Convergence tolerance of the iterative solver. Hidden when boundary ≠ dirichlet.
Max Iterations max_iterationsint [1..]2000Iteration limit of the iterative solver. Hidden when boundary ≠ dirichlet.
ParameterTypeDefaultDescription
Output Layer out_layerstringsolutionName of the solution layer.

COP Turing Patterns (PCG)#

PCG_COPTuringPatterns · category PCG/cop · Houdini: Turing Patterns (COP)

Repeatedly blurs and sharpens a layer to grow stripes and spots while keeping the large-scale shape of the input.

COP Turing Patterns (PCG): input and result

Each iteration blurs the current state x with the chosen filter and radius, then sharpens it with an unsharp mask of the same radius, and clamps to 0-1:

b = Blur(x), x = clip(b + Power * (b - Blur(b)), 0, 1)

The start value is Gain * source. The unsharp step acts as a difference of Gaussians (activator minus inhibitor), which amplifies features with wavelength near Radius, and the clamp saturates them into two phases; larger Power gives more solid patterns. Because the iteration begins from the source, the large shapes of the input remain visible. The input is clamped to 0-1 during iteration, so HDR values are compressed.

The result is blended with the original by Mask (multiplied by the optional mask layer).

Inputs

InputTypeDescription
copCOPIMAGEImage containing the layer to process.

Outputs

OutputTypeDescription
copCOPIMAGEThe input image with the patterned layer written to the output layer.

Parameters

ParameterTypeDefaultDescription
Source Layer layerstringCLayer to process. All channels are processed independently.
Mask maskfloat [0..1]1Blend amount of the result with the original (0-1), multiplied with the mask layer if given.
Mask Layer mask_layerstring(empty)Optional per-pixel mask layer. Empty means no mask layer.
Filter filtermenuGaussianBox averages over a window of radius rounded to whole pixels; Gaussian uses a kernel with half-width equal to the radius and sigma of a third of it. Options: Box (box), Gaussian (gaussian).
Read Pixels outside Image read_outsidetoggleoffWhen off, only pixels inside the image are averaged (weights are renormalised at the edges). When on, pixels outside the image are read according to Border.
Border bordermenuClampHow pixels outside the image are produced when Read Pixels outside Image is on. Options: Clamp (clamp), Wrap (wrap), Constant (Black) (black), Mirror (mirror). Disabled when read_outside is off.
Units unitsmenuPixelsUnit of the radius: Pixels, or Image units (the long edge of the image is 2). Options: Image (image), Pixels (pixels).
Iterations iterationsint [0..10000]10Number of blur-and-sharpen rounds. More rounds give more developed patterns.
Radius radiusfloat [0..10000.0]4Blur radius, which sets the feature size of the pattern.
Power powerfloat [0..1000.0]2Sharpening strength. Higher values give crisper, more binary patterns.
Gain gainfloat [-1000.0..1000.0]1Multiplier applied to the input before the first iteration.
Scale scalestring1 1Radius multiplier in X and Y (a pair). 0 disables blurring along that axis; unequal values give directional patterns.
Output Layer out_layerstring(empty)Destination layer. Empty overwrites the input layer.

Compared with Houdini

The exact formula is the plugin's own interpretation of Houdini's blur-then-sharpen description. There is no per-pixel radius input layer and no per-channel RGBA toggles. This is distinct from the Turing option of Reaction Diffusion, which uses McCabe's multi-scale algorithm.