PHPackages                             soderlind/vmfa-migrate - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. soderlind/vmfa-migrate

ActiveWordpress-plugin[Utility &amp; Helpers](/categories/utility)

soderlind/vmfa-migrate
======================

Migration add-on for Virtual Media Folders. Import folders from Enhanced Media Library, FileBird, Real Media Library, and more.

0.3.1(1mo ago)30[9 PRs](https://github.com/soderlind/vmfa-migrate/pulls)GPL-2.0-or-laterPHPPHP &gt;=8.3CI passing

Since Apr 4Pushed 2w agoCompare

[ Source](https://github.com/soderlind/vmfa-migrate)[ Packagist](https://packagist.org/packages/soderlind/vmfa-migrate)[ RSS](/packages/soderlind-vmfa-migrate/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (3)Dependencies (8)Versions (16)Used By (0)

Virtual Media Folders - Migrate
===============================

[](#virtual-media-folders---migrate)

Migration add-on for [Virtual Media Folders](https://github.com/soderlind/virtual-media-folders). Import folders and file assignments from other media folder plugins.

[![Screenshot 2026-04-06 at 16 17 01](https://private-user-images.githubusercontent.com/1649452/574183265-55b52380-22fd-419d-a393-70672cfd5905.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODAxMjk3NDIsIm5iZiI6MTc4MDEyOTQ0MiwicGF0aCI6Ii8xNjQ5NDUyLzU3NDE4MzI2NS01NWI1MjM4MC0yMmZkLTQxOWQtYTM5My03MDY3MmNmZDU5MDUucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDUzMCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjA1MzBUMDgyNDAyWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MmNkYmFkYTJjNDg5OGIwOWYxMGJiMzE1MzFhNzc1ZDE1ZmIzODE2ZDk2NjRhMTM4ODcyMDdjNzU4ZTA1ODAzZCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmcmVzcG9uc2UtY29udGVudC10eXBlPWltYWdlJTJGcG5nIn0.kWO68Cq9D90Tdt_hnkKoHy_d6JnHQ2jbbBqQH08dWwg)](https://private-user-images.githubusercontent.com/1649452/574183265-55b52380-22fd-419d-a393-70672cfd5905.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODAxMjk3NDIsIm5iZiI6MTc4MDEyOTQ0MiwicGF0aCI6Ii8xNjQ5NDUyLzU3NDE4MzI2NS01NWI1MjM4MC0yMmZkLTQxOWQtYTM5My03MDY3MmNmZDU5MDUucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDUzMCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjA1MzBUMDgyNDAyWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MmNkYmFkYTJjNDg5OGIwOWYxMGJiMzE1MzFhNzc1ZDE1ZmIzODE2ZDk2NjRhMTM4ODcyMDdjNzU4ZTA1ODAzZCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmcmVzcG9uc2UtY29udGVudC10eXBlPWltYWdlJTJGcG5nIn0.kWO68Cq9D90Tdt_hnkKoHy_d6JnHQ2jbbBqQH08dWwg)Supported Plugins
-----------------

[](#supported-plugins)

PluginStorageStatus[Enhanced Media Library](https://wordpress.org/plugins/enhanced-media-library/)Taxonomy `media_category`✅ Supported[FileBird](https://wordpress.org/plugins/filebird/)Custom tables `fbv`✅ Supported[Real Media Library](https://wordpress.org/plugins/real-media-library-lite/)Custom tables `realmedialibrary`✅ Supported[HappyFiles](https://wordpress.org/plugins/happyfiles/)Taxonomy `happyfiles_category`✅ Supported[WP Media Folder](https://www.joomunited.com/wordpress-products/wp-media-folder)Taxonomy `wpmf-category`✅ Supported[Media Library Assistant](https://wordpress.org/plugins/media-library-assistant/)Taxonomy `attachment_category`✅ Supported[CatFolders](https://wordpress.org/plugins/catfolders/)Custom tables `catfolders`✅ SupportedRequirements
------------

[](#requirements)

- WordPress 6.8+
- PHP 8.3+
- [Virtual Media Folders](https://github.com/soderlind/virtual-media-folders) 2.0.0+

Installation
------------

[](#installation)

Recommended: Use the [Add-On Manager](https://github.com/soderlind/vmfa) to install the add-on.

Manual installation:

1. Download [`vmfa-migrate.zip`](https://github.com/soderlind/vmfa-migrate/releases/latest/download/vmfa-migrate.zip)
2. Upload via `Plugins → Add New → Upload Plugin`
3. Activate via `WordPress Admin → Plugins`

Plugin [updates are handled automatically](https://github.com/soderlind/wordpress-plugin-github-updater#readme) via GitHub. No need to manually download and install updates.

How It Works
------------

[](#how-it-works)

1. **Detection** — The plugin automatically detects which supported media folder plugins have data in your database (works even if the source plugin has been deactivated).
2. **Preview** — See which folders will be created and how many assignments will be migrated before committing.
3. **Migration** — Folders are created as VMF taxonomy terms (`vmfo_folder`). Attachment assignments are batched via Action Scheduler for large libraries.
4. **Non-destructive** — Source plugin data is never modified or deleted. Existing VMF folder assignments are preserved.

Conflict Strategies
-------------------

[](#conflict-strategies)

When a VMF folder with the same name and parent already exists:

- **Skip** (default) — Reuse the existing folder.
- **Merge** — Same as skip, logged for review.
- **Overwrite** — Create a new folder with a deduplicated name.

Usage
-----

[](#usage)

### Admin UI

[](#admin-ui)

Navigate to **Media → Folder Settings → Migration** to detect sources, preview, and start migrations.

### WP-CLI

[](#wp-cli)

```
# List detected migration sources
wp vmfa-migrate list-sources

# Preview what will be migrated
wp vmfa-migrate preview enhanced-media-library

# Preview as a tree
wp vmfa-migrate preview enhanced-media-library --format=tree

# Run the migration
wp vmfa-migrate run enhanced-media-library

# Dry run
wp vmfa-migrate run enhanced-media-library --dry-run

# With options
wp vmfa-migrate run filebird --batch-size=200 --conflict=merge

# Include additional taxonomies (EML / MLA only)
wp vmfa-migrate run enhanced-media-library --include-taxonomies
```

### Taxonomy Migration

[](#taxonomy-migration)

Enhanced Media Library and Media Library Assistant support additional taxonomies (e.g. media tags) beyond their primary folder taxonomy. When you enable **Include taxonomies** (UI checkbox or `--include-taxonomies` in WP-CLI), these are migrated as standard WordPress taxonomies on each attachment.

Virtual Media Folders does not display these taxonomies in its sidebar. They are stored so the data is not lost. You can access them with native WordPress functions.

**Register the taxonomy** (e.g. in your theme's `functions.php` or a custom plugin):

```
add_action( 'init', function () {
    register_taxonomy( 'media_tag', 'attachment', [
        'label'        => __( 'Media Tags' ),
        'public'       => true,
        'hierarchical' => false,
        'show_ui'      => true,
        'show_in_rest' => true,
    ] );
} );
```

**Get terms for an attachment:**

```
$terms = get_the_terms( $attachment_id, 'media_tag' );
if ( $terms && ! is_wp_error( $terms ) ) {
    foreach ( $terms as $term ) {
        echo esc_html( $term->name );
    }
}
```

**Query attachments by term:**

```
$attachments = get_posts( [
    'post_type'   => 'attachment',
    'post_status' => 'inherit',
    'tax_query'   => [
        [
            'taxonomy' => 'media_tag',
            'field'    => 'slug',
            'terms'    => 'nature',
        ],
    ],
] );
```

Replace `media_tag` with the actual taxonomy slug shown during migration (e.g. `attachment_tag` for Media Library Assistant).

### REST API

[](#rest-api)

All endpoints require `manage_options` capability.

MethodEndpointDescriptionGET`/wp-json/vmfa-migrate/v1/sources`List detected sourcesGET`/wp-json/vmfa-migrate/v1/sources/{slug}/preview`Preview migrationPOST`/wp-json/vmfa-migrate/v1/sources/{slug}/migrate`Start migrationGET`/wp-json/vmfa-migrate/v1/jobs/{id}`Get job progressDELETE`/wp-json/vmfa-migrate/v1/jobs/{id}`Cancel a jobExtending
---------

[](#extending)

Add custom drivers by filtering `vmfa_migrate_drivers`:

```
add_filter( 'vmfa_migrate_drivers', function( array $drivers ): array {
    $drivers[] = MyCustomDriver::class;
    return $drivers;
} );
```

Your driver must implement `VmfaMigrate\Drivers\DriverInterface`.

Development
-----------

[](#development)

```
composer install
npm install
npm run build
composer test
npm test
```

License
-------

[](#license)

GPL-2.0-or-later

###  Health Score

39

—

LowBetter than 84% of packages

Maintenance94

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~13 days

Total

3

Last Release

40d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1649452?v=4)[Per Søderlind](/maintainers/soderlind)[@soderlind](https://github.com/soderlind)

---

Top Contributors

[![soderlind](https://avatars.githubusercontent.com/u/1649452?v=4)](https://github.com/soderlind "soderlind (13 commits)")

---

Tags

virtual-media-folderswordpress-media-librarywordpress-plugin

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/soderlind-vmfa-migrate/health.svg)

```
[![Health](https://phpackages.com/badges/soderlind-vmfa-migrate/health.svg)](https://phpackages.com/packages/soderlind-vmfa-migrate)
```

###  Alternatives

[helsingborg-stad/municipio

A bootstrap theme for creating municipality sites.

4028.3k10](/packages/helsingborg-stad-municipio)[mautic/core

Mautic Open Source Distribution

9.8k2.6k9](/packages/mautic-core)[mediawiki/maps

Adds various mapping features to MediaWiki

79149.7k3](/packages/mediawiki-maps)[rainlab/blog-plugin

Blog plugin for October CMS

17158.6k](/packages/rainlab-blog-plugin)[civicrm/civicrm-drupal-8

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

19246.3k2](/packages/civicrm-civicrm-drupal-8)[altis/core

Core module for Altis

19222.5k2](/packages/altis-core)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
