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

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

Translate “Pellio” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by 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.