MediaHub 1.20: Field automation, smarter library workflows, and polish since 1.19.51

Field automation for pre-generated sizes, collection filing, and labelling; findRaw() variations; SVG library display; bulk-delete usage warnings; Windows preview-cover fixes; and more since 1.19.51.

Peter Knight

Peter Knight

19 August 2026

Posted in Products · Tagged ProcessWire, MediaHub

This post was written with AI assistance. The ideas, opinions, and technical decisions are mine. The tone of voice, content structure, and final copy are a mix of my prompts and AI-assisted drafting.

Since the 1.19.51 forum announcement, three releases have landed: 1.19.52, 1.20.0, and 1.20.1. Together they add optional field automation, a handful of library and API improvements, and a long list of fixes from real installs (Windows hosts, German labels, large libraries, multilingual admin).

MediaHub 1.20.1 is the current recommended release of the 1.20.x cycle. This post groups changes by what they mean for you, not by version number. New workflows first, fixes last.

  • Field automation (pre-generated sizes, collection filing, labelling)
  • findRaw() variations
  • SVG display in the library
  • Library and picker polish
  • Integrator hooks
  • Fixes worth knowing about

Field automation

Editors upload into a MediaHub field and save the page. Behind the scenes, someone (often you) still has to resize images for the front end, file assets into collections, and apply library labels so the DAM stays searchable. That housekeeping is easy to forget, and the first front-end visitor can still pay the cost of lazy image resizing.

Field automation is optional, per-field behaviour that runs on upload and on page save. Everything is off by default. Existing sites are unaffected until you enable it in module settings and configure individual fields.

