Title: Kodlo Media Manager
Author: Kodlo
Published: <strong>June 18, 2026</strong>
Last modified: August 22, 2026

---

Search plugins

![](https://ps.w.org/kodlo-media-manager/assets/banner-772x250.png?rev=3587930)

![](https://ps.w.org/kodlo-media-manager/assets/icon-256x256.png?rev=3587629)

# Kodlo Media Manager

 By [Kodlo](https://profiles.wordpress.org/kodlo/)

[Download](https://downloads.wordpress.org/plugin/kodlo-media-manager.1.8.7.zip)

[Live Preview](https://vec.wordpress.org/plugins/kodlo-media-manager/?preview=1)

 * [Details](https://vec.wordpress.org/plugins/kodlo-media-manager/#description)
 * [Reviews](https://vec.wordpress.org/plugins/kodlo-media-manager/#reviews)
 *  [Installation](https://vec.wordpress.org/plugins/kodlo-media-manager/#installation)
 * [Development](https://vec.wordpress.org/plugins/kodlo-media-manager/#developers)

 [Support](https://wordpress.org/support/plugin/kodlo-media-manager/)

## Description

**Turn your Media Library requirements into clear, consistent upload rules.**

Kodlo Media Manager adds a focused rules builder to **Settings -> Media**. Define
which formats WordPress may accept, where each format is allowed, how large an upload
may be, which image dimensions are acceptable, and how filenames should be formatted.

The plugin validates uploads on the server and provides early feedback in the standard
WordPress media uploader. It uses native WordPress, PHP, and browser APIs and includes
no third-party libraries or external services.

### Why Use Kodlo Media Manager?

 * **Keep upload standards consistent:** Replace written instructions with rules
   WordPress can enforce for supported upload flows.
 * **Start using SVG and WebP without code:** Fresh installations include ready-
   to-use Media Library rules for both formats.
 * **Avoid an extra SVG upload plugin:** SVG permission, MIME handling, size limits,
   and sanitization are managed in one place.
 * **Control each format separately:** Give SVG, WebP, AVIF, video, document, font,
   and archive formats their own policy and limits.
 * **Reduce duplicate filename clutter:** Optionally block an exact normalized filename
   when it already exists in the Media Library.
 * **Normalize filenames:** Mirror WordPress locale-aware accent conversion, transliterate
   supported Cyrillic characters, apply a predictable separator, and validate the
   final name.
 * **Handle SVG locally:** Sanitize canonical `.svg` uploads with an internal allowlist
   before WordPress stores them.
 * **Keep sensitive media processing local:** Files are validated on your server
   without cloud processing, telemetry, or external services.
 * **Protect editorial workflows:** Browser feedback and authoritative server validation
   apply the same upload policy consistently.
 * **Stay inside familiar WordPress screens:** Configure everything on the native
   Media Settings page and use the standard media uploader.

### SVG and WebP Ready After Activation

On a fresh installation, Kodlo Media Manager automatically configures SVG and WebP
uploads for the standard WordPress Media Library. No code snippet, manual MIME filter,
or separate SVG upload plugin is required.

SVG files are sanitized locally on the server before WordPress stores them. The 
plugin removes unsupported or potentially active content, rejects external references
and malformed SVG documents, and accepts only the canonical `.svg` extension and`
image/svg+xml` MIME type.

WebP files can be uploaded and used through the normal WordPress media workflow 
while the plugin enforces the configured MIME type, file size, image dimensions,
filename, and duplicate rules.

### Upload Rules

Each rule combines a file extension and MIME type with one of three policies:

 * **Allowed (Media Library Only):** Accept the format in verified WordPress Media
   Library upload contexts.
 * **Allowed (Globally):** Allow the format in other WordPress upload contexts as
   well.
 * **Blocked (Globally):** Reject the format throughout WordPress upload handling.

WordPress uses several upload flows beyond the Media Library. Importers, plugin 
and theme installers, custom frontend forms, and third-party tools may upload files
through different WordPress endpoints. The separate policies let you allow a format
only where it is needed instead of enabling it for every upload flow on the site.

**Allowed (Media Library Only)** is the recommended choice for content files such
as SVG, WebP, AVIF, PDF, and regular images. It includes uploads made through the
standard Media Library modal used by WordPress editors and normal Elementor image
controls. Selecting or reusing a file that is already in the Media Library is not
restricted by these upload policies.

Use **Allowed (Globally)** only when the format must also work outside the standard
Media Library, such as through an importer, a custom upload form, or a third-party
tool with its own upload endpoint. Some specialized Elementor features or add-ons
may use such custom endpoints even though normal Elementor image selection uses 
the WordPress Media Library.

An administrator can also set a per-format maximum file size and, for raster images,
maximum width and height. Dangerous executable and active-content formats remain
unavailable even if they are submitted through malformed settings data.

### Filename and Duplicate Controls

The filename validator accepts a bounded regular-expression subset shared by PHP
and JavaScript. Unsupported, malformed, or excessive patterns fall back to the plugin’s
safe default. Optional auto-sanitization can reshape filenames for compatible positive
character-class patterns before validation; safe validation-only patterns remain
available without automatic rewriting.

Duplicate Guard compares exact normalized basenames rather than image contents. 
Every distinct filename is checked directly against Media Library attachment metadata.
Short-lived hashed upload locks prevent two plugin-managed requests from claiming
the same available filename at the same time, without building a filename index 
or custom database table.

### SVG Handling

The internal SVG sanitizer accepts a limited set of SVG elements and attributes,
removes unsupported content, rejects document types and entities, and permits only
safe internal fragment references. It also applies a fixed payload ceiling before
DOM parsing. SVG content must use the canonical `.svg` extension and `image/svg+
xml` MIME pair.

SVG sanitization is a focused upload safeguard. It does not replace appropriate 
WordPress capabilities, server hardening, backups, or review of untrusted content.

### Media Uploader Experience

The browser-side guard mirrors format, filename, size, dimension, and duplicate 
checks to provide feedback before an upload begins. Asynchronous dimension probes
and duplicate lookups share one validation barrier, use bounded batches, concurrency,
and timeouts, and finish before a paused queue resumes. Invalid or unavailable duplicate
responses stop affected files and explain the failure. Server-side validation remains
authoritative for native uploads and sideload-based REST uploads.

Warning dialogs use native button semantics, labelled dialog markup, Escape handling,
managed keyboard focus, and focus restoration. Settings controls include accessible
names and predictable focus movement when rules are added or removed.

### Default Configuration

The initial rules allow ZIP globally so WordPress can upload plugin and theme packages.
SVG, WebP, AVIF, MP4, WebM, PDF, DOCX, and WOFF2 start in Media Library contexts
with format-specific limits, while JPG, JPEG, and PNG start blocked. These defaults
are a starting point, not a universal recommendation; review them for your site’s
editorial workflow and hosting limits.

By default, verified uploads initiated by an administrator from WordPress General
Settings bypass format, filename, duplicate, size, and dimension policies so core
settings such as the site icon are not unexpectedly blocked. SVG files are still
sanitized. Enable **General Settings Page Uploads** to apply the configured policies
there as well.

### Deactivation and Uninstall

Deactivating Kodlo Media Manager turns off its upload rules and interface but preserves
all saved settings, so the same configuration is available if the plugin is activated
again.

Deleting the plugin through the WordPress Plugins screen runs its uninstall cleanup.
The plugin removes all of its saved settings and any remaining temporary upload 
locks, including across a WordPress Multisite network, leaving no plugin-specific
options or custom database tables behind.

### Try It Before Installing

Use **Live Preview** on WordPress.org to explore the upload rules directly in **
Settings -> Media** before installing the plugin.

### Security

**Security Contact:** [https://kodlo.dev/](https://kodlo.dev/)

Report a suspected vulnerability privately through the **Contact** button at that
address. Please include the affected plugin version, WordPress and PHP environment
details, observed impact, reproducible steps, required privileges, and a minimal
proof of concept.

Do not include passwords, API keys, customer data, or other credentials. Do not 
publish exploit details in a support topic before the report can be assessed. Use
the public support forum only for non-sensitive support questions.

The packaged `SECURITY.md` documents supported versions, coordinated disclosure,
and an expected initial response within five business days.

PHP 8.2 or newer is recommended for production because it remains supported by the
PHP project. PHP 7.4 is the plugin’s minimum compatibility requirement, not a recommendation
to operate an unsupported PHP branch.

### Privacy

Kodlo Media Manager operates locally and does not send upload data, filenames, settings,
telemetry, or analytics to Kodlo or any other external service.

The plugin stores its configuration in WordPress options. Duplicate Guard does not
create a filename index or custom table. During an upload it may store a short-lived
site option containing a filename hash, ownership token, and timestamp; the original
filename is not stored in that lock.

Deactivation preserves the plugin settings. Successful upload locks are removed 
immediately; an abandoned expired lock is reclaimed when the same filename is checked
again.

## Screenshots

[⌊Upload policies, size limits, image dimensions, and filename controls on the WordPress
Media Settings screen.⌉⌊Upload policies, size limits, image dimensions, and filename
controls on the WordPress Media Settings screen.⌉[

Upload policies, size limits, image dimensions, and filename controls on the WordPress
Media Settings screen.

[⌊Add New Rule suggestions for extending the upload policy with additional WordPress-
supported file types.⌉⌊Add New Rule suggestions for extending the upload policy 
with additional WordPress-supported file types.⌉[

Add New Rule suggestions for extending the upload policy with additional WordPress-
supported file types.

[⌊A blocked PNG upload rejected immediately in the standard WordPress media uploader.⌉⌊
A blocked PNG upload rejected immediately in the standard WordPress media uploader
.⌉[

A blocked PNG upload rejected immediately in the standard WordPress media uploader.

[⌊An allowed SVG rejected because it exceeds the configured 50 KB upload limit.⌉⌊
An allowed SVG rejected because it exceeds the configured 50 KB upload limit.⌉[

An allowed SVG rejected because it exceeds the configured 50 KB upload limit.

[⌊Duplicate filename protection stopping a second upload of a file already stored
in the Media Library.⌉⌊Duplicate filename protection stopping a second upload of
a file already stored in the Media Library.⌉[

Duplicate filename protection stopping a second upload of a file already stored 
in the Media Library.

## Installation

 1. Upload the `kodlo-media-manager` directory to `/wp-content/plugins/`, or install
    the plugin through the WordPress Plugins screen.
 2. Activate **Kodlo Media Manager**.
 3. Go to **Settings -> Media**.
 4. Review every default rule and adjust the policies, limits, filename pattern, and
    Duplicate Guard setting for your site.
 5. Test the intended administrator and contributor upload workflows before applying
    the rules to a production editorial team.

## FAQ

### Does the plugin optimize or convert uploaded files?

No. It validates configured formats, sizes, dimensions, filenames, duplicate names,
and SVG content. It does not compress images, convert JPG or PNG files to WebP or
AVIF, or remove unused media.

### Do I need another plugin or a code snippet to upload SVG and WebP files?

No. On a fresh installation, SVG and WebP are already allowed in verified WordPress
Media Library upload flows. SVG sanitization requires the PHP DOM/XML extension.
Existing installations retain their saved rules after an update.

### Why are JPG, JPEG, and PNG blocked by default?

The initial profile encourages a WebP or AVIF workflow. It is only a starting point.
Change the applicable rule to **Allowed (Media Library Only)** or **Allowed (Globally)**
if your project uses JPG, JPEG, or PNG.

### Why is ZIP allowed globally by default?

WordPress handles administrator-uploaded plugin and theme ZIP packages outside the
Media Library. Allowing ZIP globally keeps those native installation workflows available,
while WordPress’s own capability and package validation still apply. Change the 
rule only if your site has a different package-upload policy and you have tested
the affected administration screens.

### What does a maximum size of zero mean?

Zero or a blank value disables the plugin’s per-format size limit for that rule.
WordPress, PHP, the web server, and the hosting provider may still impose their 
own limits.

### What is the difference between the three upload policies?

**Allowed (Media Library Only)** requires a verified Media Library context. **Allowed(
Globally)** also permits the configured format in other WordPress upload contexts.**
Blocked (Globally)** rejects the format throughout WordPress upload handling.

### How does Duplicate Guard work?

It blocks exact normalized filename matches, not visually similar images or identical
file contents with different names. Each distinct name is queried directly against
Media Library attachment metadata. A short-lived hashed lock closes the race between
lookup and storage for plugin-managed uploads. If WordPress cannot verify a name,
the upload is stopped conservatively and can be retried.

### Does Duplicate Guard create a filename index or change attachment data?

No. Each filename is checked directly against existing `_wp_attached_file` metadata.
The plugin does not rewrite attachment content, add attachment metadata, or maintain
a custom filename table. Concurrent plugin-managed uploads use short-lived hashed
option locks that do not contain the original filename.

### How does the SVG sanitizer work?

Canonical `.svg` uploads are parsed locally with PHP’s DOM extension. The sanitizer
uses element and attribute allowlists, accepts only safe internal fragment references,
and rejects document types, entities, external URLs, foreign namespaces, event handlers,
and other unsupported active content. Files above the fixed parser ceiling are rejected
before DOM parsing.

### Can I use a custom filename pattern?

Yes. Patterns must be anchored and remain within the bounded subset that the plugin
can evaluate consistently in PHP and JavaScript. Groups, alternation, backreferences,
engine-specific escapes, excessive lengths, invalid quantifiers, and malformed expressions
are rejected in favor of the default pattern.

A regular expression, often shortened to “regex,” is a compact pattern that describes
which characters and structure a filename may contain. The [MDN Regular Expressions Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions)
provides an accessible introduction to patterns, character classes, anchors, and
quantifiers.

The default pattern is `^[a-zA-Z0-9_\.-]+\.[a-zA-Z0-9]+$`. The `^` and `$` anchors
require the complete filename to match. The character classes allow Latin letters,
numbers, underscores, hyphens, and dots, while the escaped `\.` requires a dot before
the file extension.

You can experiment with patterns using the free [regex101 builder and tester](https://regex101.com/?lang=en).
Treat it as a learning and testing aid: regex101 supports syntax that Kodlo Media
Manager intentionally rejects. A pattern must still pass the plugin’s validation
in **Settings -> Media**, and you should test representative valid and invalid filenames
before applying it to a production editorial workflow.

### How does filename auto-sanitization work?

When enabled for a compatible positive character-class pattern, the plugin mirrors
the active WordPress locale’s accent conversions in the media uploader, transliterates
supported Cyrillic characters, chooses a separator that fits the pattern, normalizes
letter case when practical, and removes unsupported characters. The server applies
WordPress filename sanitization once and validates WordPress’s final unique filename
again before storage. Patterns with required literals, negated classes, or other
constructs that cannot be generated deterministically remain validation-only and
automatically disable rewriting.

### How are image dimensions and WordPress big-image scaling handled?

When a rule defines width or height limits, the plugin verifies the uploaded raster
image dimensions. For active rules, it also adjusts WordPress’s big-image threshold
to reflect the configured bounds while preserving a threshold that another component
has explicitly disabled.

### Does the plugin affect frontend performance?

The plugin does not enqueue assets on public frontend pages. Upload validation runs
only in relevant administrator or upload contexts. Duplicate Guard uses direct per-
filename Media Library queries and deliberately rechecks an available name after
locking and before movement, so its upload-time cost depends on upload volume, Media
Library size, and database performance.

## Reviews

![](https://secure.gravatar.com/avatar/9d39e30a9397bc67f42a2476ffc1a0998f76ea2a89551801f154bab137d280d3?
s=60&d=retro&r=g)

### 󠀁[Finally a practical solution for managing client uploads](https://wordpress.org/support/topic/finally-a-practical-solution-for-managing-client-uploads/)󠁿

 [Anatoliy](https://profiles.wordpress.org/imaginary222/) September 3, 2026

I work with an agency and we maintain quite a lot of WordPress websites. On some
of them, clients also have direct access to the backend and Media Library. This 
has always created the same problem: sooner or later someone uploads huge PNG files,
images with unnecessary dimensions, inconsistent filenames, or simply the wrong 
file format. Then a few weeks later we get a message saying that a page has become
slow and have to investigate what happened. Kodlo Media Manager solves this problem
at the source. Instead of constantly explaining upload requirements to every client,
we can define the rules directly in WordPress and let the website enforce them. 
File formats, dimensions, file size, filenames and duplicate uploads can all be 
controlled in one place. What I especially like is that it doesn't try to become
another complicated media optimization suite. It simply prevents bad files from 
entering the Media Library in the first place, which is exactly what we needed. 
I originally found the plugin because it addressed a problem I had been dealing 
with for years. I liked the idea and implementation enough that I eventually decided
to contribute to the project myself and help with development and testing. For agencies
managing websites where multiple people upload content, this is one of those small
plugins that can prevent a surprising amount of future work.

![](https://secure.gravatar.com/avatar/480a27fbd7b51d277281dc6ce2987dc25803e8a18fbee512bdad45db8baf0ea1?
s=60&d=retro&r=g)

### 󠀁[Solved a real problem for our agency workflow](https://wordpress.org/support/topic/solved-a-real-problem-for-our-agency-workflow/)󠁿

 [volodjaloz](https://profiles.wordpress.org/volodjaloz/) August 25, 2026 1 reply

I work at an agency, and one of the recurring problems we had was that many different
clients upload images and files to their WordPress websites themselves. Over time,
media libraries could become messy and difficult to manage, especially when clients
used inconsistent file names or uploaded a lot of similar images. This made everyday
maintenance and finding the right files unnecessarily time-consuming. Kodlo Media
Manager solved this problem for us. The media library is now much easier to organize
and work with, and managing client uploads has become significantly more convenient.
It's a simple idea, but it addresses a very real problem we regularly face when 
working with client websites. Very useful plugin for agencies and anyone managing
WordPress sites with a lot of media.

 [ Read all 2 reviews ](https://wordpress.org/support/plugin/kodlo-media-manager/reviews/)

## Contributors & Developers

“Kodlo Media Manager” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ Kodlo ](https://profiles.wordpress.org/kodlo/)
 *   [ Anatoliy ](https://profiles.wordpress.org/imaginary222/)

[Translate “Kodlo Media Manager” into your language.](https://translate.wordpress.org/projects/wp-plugins/kodlo-media-manager)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/kodlo-media-manager/),
check out the [SVN repository](https://plugins.svn.wordpress.org/kodlo-media-manager/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/kodlo-media-manager/)
by [RSS](https://plugins.trac.wordpress.org/log/kodlo-media-manager/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.8.7

 * Compliance: Documented the scoped PCRE compile warning handler and read-only 
   WordPress upload-context request inspection for static analysis without changing
   runtime behavior.
 * Lifecycle: Added complete single-site and bounded Multisite uninstall cleanup
   for plugin settings and abandoned upload locks.
 * Security: Added a packaged security policy with a private reporting route, supported-
   version policy, response expectation, and coordinated disclosure process.
 * Compatibility: Tested with WordPress 7.1, verified PHP 7.4-compatible syntax 
   with WordPress compatibility functions, and preserved the Media Settings deep
   link with the current Settings API section markup.
 * Live Preview: Added a WordPress Playground Blueprint that opens Kodlo Media Manager
   directly in the Media Settings screen.
 * Documentation: Expanded the plugin description with SVG and WebP setup, upload
   safeguards, local processing, Live Preview, and deactivation and uninstall behavior.

#### 1.8.6

 * Security: Replaced permissive SVG filtering with a self-contained element and
   attribute allowlist, safe internal references, canonical SVG extension and MIME
   validation, and a hard payload ceiling before DOM parsing.
 * Security: Expanded the non-configurable dangerous-format denylist and hardened
   settings input, extension/MIME pairs, upload and sideload contexts, malformed
   request values, and General Settings authorization.
 * Correctness: Added one-pass WordPress filename normalization, locale-aware browser
   parity, bounded PHP/JavaScript-safe patterns, deterministic auto-sanitization
   limits, effective MIME correction, and final unique-name validation before storage.
 * Duplicate Guard: Added direct per-filename Media Library lookups, short-lived
   hashed upload locks, final-name rechecks, and fail-closed native, sideload, REST,
   and database-error handling without a filename index or custom table.
 * Upload experience: Coordinated asynchronous duplicate and image-dimension checks
   behind one uploader barrier with bounded batches, strict response validation,
   request timeouts, bounded dimension concurrency, and object URL cleanup.
 * Accessibility: Added labelled warning dialogs with keyboard and focus management,
   accessible rule controls, and predictable focus after adding or deleting a rule.
 * Performance: Scoped admin assets and upload filters to relevant contexts and 
   removed document-wide file-input rescanning.
 * Maintenance: Split upload context, filename identity, direct duplicate lookup,
   temporary reservations, and upload orchestration into focused internal components,
   aligned native callback signatures, and removed unreachable branches without 
   third-party libraries.
 * Defaults: Allowed ZIP globally so native WordPress plugin and theme package uploads
   are not restricted by the initial rules.

#### 1.8.5

 * Maintenance: Synchronized the current plugin interface across English source 
   strings and the bundled Ukrainian and German translation catalogs.
 * Maintenance: Updated WordPress compatibility metadata to 7.0.

#### 1.8.4

 * Fix: Matched client-side filename normalization to the server so names containing
   spaces are reshaped consistently before validation.
 * Fix: Added a re-entrancy guard around the filename sanitization filter to prevent
   recursive processing during WordPress filename cleanup.

## Meta

 *  Version **1.8.7**
 *  Last updated **1 month ago**
 *  Active installations **100+**
 *  WordPress version ** 6.6 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/kodlo-media-manager/)
 * Tags
 * [file upload](https://vec.wordpress.org/plugins/tags/file-upload/)[filename](https://vec.wordpress.org/plugins/tags/filename/)
   [image sizes](https://vec.wordpress.org/plugins/tags/image-sizes/)[media library](https://vec.wordpress.org/plugins/tags/media-library/)
   [SVG](https://vec.wordpress.org/plugins/tags/svg/)
 *  [Advanced View](https://vec.wordpress.org/plugins/kodlo-media-manager/advanced/)

## Ratings

 5 out of 5 stars.

 *  [  2 5-star reviews     ](https://wordpress.org/support/plugin/kodlo-media-manager/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/kodlo-media-manager/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/kodlo-media-manager/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/kodlo-media-manager/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/kodlo-media-manager/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/kodlo-media-manager/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/kodlo-media-manager/reviews/)

## Contributors

 *   [ Kodlo ](https://profiles.wordpress.org/kodlo/)
 *   [ Anatoliy ](https://profiles.wordpress.org/imaginary222/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/kodlo-media-manager/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://kodlo.dev/)