WP Manifestindependent plugin directory
manifest / media / wp-vimeo-media-sync

Vimeo Media Sync WP Registry grade A. No security issues foundWP RegistryNo security issues foundOpen the reportA

Sync Wordpress videos with Vimeo

★ 1stars
v1.5.0latest · 1mo ago

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/dylanfisher/wp-vimeo-media-sync/archive/refs/heads/main.zip
Updates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.

Synchronize WordPress video uploads to Vimeo with resumable (tus) uploads and status polling. This plugin creates Vimeo videos, adds them to a Wordpress folder, and tracks sync metadata on each attachment.

Features

  • Resumable Vimeo uploads via the tus protocol.
  • Automatic status polling with backoff until processing completes.
  • Attachment-level Vimeo metadata tracking.
  • Optional privacy override (unlisted/public/private) with automatic retry if Vimeo rejects it.
  • Dashboard table of all video attachments with pagination and tools to sync missing Vimeo uploads.
  • Optional delete-on-remove to remove Vimeo videos when WP attachments are deleted.

Requirements

  • WordPress 6.x
  • Vimeo personal access token with scopes: public, private, create, edit, delete, upload, stats, video files
  • Reachable WordPress cron (wp-cron.php) or a real server cron runner.

Installation

  1. Copy this plugin into wp-content/plugins/vimeo-media-sync.
  2. Activate it in the WordPress admin.

Configuration

Set the Vimeo access token in wp-config.php or an environment variable:

define( 'VIMEO_MEDIA_SYNC_ACCESS_TOKEN', 'your_token' );
export VIMEO_MEDIA_SYNC_ACCESS_TOKEN=your_token

In the plugin dashboard (Vimeo Sync), choose a default privacy value and the Vimeo folder name to store uploads. If Vimeo does not allow privacy overrides, the plugin retries without the privacy parameter. You can also enable automatic deletion of Vimeo videos when a WordPress attachment is deleted.

Usage

  1. Upload a video to the Media Library.
  2. The plugin creates a Vimeo video via tus upload and adds it to the configured Vimeo folder.
  3. Open the attachment details to see Vimeo status, IDs, and progress.
  4. Use the “Refresh status” button to manually recheck processing.
  5. Use the dashboard table (paginated) to review all video attachments and sync missing videos in bulk or per row; the table includes status, progress, and error context.
  6. If you switch Vimeo accounts, use “Clear Vimeo metadata” in the dashboard to reset attachment sync data before re-uploading.

Attachment Metadata

The plugin stores Vimeo metadata on attachments using post meta keys:

  • _vimeo_media_sync_video_id
  • _vimeo_media_sync_uri
  • _vimeo_media_sync_link
  • _vimeo_media_sync_status
  • _vimeo_media_sync_synced_at
  • _vimeo_media_sync_error
  • _vimeo_media_sync_upload_source
  • _vimeo_media_sync_upload_link
  • _vimeo_media_sync_upload_offset
  • _vimeo_media_sync_upload_size
  • _vimeo_media_sync_duration
  • _vimeo_media_sync_privacy
  • _vimeo_media_sync_files
  • _vimeo_media_sync_response

Frontend Helpers

Use Vimeo_Media_Sync_Helpers to access synced metadata without API calls.

Available helpers:

  • get_vimeo_meta( $attachment )
  • get_vimeo_video_id( $attachment )
  • get_vimeo_uri( $attachment )
  • get_vimeo_link( $attachment )
  • get_vimeo_embed_html( $attachment, $args = [] )
  • get_vimeo_embed_url( $attachment, $args = [] )
  • get_vimeo_autoplay_embed_url( $attachment )
  • get_vimeo_direct_files( $attachment )
  • get_vimeo_hls_url( $attachment )
  • get_vimeo_status_label( $attachment )
  • is_vimeo_ready( $attachment )
  • get_vimeo_error( $attachment )

Examples:

$embed = Vimeo_Media_Sync_Helpers::get_vimeo_embed_html( $attachment_id );
$files = Vimeo_Media_Sync_Helpers::get_vimeo_direct_files( $attachment_id );

Debugging

Set WP_DEBUG to true to log Vimeo sync progress and API calls to the PHP error log.

Upload pacing

Large videos are sent to Vimeo in 5 MB resumable (tus) chunks. Each run keeps sending chunks until it approaches its time budget, then schedules itself to resume shortly after, so upload speed is bounded by the server's connection and cron frequency rather than by a fixed chunk count.

