Table of Contents

Steps for run

The steps egami run chains and workflow files list. Every public RasterOps method whose arguments a command line can spell is a step, named in kebab case (ContrastStretch is contrast-stretch); its options are the method's parameters. Positional values fill the parameters in order; --name value sets one by name. egami run --list <step> prints one.

Step What it does
adaptive-threshold Thresholds each pixel against the mean of the window around it (Bradley and Roth, 2007): a pixel is dark when its luminance is more than limit below its window's mean, so uneven lighting on a scanned page does not swallow text.
add-noise Adds noise to red, green and blue (or a CMYK raster's inks), as ImageMagick's +noise with -attenuate does: film grain, sensor noise, or salt and pepper for testing filters.
alpha-to-gray Makes the image a gray picture of its alpha: red, green and blue become the alpha value and alpha becomes opaque, as ImageMagick's -alpha extract does.
arithmetic Applies op with value to every value of channels, on values scaled 0 to 1 and clamped back to 0..1, as ImageMagick's -evaluate defines each operator.
auto-gamma Applies the Gamma that moves the image's mean to 0.5, as ImageMagick's -auto-gamma; an image whose mean is 0 or 1 is left alone.
auto-level Stretches the darkest value to 0 and the lightest to 1, as ImageMagick's -auto-level.
auto-orient Turns the image the way its EXIF orientation says, so it looks as the camera meant, and sets the orientation to Normal.
auto-threshold Thresholds at the level method finds in the histogram, as ImageMagick's -auto-threshold; see FindThreshold.
auto-white-balance Removes a color cast it measures, by method.
bilateral-blur Smooths while keeping edges (Tomasi and Manduchi's bilateral filter): each neighbour counts by its distance, through a Gaussian of spatialSigma, and by how much its color differs, through a Gaussian of rangeSigma, so noise flattens and edges stay.
blend-color Blends one color over every pixel by mode: Multiply tints, Screen washes out, Color colorizes.
bloom Makes bright areas glow, as a camera's bloom: the parts of each channel above threshold, stretched to 0..1 and scaled by intensity, blurred in linear light with Fast and screened onto the image in linear light.
blur Blurs with a Gaussian of standard deviation sigma pixels, computed by method.
box-blur Replaces each pixel with the mean of the (2r + 1) square around it.
brightness Multiplies red, green and blue by amount: 1 changes nothing, 0 gives black.
canny-edges Finds thin edges with Canny's detector, as ImageMagick's -canny 0x{sigma}+{low × 100}%+{high × 100}% does: the luma is smoothed by a Gaussian, Canny's first differences give the gradient, pixels that are not the strongest across their edge are dropped, and hysteresis keeps pixels whose magnitude reaches high times the largest, plus those 8-connected to them that reach low times it.
change-speed Plays the animation factor times as fast: every delay is divided by it, rounded to whole milliseconds.
chroma-key Makes pixels whose chroma lies within similarity of color's transparent, keeping their color: a chroma key for green and blue screens.
clahe Contrast-limited adaptive histogram equalization (Zuiderveld, 1994) on L*, as ImageMagick's -clahe: each of tilesX × tilesY tiles gets its own clipped, equalized curve, blended smoothly between tile centers, so local detail comes up without the noise of plain equalization.
colorize Blends red, green and blue toward color, as ImageMagick's -colorize.
contrast Scales red, green and blue around mid-gray: 1 changes nothing, 0 gives flat gray.
contrast-stretch Clips the darkest black and lightest white fractions of the pixels, then stretches the rest to 0..1, as ImageMagick's -contrast-stretch.
convert-color Converts the pixels from the encoding the raster is in (GetColorProfile, or the target of an earlier ConvertColor in the chain) to target, in place, and records the new encoding in the metadata: no profile for sRGB, the target's ICC profile otherwise.
cover Scales the image to cover width × height with its aspect ratio kept, keeping the part at anchor.
crop Keeps one rectangle of the image.
deskew Straightens a scanned or photographed page: detects the tilt of its text lines (see DetectSkew) and turns the image back by it.
despeckle Removes specks while keeping edges, by Crimmins' complementary hulling exactly as ImageMagick's -despeckle runs it: each color channel is nudged, a level at a time, toward neighbours that differ by two levels or more, in 16 passes along four directions.
despill Removes the colored cast a green or blue screen leaves on edges, hair and see-through pixels: the screen's channel is held down to a limit taken from the other two channels.
dilate The maximum over the (2rx + 1) × (2ry + 1) rectangle around each pixel, as Skia's dilate filter with those radii.
displace Moves each pixel by a displacement map, as Skia's DisplacementMap and ImageMagick's -displace do: pixel (x, y) shows the source at (x + scaleX × (mx − 0.5), y + scaleY × (my − 0.5)), with mx and my the map's chosen channels from 0 to 1, so mid-gray moves nothing.
draw-animation Draws an animation (or a still) onto this one at position.
draw-arithmetic Draws image with the arithmetic composite (SVG's feComposite arithmetic operator, Skia's arithmetic blender): each channel of the premultiplied result is k1·S·D + k2·S + k3·D + k4, with S the image and D this raster, in 0..1.
draw-image Draws the part of image inside sourceArea onto this raster with that part's top-left corner at position, combining pixels by mode as DrawImage does for the whole image.
drop-shadow Adds a drop shadow, as Skia's DropShadow image filter: the image's alpha, moved by (dx, dy), blurred by a Gaussian of sigma and filled with color, with the image drawn over it source-over.
drop-zero-delay Removes frames with no delay, which no viewer shows, as ImageMagick's -layers RemoveZero; when every frame has none, nothing is removed.
duotone Maps luminance onto the line from shadows to highlights.
edges Replaces each pixel with the strength of the edge through it: the gradient magnitude of op's kernels, scaled so a full black-to-white step gives 1, clamped to 0 to 1.
emboss Embosses: blurs with a Gaussian of sigma, takes the slope toward the light at angle with a 3 × 3 Sobel stencil, scales it by depth and adds mid gray, so flat areas become 0.5 and slopes facing the light are lighter.
entropy-crop Crops to the busiest part of the image: the bounding box of the 16 × 16 tiles whose luminance entropy (the Shannon entropy of the tile's 256-level histogram, over 8 bits) reaches threshold.
equalize Spreads the values evenly by histogram equalization: of L* by default, keeping a* and b* so colors hold, or of each channel as ImageMagick's -equalize.
erode The minimum over the (2rx + 1) × (2ry + 1) rectangle around each pixel, as Skia's erode filter with those radii.
fill-color Sets every pixel in rect, or the whole image, to one color.
fit Scales the image to fit inside width × height with its aspect ratio kept, so one side matches the box and the other is no larger.
flatten Composites the image over background and makes it opaque, as ImageMagick's -alpha remove does.
flip Mirrors the image: horizontal (left to right), vertical (top to bottom) or both.
flip-horizontal Mirrors the image left to right.
flip-vertical Mirrors the image top to bottom.
flood-fill Fills the region connected to seed whose colors lie within tolerance of the seed's own with fill, as ImageMagick's -fuzz with -floodfill does.
gamma Raises red, green and blue to 1/gamma, as ImageMagick's -gamma: 2.2 brightens.
glow Adds a glow around the image's alpha shape, as an editor's outer glow layer style: the alpha, blurred with Fast, spread, and filled with color, drawn behind the image.
grayscale Converts toward gray.
high-contrast Skia's high-contrast accessibility filter.
hue-rotate Rotates hue around the luma axis.
inner-shadow Adds a shadow inside the image's alpha shape, as an editor's inner shadow layer style: everything outside the shape, moved by (dx, dy) rounded to whole pixels, blurred with Fast and filled with color, drawn on the image inside the shape only.
invert Replaces red, green and blue with 1 − value, blended by amount.
kuwahara Smooths while keeping edges, with the Kuwahara filter as ImageMagick's -kuwahara defines it: of the four (r + 1) squares that have the pixel as a corner, the one whose luma varies least gives the pixel its value, sampled at that square's middle.
lens-blur Blurs as an out-of-focus lens does: each point spreads into the aperture's shape, a disc or a polygon of 5 to 12 blades, so small lights become discs, unlike a Gaussian's soft spots.
level Stretches black..white to outputBlack..outputWhite with a midtone gamma, as ImageMagick's -level and +level.
local-contrast Brings out local detail, as ImageMagick's -local-contrast: L* is pushed away from a wide blur of itself by strength, so large-scale light changes less than detail.
luminance-to-alpha Sets alpha to the luminance of the stored values, 0.212656 R + 0.715158 G + 0.072186 B (the Rec.
make-transparent Makes pixels within tolerance of color transparent, keeping their color, by ImageMagick's -fuzz distance, so with no softness the result equals ImageMagick's -fuzz with -transparent.
median Replaces each channel with its median over the (2r + 1) square around the pixel, as ImageMagick's -statistic Median does: removes salt-and-pepper noise while keeping edges.
merge-duplicates Removes each frame equal to the one before it and adds its delay to the frame that stays, as ImageMagick's -layers RemoveDups: a screen recording that sat still for seconds becomes one long frame.
motion-blur Streaks the image along a direction, as a camera moving during the exposure, with ImageMagick's -motion-blur meaning: each pixel averages 2⌈radius⌉ + 1 samples one pixel apart, from itself toward angle, weighted by a Gaussian of sigma from the pixel.
normalize ContrastStretch at ImageMagick's -normalize points: the darkest 2% of the pixels become black and the lightest 1% white.
offset Moves the image by whole pixels, right by dx and down by dy, with no resampling.
oil-paint Makes the image look painted, as ImageMagick's -paint does: around each pixel, in the (2r + 1) square, pixels are sorted into levels bins by intensity, and the pixel becomes a pixel of the most common bin, unchanged.
opacity Multiplies alpha by amount.
pad Enlarges the canvas to width × height, placing the image at anchor and filling the new area with background.
pixelate Pixelates: the image is cut into square cells, and every pixel of a cell becomes the cell's average, taken on premultiplied values so transparent pixels do not darken it.
posterize Rounds red, green and blue to levels evenly spaced values each, as ImageMagick's -posterize, optionally dithered: ordered dithering adds a fixed 8 × 8 pattern before rounding, Floyd–Steinberg spreads each value's rounding error to its neighbours.
quad-distort Moves the image's four corners to four points, bending it in perspective: ImageMagick's Perspective distort.
quantize Reduces each frame to at most MaxColors colors, as a palette format would, but keeps the pixel type: an Rgba16 image stays Rgba16 with at most that many distinct values.
replace-color Replaces every pixel within tolerance of from with to, by ImageMagick's -fuzz distance, as ImageMagick's -fill with -opaque does.
resize Resizes to a size in the size syntax (W, xH, WxH, P%, with !, ^, > or <) with a fit mode.
retime Resamples the animation to framesPerSecond, as ffmpeg's fps filter: fixed ticks, each showing the frame visible when it starts, with neighbours that show the same frame merged.
reverse Plays the animation backwards; each frame keeps its delay and metadata.
rotate Rotates the image clockwise.
rotational-blur Spins the image around center, as ImageMagick's -rotational-blur: each pixel averages samples along an arc of degrees centered on it, about one per pixel of arc (at most 256), read bilinearly.
saturation Mixes each color with its luma: 1 changes nothing, 0 gives gray, above 1 oversaturates.
sepia Tints toward sepia.
shade Shades the image as ImageMagick's -shade does: the luminance is a height field, and each pixel becomes the Lambertian shading of its surface normal by a distant light at azimuth and elevation, a gray relief; with colored the shading multiplies the image's own colors instead, as +shade does.
sharpen Sharpens with an unsharp mask: out = src + amount × (src − Blur(sigma)).
shuffle-channels Rearranges the working RGBA channels: each output channel takes the input channel, or the constant, its argument names.
sigmoidal-contrast Adds (or removes) contrast with ImageMagick's scaled logistic curve, which never clips.
simulate-color-blindness Shows how the image looks with a color vision deficiency.
skew Shears the image about its center: vertical lines lean by degreesX (x moves by y × tan) and horizontal lines by degreesY.
solarize Inverts red, green and blue values above threshold, as ImageMagick's -solarize.
spread Scatters pixels, as ImageMagick's -spread does: each pixel takes the value of a random pixel at most radius away (a whole-pixel offset in the disc; edges repeat the edge pixel).
threshold Makes a two-color image: pixels above level take above, the others below, with alpha kept.
tile Makes a new width × height canvas filled by repeating the image, or the source rectangle of it, with one copy's top-left corner at origin, as Skia's Tile filter and ImageMagick's tile: fill do.
tint Pushes midtones toward color and keeps black and white, as ImageMagick's -tint.
tone-map Maps HDR linear light into 0..1: pixel values are read as linear light with reference white at 1.0 (as RgbaF32, RgbaF16 and RgbF32 rasters hold PQ and HLG images converted to a linear encoding), and the tone curve brings the brightest down to 1 on max(R, G, B), which keeps hue.
trim Removes the border: the rows and columns at the edges whose pixels all lie within tolerance of the border color, by ImageMagick's -fuzz distance, so the rectangle equals ImageMagick's -trim.
vignette Darkens (or tints) the image toward its corners, outside an ellipse fitted to the image, with a soft edge: the shape of ImageMagick's -vignette, which blurs a drawn ellipse.
white-balance Applies WhiteBalance: corrects for a light of temperature kelvin.
zoom-blur Streaks the image along rays from center, as a zoom during the exposure (Photoshop's radial zoom blur): each pixel averages samples on the ray through it, spanning amount of its distance from the center, half inward and half outward, about one per pixel (at most 256).
save Writes the image: save [--format f] [--quality q] [--lossless] [--effort e] [--bit-depth b] [--strip] [--set fmt.key=value].

adaptive-threshold

adaptive-threshold: Thresholds each pixel against the mean of the window around it (Bradley and Roth, 2007): a pixel is dark when its luminance is more than limit below its window's mean, so uneven lighting on a scanned page does not swallow text.

  adaptive-threshold [--limit <number>] [--window <int>] [--below <color>] [--above <color>]
    --limit <number>, default 0.15
        How far below the local mean a pixel must be to count as dark, from 0 to 1.
    --window <int>
        The window's side in pixels, at least 1, or null (the default) for an eighth of the width.
    --below <color>
        The dark color, or null for black.
    --above <color>
        The light color, or null for white.

add-noise

add-noise: Adds noise to red, green and blue (or a CMYK raster's inks), as ImageMagick's +noise with -attenuate does: film grain, sensor noise, or salt and pepper for testing filters.

  add-noise <kind> [--amount <number>] [--monochrome <bool>] [--seed <integer>]
    --kind <gaussian|uniform|impulse|laplacian|multiplicative|poisson>, required
        The kind of noise.
    --amount <number>, default 1
        The strength, as ImageMagick's -attenuate, from 0 (changes nothing) to 10; 1 gives ImageMagick's default.
    --monochrome <bool>, default false
        Whether red, green and blue get the same noise, so it has no color.
    --seed <integer>, default 0
        The seed: change it for different noise.

alpha-to-gray

alpha-to-gray: Makes the image a gray picture of its alpha: red, green and blue become the alpha value and alpha becomes opaque, as ImageMagick's -alpha extract does.

  alpha-to-gray no arguments

arithmetic

arithmetic: Applies op with value to every value of channels, on values scaled 0 to 1 and clamped back to 0..1, as ImageMagick's -evaluate defines each operator.

  arithmetic <op> <value> [--channels <choice>]
    --op <add|subtract|multiply|divide|pow|log|min|max|set>, required
        The operator.
    --value <number>, required
        The constant, on the same 0 to 1 scale for Add, Subtract, Min, Max and Set.
    --channels <none|red|green|blue|alpha|color|all>, default color
        The channels to change.

auto-gamma

auto-gamma: Applies the Gamma that moves the image's mean to 0.5, as ImageMagick's -auto-gamma; an image whose mean is 0 or 1 is left alone.

  auto-gamma [--linked <bool>] [--per-frame <bool>]
    --linked <bool>, default true
        Whether the channels share one gamma from their joint mean (the default) or each gets its own.
    --per-frame <bool>, default false
        Whether each frame is measured alone.

auto-level

auto-level: Stretches the darkest value to 0 and the lightest to 1, as ImageMagick's -auto-level.

  auto-level [--linked <bool>] [--per-frame <bool>]
    --linked <bool>, default true
        Whether red, green and blue share one black and one white point (the default, which keeps colors), or each gets its own, which also removes a cast.
    --per-frame <bool>, default false
        Whether each frame is measured alone, as ImageMagick does, instead of all frames together so an animation does not flicker.

auto-orient

auto-orient: Turns the image the way its EXIF orientation says, so it looks as the camera meant, and sets the orientation to Normal.

  auto-orient no arguments

auto-threshold

auto-threshold: Thresholds at the level method finds in the histogram, as ImageMagick's -auto-threshold; see FindThreshold.

  auto-threshold [--method <choice>] [--mode <choice>] [--below <color>] [--above <color>] [--per-frame <bool>]
    --method <otsu|triangle|kapur>, default otsu
        How the level is found.
    --mode <luminance|channels|saturation|max-chroma>, default luminance
        What is measured.
    --below <color>
        The lower color, or null for black.
    --above <color>
        The upper color, or null for white.
    --per-frame <bool>, default false
        Whether each frame is measured alone.

auto-white-balance

auto-white-balance: Removes a color cast it measures, by method.

  auto-white-balance [--method <choice>] [--per-frame <bool>]
    --method <gray-world|white-patch>, default gray-world
        How the cast is found.
    --per-frame <bool>, default false
        Whether each frame is measured alone.

bilateral-blur

bilateral-blur: Smooths while keeping edges (Tomasi and Manduchi's bilateral filter): each neighbour counts by its distance, through a Gaussian of spatialSigma, and by how much its color differs, through a Gaussian of rangeSigma, so noise flattens and edges stay.

  bilateral-blur <spatial-sigma> <range-sigma> [--radius <int>]
    --spatial-sigma <number>, required
        The reach in pixels, above 0 and at most 50.
    --range-sigma <number>, required
        How different a color may be and still count, above 0, on the 0..1 scale: 0.1 keeps most edges.
    --radius <int>
        The window's radius, or null for ⌈2 · spatialSigma⌉ as ImageMagick's width; at most 100.

blend-color

blend-color: Blends one color over every pixel by mode: Multiply tints, Screen washes out, Color colorizes.

  blend-color <color> <mode> [--opacity <number>] [--color-space <choice>]
    --color <color>, required
        The color, with straight alpha.
    --mode <source-over|clear|source|destination|destination-over|source-in|destination-in|source-out|destination-out|source-atop|destination-atop|xor|plus|modulate|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|add|subtract|hue|saturation|color|luminosity|divide|linear-burn|linear-light|vivid-light|pin-light|hard-mix|darker-color|lighter-color|dissolve>, required
        How the color combines with each pixel.
    --opacity <number>, default 1
        Multiplies the color's alpha before the mode: 1 uses it as it is.
    --color-space <encoded|linear>, default encoded
        Where pixels are blended.

bloom

bloom: Makes bright areas glow, as a camera's bloom: the parts of each channel above threshold, stretched to 0..1 and scaled by intensity, blurred in linear light with Fast and screened onto the image in linear light.

  bloom [--threshold <number>] [--sigma <number>] [--intensity <number>]
    --threshold <number>, default 0.8
        The stored value above which a channel blooms, from 0 to under 1.
    --sigma <number>, default 10
        The bloom's blur in pixels, from 0 to 1000.
    --intensity <number>, default 1
        How strongly the bloom is added, from 0 (nothing) to 100; values are clamped to 1 before the blur.

blur

blur: Blurs with a Gaussian of standard deviation sigma pixels, computed by method.

  blur <sigma> <color-space> <method>
    --sigma <number>, required
        The standard deviation in pixels; 0 changes nothing.
    --color-space <encoded|linear>, required
        Where pixels are blended.
    --method <exact|fast>, required
        How the blur is computed.

  blur <sigma> [--color-space <choice>]
    --sigma <number>, required
        The standard deviation in pixels; 0 changes nothing.
    --color-space <encoded|linear>, default encoded
        Where pixels are blended.

box-blur

box-blur: Replaces each pixel with the mean of the (2r + 1) square around it.

  box-blur <radius>
    --radius <int>, required
        The radius in pixels; 0 changes nothing.

brightness

brightness: Multiplies red, green and blue by amount: 1 changes nothing, 0 gives black.

  brightness <amount>
    --amount <number>, required
        The factor, 0 or more.

canny-edges

canny-edges: Finds thin edges with Canny's detector, as ImageMagick's -canny 0x{sigma}+{low × 100}%+{high × 100}% does: the luma is smoothed by a Gaussian, Canny's first differences give the gradient, pixels that are not the strongest across their edge are dropped, and hysteresis keeps pixels whose magnitude reaches high times the largest, plus those 8-connected to them that reach low times it.

  canny-edges [--sigma <number>] [--low <number>] [--high <number>]
    --sigma <number>, default 1
        The Gaussian's standard deviation in pixels, 0 (no smoothing) to 100.
    --low <number>, default 0.1
        The low threshold, as a fraction 0 to 1 of the largest gradient; at most high.
    --high <number>, default 0.3
        The high threshold, as a fraction 0 to 1 of the largest gradient.

change-speed

change-speed: Plays the animation factor times as fast: every delay is divided by it, rounded to whole milliseconds.

  change-speed <factor>
    --factor <number>, required
        The speed-up, more than 0: 2 plays twice as fast, 0.5 at half speed.

chroma-key

chroma-key: Makes pixels whose chroma lies within similarity of color's transparent, keeping their color: a chroma key for green and blue screens.

  chroma-key <color> [--similarity <number>] [--blend <number>]
    --color <color>, required
        The screen color, such as #00b140 for a green screen; its alpha is ignored.
    --similarity <number>, default 0.1
        The chroma distance that becomes fully transparent, from 0 (the key's exact chroma) to 1 (every color), as a share of the largest distance in RGB, the one between green and magenta.
    --blend <number>, default 0.05
        The band of distance beyond similarity over which alpha returns to full; 0 for a hard edge.

clahe

clahe: Contrast-limited adaptive histogram equalization (Zuiderveld, 1994) on L*, as ImageMagick's -clahe: each of tilesX × tilesY tiles gets its own clipped, equalized curve, blended smoothly between tile centers, so local detail comes up without the noise of plain equalization.

  clahe [--tiles-x <int>] [--tiles-y <int>] [--clip-limit <number>] [--bins <int>]
    --tiles-x <int>, default 8
        Tiles across, from 1 to 256.
    --tiles-y <int>, default 8
        Tiles down, from 1 to 256.
    --clip-limit <number>, default 2
        How far a tile's histogram may rise, as a multiple of its mean bin (2 is mild, 4 strong); 0 does not clip.
    --bins <int>, default 256
        The histogram bins, from 2 to 4,096.

colorize

colorize: Blends red, green and blue toward color, as ImageMagick's -colorize.

  colorize <color> <amount>
    --color <color>, required
        The color.
    --amount <number>, required
        The blend, from 0 to 1.

contrast

contrast: Scales red, green and blue around mid-gray: 1 changes nothing, 0 gives flat gray.

  contrast <amount>
    --amount <number>, required
        The factor, 0 or more.

contrast-stretch

contrast-stretch: Clips the darkest black and lightest white fractions of the pixels, then stretches the rest to 0..1, as ImageMagick's -contrast-stretch.

  contrast-stretch <black> <white> [--linked <bool>] [--per-frame <bool>]
    --black <number>, required
        The fraction of pixels that becomes black, from 0 to 1.
    --white <number>, required
        The fraction that becomes white, from 0 to 1; with black less than 1.
    --linked <bool>, default true
        Whether the channels share one pair of points (the default) or each gets its own.
    --per-frame <bool>, default false
        Whether each frame is measured alone.

convert-color

convert-color: Converts the pixels from the encoding the raster is in (GetColorProfile, or the target of an earlier ConvertColor in the chain) to target, in place, and records the new encoding in the metadata: no profile for sRGB, the target's ICC profile otherwise.

  convert-color <target>
    --target <profile>, required
        The encoding to convert to.

cover

cover: Scales the image to cover width × height with its aspect ratio kept, keeping the part at anchor.

  cover <width> <height> [--anchor <choice>] [--filter <choice>] [--color-space <choice>]
    --width <int>, required
        The output width, at least 1.
    --height <int>, required
        The output height, at least 1.
    --anchor <center|top-left|top|top-right|left|right|bottom-left|bottom|bottom-right>, default center
        Which part of the image to keep.
    --filter <bicubic|nearest|box|bilinear|mitchell|lanczos3|lanczos2|hermite|gaussian|spline|gdi-plus-bilinear|gdi-plus-bicubic|gdi-plus-high-quality-bilinear|gdi-plus-high-quality-bicubic>, default bicubic
        The resampling kernel.
    --color-space <encoded|linear>, default encoded
        Where pixels are blended.

crop

crop: Keeps one rectangle of the image.

  crop <x> <y> <width> <height>
    --x <int>, required
        The left edge of the rectangle.
    --y <int>, required
        The top edge of the rectangle.
    --width <int>, required
        The width of the rectangle, at least 1.
    --height <int>, required
        The height of the rectangle, at least 1.

  crop <rect>
    --rect <x,y,w,h>, required
        The rectangle to keep.

deskew

deskew: Straightens a scanned or photographed page: detects the tilt of its text lines (see DetectSkew) and turns the image back by it.

  deskew [--max-angle <number>] [--background <color>] [--keep-size <bool>] [--filter <choice>]
    --max-angle <number>, default 15
        The largest tilt looked for, in degrees, more than 0 and at most 45.
    --background <color>
        The color of the uncovered corners, or null (the default) for the top-left pixel's, the border color Trim would use.
    --keep-size <bool>, default true
        Whether the page keeps its size (the default, as a scanner user expects), or the canvas grows to the turned bounds as Rotate does.
    --filter <bicubic|nearest|box|bilinear|mitchell|lanczos3|lanczos2|hermite|gaussian|spline|gdi-plus-bilinear|gdi-plus-bicubic|gdi-plus-high-quality-bilinear|gdi-plus-high-quality-bicubic>, default bicubic
        The resampling kernel for the turn.

despeckle

despeckle: Removes specks while keeping edges, by Crimmins' complementary hulling exactly as ImageMagick's -despeckle runs it: each color channel is nudged, a level at a time, toward neighbours that differ by two levels or more, in 16 passes along four directions.

  despeckle no arguments

despill

despill: Removes the colored cast a green or blue screen leaves on edges, hair and see-through pixels: the screen's channel is held down to a limit taken from the other two channels.

  despill [--screen <choice>] [--mix <number>] [--expand <number>]
    --screen <green|blue>, default green
        The screen color whose spill is removed.
    --mix <number>, default 0.5
        How the limit is taken from the other two channels, from 0 (their average, the strongest removal) to 1 (the larger of the two, the gentlest, which leaves neutral colors alone).
    --expand <number>, default 0
        How much further the limit is lowered, from 0 to 1, for heavy spill; this darkens the screen's channel more.

dilate

dilate: The maximum over the (2rx + 1) × (2ry + 1) rectangle around each pixel, as Skia's dilate filter with those radii.

  dilate <radius-x> <radius-y>
    --radius-x <int>, required
        The horizontal radius in pixels, 0 to 1000.
    --radius-y <int>, required
        The vertical radius in pixels, 0 to 1000.

  dilate <radius>
    --radius <int>, required
        The radius in pixels, 0 (changes nothing) to 1000.

displace

displace: Moves each pixel by a displacement map, as Skia's DisplacementMap and ImageMagick's -displace do: pixel (x, y) shows the source at (x + scaleX × (mx − 0.5), y + scaleY × (my − 0.5)), with mx and my the map's chosen channels from 0 to 1, so mid-gray moves nothing.

  displace <map> <scale-x> <scale-y> [--x-channel <choice>] [--y-channel <choice>]
    --map <image>, required
        The displacement map, the image's size (Resize it first if it is not).
    --scale-x <number>, required
        The horizontal move, in pixels, for a channel going from 0 to 1.
    --scale-y <number>, required
        The vertical move, in pixels, for a channel going from 0 to 1.
    --x-channel <red|green|blue|alpha|luminance>, default red
        The map channel that moves pixels horizontally.
    --y-channel <red|green|blue|alpha|luminance>, default green
        The map channel that moves pixels vertically.

draw-animation

draw-animation: Draws an animation (or a still) onto this one at position.

  draw-animation <overlay> <position>
    --overlay <image>, required
        The animation or still to draw.
    --position <x,y>, required
        Where its top-left corner goes; it may lie partly or wholly outside.

draw-arithmetic

draw-arithmetic: Draws image with the arithmetic composite (SVG's feComposite arithmetic operator, Skia's arithmetic blender): each channel of the premultiplied result is k1·S·D + k2·S + k3·D + k4, with S the image and D this raster, in 0..1.

  draw-arithmetic <image> <position> <k1> <k2> <k3> <k4> [--clamp <bool>]
    --image <image>, required
        The image to draw.
    --position <x,y>, required
        Where its top-left corner goes; may be negative.
    --k1 <number>, required
        The weight of the product S·D.
    --k2 <number>, required
        The weight of S.
    --k3 <number>, required
        The weight of D.
    --k4 <number>, required
        The constant added.
    --clamp <bool>, default true
        Whether each result is kept a valid premultiplied pixel: every channel in 0..1 and color no higher than alpha.

draw-image

draw-image: Draws the part of image inside sourceArea onto this raster with that part's top-left corner at position, combining pixels by mode as DrawImage does for the whole image.

  draw-image <image> <source-area> <position> <mode> [--opacity <number>] [--color-space <choice>]
    --image <image>, required
        The image to draw from.
    --source-area <x,y,w,h>, required
        The part of the image to draw, clipped to the image.
    --position <x,y>, required
        Where the area's top-left corner goes; may be negative.
    --mode <source-over|clear|source|destination|destination-over|source-in|destination-in|source-out|destination-out|source-atop|destination-atop|xor|plus|modulate|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|add|subtract|hue|saturation|color|luminosity|divide|linear-burn|linear-light|vivid-light|pin-light|hard-mix|darker-color|lighter-color|dissolve>, required
        How each pixel combines with the one under it.
    --opacity <number>, default 1
        Multiplies the image's alpha before the mode: 1 draws it as it is.
    --color-space <encoded|linear>, default encoded
        Where pixels are blended.

  draw-image <image> <position> <mode> [--opacity <number>] [--color-space <choice>]
    --image <image>, required
        The image to draw, of any pixel type.
    --position <x,y>, required
        Where its top-left corner goes; may be negative.
    --mode <source-over|clear|source|destination|destination-over|source-in|destination-in|source-out|destination-out|source-atop|destination-atop|xor|plus|modulate|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|add|subtract|hue|saturation|color|luminosity|divide|linear-burn|linear-light|vivid-light|pin-light|hard-mix|darker-color|lighter-color|dissolve>, required
        How each pixel combines with the one under it.
    --opacity <number>, default 1
        Multiplies the image's alpha before the mode: 1 draws it as it is.
    --color-space <encoded|linear>, default encoded
        Where pixels are blended.

  draw-image <image> <source-area> <position> [--opacity <number>]
    --image <image>, required
        The image to draw from.
    --source-area <x,y,w,h>, required
        The part of the image to draw, clipped to the image.
    --position <x,y>, required
        Where the area's top-left corner goes; may be negative.
    --opacity <number>, default 1
        Multiplies the image's alpha: 1 draws it as it is, 0 draws nothing.

  draw-image <image> <position> [--opacity <number>]
    --image <image>, required
        The image to draw.
    --position <x,y>, required
        Where its top-left corner goes; may be negative.
    --opacity <number>, default 1
        Multiplies the image's alpha: 1 draws it as it is, 0 draws nothing.

drop-shadow

drop-shadow: Adds a drop shadow, as Skia's DropShadow image filter: the image's alpha, moved by (dx, dy), blurred by a Gaussian of sigma and filled with color, with the image drawn over it source-over.

  drop-shadow <dx> <dy> <sigma> <color>
    --dx <number>, required
        How far the shadow moves right, in pixels (negative moves it left), at most 10000 either way.
    --dy <number>, required
        How far the shadow moves down, in pixels, at most 10000 either way.
    --sigma <number>, required
        The shadow's blur in pixels, from 0 (a hard shadow) to 1000.
    --color <color>, required
        The shadow's color, with its alpha as the shadow's opacity.

drop-zero-delay

drop-zero-delay: Removes frames with no delay, which no viewer shows, as ImageMagick's -layers RemoveZero; when every frame has none, nothing is removed.

  drop-zero-delay no arguments

duotone

duotone: Maps luminance onto the line from shadows to highlights.

  duotone <shadows> <highlights> [--weights <choice>]
    --shadows <color>, required
        The color for black.
    --highlights <color>, required
        The color for white.
    --weights <rec709|rec601>, default rec709
        The luma weights.

edges

edges: Replaces each pixel with the strength of the edge through it: the gradient magnitude of op's kernels, scaled so a full black-to-white step gives 1, clamped to 0 to 1.

  edges [--op <choice>] [--grayscale <bool>]
    --op <sobel|scharr|prewitt|roberts-cross|kirsch|robinson|laplacian3x3|laplacian5x5|laplacian-of-gaussian>, default sobel
        The kernels; Sobel by default.
    --grayscale <bool>, default true
        Whether to find edges in the luma (gray result) rather than per channel.

emboss

emboss: Embosses: blurs with a Gaussian of sigma, takes the slope toward the light at angle with a 3 × 3 Sobel stencil, scales it by depth and adds mid gray, so flat areas become 0.5 and slopes facing the light are lighter.

  emboss [--angle <number>] [--depth <number>] [--sigma <number>] [--grayscale <bool>]
    --angle <number>, default 135
        Where the light comes from, in degrees counterclockwise from the right with y up, as -shade's azimuth; 135 is the top left.
    --depth <number>, default 1
        The strength of the relief, from 0 (flat gray) to 100; 1 maps a slope of one level per pixel to one level.
    --sigma <number>, default 1
        The blur before the slope is taken, in pixels, from 0 (none) to 100.
    --grayscale <bool>, default true
        Whether the height is the Rec.

entropy-crop

entropy-crop: Crops to the busiest part of the image: the bounding box of the 16 × 16 tiles whose luminance entropy (the Shannon entropy of the tile's 256-level histogram, over 8 bits) reaches threshold.

  entropy-crop [--threshold <number>]
    --threshold <number>, default 0.5
        The entropy a tile needs, from 0 (every tile) to 1 (only uniformly random noise).

equalize

equalize: Spreads the values evenly by histogram equalization: of L* by default, keeping a* and b* so colors hold, or of each channel as ImageMagick's -equalize.

  equalize [--mode <choice>] [--per-frame <bool>]
    --mode <luminance|channels>, default luminance
        What is equalized.
    --per-frame <bool>, default false
        Whether each frame is measured alone.

erode

erode: The minimum over the (2rx + 1) × (2ry + 1) rectangle around each pixel, as Skia's erode filter with those radii.

  erode <radius-x> <radius-y>
    --radius-x <int>, required
        The horizontal radius in pixels, 0 to 1000.
    --radius-y <int>, required
        The vertical radius in pixels, 0 to 1000.

  erode <radius>
    --radius <int>, required
        The radius in pixels, 0 (changes nothing) to 1000.

fill-color

fill-color: Sets every pixel in rect, or the whole image, to one color.

  fill-color <color> [--rect <x,y,w,h>]
    --color <color>, required
        The color.
    --rect <x,y,w,h>
        The area to fill, which must lie inside the image, or null for the whole image.

fit

fit: Scales the image to fit inside width × height with its aspect ratio kept, so one side matches the box and the other is no larger.

  fit <width> <height> [--filter <choice>] [--color-space <choice>] [--enlarge <bool>]
    --width <int>, required
        The width of the box, at least 1.
    --height <int>, required
        The height of the box, at least 1.
    --filter <bicubic|nearest|box|bilinear|mitchell|lanczos3|lanczos2|hermite|gaussian|spline|gdi-plus-bilinear|gdi-plus-bicubic|gdi-plus-high-quality-bilinear|gdi-plus-high-quality-bicubic>, default bicubic
        The resampling kernel.
    --color-space <encoded|linear>, default encoded
        Where pixels are blended.
    --enlarge <bool>, default true
        Whether an image smaller than the box is enlarged.

flatten

flatten: Composites the image over background and makes it opaque, as ImageMagick's -alpha remove does.

  flatten <background> [--color-space <choice>]
    --background <color>, required
        The color to show through transparent pixels.
    --color-space <encoded|linear>, default encoded
        Where pixels are blended.

flip

flip: Mirrors the image: horizontal (left to right), vertical (top to bottom) or both.

  flip <direction>
    --direction <horizontal|vertical|both>, required
        Which way to mirror: horizontal (left to right), vertical (top to bottom) or both.

flip-horizontal

flip-horizontal: Mirrors the image left to right.

  flip-horizontal no arguments

flip-vertical

flip-vertical: Mirrors the image top to bottom.

  flip-vertical no arguments

flood-fill

flood-fill: Fills the region connected to seed whose colors lie within tolerance of the seed's own with fill, as ImageMagick's -fuzz with -floodfill does.

  flood-fill <seed> <fill> [--tolerance <number>] [--connectivity <choice>]
    --seed <x,y>, required
        Where the fill starts.
    --fill <color>, required
        The color to fill with.
    --tolerance <number>, default 0
        The color distance, from 0 (the seed's exact color) to 1 (every color).
    --connectivity <four|eight>, default four
        Whether the fill spreads to the four side neighbours (the default) or also the diagonal ones.

gamma

gamma: Raises red, green and blue to 1/gamma, as ImageMagick's -gamma: 2.2 brightens.

  gamma <gamma>
    --gamma <number>, required
        The gamma, above 0.

glow

glow: Adds a glow around the image's alpha shape, as an editor's outer glow layer style: the alpha, blurred with Fast, spread, and filled with color, drawn behind the image.

  glow <sigma> <color> [--spread <number>] [--inner <bool>]
    --sigma <number>, required
        The glow's blur in pixels, from 0 to 1000.
    --color <color>, required
        The glow's color, with its alpha as the glow's opacity.
    --spread <number>, default 0
        How much the glow is hardened before it fades, from 0 (a plain blur) to just under 1 (a hard edge): the blurred alpha is divided by 1 − spread.
    --inner <bool>, default false
        Whether the glow is inside the shape instead of around it.

grayscale

grayscale: Converts toward gray.

  grayscale [--mode <choice>] [--amount <number>] [--color-space <choice>]
    --mode <rec709|rec601>, default rec709
        The luma weights.
    --amount <number>, default 1
        0 changes nothing, 1 gives full gray.
    --color-space <encoded|linear>, default encoded
        Where the luma is taken.

high-contrast

high-contrast: Skia's high-contrast accessibility filter.

  high-contrast [--grayscale <bool>] [--invert <choice>] [--contrast <number>]
    --grayscale <bool>, default false
        Whether colors become gray first.
    --invert <none|brightness|lightness>, default none
        How to invert.
    --contrast <number>, default 0
        The contrast, from −1 to 1.

hue-rotate

hue-rotate: Rotates hue around the luma axis.

  hue-rotate <degrees>
    --degrees <number>, required
        The angle; 0 changes nothing.

inner-shadow

inner-shadow: Adds a shadow inside the image's alpha shape, as an editor's inner shadow layer style: everything outside the shape, moved by (dx, dy) rounded to whole pixels, blurred with Fast and filled with color, drawn on the image inside the shape only.

  inner-shadow <dx> <dy> <sigma> <color>
    --dx <number>, required
        How far the shadow moves right, in pixels (negative moves it left), at most 10000 either way.
    --dy <number>, required
        How far the shadow moves down, in pixels, at most 10000 either way.
    --sigma <number>, required
        The shadow's blur in pixels, from 0 (a hard shadow) to 1000.
    --color <color>, required
        The shadow's color, with its alpha as the shadow's opacity.

invert

invert: Replaces red, green and blue with 1 − value, blended by amount.

  invert [--amount <number>]
    --amount <number>, default 1
        0 changes nothing, 1 inverts fully.

kuwahara

kuwahara: Smooths while keeping edges, with the Kuwahara filter as ImageMagick's -kuwahara defines it: of the four (r + 1) squares that have the pixel as a corner, the one whose luma varies least gives the pixel its value, sampled at that square's middle.

  kuwahara [--radius <int>] [--sigma <number>]
    --radius <int>, default 3
        The radius in pixels, from 1 to 100.
    --sigma <number>, default 0
        The blur before, in pixels, from 0 (none) to 100.

lens-blur

lens-blur: Blurs as an out-of-focus lens does: each point spreads into the aperture's shape, a disc or a polygon of 5 to 12 blades, so small lights become discs, unlike a Gaussian's soft spots.

  lens-blur <radius>
    --radius <number>, required
        The aperture's radius in pixels, from 0 (changes nothing) to 128.

level

level: Stretches black..white to outputBlack..outputWhite with a midtone gamma, as ImageMagick's -level and +level.

  level [--black <number>] [--white <number>] [--gamma <number>] [--output-black <number>] [--output-white <number>]
    --black <number>, default 0
        The input that becomes outputBlack, from 0 to 1.
    --white <number>, default 1
        The input that becomes outputWhite, from 0 to 1.
    --gamma <number>, default 1
        The midtone gamma, above 0: above 1 brightens.
    --output-black <number>, default 0
        The output for black, from 0 to 1.
    --output-white <number>, default 1
        The output for white, from 0 to 1.

local-contrast

local-contrast: Brings out local detail, as ImageMagick's -local-contrast: L* is pushed away from a wide blur of itself by strength, so large-scale light changes less than detail.

  local-contrast [--radius <number>] [--strength <number>]
    --radius <number>, default 0.1
        The blur radius as a fraction of 20% of the longer side, above 0 and at most 1; the default 0.1 blurs over 2%.
    --strength <number>, default 0.125
        How strongly detail is raised, 0 or more; the default 0.125 is ImageMagick's 12.5%.

luminance-to-alpha

luminance-to-alpha: Sets alpha to the luminance of the stored values, 0.212656 R + 0.715158 G + 0.072186 B (the Rec.

  luminance-to-alpha no arguments

make-transparent

make-transparent: Makes pixels within tolerance of color transparent, keeping their color, by ImageMagick's -fuzz distance, so with no softness the result equals ImageMagick's -fuzz with -transparent.

  make-transparent <color> [--tolerance <number>] [--softness <number>]
    --color <color>, required
        The color to remove, with its alpha (opaque for most keys).
    --tolerance <number>, default 0
        The color distance that becomes fully transparent, from 0 (the exact color) to 1 (every color).
    --softness <number>, default 0
        The band of distance beyond the tolerance over which alpha returns to full; 0 for a hard edge.

median

median: Replaces each channel with its median over the (2r + 1) square around the pixel, as ImageMagick's -statistic Median does: removes salt-and-pepper noise while keeping edges.

  median <radius> [--include-alpha <bool>]
    --radius <int>, required
        The radius in pixels, from 0 (changes nothing) to 100.
    --include-alpha <bool>, default false
        Whether alpha gets its own median too; by default it is kept.

merge-duplicates

merge-duplicates: Removes each frame equal to the one before it and adds its delay to the frame that stays, as ImageMagick's -layers RemoveDups: a screen recording that sat still for seconds becomes one long frame.

  merge-duplicates [--tolerance <number>]
    --tolerance <number>, default 0
        How far a pixel may differ and still count as equal, by ImageMagick's -fuzz distance, from 0 (the default, exact) to 1.

motion-blur

motion-blur: Streaks the image along a direction, as a camera moving during the exposure, with ImageMagick's -motion-blur meaning: each pixel averages 2⌈radius⌉ + 1 samples one pixel apart, from itself toward angle, weighted by a Gaussian of sigma from the pixel.

  motion-blur <radius> <sigma> <angle> [--centered <bool>]
    --radius <number>, required
        Half the streak's length in pixels, from 0 (changes nothing) to 127.
    --sigma <number>, required
        How fast the weights fall along the streak, above 0.
    --angle <number>, required
        The direction in degrees, clockwise from the x axis (y points down).
    --centered <bool>, default false
        Whether the streak runs both ways from the pixel, instead of only toward angle.

normalize

normalize: ContrastStretch at ImageMagick's -normalize points: the darkest 2% of the pixels become black and the lightest 1% white.

  normalize [--linked <bool>] [--per-frame <bool>]
    --linked <bool>, default true
        Whether the channels share one pair of points (the default) or each gets its own.
    --per-frame <bool>, default false
        Whether each frame is measured alone.

offset

offset: Moves the image by whole pixels, right by dx and down by dy, with no resampling.

  offset <dx> <dy> [--edges <choice>] [--background <color>]
    --dx <int>, required
        The horizontal move, in pixels.
    --dy <int>, required
        The vertical move, in pixels.
    --edges <clamp|mirror|wrap|transparent>, default wrap
        What fills the uncovered strips.
    --background <color>
        The color of uncovered strips under Transparent.

oil-paint

oil-paint: Makes the image look painted, as ImageMagick's -paint does: around each pixel, in the (2r + 1) square, pixels are sorted into levels bins by intensity, and the pixel becomes a pixel of the most common bin, unchanged.

  oil-paint [--radius <int>] [--levels <int>]
    --radius <int>, default 3
        The brush radius in pixels, from 1 to 50.
    --levels <int>, default 20
        The number of intensity bins, from 2 to 256.

opacity

opacity: Multiplies alpha by amount.

  opacity <amount>
    --amount <number>, required
        0 makes the image transparent, 1 changes nothing.

pad

pad: Enlarges the canvas to width × height, placing the image at anchor and filling the new area with background.

  pad <width> <height> [--background <color>] [--anchor <choice>]
    --width <int>, required
        The new width, at least the image's width.
    --height <int>, required
        The new height, at least the image's height.
    --background <color>
        The color of the new area.
    --anchor <center|top-left|top|top-right|left|right|bottom-left|bottom|bottom-right>, default center
        Where the image sits on the new canvas.

pixelate

pixelate: Pixelates: the image is cut into square cells, and every pixel of a cell becomes the cell's average, taken on premultiplied values so transparent pixels do not darken it.

  pixelate <cell-size> [--origin <x,y>]
    --cell-size <int>, required
        The side of a cell in pixels, from 1 (changes nothing) to 4096.
    --origin <x,y>
        Where a cell's top-left corner falls, in the raster's coordinates; the grid repeats from there both ways.

posterize

posterize: Rounds red, green and blue to levels evenly spaced values each, as ImageMagick's -posterize, optionally dithered: ordered dithering adds a fixed 8 × 8 pattern before rounding, Floyd–Steinberg spreads each value's rounding error to its neighbours.

  posterize <levels> [--dither <choice>]
    --levels <int>, required
        Values per channel, from 2 to 256.
    --dither <floyd-steinberg|ordered|none|atkinson|burkes|jarvis-judice-ninke|sierra3|sierra2|sierra-lite|stevenson-arce|stucki|riemersma|bayer2x2|bayer4x4|bayer16x16|ordered3x3>, default none
        The dithering.

quad-distort

quad-distort: Moves the image's four corners to four points, bending it in perspective: ImageMagick's Perspective distort.

  quad-distort <top-left> <top-right> <bottom-right> <bottom-left>
    --top-left <x,y>, required
        Where the top-left corner goes.
    --top-right <x,y>, required
        Where the top-right corner goes.
    --bottom-right <x,y>, required
        Where the bottom-right corner goes.
    --bottom-left <x,y>, required
        Where the bottom-left corner goes.

quantize

quantize: Reduces each frame to at most MaxColors colors, as a palette format would, but keeps the pixel type: an Rgba16 image stays Rgba16 with at most that many distinct values.

  quantize no arguments

replace-color

replace-color: Replaces every pixel within tolerance of from with to, by ImageMagick's -fuzz distance, as ImageMagick's -fill with -opaque does.

  replace-color <from> <to> [--tolerance <number>]
    --from <color>, required
        The color to replace, with its alpha.
    --to <color>, required
        The color to put in its place.
    --tolerance <number>, default 0
        The color distance, from 0 (the exact color) to 1 (every color).

resize

resize: Resizes to a size in the size syntax (W, xH, WxH, P%, with !, ^, > or <) with a fit mode.

  resize <size> [--fit <choice>] [--gravity <choice>] [--filter <choice>] [--linear <bool>] [--background <color>]
    --size <size>, required
        The size: W, xH, WxH or P%, optionally followed by ! (ignore the aspect ratio), ^ (fill the box), > (only shrink) or < (only enlarge).
    --fit <contain|cover|fill|pad>, default contain
        How the image fills a WxH box: inside it (contain), filling and cropped (cover), stretched (fill) or inside and padded (pad).
    --gravity <center|top-left|top|top-right|left|right|bottom-left|bottom|bottom-right>, default center
        Which part stays for cover, and where the image sits for pad.
    --filter <bicubic|nearest|box|bilinear|mitchell|lanczos3|lanczos2|hermite|gaussian|spline|gdi-plus-bilinear|gdi-plus-bicubic|gdi-plus-high-quality-bilinear|gdi-plus-high-quality-bicubic>, default bicubic
        The resampling kernel; bicubic is Catmull-Rom.
    --linear <bool>, default false
        Blend pixels in linear light rather than as encoded.
    --background <color>, default transparent
        The color pad fills with.

retime

retime: Resamples the animation to framesPerSecond, as ffmpeg's fps filter: fixed ticks, each showing the frame visible when it starts, with neighbours that show the same frame merged.

  retime <frames-per-second>
    --frames-per-second <number>, required
        The rate, more than 0 and at most 1,000.

reverse

reverse: Plays the animation backwards; each frame keeps its delay and metadata.

  reverse no arguments

rotate

rotate: Rotates the image clockwise.

  rotate <degrees> [--filter <choice>] [--background <color>]
    --degrees <number>, required
        The angle, clockwise.
    --filter <bicubic|nearest|box|bilinear|mitchell|lanczos3|lanczos2|hermite|gaussian|spline|gdi-plus-bilinear|gdi-plus-bicubic|gdi-plus-high-quality-bilinear|gdi-plus-high-quality-bicubic>, default bicubic
        The resampling kernel for angles that are not multiples of 90°.
    --background <color>
        The color of the canvas outside the rotated image.

rotational-blur

rotational-blur: Spins the image around center, as ImageMagick's -rotational-blur: each pixel averages samples along an arc of degrees centered on it, about one per pixel of arc (at most 256), read bilinearly.

  rotational-blur <degrees> [--center <x,y>]
    --degrees <number>, required
        The arc in degrees, from 0 (changes nothing) to 360.
    --center <x,y>
        The center in pixels, pixel centers at +0.5, or null for the image's center.

saturation

saturation: Mixes each color with its luma: 1 changes nothing, 0 gives gray, above 1 oversaturates.

  saturation <amount>
    --amount <number>, required
        The factor, 0 or more.

sepia

sepia: Tints toward sepia.

  sepia [--amount <number>]
    --amount <number>, default 1
        0 changes nothing, 1 gives full sepia.

shade

shade: Shades the image as ImageMagick's -shade does: the luminance is a height field, and each pixel becomes the Lambertian shading of its surface normal by a distant light at azimuth and elevation, a gray relief; with colored the shading multiplies the image's own colors instead, as +shade does.

  shade [--azimuth <number>] [--elevation <number>] [--colored <bool>]
    --azimuth <number>, default 30
        The light's direction in the image plane, in degrees counterclockwise from the right with y up, as ImageMagick's.
    --elevation <number>, default 30
        The light's angle above the image plane, in degrees, from 0 to 90; flat areas get sin(elevation).
    --colored <bool>, default false
        Whether the shading multiplies the colors (+shade) rather than replacing them with gray (-shade).

sharpen

sharpen: Sharpens with an unsharp mask: out = src + amount × (src − Blur(sigma)).

  sharpen [--amount <number>] [--sigma <number>]
    --amount <number>, default 1
        How strongly to sharpen; 0 changes nothing.
    --sigma <number>, default 1
        The blur radius that sets which details are sharpened, in pixels.

shuffle-channels

shuffle-channels: Rearranges the working RGBA channels: each output channel takes the input channel, or the constant, its argument names.

  shuffle-channels <red> <green> <blue> <alpha>
    --red <red|green|blue|alpha|zero|one>, required
        Where the output's red comes from.
    --green <red|green|blue|alpha|zero|one>, required
        Where the output's green comes from.
    --blue <red|green|blue|alpha|zero|one>, required
        Where the output's blue comes from.
    --alpha <red|green|blue|alpha|zero|one>, required
        Where the output's alpha comes from.

sigmoidal-contrast

sigmoidal-contrast: Adds (or removes) contrast with ImageMagick's scaled logistic curve, which never clips.

  sigmoidal-contrast <contrast> [--midpoint <number>] [--increase <bool>]
    --contrast <number>, required
        How steep the curve is, 0 or more: 3 is gentle, 10 strong.
    --midpoint <number>, default 0.5
        Where the curve is steepest, from 0 to 1.
    --increase <bool>, default true
        Whether contrast increases (the default) or decreases.

simulate-color-blindness

simulate-color-blindness: Shows how the image looks with a color vision deficiency.

  simulate-color-blindness <kind> [--severity <number>]
    --kind <protanopia|deuteranopia|tritanopia|achromatopsia>, required
        The deficiency.
    --severity <number>, default 1
        From 0 (normal vision) to 1.

skew

skew: Shears the image about its center: vertical lines lean by degreesX (x moves by y × tan) and horizontal lines by degreesY.

  skew <degrees-x> <degrees-y>
    --degrees-x <number>, required
        The horizontal shear angle, strictly between −90 and 90.
    --degrees-y <number>, required
        The vertical shear angle, strictly between −90 and 90.

solarize

solarize: Inverts red, green and blue values above threshold, as ImageMagick's -solarize.

  solarize [--threshold <number>]
    --threshold <number>, default 0.5
        The level, from 0 to 1.

spread

spread: Scatters pixels, as ImageMagick's -spread does: each pixel takes the value of a random pixel at most radius away (a whole-pixel offset in the disc; edges repeat the edge pixel).

  spread <radius> [--seed <integer>]
    --radius <number>, required
        The farthest a value moves, in pixels, from 0 to 1000; below 1 nothing moves.
    --seed <integer>, default 0
        Picks the pattern; the same seed gives the same result.

threshold

threshold: Makes a two-color image: pixels above level take above, the others below, with alpha kept.

  threshold [--level <number>] [--mode <choice>] [--below <color>] [--above <color>]
    --level <number>, default 0.5
        The level, from 0 to 1.
    --mode <luminance|channels|saturation|max-chroma>, default luminance
        What is measured.
    --below <color>
        The lower color, or null for black.
    --above <color>
        The upper color, or null for white.

tile

tile: Makes a new width × height canvas filled by repeating the image, or the source rectangle of it, with one copy's top-left corner at origin, as Skia's Tile filter and ImageMagick's tile: fill do.

  tile <width> <height> [--origin <x,y>] [--source <x,y,w,h>]
    --width <int>, required
        The canvas width, at least 1.
    --height <int>, required
        The canvas height, at least 1.
    --origin <x,y>
        Where one copy's top-left corner goes; copies repeat from there in every direction.
    --source <x,y,w,h>
        The rectangle to repeat, inside the image, or null (the default) for the whole image.

tint

tint: Pushes midtones toward color and keeps black and white, as ImageMagick's -tint.

  tint <color> [--amount <number>]
    --color <color>, required
        The tint.
    --amount <number>, default 1
        The strength, from 0 to 1.

tone-map

tone-map: Maps HDR linear light into 0..1: pixel values are read as linear light with reference white at 1.0 (as RgbaF32, RgbaF16 and RgbF32 rasters hold PQ and HLG images converted to a linear encoding), and the tone curve brings the brightest down to 1 on max(R, G, B), which keeps hue.

  tone-map [--method <choice>] [--source-peak-nits <number>]
    --method <bt2390|reinhard|clip>, default bt2390
        The curve.
    --source-peak-nits <number>
        The brightest light in the image, in cd/m² (reference white is 203), or null to take it from the metadata's Hdr (MaxCLL, then the mastering peak), else 1,000.

trim

trim: Removes the border: the rows and columns at the edges whose pixels all lie within tolerance of the border color, by ImageMagick's -fuzz distance, so the rectangle equals ImageMagick's -trim.

  trim [--tolerance <number>] [--color <color>]
    --tolerance <number>, default 0
        The color distance still counted as border, from 0 (the exact color) to 1 (every color).
    --color <color>
        The border color, or null (the default) for the top-left pixel's.

vignette

vignette: Darkens (or tints) the image toward its corners, outside an ellipse fitted to the image, with a soft edge: the shape of ImageMagick's -vignette, which blurs a drawn ellipse.

  vignette [--radius <number>] [--softness <number>] [--color <color>] [--center <x,y>]
    --radius <number>, default 1
        The ellipse's size as a fraction of the half-diagonal: at 1 the ellipse passes through the corners, at 0.7 it is about as wide as the image.
    --softness <number>, default 0.5
        The share of the radius over which the edge fades, from 0 (hard) to 1: the fade is a Gaussian-blurred edge whose ±2σ spans softness × radius.
    --color <color>
        The color toward the corners, with its alpha as its strength; black and opaque when null.
    --center <x,y>
        The ellipse's center in the raster's pixel coordinates (0, 0 is the top-left corner of the image); the image's middle when null.

white-balance

white-balance: Applies WhiteBalance: corrects for a light of temperature kelvin.

  white-balance <temperature> [--tint <number>]
    --temperature <number>, required
        The light's correlated color temperature, from 1,500 to 15,000 kelvin; 6504 changes almost nothing.
    --tint <number>, default 0
        The light's offset from a black body's color, from −1 to 1; positive for a greener light.

  white-balance <neutral>
    --neutral <color>, required
        A color that should be gray, such as a gray card's pixels.

zoom-blur

zoom-blur: Streaks the image along rays from center, as a zoom during the exposure (Photoshop's radial zoom blur): each pixel averages samples on the ray through it, spanning amount of its distance from the center, half inward and half outward, about one per pixel (at most 256).

  zoom-blur <amount> [--center <x,y>]
    --amount <number>, required
        The streak's length as a fraction of the distance from the center, from 0 (changes nothing) to 1.
    --center <x,y>
        The center in pixels, pixel centers at +0.5, or null for the image's center.

save

save [path] [--format f] [--quality q] [--lossless] [--effort e] [--bit-depth b] [--strip] [--set fmt.key=value]

Writes the image as it is at that point. A plan may save more than once; a save without a path writes to -o.