Title: Pellio
Author: ScaleMath
Published: <strong>October 12, 2026</strong>
Last modified: October 12, 2026

---

Search plugins

![](https://ps.w.org/pellio/assets/banner-772x250.png?rev=3741591)

![](https://ps.w.org/pellio/assets/icon-256x256.png?rev=3741591)

# Pellio

 By [ScaleMath](https://profiles.wordpress.org/scalemath/)

[Download](https://downloads.wordpress.org/plugin/pellio.1.0.4.zip)

 * [Details](https://wordpress.org/plugins/pellio/#description)
 * [Reviews](https://wordpress.org/plugins/pellio/#reviews)
 *  [Installation](https://wordpress.org/plugins/pellio/#installation)
 * [Development](https://wordpress.org/plugins/pellio/#developers)

 [Support](https://wordpress.org/support/plugin/pellio/)

## Description

Pellio gives your videos a clean, fast player in your own colours, whether they 
live on YouTube, Vimeo, your Media Library or Pellio.

#### Free: the Pellio player

No account needed.

 * **YouTube, Vimeo and Media Library videos.** Add a Pellio Video block and paste
   a link, or choose a video from the Media Library. Or use `[pellio url="…"]`.
 * **Your branding.** The play button, progress bar and controls are Pellio’s, in
   your colour and with your corner radius. For YouTube videos, suggestions at the
   end come only from the same channel.
 * **Private until play.** Pages show a thumbnail stored on your own site. Visitors’
   browsers don’t contact YouTube or Vimeo until they press play, and then only 
   through youtube-nocookie.com and Vimeo’s “do not track” mode.
 * **Fast.** No player code from YouTube or Vimeo loads with the page; the player
   script is small and deferred.
 * **Existing embeds too.** Optionally play the YouTube and Vimeo embed blocks already
   in your posts in the Pellio player.
 * **Accessible controls.** Keyboard shortcuts (space, arrows, M, F), playback speed,
   full screen, and picture-in-picture for Media Library videos.
 * **Google Analytics.** Optionally send video_start, video_progress and video_complete
   to GA4 or Tag Manager.
 * **Consent managers.** Works with the WP Consent API, Complianz, CookieYes, Real
   Cookie Banner and Borlabs Cookie: YouTube and Vimeo videos wait for marketing
   consent (or a click on “Play video” in the player’s notice).

#### With a Pellio account: host your videos on Pellio

Upload videos to Pellio instead of YouTube, straight from the block editor. Files
go directly to Pellio’s storage, not through your server. Pellio-hosted videos add:

 * No ads, no YouTube logo and no other channels’ videos.
 * **Private and domain-locked videos.** Every embed is authorised by a short-lived
   token signed by your site, so videos can’t be hot-linked elsewhere.
 * **Email capture, calls to action and annotation cards** in the player, with leads
   sent to Pellio.
 * **Chapters, captions and transcripts**, plus VideoObject structured data (with
   key moments) and a video sitemap for search engines, with Yoast SEO and Rank 
   Math support.
 * **Viewer analytics**: who watched, how much, and from which page.
 * **Playlist and Lightbox blocks.**
 * **LifterLMS.** Require students to watch a percentage of a lesson video (verified
   in Pellio: skipping ahead doesn’t count) before “Mark Complete”, auto-complete
   lessons, lock seeking, resume where students left off, and see video progress
   in LifterLMS reports.
 * **Migration.** Pellio  Migration finds Vimeo, Wistia, YouTube and Presto Player
   embeds across posts, pages and course fields, replaces the ones already in Pellio(
   with preview and undo), and moves Media Library videos to Pellio. YouTube and
   Vimeo embeds can also play in the Pellio player without moving them (Pellio  
   Settings  Player).
 * **Page builders and custom fields.** An Elementor widget, a Bricks element (with
   dynamic data, e.g. a custom field holding a YouTube link), Beaver Builder and
   Divi modules, and an ACF “Pellio Video” field type that returns the player, the
   video id or its data. In the classic editor, “Add Pellio video” sits next to “
   Add Media”.
 * **Block patterns.** Ready-made layouts in the inserter (Patterns  Pellio video):
   video with heading and text, video with a call to action, video beside a list,
   and a course lesson with “What you’ll learn”.
 * **Sticky player.** Turn on “Sticky while playing” (block, builders, or `[pellio
   id="…" sticky="1"]`) and a playing Pellio video keeps playing in a small corner
   player when visitors scroll past it. Not on phones (narrower than 600px; filter`
   pellio_sticky_min_width`).
 * **Automations.** When a logged-in user starts or completes a video (verified 
   by Pellio for hosted videos), apply WP Fusion or FluentCRM tags, or run Uncanny
   Automator recipes. Developers get PHP actions (pellio_video_played, pellio_video_progress,
   pellio_video_completed, pellio_lead_captured) and DOM events (pellio:play, pellio:
   progress, pellio:complete, pellio:lead).
 * **Roles, not seats.** Choose which WordPress roles may upload and manage videos.
   They use the site’s connection, so they don’t need their own Pellio accounts.
 * **Your library in WordPress.** Pellio  Videos: upload, search and filter by folder,
   edit titles, descriptions, privacy, thumbnails, chapters and captions, replace
   a video’s file, and restore from Trash. Each video’s analytics (plays, retention,
   where it was watched, and which site members watched how much) are there too,
   with a dashboard widget for your top videos.
 * **Developers.** `pellio_video( $video )` template function, `[pellio id="…"]`
   shortcode, oEmbed (paste a Pellio link), and WP-CLI: `wp pellio status|scan|migrate
   |rollback|offload`.

Connect your account in Pellio  Settings. No API keys to copy.

### External services

This plugin connects to the services below. Each is listed with what is sent, when,
and where its terms and privacy policy are.

**YouTube and Vimeo (the player; no account needed).**

 * **Video details**: when a post shows a YouTube or Vimeo link (a Pellio Video 
   block, a shortcode, or a core YouTube/Vimeo embed the plugin plays), your server
   asks the provider’s oEmbed endpoint for the video’s title, size and thumbnail
   address (https://www.youtube.com/oembed or https://vimeo.com/api/oembed.json),
   with the video’s link. The answer is cached for a week (an hour after a failure),
   and the thumbnail is downloaded once from i.ytimg.com or i.vimeocdn.com into 
   your uploads folder, so visitors’ browsers never fetch it from the provider.
 * **Playing**: visitors’ browsers contact the provider only when they press play.
   The video then loads from youtube-nocookie.com or player.vimeo.com, which receive
   the visitor’s IP address and browser details like any embed.

YouTube: terms https://www.youtube.com/t/terms, privacy https://policies.google.
com/privacy.
 Vimeo: terms https://vimeo.com/terms, privacy https://vimeo.com/privacy.

**Pellio (only after you connect a Pellio account).** Pellio (https://pellio.io)
is a video hosting service operated by ScaleMath Ltd. Your server sends nothing 
to Pellio until an administrator connects the site in Pellio  Settings. (A Pellio
video someone embeds on a page anyway, by block, shortcode or link, loads in visitors’
browsers from play.pellio.io like any embedded video.) Pellio’s API is at api.pellio.
io, its player at play.pellio.io, and video files are stored with Pellio’s storage
provider at t3.storageapi.dev.

 * **Connecting** (Pellio  Settings): you’re sent to pellio.io to sign in and approve
   the site. Your site’s address is sent to Pellio, which returns a site token and
   a signing secret, kept in your WordPress database. Afterwards your server asks
   Pellio for the workspace’s name and player address every 12 hours, and tells 
   Pellio the site’s new address if it changes (so the new domain may play your 
   videos).
 * **Showing a Pellio video**: when a page shows a Pellio video, playlist or lightbox,
   your server fetches the video’s or playlist’s details (title, duration, privacy,
   poster) from the Pellio API, cached for an hour (playlists five minutes). Pasting
   a Pellio video link into the editor asks Pellio’s oEmbed endpoint (api.pellio.
   io/oembed) for the embed.
 * **Uploading and managing videos**: the file’s name, size, type and the title 
   are sent to the Pellio API to create the upload. The file itself goes from the
   browser (editor uploads) or from your server (Media Library offload) straight
   to Pellio’s storage. Editing a video’s title, description, privacy, poster, chapters
   or captions in Pellio  Videos sends those changes to Pellio.
 * **Playing Pellio videos**: visitors’ browsers load the player from play.pellio.
   io and the video from Pellio’s storage. The player records anonymous viewing 
   statistics (which parts were watched, the address of the page it’s embedded on,
   device and browser type). When a logged-in WordPress user watches, their WordPress
   user id and display name are included so you can see who watched and each student’s
   progress, and their email address if you turn on “Identify signed-in users by
   email” in Pellio  Settings (off by default). These details travel in the player’s
   address, signed by your site, so they also appear in that page’s source for the
   signed-in user, and such pages ask page caches not to store them. With “Viewer
   watermark” on, the player also shows their display name over the video. Viewers
   who fill in an email-capture form in the player send the details they enter to
   Pellio. No cookies are set.
 * **Search structured data**: to describe each embedded Pellio video to search 
   engines, your server fetches the video’s title, description, duration, chapters
   and (when it has captions) its transcript from the Pellio API, cached for 12 
   hours. Turn this off with the `pellio_output_schema` filter, or just the transcript
   with `pellio_schema_transcript`.
 * **Linked YouTube and Vimeo videos**: the first time a YouTube or Vimeo video 
   is shown in the Pellio player on a connected site, its id, title and thumbnail
   address are sent to Pellio to list it in your library. While it plays, the player
   sends Pellio which seconds were watched, the page address and, for logged-in 
   users, their WordPress user id and display name, signed by your site.
 * **Courses** (LifterLMS, LearnDash, Tutor LMS, Sensei LMS): to check whether a
   student has watched a lesson’s video, your server asks Pellio how much of it 
   that student watched (by WordPress user id) and which version of the video is
   current. Lesson progress boxes and watch-evidence exports read the same data.
   When a student’s watch is verified, a lesson is completed or reopened, or they
   sign an attestation, your server sends Pellio the event for your tamper-evident
   learner log: the student’s WordPress user id and display name, the course and
   lesson ids and titles, your site’s address, the watched percentage and video 
   version, and for attestations the statement, the method and the name they typed;
   their email address only if “Identify signed-in users by email” is on.
 * **Automations and member analytics**: before firing an automation for a logged-
   in user, your server asks Pellio how much of the video that user watched (by 
   WordPress user id). Pellio  Videos shows each video’s statistics from Pellio.
 * **Status checks** (Pellio  Settings  Status, and Tools  Site Health): your server
   sends Pellio a test token signed with this site’s secret, and Pellio returns 
   whether it’s valid, its clock time and your workspace’s allowed domains.
 * **AI agents (WordPress 6.9+ Abilities API)**: when a signed-in user, or an AI
   agent or automation acting as them, runs one of Pellio’s abilities, your server
   makes the matching Pellio API call: listing or searching videos and folders, 
   fetching a video’s details or statistics, updating a video’s title, description
   or privacy, or importing a video from a link they give (that link is sent to 
   Pellio, which downloads the file). Nothing is sent unless an ability is run.
 * **Migration**: the platform ids of Vimeo and Wistia videos found on your site
   are sent to Pellio to find the matching imported videos.

Pellio terms of service: https://pellio.io/terms
 Pellio privacy policy: https://
pellio.io/privacy

## Screenshots

[⌊The Pellio Video block: paste a YouTube or Vimeo link, choose a Media Library 
video, or (with a Pellio account) upload.⌉⌊The Pellio Video block: paste a YouTube
or Vimeo link, choose a Media Library video, or (with a Pellio account) upload.⌉[

The Pellio Video block: paste a YouTube or Vimeo link, choose a Media Library video,
or (with a Pellio account) upload.

[⌊The player: your colours, play button and controls, for Pellio-hosted, YouTube,
Vimeo and Media Library videos.⌉⌊The player: your colours, play button and controls,
for Pellio-hosted, YouTube, Vimeo and Media Library videos.⌉[

The player: your colours, play button and controls, for Pellio-hosted, YouTube, 
Vimeo and Media Library videos.

[⌊Pellio → Migration: find and replace Vimeo, Wistia, YouTube and Presto Player 
embeds.⌉⌊Pellio → Migration: find and replace Vimeo, Wistia, YouTube and Presto 
Player embeds.⌉[

Pellio  Migration: find and replace Vimeo, Wistia, YouTube and Presto Player embeds.

[⌊LifterLMS lesson settings: require watching before “Mark Complete”, or complete
the lesson automatically.⌉⌊LifterLMS lesson settings: require watching before “Mark
Complete”, or complete the lesson automatically.⌉[

LifterLMS lesson settings: require watching before “Mark Complete”, or complete 
the lesson automatically.

## Blocks

This plugin provides 3 blocks.

 *   Pellio Video Play a YouTube, Vimeo or Media Library video in a fast, private
   player with your branding, or upload to Pellio.
 *   Pellio Playlist Several Pellio videos in one player with a list, or as a grid
   that opens in a lightbox.
 *   Pellio Lightbox A thumbnail or button that opens a Pellio video in a lightbox.

## Installation

 1. Install and activate the plugin.
 2. Add a **Pellio Video** block to a post and paste a YouTube or Vimeo link, or choose
    a Media Library video. Set your player colour in **Pellio  Settings**.
 3. To host videos on Pellio: in **Pellio  Settings**, click **Connect to Pellio**,
    sign in to your Pellio account and approve the site. Then drop a video file on 
    a Pellio Video block to upload it. Pellio accounts are currently by invitation:
    request one at https://pellio.io/request-access. Everything in step 2 works without
    an account.

## FAQ

### Do I need a Pellio account?

No. The player works for YouTube, Vimeo and Media Library videos without one. An
account is for hosting videos on Pellio (uploads, private videos, email capture,
analytics and the other features listed above).

### Can AI agents use Pellio on my site?

Yes, on WordPress 6.9 and later. Pellio adds abilities to the WordPress Abilities
API: find videos, get a video’s details and stats, list folders, find the posts 
that embed a video, embed a video in a post, update a video’s details and import
a video from a link. Agents and tools that support abilities (for example through
the MCP Adapter) can use them, with the same permissions as the user they act for:
Pellio  Settings  Access decides who may use and manage videos.

### Does it work with my LMS or membership plugin?

Course lessons: LifterLMS, LearnDash, Tutor LMS and Sensei LMS can require a Pellio
video to be watched (counted in unique seconds and verified with Pellio, so skipping
ahead never counts) before a lesson is completed, and can complete it automatically.
Members-only videos: MemberPress, Paid Memberships Pro, Restrict Content (Pro), 
WooCommerce Memberships and LifterLMS memberships. Pick the plans in the video block’s
Access panel; everyone else sees a “for members” message and is never issued a playback
token.

### Which videos have verified completion?

Only Pellio-hosted videos. Their progress is checked against the seconds Pellio 
recorded for each user, so skipping ahead or faking it from the browser doesn’t 
count. For YouTube, Vimeo and Media Library videos the visitor’s browser reports
how much was watched, which can be faked, so by default those reports don’t fire
completion automations (tags, Uncanny Automator triggers). Turn on “Trust unverified
YouTube, Vimeo and Media Library completion” in Pellio  Settings  Automations if
that’s acceptable for your site.

### Does it work on multisite?

Yes. Network-activate it, then choose in Network Admin  Pellio: each site connects
its own Pellio account (the default), or connect once for the whole network (optionally
still letting site admins use their own account). Learners are shared across a network,
so their progress and learner records follow them from site to site.

### Does it work with cookie consent plugins?

Yes. With the WP Consent API, Complianz, CookieYes, Real Cookie Banner or Borlabs
Cookie active:

 * Pellio-hosted videos play without consent: the player sets no cookies. Until 
   the visitor allows statistics, views are counted anonymously and no viewer id
   is kept on their device.
 * YouTube and Vimeo videos need marketing consent. Without it, pressing play first
   explains that the video loads from YouTube or Vimeo, and a second click plays
   that one video.
 * The player’s storage is declared through the WP Consent API for generated cookie
   policies.

### Does it work with page caching and optimization plugins?

Yes. Embed tokens on cached pages are refreshed automatically, and Pellio’s scripts
opt out of “delay JavaScript” features in WP Rocket, LiteSpeed Cache, Autoptimize
and Cloudflare. With Perfmatters or FlyingPress, add Pellio’s scripts folder (usually`/
wp-content/plugins/pellio/assets/js/`; Pellio  Settings  Status shows yours) to 
their delay exclusions. Pellio  Settings  Status checks your setup.

### Why does a Vimeo video show Vimeo’s own controls?

Vimeo only lets embeds hide its controls for videos owned by paid Vimeo accounts.
On other Vimeo videos its controls may appear as well.

### Does the player hide YouTube’s branding?

No. YouTube videos play in Pellio’s controls, but YouTube still serves them, so 
YouTube’s terms apply: its title, logo and any ads the video’s owner has turned 
on can show. To play a video without YouTube at all, host it on Pellio.

### Does the video file pass through my server?

Not for uploads from the editor: the browser sends the file straight to Pellio’s
storage. The Media Library offload is the exception: those files are already on 
your server, so it sends them to Pellio from there, in 16 MB chunks.

### Does the player set cookies?

No. Pellio’s player is cookieless. For view statistics it keeps an anonymous visitor
id in the browser’s local storage: in the Pellio player’s own storage (play.pellio.
io) for videos hosted on Pellio, and in your site’s storage (`pellio_vid`) for YouTube
and Vimeo videos linked to a connected Pellio account. Sites without a Pellio account
store nothing.

### Can I undo a migration?

Yes. Every post changed by the migration is backed up first. Use **Undo** on the
Pellio  Migration screen or `wp pellio rollback`.

### What happens to my content if I delete the plugin?

Deleting the plugin removes its settings, cached data, scheduled tasks and the learner
progress it stored with users. Your posts keep their Pellio blocks and shortcodes,
and migration backups stay with the posts, so reinstalling picks up where you left
off; downloaded YouTube and Vimeo thumbnails stay in your Media Library’s uploads
folder. Videos in your Pellio account are not touched.

### Where is the source code for the editor scripts?

The block editor scripts in `build/` are compiled from the unminified source in `
src/`, which ships with the plugin. To rebuild them: `npm install`, then `npm run
build` (@wordpress/scripts, configured by `package.json` and `webpack.config.js`,
both included).

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Pellio” is open source software. The following people have contributed to this 
plugin.

Contributors

 *   [ ScaleMath ](https://profiles.wordpress.org/scalemath/)

[Translate “Pellio” into your language.](https://translate.wordpress.org/projects/wp-plugins/pellio)

### Interested in development?

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

## Changelog

#### 1.0.4

 * Updates now come from WordPress.org. Sites that installed Pellio from pellio.
   io move over with this update; nothing to do.
 * The Pellio icons in the admin menu and the block inserter have their play button
   centred.

#### 1.0.3

 * Connecting to Pellio checks a WordPress nonce on the way back, as well as the
   one-time state.
 * The migration scan needs a nonce-protected link.

#### 1.0.2

 * YouTube’s title bar and logo now show in the Pellio player, as YouTube’s terms
   require. Hiding them is an opt-in setting (Pellio  Settings  Player), off by 
   default.
 * Your server sends nothing to Pellio until you connect: pasted Pellio links are
   only turned into players on connected sites.
 * Uploads can only be finished by the person who started them (or someone who manages
   Pellio videos). The LifterLMS lesson progress box lists only that course’s students.
 * The player’s control labels, admin messages and errors can be translated.
 * Output is escaped where it’s printed; fields sent to Pellio are sanitized by 
   type; report attachments use the WordPress filesystem API; deactivating the plugin
   clears its scheduled tasks.
 * The readme’s External services section lists every request the plugin makes.
 * “Open Pellio” opens the connected workspace, not just the Pellio app.

#### 1.0.1

 * First release on WordPress.org.
 * Security: the player scripts only ever open Pellio’s own player, whatever markup
   a post contains.
 * Security: users who can’t add Pellio videos (contributors, by default) can’t 
   get a signed embed for a non-public video through the block editor’s preview,
   and only see public videos in page-builder pickers.
 * Security: cached pages refresh their embeds with a signed ticket from the page,
   so a video shown only to members can’t be signed for anyone else by its id. Pages
   cached before this update refresh once their cache is renewed.
 * Security: the video structured data (and the Yoast / Rank Math merge) is plain
   text, and leaves out password-protected videos and videos on members-only pages
   or course content.
 * Security: Tutor LMS and Sensei LMS can’t complete a lesson whose video must be
   watched by any of their other paths (Tutor’s video sync, Sensei’s “Mark as Complete”
   on a course). Auto-complete goes through LifterLMS’s, Tutor’s and Sensei’s own
   rules, so a lesson’s quiz is still required.
 * Security: watch checks are limited to one every 3 seconds per lesson, the password
   attestation locks for 15 minutes after five wrong passwords, and progress report
   attachments are written to a private temporary folder.
 * “Started watching” automations fire once a day per user and video. The site URL
   sync runs only for administrators. Viewer emails in a video’s analytics are shown
   only to people who can list users.

#### 1.0.0

 * Fixed: the lesson video and signature dropdowns in the LifterLMS and attestation
   boxes no longer spill out of the editor sidebar.

Earlier versions: see changelog.txt in the plugin folder.

## Meta

 *  Version **1.0.4**
 *  Last updated **12 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.5 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [lms](https://wordpress.org/plugins/tags/lms/)[video hosting](https://wordpress.org/plugins/tags/video-hosting/)
   [video player](https://wordpress.org/plugins/tags/video-player/)[vimeo](https://wordpress.org/plugins/tags/vimeo/)
   [youtube](https://wordpress.org/plugins/tags/youtube/)
 *  [Advanced View](https://wordpress.org/plugins/pellio/advanced/)

## Ratings

No reviews have been submitted yet.

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

[See all reviews](https://wordpress.org/support/plugin/pellio/reviews/)

## Contributors

 *   [ ScaleMath ](https://profiles.wordpress.org/scalemath/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/pellio/)