Waterfall for Craft CMS

Configuration

Profiles

A profile is one watermark: what it is, how big, where it goes, how see-through, and which images get it. Profiles are stored in project config, so they deploy with the site like a section or a field.

Lite allows one profile. Pro allows any number, and applies every one that matches — so a corner logo and a tiled copyright line can sit on the same image.

The mark

An image. Any asset. A PNG with transparency is what you want; a JPEG works but brings its own white box with it. The asset is referenced by UID, so renaming or moving the file later does not break the profile.

Text (Pro). Rendered as an object template, which means it can carry the asset and the site with it:

© {{ now|date('Y') }} {{ siteName }} — {{ asset.title }}

asset is the image being watermarked, siteName is the current site. Anything else Craft exposes to an object template works too. A template that throws — a typo, a field this asset does not have — falls back to the literal text rather than aborting the upload that triggered it.

Four fonts are bundled: Lato, Lato Bold, IBM Plex Mono and EB Garamond, all under the SIL Open Font License. A profile can also point at an uploaded .ttf or .otf asset, which wins over the bundled choice — that is how you use a brand typeface. Craft's allowedFileExtensions does not include font files by default, so add ttf and otf to it before uploading one.

Size

ModeWhat the percentage means
Percentage of the image widthThe mark is that fraction of the base image's width
Percentage of the image height…of its height
Fit inside a percentage boxFits inside a box that fraction of both dimensions
Cover a percentage boxCovers it
Leave it at its own sizeNo scaling — the mark is used at its stored pixel size

Scaling is always relative to the image being marked, never to the mark's own size, which is what makes one profile work on a 4000px original and a 400px thumbnail. Text is re-rendered at the computed size rather than rasterised small and scaled up, so it stays crisp.

Position

Nine anchors, plus tiled (Pro) and exact offset. Offsets are in pixels or as a percentage of the image, and they push away from the anchor's own edge: a bottom-right mark with a 2% offset sits 2% in from the right and 2% up from the bottom.

Tiling repeats the mark across the whole image with a gap you set as a percentage of the image. Tiles that overhang the edge are cropped, not skipped, so the pattern reaches the corners.

Appearance

  • Opacity — 0–100.
  • Rotation (Pro) — degrees. Rotated marks are drawn once and repeated, so a tiled diagonal watermark is one rotation, not one per tile.
  • Blend mode (Pro, ImageMagick only) — multiply, screen, overlay, darken, lighten, difference, exclusion, hard light, soft light, colour dodge, colour burn. On a GD server the list shows only Normal rather than offering eleven modes that would all come out the same.

Which images get it

Every rule is an and. An asset has to pass all of them.

RuleBehaviour when left empty
ApplyNothing happens at all — pick at least one of the three modes
VolumesEvery volume
TransformsEvery transform, including ones built from inline parameters
File typesEvery type Craft can manipulate
Minimum width / heightNo minimum
Only these assets (Pro)No condition

Transforms is a list of named transform handles. A transform built from inline parameters in a template has no handle and can never be named here, so it is covered only by profiles that name no transforms at all.

Only these assets is Craft's own asset condition — the same builder as an asset field's source settings — so anything Craft can filter on, a profile can be limited to.

Waterfall refuses some images whatever the rules say, and tells you which and why: vector files, animated GIFs (unless you switch that off), images below the profile's minimum, and file types Craft cannot manipulate.

Per-asset control (Pro)

Add the Waterfall field to an asset field layout and each asset gets three choices: follow the profiles, never watermark this one, or use specific profiles. It is how you exempt a supplier's image or a press-kit logo without weakening a rule that covers thousands of files.

Plugin settings

Settings → Plugins → Waterfall.

SettingDefaultWhat it does
Watermark generated transformsonThe master switch for transforms mode
Watermark new uploadsonApplies permanent profiles as images arrive
Quality92Re-encoding quality for images Waterfall has marked
Keep originals inWaterfall's storage folderFilesystem for backups — see below
Store derivatives ineach volume's transform filesystemWhere on-demand derivatives are written
Derivative folder_waterfallPath prefix inside that filesystem
Skip animated GIFsonRe-encoding a GIF loses the animation
Queue above25Bulk runs larger than this go to the queue
Add watermarks to Imager-X transformsonNeeds Imager-X Pro; see Usage

Backups

permanent mode writes into the asset's own file, so the original is copied first. By default that copy goes to storage/waterfall/originals, which is outside the web root and is not part of the volume's own backups. On a single server that is fine. If your uploads live on S3 and your storage folder does not survive a deploy, point Keep originals in at a real filesystem instead.

The backup is taken once per asset, the first time it is marked. A second profile applied later does not overwrite it — otherwise the "original" would be the already-watermarked file, and restore would give you back a marked image.

Delivery services (Pro)

Credentials for imgix, Cloudinary, ImageKit and the URL template driver live on the same settings screen, and each can be an environment variable. None of them is needed to watermark on your own server. See Usage for what each service can and cannot do.