WMark Documentation
A complete reference for WMark – Automatic Image Watermark: how it processes your images, what each setting does, what happens to your originals, and the limits you should know before using it on a live site.
1. How WMark works
WMark is a WordPress plugin that stamps a text, a logo, or both onto your images using PHP’s GD library. It edits the image files on your server, so the watermark becomes part of the file. It is not a CSS overlay, and visitors cannot remove it by disabling styles.
When an image is watermarked, WMark:
- copies the original file into
wp-content/uploads/alw-originals/, keeping the year/month folder structure. - draws the watermark onto the main file, onto the unscaled original if WordPress created a
-scaledversion, and onto every generated image size that is at least the minimum width. - scales the watermark to each file separately. A 20% logo is 20% of the width of the large size, the medium size, and so on.
- marks the image as watermarked, so it is never stamped twice.
WMark makes no external requests. It contains no code that contacts other servers or collects usage data.
2. Requirements and compatibility
| Item | Status |
|---|---|
| PHP version | 7.2 or newer, as declared in the plugin header |
| WordPress version | No minimum is declared. The developer tested it on a WordPress development build (7.2-alpha) with PHP 8.3. Older versions have not been tested. |
| PHP GD extension | Required. Without it, nothing is watermarked and the settings page shows an error. |
| GD FreeType support | Required for text watermarks only. A warning is shown if it is missing. |
| GD WebP support | Required to process WebP files |
| Multisite | Not tested |
| Image optimization, CDN and offload plugins | Not tested. WMark needs the image files to be on your server when it runs. |
| Admin interface language | Armenian. The strings are not translatable in this version. |
3. Settings reference
All settings are on Settings → Logo on images (Logo on images) and require administrator access. They are saved together when you click Save.
| Label | Meaning | Allowed values | Default |
|---|---|---|---|
| Watermark type | Watermark type | Logo only, Text only, Logo + text | Logo only |
| Text | Watermark text | Any single line of text | Empty, meaning your site’s domain is used |
| Text color | Text color | Any hex color | #ffffff |
| Text size | Letter height as a % of image width | 1–30 | 4 |
| Shadow | Shadow under text | On / off | On |
| Logo | Logo image from the Media Library | A JPEG, PNG or WebP image | None |
| Position | Position | 7 positions | Bottom right |
| Logo size | Logo width as a % of image width | 1–100 | 20 |
| Opacity | Opacity (100 = fully visible) | 1–100 | 80 |
| Distance from the edge | Edge distance as a % of the shorter side | 0–30 | 3 |
| Minimum width | Skip files narrower than this | 0 or more pixels | 300 |
| Automatic | Watermark new uploads | On / off | On |
Values outside the allowed ranges are adjusted to the nearest valid value when saved. An invalid color falls back to white.
4. Automatic watermarking
What it does
Adds the watermark to every new image as soon as WordPress has finished creating its thumbnails and other sizes.
How it works
WMark runs when WordPress generates an image’s attachment data. This covers the Media Library uploader, images uploaded inside the block editor, and code that uses WordPress’s standard media functions.
How to enable it
Check Automatic and save. It is on by default.
Example
A food blogger sets the type to Text only (Text only) with the text © myrecipes.blog. Every photo uploaded from then on carries the credit in the bottom-right corner, at every size used by the theme.
Limitations
- Only applies to images uploaded while the setting is on. Older images need bulk watermarking.
- Saving new settings does not update images that are already watermarked. See Removing a watermark for how to re-apply.
- Any Media Library image can be watermarked, including logos, icons and screenshots, as long as it meets the minimum width. Turn the setting off temporarily before uploading images that should stay clean.
5. Text watermarks
What it does
Writes a line of text, such as a copyright notice or your domain, onto the image.
How it works
The text is drawn with the bundled DejaVu Sans Bold font. Its size follows Text size: the value is roughly the height of a capital letter as a percentage of the image width, with a minimum of about 6 px. If the text would be wider than the space available, it shrinks to fit. The color comes from Text color. Transparency comes from Opacity. When Shadow is on, a black, slightly more transparent copy is drawn just below and to the right of the text.
How to configure it
- Set Watermark type to Text only.
- Enter the text in Text, or leave it empty to use your site’s domain.
- Choose the color and size, decide on the shadow, then save.
Example
Text © WBLOG.online, white, size 4, shadow on, position bottom right. On a 1600 px-wide photo the capital letters are about 64 px tall. On the 300 px medium size they are about 12 px tall.
Limitations
- One line only, in one font and one weight.
- The font covers Latin, Armenian, Cyrillic and Greek. Chinese, Japanese and Korean characters and emoji are not in the font. Right-to-left scripts such as Arabic and Hebrew are not shaped correctly by GD.
- Text watermarks need FreeType support in PHP GD.
6. Logo watermarks
What it does
Places your logo image on top of each photo.
How it works
The logo is resized so its width equals Logo size percent of the image width, keeping its proportions. If that would make it taller than 90% of the image height, it is scaled down to fit. Transparent areas of PNG and WebP logos stay transparent, and the opacity setting is applied on top of them.
How to configure it
- Set Watermark type to Logo only.
- Click Choose / upload logo, select an image and click Use this logo.
- Set Logo size and save.
Example
A transparent 600 × 200 px PNG logo at size 20 on a 1600 × 1000 px photo becomes 320 × 107 px.
Limitations
- The logo must be a JPEG, PNG or WebP image in your Media Library. GIF and SVG logos are not loaded.
- The selected logo is never watermarked itself. However, a logo uploaded while automatic watermarking is on can be stamped before you select it. Upload it with Automatic turned off.
- If the logo file is deleted from the Media Library, logo-only watermarking stops without a message.
- When opacity is below 100, it is applied to the logo pixel by pixel, so large logos take longer to process.
7. Logo + text
Selecting Logo + text stacks the text under the logo and positions both as one block. Both items are aligned left for the left positions, right for the right positions, and centered otherwise. In this mode the logo may use at most 60% of the image height, leaving room for the text.
If no logo is selected in this mode, only the text is drawn.
8. Position and edge distance
Position offers seven anchor points:
| Left | Center | Right |
|---|---|---|
| Top left · Top left | Top center · Top center | Top right · Top right |
| — | Center · Center | — |
| Bottom left · Bottom left | Bottom center · Bottom center | Bottom right · Bottom right |
Distance from the edge sets the gap between the watermark and the image edges, as a percentage of the image’s shorter side. At the default of 3, the gap on a 1600 × 1000 px image is 30 px. Middle-left and middle-right positions, tiling across the image, and custom pixel offsets are not available.
Tip: watermarks in a corner are easy to crop out. Center placement gives stronger protection but covers more of the photo.
9. Opacity
Opacity accepts whole numbers from 1 to 100. Despite the label, which translates as “transparency”, the number is opacity: 100 means fully visible and lower numbers are more see-through. One value controls the logo, the text and the text’s shadow together.
Example: at 50, a solid white logo lets about half of the photo show through it.
10. Minimum width
Minimum width skips any file narrower than the number of pixels you enter. The check is made for every generated size separately. With the default of 300, WordPress’s 150 × 150 thumbnails stay clean, while the medium size gets the watermark if it is at least 300 px wide. Portrait images often have a medium size narrower than 300 px. Set the value to 0 to watermark every size.
11. Bulk watermarking
What it does
Applies the current settings to images that are already in your Media Library.
How to use it
- Open Media → Library and switch to the list view. These actions do not appear in the grid view.
- Select the images, choose Add watermark from Bulk actions, and click Apply.
- A notice reports the number of images that were watermarked. Images that already have a WMark watermark, unsupported formats and images that could not be processed are not counted.
Limitations
- Everything runs in one request, with no progress bar and no background queue. WMark asks PHP for up to 300 seconds, but hosts can enforce lower limits. Use small batches.
- Any user who can upload files, such as Authors, sees these actions and can apply them to any image they can select.
12. Removing a watermark
The bulk action Remove watermark (restore original) (Remove watermark, restore the original) undoes watermarking for the selected images. For each one, WMark:
- deletes the watermarked size files and the scaled file.
- copies the saved original from
alw-originalsback into place. - asks WordPress to regenerate all sizes from the clean original, without re-watermarking.
- deletes the saved copy and clears the watermarked flag.
To change the watermark on existing images, remove it first, then run Add watermark again with the new settings.
Removal is only possible for images that WMark watermarked and whose saved original still exists. The saved copy is deleted after a successful removal, so a new backup is created the next time the image is watermarked.
13. What happens to your original images
WMark overwrites your image files in place. The only copy kept is the single original file in wp-content/uploads/alw-originals/. Make your own backup of wp-content/uploads before bulk-processing existing images.
What is changed
- Re-encoding: JPEG and WebP files are saved again at quality 90, which can slightly reduce quality or change the file size. PNG files are saved with compression level 6, and palette PNGs become full-color PNGs, which are often larger.
- Metadata is removed. EXIF and similar data, such as camera details and embedded copyright fields, are not kept in watermarked files. This was confirmed in testing. Embedded color profiles are not kept either, so colors can shift slightly on some photos.
- Large photos: for images WordPress scales down to a
-scaledfile, the unscaled original is watermarked too, and that unscaled original is what gets backed up.
Things to know about the saved originals
- They are publicly reachable. Saved originals sit inside the uploads folder at predictable addresses, for example
/wp-content/uploads/alw-originals/2026/10/photo.jpg. Anindex.phpfile only prevents folder listing. Anyone who guesses the address can download the un-watermarked image. If that matters to you, block thealw-originalsfolder in your server configuration. - They use extra disk space, roughly one more full-size copy per watermarked image.
- They are not deleted when you delete an image from the Media Library, or when you uninstall the plugin.
- File name reuse can restore the wrong image. If you delete a watermarked image and later upload a different image with the same file name in the same month folder, WMark keeps the old saved copy. Running “Remove watermark” on the new image then puts back the old, deleted image. Until this is fixed, delete the matching file from
alw-originalswhen you permanently delete a watermarked image. - Migrations: if you move your site without the
alw-originalsfolder, watermarks can no longer be removed.
14. Supported formats
| Format | Watermarked? | Notes |
|---|---|---|
| JPEG | Yes | Saved at quality 90 |
| PNG | Yes | Transparency kept. Palette PNGs become full-color. |
| WebP | Yes, if GD supports WebP | Animated WebP files cannot be loaded and are skipped. |
| GIF, AVIF, HEIC, SVG, BMP, TIFF | No | Skipped without a message |
15. Activation side effects
WMark 1.2.0 also contains a site-setup module that runs on activation and changes more than images.
- Pages: it creates published pages with Armenian text: Home, Blog, About, Contact, Privacy Policy, Terms of Use, Disclaimer and Cookie Policy. Their slugs are
home,blog,about,contact,privacy-policy,terms,disclaimerandcookie-policy. A published page that already uses one of these slugs is kept as it is. A draft or other unpublished page with one of these slugs is filled with WMark’s text and published. - Reading settings: the homepage is switched to the page with the slug
home, the posts page toblog, and the privacy page toprivacy-policy. This happens even when those pages already existed on your site before activation. - Menus: two menus named “Main menu” (Main menu) and “Footer menu” (Footer menu) are created and placed in empty classic menu locations.
- Contact form: the shortcode
[h24_contact]displays a contact form that emails the site’s admin address. It includes a nonce check and a hidden spam-trap field. - Extra admin page: Settings → Site pages (Site pages) lists these pages and can recreate missing ones.
These changes are not undone when you deactivate the plugin. Reset them manually under Settings → Reading, Pages and Appearance → Menus.
16. Security, performance and stored data
Security
- The settings page requires the
manage_optionscapability. Saved values are sanitized, and out-of-range numbers are adjusted. - The bulk actions require the
upload_filescapability and use WordPress’s standard bulk-action form protection. They do not check whether the user owns each selected image. - See saved originals for the public-access consideration.
Performance
- Each new upload is processed during the upload request, so every size is opened, edited and saved again. This adds time and memory use, especially for very large photos.
- GD loads full, uncompressed images into memory. Photos of tens of megapixels can exceed low PHP memory limits.
Data stored by WMark
| Where | Name | Purpose |
|---|---|---|
| Option | alw_settings | Watermark settings |
| Option | h24_pages | IDs of the pages created on activation |
| Image meta | _alw_done | Marks an image as watermarked |
| Image meta | _alw_backup | Path of the saved original |
| Folder | uploads/alw-originals/ | Saved original files |
17. Deactivating and uninstalling
- Watermarks stay in your images after you deactivate or delete WMark, because they are part of the files.
- To remove watermarks, do it before uninstalling. Run the remove action while the plugin is still active.
- Nothing is cleaned up automatically. WMark has no uninstall routine. The settings, image meta, the
alw-originalsfolder, and the pages and menus from activation all remain. Delete them manually if you no longer need them.