Pre-generated size variations. Give a field a list of sizes (the same syntax you would pass to ProcessWire's $image->size()) and MediaHub generates those variations up front on upload and save. The first visitor gets a cache-hot image instead of triggering GD on demand. These are ordinary ProcessWire variations on disk, not separate library items: they do not appear in the grid and do not inflate your asset count. A per-request limit keeps large galleries from hitting PHP's execution-time cap.

Automatic collection filing. Point a field at a collection path, static (e.g. /news/images/) or built from the page's own fields (e.g. /news/{title}/{date:Y-m}/), and its assets are filed into that collection when the page saves. Missing collections are created automatically. Filing is additive: nothing is removed from a collection without an editor doing it.

Automatic labelling. Same idea for library labels: a static list, or labels built from page fields (e.g. {category.title}). Labels are applied on save; empty placeholders are skipped. Again, additive only.

Slow-save overlay. When automation makes a save take a moment, a brief loading overlay appears in the page editor so it does not look broken. Fast saves never flash it.

Built for MediaHub input fields

Field automation is built around MediaHub's page-per-asset model. When an upload enters the Library, it becomes a ProcessWire page with hooks, fields, and an automation layer that your field settings can target directly.

You could approximate pieces of this with custom ProcessWire hooks on ordinary image fields. The difference is scope and integration. A plain page-field image is tied to the content page that holds it, not to a shared library asset with collections, labels, and cross-page reuse. MediaHub input fields are designed for that library model from the start: each field can carry its own automation rules (sizes, collection paths, labels) without a separate integration project per template.

That makes MediaHub fields unusually adaptable out of the box. The same picker field on a news story, a hotel event page, or a case study can behave differently because its settings read from the holding page's own fields. Enable automation on the fields that need it, leave the rest alone, and the library stays organised as editors upload and save.

Who is it for?

Collection filing shines when editors upload to a page and save, but the library still needs to stay browsable for everyone else. Each slash in the path becomes a folder in the library sidebar; missing folders are created on first save. Assets are filed into the deepest folder in the chain.

News and publishing.
Article gallery at /news/{category.title}/{date:Y-m}/;
Marina story (category = Local News, August 2026) → news / Local News / 2026-08

Luxury hotels.
event_gallery at /events/{event_type}/{date:Y-m}/;
June wedding page → events / Wedding / 2026-06

Room gallery at /rooms/{room_type}/;
Deluxe Suite page → rooms / Deluxe Suite

Photographers.
Project gallery at /clients/{client_name}/{shoot_date:Y-m-d}/;
Acme Corp product shoot, 15 August 2026 → clients / Acme Corp / 2026-08-15

Heritage and volunteer-run organisations.
News at /news/{date:Y-m}/;
August news gallery → news / 2026-08

Events at /events/{title}/;
Event page titled Summer open day → events / Summer open day

Case studies and reports.
Downloads at /case-studies/{sector}/{date:Y}/ (images and PDFs together);
Retail logistics report, 2026 → case-studies / Retail / 2026

Enable automation on the fields that need it, leave the rest alone, and the library stays organised as editors upload and save.

Thanks to David Karich of Flipzoom for the automation concepts and for contributing the variation, collection, and slow-save work; automatic labelling was added alongside. Full setup steps and more examples are in the new Field automation documentation.


findRaw() variations

Pre-generated sizes are only useful in templates if you can read them without loading full Page objects or calling ->size() at render time.

findRaw() now supports an opt-in variations field that returns ProcessWire size variations already on disk for each image: name, URL, HTTP URL, filesystem path, dimensions, and file size. Always empty for non-images. Read-only: it reports existing files and never generates them. Pair it with pre-generated variations when you want a known set of sizes at read time.

See the updated findRaw documentation for examples.


SVG display in the library

SVG support arrived in 1.17, but transparent SVGs were still hard to work with in the library. White or light artwork could disappear against the tile background, and the artboard edge was unclear.

1.19.52 treats transparent SVGs properly across grid, list, masonry, and asset detail views: a dot-grid preview behind the artwork, a subtle frame with drop shadow and corner radius, and masonry that no longer upscales icons and logos beyond their intrinsic size (photos still fill the column width).

If your library holds brand marks or UI icons as SVG, browsing them should feel much closer to working with raster thumbnails.


Library and picker polish

Bulk delete with usage awareness. Selecting multiple assets and deleting them used to show a generic confirmation even when some were still referenced on pages. The dialog now checks all selected assets in a single pass (one query per field, not one per asset). When any are in use, the message leads with how many are used on pages, matching the tone of the single-asset warning, and the confirm button reads Delete Anyway.

Picker sidebar resize. The main library sidebar gained resize in 1.19.51, but the picker modal's handle was visible without doing anything. 1.19.52 fixes drag-to-resize in the picker and remembers the picker's width separately from the main library.

Template picker hygiene. MediaHub's internal templates no longer appear in ProcessWire's "Add New Page" template picker at arbitrary tree locations. They are hidden from editors and tagged for clearer grouping under Setup → Templates.

Module config on large libraries. Opening or saving module config on a site with tens of thousands of assets used to trigger a full disk-usage scan every time (15-40 second delays). 1.20.1 moves that behind a Calculate uninstall statistics button in the Uninstall Preparation panel, with a 15-minute cache and Recalculate link.


Integrator hooks

After focus point save. A hookable notification fires after an asset's focus point is saved and stale image variations are cleared. Use it to invalidate front-end cache for pages that reference the asset or to re-warm variations. No effect unless you hook it.

Auto-crop on field upload. Uploading directly into a MediaHub field now passes that field to the auto-crop preset hook, so per-field auto-crop rules can apply on upload. Library uploads continue to pass no field, as documented.

See Focus Point and findRaw for hook examples.


Fixes worth knowing about

Windows preview covers. PDF and audio preview-cover detection always reported backends as "not installed" on Windows because binary lookup used Unix-only shell syntax. Lookup now uses where on Windows, caches results for 24 hours, and the generation commands no longer use stderr redirects that cmd.exe cannot parse. Preview covers on Windows should finally match what Linux/macOS installs see.

German and other non-ASCII labels. Labels whose title contained umlauts or accented characters were recreated on every save instead of being found and reused, each time logging a page-name collision warning. Transliteration is now consistent with collection names.

Multilingual delete modals. Bold page counts in delete confirmations displayed as literal HTML on sites with ProcessWire Languages active. JSON responses for modals no longer double-encode translated strings.

Sidebar rename icon. Renaming a collection or label inline logged "Icon not found: times" to Tracy because the cancel button referenced the wrong icon file.

The full issue index is in the changelog.


Upgrading

No database migration is required. No breaking API changes. Sites on 1.19.51, 1.19.52, or 1.20.0 upgrade in place through the normal Modules screen. After upgrading, refresh Process MediaHub under Modules.

Field automation does nothing until you enable it in module config and configure fields. Preview-cover and uninstall-statistics fixes apply immediately on upgrade.


Download

MediaHub 1.20.1 is available from the 1.20.1 download page. The complete change list since 1.19.51 is in the changelog. 1.20.0 is superseded; new installs and upgrades should use 1.20.1.