Skip to main content

Watermark

Use Imgwire watermark transformations to overlay an image, text label, or public URL-based watermark on a delivered image variant.

Overview

Watermarks are applied at delivery time. The original uploaded image stays unchanged, and the watermark settings become part of the transformed CDN URL. This is useful for previews, generated image galleries, creator attribution, internal review assets, and branded derivatives.

Syntax

ParameterAliasesValue syntax
watermarkwmimage_id[:gravity[:x[:y]]], or an object with image_id or imageId
watermark_positionwmp, watermark_offsetgravity[:x[:y[:opacity[:blend]]]], or an object
watermark_sizewmswidth[:height[:scale]], or an object
watermark_textwmtText string, or an object with text and optional placement fields
watermark_urlwmuBase64-encoded public HTTPS URL
watermark_rotatewmr, wm_rotangle, angle:background, or an object
watermark_shadowwmshtrue, color[:blur[:x[:y]]], or an object

Offsets are signed pixels. For example, southeast:-24:-24 places the watermark inside the bottom-right corner by 24 pixels on each axis.

Image watermark example

This example uses an Imgwire-hosted watermark image and places it in the lower-right corner.

https://cdn.imgwire.dev/{organization_id}/{environment_id}/{image_id}?watermark=2ba49760-8654-49f1-a98e-e922278c990e&watermark_size=120&watermark_position=southeast:-24:-24:0.85
image.url({
watermark: '2ba49760-8654-49f1-a98e-e922278c990e',
watermark_size: '120',
watermark_position: 'southeast:-24:-24:0.85',
format: 'auto',
quality: 'auto',
});
imgwire images url img_123 \
--watermark 2ba49760-8654-49f1-a98e-e922278c990e \
--watermark-size 120 \
--watermark-position southeast:-24:-24:0.85

Before and after

Demo image with an Imgwire icon watermark in the lower right
Original transformation demo image

More examples

Text watermarkRotated image watermarkImage watermark with shadow
Demo image with a text watermarkDemo image with a rotated image watermarkDemo image with a shadowed image watermark

URL watermark example

Use watermark_url when the watermark source is a public HTTPS asset outside Imgwire. The URL must be base64-encoded before you place it in the transformation URL.

const watermarkUrl = btoa('https://example.com/watermark.png');

image.url({
watermark_url: watermarkUrl,
watermark_position: 'southeast:-24:-24:0.8',
watermark_size: '120',
format: 'auto',
});

Best practices

  • Upload reusable watermark graphics to Imgwire and reference them by image ID.
  • Use opacity and padding offsets so the watermark is visible without dominating the image.
  • Use watermark_size so the overlay is predictable across different source dimensions.
  • Keep watermark placement consistent across related image surfaces.

Common mistakes

  • Using a watermark image from a different environment than the delivered image URL.
  • Forgetting to size the watermark, which can make large source watermark images dominate the output.
  • Passing raw public URLs to watermark_url instead of base64-encoding them.
  • Treating watermarks as access control. Public transformed URLs are still public delivery URLs.

Last updated at: May 9, 2026