Two filters tune this:

// Seconds one request may spend sending chunks. Defaults to 60% of
// max_execution_time, capped at 120. Unlimited execution time uses the cap.
add_filter( 'vimeo_media_sync_upload_time_budget', function( $seconds ) {
    return 90;
} );

// Seconds before resuming an upload that still has bytes to send. Defaults to 30.
add_filter( 'vimeo_media_sync_upload_poll_delay', function( $seconds ) {
    return 15;
} );

Only one process uploads a given attachment at a time. Clicking “Refresh status” while a cron run is mid-upload is safe: the second run sees the lock and returns, and the scheduled run continues uninterrupted. If Vimeo ever reports an offset mismatch, the plugin re-syncs to Vimeo's offset and carries on.

Because uploads resume through cron, cron frequency sets the floor on how often a run can happen. A once-per-minute system cron is recommended for large files; see below.

WP-Cron and Basic Auth

Background Vimeo uploads advance through scheduled WordPress cron events. If wp-cron.php is blocked by Basic Auth, .htaccess, a firewall, or a security plugin, uploads may appear to pause until someone clicks “Refresh status”.

For Basic Auth-protected environments, either allow unauthenticated requests to wp-cron.php or run cron events with a real server cron job.

Example .htaccess exception:

<Files "wp-cron.php">
    Satisfy Any
    Allow from all
    Require all granted
</Files>

If you disable WP-Cron in wp-config.php:

define( 'DISABLE_WP_CRON', true );

add a system cron job instead:

* * * * * cd /path/to/wordpress && wp cron event run --due-now --quiet

As an HTTP fallback, include Basic Auth credentials in the cron request:

* * * * * curl -s -u username:password https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Updates (GitHub Releases)

This plugin bundles the Plugin Update Checker library at includes/plugin-update-checker/ and initializes it in vimeo-media-sync.php to deliver updates from GitHub Releases.

Automatic releases:

  • A GitHub Actions workflow (.github/workflows/release-on-version.yml) runs on every push to main, reads the Version header in vimeo-media-sync.php, and creates a published release when no tag matches that version yet.
  • It tags the release as v1.2.3 and auto-generates release notes.
  • Because the check is against existing tags rather than the previous commit, it does not matter which commit in a push carries the bump.

Release checklist:

  1. Update the Version header in vimeo-media-sync.php.
  2. Merge/push the change to main.
  3. Push to main. The workflow will create the tag and GitHub Release automatically (as long as that tag does not already exist).

Notes

  • Vimeo ownership is tied to the access token owner. Use a team account token if you need uploads to land in a team account.
  • The plugin relies on WordPress cron for status polling and resumable upload progress. Ensure WP-Cron is running and wp-cron.php is reachable, or configure a real server cron runner. Cron frequency directly limits upload throughput for large files.
  • If a resumable Vimeo upload URL expires with a 401 token parsing error, the plugin resets metadata for that attachment and starts one new upload attempt.
  • Status polling continues for up to 6 hours after a video is marked ready to capture late-arriving transcode files.
  • Delete-on-remove only runs for video attachments that the plugin previously uploaded to Vimeo.
  • The plugin does not enqueue any public-facing scripts or styles.
  • Vimeo project lookup reuses existing folders by name (case-insensitive) before creating a new one.
  • Advanced Settings includes a button to delete all Vimeo videos uploaded by this plugin.
  • Advanced Settings includes a button to refresh Vimeo metadata for all synced attachments.
  • The Vimeo folder URI is cached to avoid duplicate folder creation; changing the folder name clears the cache.
  • Plugin updates can be delivered via GitHub Releases.

Releases

7 releases.

Tag
Published
v1.5.0 latest
Aug 25, 2026 1mo ago
May 26, 2026 4mo ago
Jan 7, 2026 9mo ago
Jan 7, 2026 9mo ago
Jan 6, 2026 9mo ago
Jan 5, 2026 9mo ago
Jan 5, 2026 9mo ago

These releases are tags only. The author does not attach a packaged zip, so there are no download counts to report.

A grade

Security

Vimeo Media Sync 1.5.0 · audited by WP Registry

No security issues found.

Audited release
1.5.0
Findings
none
Worst severity
—
Content hash
c77a287262b46d8b27b6c16e…

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.