<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.moodle.org/502/en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fastpix-devs</id>
	<title>MoodleDocs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.moodle.org/502/en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fastpix-devs"/>
	<link rel="alternate" type="text/html" href="https://docs.moodle.org/502/en/Special:Contributions/Fastpix-devs"/>
	<updated>2026-07-18T15:36:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://docs.moodle.org/502/en/index.php?title=tiny_fastpix&amp;diff=156059</id>
		<title>tiny fastpix</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/502/en/index.php?title=tiny_fastpix&amp;diff=156059"/>
		<updated>2026-07-09T06:30:10Z</updated>

		<summary type="html">&lt;p&gt;Fastpix-devs: Initial documentation for tiny_fastpix plugin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:tiny_fastpix — FastPix Video picker}}&lt;br /&gt;
{{FastPix}}&lt;br /&gt;
{{Infobox plugin&lt;br /&gt;
|type = TinyMCE editor plugin&lt;br /&gt;
|entry = https://moodle.org/plugins/tiny_fastpix&lt;br /&gt;
|tracker = https://github.com/FastPix/moodle-tiny_fastpix/issues&lt;br /&gt;
|discussion = https://github.com/FastPix/moodle-tiny_fastpix/discussions&lt;br /&gt;
|maintainer = [[User:Tharun Budidha|Tharun Budidha]] (FastPix Inc)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;tiny_fastpix&#039;&#039;&#039; plugin adds a single toolbar button, &#039;&#039;&#039;Insert FastPix Video&#039;&#039;&#039;, to every TinyMCE editor in Moodle. When an author selects the button, a modal opens with a searchable list of the FastPix videos they own. Picking a video inserts a FastPix short code at the cursor. When the page is viewed, [[filter_fastpix]] swaps that short code for a working video player.&lt;br /&gt;
&lt;br /&gt;
tiny_fastpix is the &#039;&#039;authoring&#039;&#039; half of the FastPix embed system; [[filter_fastpix]] is the &#039;&#039;rendering&#039;&#039; half. The plugin uploads nothing and plays nothing itself — it only helps an author reference a video that already exists. It never contacts FastPix directly; every video read goes through [[local_fastpix]].&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
Before you begin, make sure you have:&lt;br /&gt;
&lt;br /&gt;
* A Moodle site running version 4.5 LTS or later, with &#039;&#039;&#039;TinyMCE&#039;&#039;&#039; set as the editor at &#039;&#039;&#039;Site administration -&amp;gt; Plugins -&amp;gt; Text editors -&amp;gt; Manage editors&#039;&#039;&#039;. Atto and other editors are not supported in version 1.0.&lt;br /&gt;
* PHP 8.1 or later (tested through PHP 8.3).&lt;br /&gt;
* Site administrator access to your Moodle dashboard.&lt;br /&gt;
* [[local_fastpix]] 1.0.0 or later, installed and connected to a FastPix account.&lt;br /&gt;
* [[mod_fastpix]] 1.0.0 or later, installed. The picker reuses its &amp;lt;code&amp;gt;mod/fastpix:uploadmedia&amp;lt;/code&amp;gt; capability.&lt;br /&gt;
* [[filter_fastpix]] 1.0.0 or later, installed &#039;&#039;&#039;and enabled&#039;&#039;&#039;. Without the filter, the short code that tiny_fastpix inserts stays as plain text instead of becoming a player.&lt;br /&gt;
* At least one ready, non-DRM video uploaded to a FastPix activity.&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Note:&#039;&#039;&#039; You cannot install tiny_fastpix standalone. Moodle blocks the install with a dependency error until local_fastpix, mod_fastpix, and filter_fastpix are present. The plugin adds no database tables, holds no FastPix credentials, and pulls in no Composer packages.&lt;br /&gt;
&lt;br /&gt;
FastPix credentials are configured once in [[local_fastpix]], and every plugin in the suite reads through it from there. If video listings do not work, check the credentials in local_fastpix first.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The plugin follows standard Moodle installation guidelines. You can install it from the Moodle plugins directory or from a ZIP file.&lt;br /&gt;
&lt;br /&gt;
=== Install from the Moodle plugins directory ===&lt;br /&gt;
&lt;br /&gt;
# Sign in to Moodle as a site administrator.&lt;br /&gt;
# Go to &#039;&#039;&#039;Site administration -&amp;gt; Plugins -&amp;gt; Install plugins&#039;&#039;&#039;.&lt;br /&gt;
# Search for &#039;&#039;&#039;FastPix Video picker&#039;&#039;&#039; and follow the prompts.&lt;br /&gt;
&lt;br /&gt;
=== Install from a ZIP file ===&lt;br /&gt;
&lt;br /&gt;
# Download the latest release from the [https://github.com/FastPix/moodle-tiny_fastpix/releases GitHub releases page].&lt;br /&gt;
# Sign in to Moodle as a site administrator.&lt;br /&gt;
# Go to &#039;&#039;&#039;Site administration -&amp;gt; Plugins -&amp;gt; Install plugins&#039;&#039;&#039;.&lt;br /&gt;
# Drag the ZIP onto the drop zone, or select &#039;&#039;&#039;Choose a file&#039;&#039;&#039; to upload it. Do not unzip the file first; Moodle installs the package directly from the ZIP.&lt;br /&gt;
# Select &#039;&#039;&#039;Install plugin from the ZIP file&#039;&#039;&#039;, then continue through the validation screen.&lt;br /&gt;
# On the &#039;&#039;&#039;Plugins requiring attention&#039;&#039;&#039; screen, select &#039;&#039;&#039;Upgrade Moodle database now&#039;&#039;&#039;.&lt;br /&gt;
# When the upgrade finishes, select &#039;&#039;&#039;Continue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
More information on how to install a plugin can be found [[Installing plugins|here]].&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Note:&#039;&#039;&#039; No further admin configuration is needed. The toolbar button registers automatically with TinyMCE, and the picker uses the existing &amp;lt;code&amp;gt;mod/fastpix:uploadmedia&amp;lt;/code&amp;gt; capability, which editing teachers and managers hold by default.&lt;br /&gt;
&lt;br /&gt;
To confirm the install, sign in as an editing teacher in any course, open any rich-text editor, and look for the &#039;&#039;&#039;Insert FastPix Video&#039;&#039;&#039; button on the toolbar.&lt;br /&gt;
&lt;br /&gt;
== Inserting a video ==&lt;br /&gt;
&lt;br /&gt;
After the plugin is installed and filter_fastpix is enabled, teachers can insert a video from any TinyMCE editor in Moodle — forum posts, Pages, Book chapters, labels, course and section summaries, quiz feedback, and anywhere else Moodle uses rich text.&lt;br /&gt;
&lt;br /&gt;
# Open any page that has a TinyMCE editor.&lt;br /&gt;
# Place the cursor where you want the video to appear.&lt;br /&gt;
# Select &#039;&#039;&#039;Insert FastPix Video&#039;&#039;&#039; on the toolbar. The button shows the FastPix icon.&lt;br /&gt;
# In the modal that opens, browse or search for the video by name.&lt;br /&gt;
# Select the video card. The modal closes and a FastPix short code is inserted at the cursor.&lt;br /&gt;
# Save the form. When the page is viewed, filter_fastpix renders the player in place of the short code.&lt;br /&gt;
&lt;br /&gt;
You can also reach the picker from the editor&#039;s &#039;&#039;&#039;Insert&#039;&#039;&#039; menu, which is useful if your toolbar is full or if you prefer keyboard navigation.&lt;br /&gt;
&lt;br /&gt;
The plugin inserts a single short code wherever the cursor is, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{fastpix:pb_96df2713-bd26-4815-8b8d-8ab7674aa751}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can type around it, place several on one page, or delete it like any other text. The short code is ordinary text, so content created with the button behaves exactly like content where the short code was typed by hand. For the short-code syntax, see [[filter_fastpix]].&lt;br /&gt;
&lt;br /&gt;
=== Searching for a video ===&lt;br /&gt;
&lt;br /&gt;
If you have more than a handful of videos, search by name from the picker:&lt;br /&gt;
&lt;br /&gt;
# Open the picker. The modal shows your most recent videos by default.&lt;br /&gt;
# Start typing in the search box. The list refreshes as you type, matching against both the activity name and the asset title.&lt;br /&gt;
# Select the video you want.&lt;br /&gt;
&lt;br /&gt;
Searches match anywhere in the name, are case-insensitive, and handle accented characters. Clear the search box to return to the full list. Searches do not handle typos or partial-word matches, and they match the activity name and asset title, not the original filename.&lt;br /&gt;
&lt;br /&gt;
== Verifying the embed renders ==&lt;br /&gt;
&lt;br /&gt;
After you insert a short code and save the page:&lt;br /&gt;
&lt;br /&gt;
# Reload the saved page as a student or other enrolled user. The short code should be replaced with a working video player.&lt;br /&gt;
# Select &#039;&#039;&#039;Play&#039;&#039;&#039;. The video should stream from FastPix.&lt;br /&gt;
# As a teacher in the same course, reload the page. You should see the same player as the student, because the embed view is the same regardless of role.&lt;br /&gt;
&lt;br /&gt;
If the short code appears as raw text instead of a player, the most likely cause is that filter_fastpix is not enabled.&lt;br /&gt;
&lt;br /&gt;
== What appears in the picker ==&lt;br /&gt;
&lt;br /&gt;
The list is deliberately narrow, so an author can only insert a video that will actually play. All of these rules are enforced on the server.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Rule !! Why&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Your videos only&#039;&#039;&#039; || The picker is scoped to the signed-in user, so you never see another teacher&#039;s library.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;This course only&#039;&#039;&#039; || Only videos uploaded through a FastPix activity in the current course are listed.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ready only&#039;&#039;&#039; || Videos still uploading or processing are hidden until FastPix finishes them.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Playable only&#039;&#039;&#039; || DRM-protected videos are excluded, because filter_fastpix cannot embed them.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Named, not numbered&#039;&#039;&#039; || Each result shows the video&#039;s activity name (falling back to &#039;&#039;Untitled video&#039;&#039;), not a raw UUID.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Most recent first&#039;&#039;&#039; || The list is capped at the most-recent videos. Search by name if you have a large library.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the picker is empty, the message tells you why:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;quot;You have no ready videos to embed yet.&amp;quot;&#039;&#039;&#039; You have not uploaded any qualifying videos. Upload one through a FastPix activity.&lt;br /&gt;
* &#039;&#039;&#039;&amp;quot;No videos match your search.&amp;quot;&#039;&#039;&#039; Clear the search box, or check the spelling of the activity name or video title.&lt;br /&gt;
* &#039;&#039;&#039;&amp;quot;Could not load your videos. Please try again.&amp;quot;&#039;&#039;&#039; The web service did not respond. Close the modal and reopen it.&lt;br /&gt;
&lt;br /&gt;
== Who can use it ==&lt;br /&gt;
&lt;br /&gt;
The button and the web service behind it share one gate, so there is no separate capability to manage.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Capability !! Effect !! Owned by&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mod/fastpix:uploadmedia&amp;lt;/code&amp;gt; || Checked at the &#039;&#039;&#039;course context&#039;&#039;&#039;. Holders see the toolbar button and can list their own videos in that course; everyone else gets no button at all. || [[mod_fastpix]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
&lt;br /&gt;
tiny_fastpix does one thing — insert a FastPix short code into TinyMCE — and is intentionally narrow.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TinyMCE only.&#039;&#039;&#039; Version 1.0 does not add the button to Atto or other editors. This is an &#039;&#039;authoring&#039;&#039; limit; filter_fastpix still renders short codes whatever produced them, so content written by hand still plays.&lt;br /&gt;
* &#039;&#039;&#039;No uploads from the picker.&#039;&#039;&#039; New videos come in through a [[mod_fastpix]] activity and surface in the picker once they are ready.&lt;br /&gt;
* &#039;&#039;&#039;No DRM videos.&#039;&#039;&#039; DRM-protected videos need short-lived playback tokens that a rich-text field cannot refresh, so they are excluded. Use a [[mod_fastpix|FastPix Video activity]] for them.&lt;br /&gt;
* &#039;&#039;&#039;No edit-in-place.&#039;&#039;&#039; To change an embedded video, delete the short code and insert a new one.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
&lt;br /&gt;
tiny_fastpix stores no personal data of its own. It declares a &amp;lt;code&amp;gt;null_provider&amp;lt;/code&amp;gt; under Moodle&#039;s Privacy API and leaves all storage to [[local_fastpix]], which is the only plugin in the suite that talks to FastPix. For full privacy details, see the [[local_fastpix#Privacy|local_fastpix privacy section]].&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;The Insert FastPix Video button does not appear.&#039;&#039;&#039; Confirm that TinyMCE is the active editor for your account at &#039;&#039;&#039;Preferences -&amp;gt; Editor preferences&#039;&#039;&#039;. If only Atto appears, set TinyMCE as the site default at &#039;&#039;&#039;Site administration -&amp;gt; Plugins -&amp;gt; Text editors -&amp;gt; Manage editors&#039;&#039;&#039;. Confirm that you hold &amp;lt;code&amp;gt;mod/fastpix:uploadmedia&amp;lt;/code&amp;gt; in the course or system context where you are editing. Then reload the page to pick up the latest editor configuration.&lt;br /&gt;
# &#039;&#039;&#039;The picker is empty.&#039;&#039;&#039; If you have never uploaded a FastPix video, the list is empty; upload one in a FastPix activity and wait for it to finish processing. If you have uploaded videos, check the activity for a &#039;&#039;&#039;Preparing your video&#039;&#039;&#039; card, which means the video is not ready. If the videos are ready but still absent, check whether they are DRM-protected; DRM videos are excluded by design.&lt;br /&gt;
# &#039;&#039;&#039;The short code appears as plain text on the saved page.&#039;&#039;&#039; filter_fastpix is not enabled, or is not placed correctly in the filter order. Go to &#039;&#039;&#039;Site administration -&amp;gt; Plugins -&amp;gt; Filters -&amp;gt; Manage filters&#039;&#039;&#039;, confirm that &#039;&#039;&#039;FastPix video embeds&#039;&#039;&#039; is set to &#039;&#039;&#039;On&#039;&#039;&#039;, and confirm it sits above &#039;&#039;&#039;Multimedia plugins&#039;&#039;&#039; in the order list.&lt;br /&gt;
# &#039;&#039;&#039;Searching does not find a video I know I uploaded.&#039;&#039;&#039; The picker matches the activity name in Moodle and the asset title stored in FastPix, not the original filename. Searches are case-insensitive and accent-insensitive, but do not handle typos or partial-word matches.&lt;br /&gt;
# &#039;&#039;&#039;Another course&#039;s videos do not appear in my picker.&#039;&#039;&#039; This is expected. The picker only shows videos that the signed-in user uploaded, in the current course. There is no cross-author sharing in version 1.0. To share a video, the original uploader can pass you the short code directly.&lt;br /&gt;
&lt;br /&gt;
== License ==&lt;br /&gt;
&lt;br /&gt;
© 2026 FastPix Inc. Distributed under the [https://www.gnu.org/licenses/gpl-3.0.html GNU GPL v3.0 or later].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[local_fastpix]] - foundation plugin (required)&lt;br /&gt;
* [[mod_fastpix]] - FastPix Video activity (required; owns the capability and uploads)&lt;br /&gt;
* [[filter_fastpix]] - renders the inserted short codes (required, must be enabled)&lt;br /&gt;
* [https://github.com/FastPix/moodle-tiny_fastpix Source code on GitHub]&lt;br /&gt;
* [https://github.com/FastPix/moodle-tiny_fastpix/blob/main/CHANGELOG.md Release notes]&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Text editors]]&lt;br /&gt;
[[Category:Plugin documentation]]&lt;/div&gt;</summary>
		<author><name>Fastpix-devs</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/502/en/index.php?title=Template:FastPix&amp;diff=156058</id>
		<title>Template:FastPix</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/502/en/index.php?title=Template:FastPix&amp;diff=156058"/>
		<updated>2026-07-09T06:24:05Z</updated>

		<summary type="html">&lt;p&gt;Fastpix-devs: Add tiny_fastpix to navigation template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:right; margin:0 0 1em 1em; padding:0.6em 0.9em; border:1px solid #ccc; background:#f7f7f7; border-radius:4px; width:18em; font-size:0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[local_fastpix|FastPix for Moodle]]&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Plugins&#039;&#039;&#039;&lt;br /&gt;
* [[local_fastpix]] — foundation plugin&lt;br /&gt;
* [[mod_fastpix]] — FastPix Video activity&lt;br /&gt;
* [[filter_fastpix]] — video embeds filter&lt;br /&gt;
* [[tiny_fastpix]] — TinyMCE video picker&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
* [https://moodle.org/plugins/local_fastpix Plugins directory]&lt;br /&gt;
* [https://github.com/FastPix Source on GitHub]&lt;br /&gt;
* [https://fastpix.com/docs FastPix documentation]&lt;br /&gt;
* [https://www.fastpix.com/technical-support Support]&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This is the shared navigation template for the FastPix Moodle plugin documentation pages. Include it at the top of a plugin page with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{FastPix}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Templates]]&lt;br /&gt;
[[Category:Plugin documentation]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fastpix-devs</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/502/en/index.php?title=filter_fastpix&amp;diff=156055</id>
		<title>filter fastpix</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/502/en/index.php?title=filter_fastpix&amp;diff=156055"/>
		<updated>2026-06-24T09:10:39Z</updated>

		<summary type="html">&lt;p&gt;Fastpix-devs: Created page with &amp;quot;{{DISPLAYTITLE:filter_fastpix — FastPix video embeds}} {{FastPix}} {{Infobox plugin |type = Filter |entry = https://moodle.org/plugins/filter_fastpix |tracker = https://github.com/FastPix/moodle-filter_fastpix/issues |discussion = https://github.com/FastPix/moodle-filter_fastpix/discussions |maintainer = Tharun Budidha (FastPix Inc) }}  The &amp;#039;&amp;#039;&amp;#039;filter_fastpix&amp;#039;&amp;#039;&amp;#039; plugin is a Moodle text filter. It looks for FastPix short codes in any rich-text con...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:filter_fastpix — FastPix video embeds}}&lt;br /&gt;
{{FastPix}}&lt;br /&gt;
{{Infobox plugin&lt;br /&gt;
|type = Filter&lt;br /&gt;
|entry = https://moodle.org/plugins/filter_fastpix&lt;br /&gt;
|tracker = https://github.com/FastPix/moodle-filter_fastpix/issues&lt;br /&gt;
|discussion = https://github.com/FastPix/moodle-filter_fastpix/discussions&lt;br /&gt;
|maintainer = [[User:Tharun Budidha|Tharun Budidha]] (FastPix Inc)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;filter_fastpix&#039;&#039;&#039; plugin is a Moodle text filter. It looks for FastPix short codes in any rich-text content Moodle renders and replaces each one with a video player. Teachers can drop a video into a forum reply, a course summary, a Page, a Book chapter, a label, or quiz feedback without creating a separate activity.&lt;br /&gt;
&lt;br /&gt;
It is a display-only plugin: it stores nothing, tracks nothing, and grades nothing. For graded, completion-tracked videos, use the [[mod_fastpix|FastPix Video activity]] instead. The filter builds on [[local_fastpix]] (FastPix credentials, HTTP gateway, and asset metadata) and [[mod_fastpix]] (the view capability and player markup it reuses).&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
Before you begin, make sure you have:&lt;br /&gt;
&lt;br /&gt;
* A Moodle site running version 4.5 LTS or later.&lt;br /&gt;
* PHP 8.1 or later (tested through PHP 8.3).&lt;br /&gt;
* Site administrator access to your Moodle dashboard.&lt;br /&gt;
* [[local_fastpix]] 1.0.0 or later, installed and connected to a FastPix account.&lt;br /&gt;
* [[mod_fastpix]] 1.0.0 or later, installed. The filter reuses its view capability and its player.&lt;br /&gt;
* At least one public FastPix video to embed for verification, with its playback ID copied from the FastPix Dashboard.&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Note:&#039;&#039;&#039; filter_fastpix cannot be installed standalone. Moodle blocks the install with a dependency error until local_fastpix and mod_fastpix are present. If you have not set those up yet, see [[local_fastpix]] and [[mod_fastpix]] first.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The plugin follows standard Moodle installation guidelines. You can install it from the Moodle plugins directory or from a ZIP file.&lt;br /&gt;
&lt;br /&gt;
=== Install from the Moodle plugins directory ===&lt;br /&gt;
&lt;br /&gt;
# Sign in to Moodle as a site administrator.&lt;br /&gt;
# Go to &#039;&#039;&#039;Site administration -&amp;gt; Plugins -&amp;gt; Install plugins&#039;&#039;&#039;.&lt;br /&gt;
# Search for &#039;&#039;&#039;FastPix video embeds&#039;&#039;&#039; and follow the prompts.&lt;br /&gt;
&lt;br /&gt;
=== Install from a ZIP file ===&lt;br /&gt;
&lt;br /&gt;
# Download the latest release from the [https://github.com/FastPix/moodle-filter_fastpix/releases GitHub releases page].&lt;br /&gt;
# Sign in to Moodle as a site administrator.&lt;br /&gt;
# Go to &#039;&#039;&#039;Site administration -&amp;gt; Plugins -&amp;gt; Install plugins&#039;&#039;&#039;.&lt;br /&gt;
# Drag the ZIP onto the drop zone, or select &#039;&#039;&#039;Choose a file&#039;&#039;&#039; to upload it. Do not unzip the file first; Moodle installs the package directly from the ZIP.&lt;br /&gt;
# Select &#039;&#039;&#039;Install plugin from the ZIP file&#039;&#039;&#039;, then continue through the validation screen.&lt;br /&gt;
# On the &#039;&#039;&#039;Plugins requiring attention&#039;&#039;&#039; screen, select &#039;&#039;&#039;Upgrade Moodle database now&#039;&#039;&#039;.&lt;br /&gt;
# When the upgrade finishes, select &#039;&#039;&#039;Continue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
More information on how to install a plugin can be found [[Installing plugins|here]].&lt;br /&gt;
&lt;br /&gt;
== Enabling and ordering the filter ==&lt;br /&gt;
&lt;br /&gt;
Filters are inactive until you switch them on.&lt;br /&gt;
&lt;br /&gt;
# Go to &#039;&#039;&#039;Site administration -&amp;gt; Plugins -&amp;gt; Filters -&amp;gt; Manage filters&#039;&#039;&#039;.&lt;br /&gt;
# Find &#039;&#039;&#039;FastPix video embeds&#039;&#039;&#039; in the list.&lt;br /&gt;
# In the &#039;&#039;&#039;Active?&#039;&#039;&#039; column, select &#039;&#039;&#039;On&#039;&#039;&#039;.&lt;br /&gt;
# Use the up arrow to place &#039;&#039;&#039;FastPix video embeds&#039;&#039;&#039; above the &#039;&#039;&#039;Multimedia plugins&#039;&#039;&#039; filter.&lt;br /&gt;
&lt;br /&gt;
The ordering matters because some HTML-rewriting filters can transform the short code before filter_fastpix reaches it, which breaks the match. Running FastPix first guarantees the short code is recognised.&lt;br /&gt;
&lt;br /&gt;
== Adding a video to a page ==&lt;br /&gt;
&lt;br /&gt;
After the filter is enabled, you can embed a video by inserting a short code into any rich-text field. Both methods produce the same result.&lt;br /&gt;
&lt;br /&gt;
=== Using the editor button ===&lt;br /&gt;
&lt;br /&gt;
If the &#039;&#039;tiny_fastpix&#039;&#039; editor plugin is installed, the toolbar shows an &#039;&#039;&#039;Insert FastPix video&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
# Place your cursor where you want the video.&lt;br /&gt;
# Select &#039;&#039;&#039;Insert FastPix video&#039;&#039;&#039;.&lt;br /&gt;
# Pick a video from the picker. Videos are listed by name.&lt;br /&gt;
# Save the form. When the page is viewed, the filter renders the player in place of the short code.&lt;br /&gt;
&lt;br /&gt;
=== Pasting a short code ===&lt;br /&gt;
&lt;br /&gt;
# In the FastPix Dashboard, open the video and copy its &#039;&#039;&#039;playback ID&#039;&#039;&#039;.&lt;br /&gt;
# In your Moodle rich-text editor, type or paste the short code, replacing the placeholder with the value you copied:&lt;br /&gt;
#: &amp;lt;code&amp;gt;{fastpix:pb_YOUR_PLAYBACK_ID}&amp;lt;/code&amp;gt;&lt;br /&gt;
# Save the form. When the page is viewed, the filter renders the player in place of the short code.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{fastpix:pb_a1c229cb-fb6f-41b1-b4cd-d676585077d5}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The short code has three parts:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Part !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;{fastpix: ... }&amp;lt;/code&amp;gt; || Marks the text as a FastPix short code.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pb_&amp;lt;/code&amp;gt; || Declares that what follows is a playback ID.&lt;br /&gt;
|-&lt;br /&gt;
| YOUR_PLAYBACK_ID || The video&#039;s playback ID. Letters, digits, hyphens, and underscores.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can put as many short codes as you want on a single page. Each one becomes its own player, and the surrounding text is left untouched.&lt;br /&gt;
&lt;br /&gt;
== Verifying the embed works ==&lt;br /&gt;
&lt;br /&gt;
# Save the page or post that contains your short code.&lt;br /&gt;
# Reload the page as a learner or other enrolled user. The short code should be replaced with a working video player.&lt;br /&gt;
# Select &#039;&#039;&#039;Play&#039;&#039;&#039;. The video should stream from FastPix.&lt;br /&gt;
&lt;br /&gt;
== What each viewer sees ==&lt;br /&gt;
&lt;br /&gt;
The filter renders a different result depending on the viewer&#039;s permissions and the state of the video.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Situation !! What the viewer sees&lt;br /&gt;
|-&lt;br /&gt;
| Viewer has &amp;lt;code&amp;gt;mod/fastpix:view&amp;lt;/code&amp;gt; and the video is public and ready || The video player.&lt;br /&gt;
|-&lt;br /&gt;
| Viewer does not have &amp;lt;code&amp;gt;mod/fastpix:view&amp;lt;/code&amp;gt; || The plain short-code text (no player, no error).&lt;br /&gt;
|-&lt;br /&gt;
| Video not found (wrong ID, deleted, or different FastPix account) || &amp;quot;This video is unavailable.&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Video still processing || &amp;quot;This video is unavailable.&amp;quot; The player appears automatically when processing finishes.&lt;br /&gt;
|-&lt;br /&gt;
| Video is private (non-DRM) || A notice pointing the viewer to the FastPix activity that hosts the video.&lt;br /&gt;
|-&lt;br /&gt;
| Video is DRM-protected || A notice pointing the viewer to the FastPix activity that hosts the video.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The capability check runs per short code, in the place where the text appears.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
&lt;br /&gt;
The filter is intentionally narrow — it handles casual embedding, while the activity plugin handles graded viewing. The filter does not:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Embed private or DRM videos.&#039;&#039;&#039; Both require short-lived playback tokens refreshed during the session, and a forum post or course summary has no session bound to it. Use the FastPix activity instead.&lt;br /&gt;
* &#039;&#039;&#039;Track viewing.&#039;&#039;&#039; Watch progress, completion, and grades are not recorded for embedded videos.&lt;br /&gt;
* &#039;&#039;&#039;Upload videos.&#039;&#039;&#039; The filter only renders videos that already exist in FastPix.&lt;br /&gt;
&lt;br /&gt;
== Filter ordering with other filters ==&lt;br /&gt;
&lt;br /&gt;
Several Moodle filters rewrite content as it renders. Place &#039;&#039;&#039;FastPix video embeds&#039;&#039;&#039; above any filter that touches HTML, so FastPix can match its short code before the text is rewritten. The recommended order, from highest to lowest:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FastPix video embeds        &amp;lt;- place here&lt;br /&gt;
Multimedia plugins&lt;br /&gt;
Activity names auto-linking&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you have already enabled the filter but short codes appear as plain text instead of players, the most common cause is filter ordering. Confirm that &#039;&#039;&#039;FastPix video embeds&#039;&#039;&#039; sits above &#039;&#039;&#039;Multimedia plugins&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
&lt;br /&gt;
The plugin stores no personal data. It declares a &#039;&#039;null_provider&#039;&#039; under Moodle&#039;s Privacy API and delegates all video operations to local_fastpix. For full privacy details, see the [[local_fastpix#Privacy|local_fastpix privacy section]].&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;The short code appears as plain text instead of a player.&#039;&#039;&#039; Confirm the filter is &#039;&#039;&#039;On&#039;&#039;&#039;, sits above &#039;&#039;&#039;Multimedia plugins&#039;&#039;&#039;, the short code is well-formed (&amp;lt;code&amp;gt;{fastpix:pb_&amp;lt;id&amp;gt;}&amp;lt;/code&amp;gt; with no spaces inside the braces), and the field is not &#039;&#039;&#039;Plain text&#039;&#039;&#039; format.&lt;br /&gt;
# &#039;&#039;&#039;The player loads but shows &amp;quot;This video is unavailable&amp;quot;.&#039;&#039;&#039; The playback ID cannot be resolved. Re-copy it from the Dashboard, confirm the video was not deleted, or wait for processing to finish.&lt;br /&gt;
# &#039;&#039;&#039;The player loads but shows a &amp;quot;watch in FastPix activity&amp;quot; notice.&#039;&#039;&#039; The video is private or DRM-protected, so the filter cannot embed it. Open the FastPix activity that hosts it, or change the video&#039;s access policy to &#039;&#039;&#039;Public&#039;&#039;&#039; if it does not need protection.&lt;br /&gt;
# &#039;&#039;&#039;Some viewers see a player and others see the short code.&#039;&#039;&#039; This is expected. The filter checks &amp;lt;code&amp;gt;mod/fastpix:view&amp;lt;/code&amp;gt; per short code. Grant the capability if appropriate.&lt;br /&gt;
# &#039;&#039;&#039;The player is a blank box.&#039;&#039;&#039; Usually a transient asset-loading issue — reload the page. If it persists, confirm the page is served over HTTPS (the player needs a secure context).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[local_fastpix]] - foundation plugin (required)&lt;br /&gt;
* [[mod_fastpix]] - graded FastPix Video activity&lt;br /&gt;
* [https://github.com/FastPix/moodle-filter_fastpix Source code on GitHub]&lt;br /&gt;
* [https://github.com/FastPix/moodle-filter_fastpix/blob/main/CHANGELOG.md Release notes]&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Filters]]&lt;br /&gt;
[[Category:Plugin documentation]]&lt;/div&gt;</summary>
		<author><name>Fastpix-devs</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/502/en/index.php?title=mod_fastpix&amp;diff=156054</id>
		<title>mod fastpix</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/502/en/index.php?title=mod_fastpix&amp;diff=156054"/>
		<updated>2026-06-24T08:52:29Z</updated>

		<summary type="html">&lt;p&gt;Fastpix-devs: Created page with &amp;quot;{{DISPLAYTITLE:mod_fastpix — FastPix Video activity}} {{FastPix}} {{Infobox plugin |type = Activity module |entry = https://moodle.org/plugins/mod_fastpix |tracker = https://github.com/FastPix/moodle-mod_fastpix/issues |discussion = https://github.com/FastPix/moodle-mod_fastpix/discussions |maintainer = Tharun Budidha (FastPix Inc) }}  The &amp;#039;&amp;#039;&amp;#039;mod_fastpix&amp;#039;&amp;#039;&amp;#039; plugin adds a &amp;#039;&amp;#039;&amp;#039;FastPix Video&amp;#039;&amp;#039;&amp;#039; activity type to Moodle. Teachers can upload a video or...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:mod_fastpix — FastPix Video activity}}&lt;br /&gt;
{{FastPix}}&lt;br /&gt;
{{Infobox plugin&lt;br /&gt;
|type = Activity module&lt;br /&gt;
|entry = https://moodle.org/plugins/mod_fastpix&lt;br /&gt;
|tracker = https://github.com/FastPix/moodle-mod_fastpix/issues&lt;br /&gt;
|discussion = https://github.com/FastPix/moodle-mod_fastpix/discussions&lt;br /&gt;
|maintainer = [[User:Tharun Budidha|Tharun Budidha]] (FastPix Inc)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;mod_fastpix&#039;&#039;&#039; plugin adds a &#039;&#039;&#039;FastPix Video&#039;&#039;&#039; activity type to Moodle. Teachers can upload a video or pull one from a URL directly from a course, set a completion threshold based on how much of the video a learner has watched, and have Moodle write the grade automatically when the threshold is met.&lt;br /&gt;
&lt;br /&gt;
It is a consumer plugin built on [[local_fastpix]], which owns the FastPix credentials, the HTTP gateway, the asset cache, webhook ingestion, and playback-token signing. mod_fastpix never talks to FastPix directly — every video operation goes through local_fastpix. It provides the activity edit form, the player view, the watch tracker, the fraud checks, completion handling, gradebook integration, and backup and restore.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
Before you begin, make sure you have:&lt;br /&gt;
&lt;br /&gt;
* A Moodle site running version 4.5 LTS or later.&lt;br /&gt;
* PHP 8.1 or later (tested through PHP 8.3).&lt;br /&gt;
* Site administrator access (to install) and editing-teacher access (to add activities).&lt;br /&gt;
* [[local_fastpix]] 1.0.0 or later, installed and connected to a FastPix account. The &#039;&#039;&#039;Test connection&#039;&#039;&#039; button on the FastPix settings page must return a green &#039;&#039;Authenticated&#039;&#039; result.&lt;br /&gt;
* A short test video (MP4, under 100 MB) for verification.&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Note:&#039;&#039;&#039; mod_fastpix cannot be installed standalone. Moodle blocks the install with a dependency error until local_fastpix is present. If you have not set up the foundation plugin yet, see [[local_fastpix]] first. The plugin has no runtime Composer dependencies.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The plugin follows standard Moodle installation guidelines. You can install it from the Moodle plugins directory or from a ZIP file.&lt;br /&gt;
&lt;br /&gt;
=== Install from the Moodle plugins directory ===&lt;br /&gt;
&lt;br /&gt;
# Sign in to Moodle as a site administrator.&lt;br /&gt;
# Go to &#039;&#039;&#039;Site administration -&amp;gt; Plugins -&amp;gt; Install plugins&#039;&#039;&#039;.&lt;br /&gt;
# Search for &#039;&#039;&#039;FastPix Video&#039;&#039;&#039; and follow the prompts.&lt;br /&gt;
&lt;br /&gt;
=== Install from a ZIP file ===&lt;br /&gt;
&lt;br /&gt;
# Download the latest release from the [https://github.com/FastPix/moodle-mod_fastpix/releases GitHub releases page].&lt;br /&gt;
# Sign in to Moodle as a site administrator.&lt;br /&gt;
# Go to &#039;&#039;&#039;Site administration -&amp;gt; Plugins -&amp;gt; Install plugins&#039;&#039;&#039;.&lt;br /&gt;
# Drag the ZIP onto the drop zone, or select &#039;&#039;&#039;Choose a file&#039;&#039;&#039; to upload it. Do not unzip the file first; Moodle installs the package directly from the ZIP.&lt;br /&gt;
# Select &#039;&#039;&#039;Install plugin from the ZIP file&#039;&#039;&#039;, then continue through the validation screen.&lt;br /&gt;
# On the &#039;&#039;&#039;Plugins requiring attention&#039;&#039;&#039; screen, select &#039;&#039;&#039;Upgrade Moodle database now&#039;&#039;&#039;.&lt;br /&gt;
# When the upgrade finishes, select &#039;&#039;&#039;Continue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To confirm the install, go to &#039;&#039;&#039;Site administration -&amp;gt; Plugins -&amp;gt; Activity modules -&amp;gt; Manage activities&#039;&#039;&#039;. &#039;&#039;&#039;FastPix Video&#039;&#039;&#039; appears in the list. More information on how to install a plugin can be found [[Installing plugins|here]].&lt;br /&gt;
&lt;br /&gt;
== Adding a video activity ==&lt;br /&gt;
&lt;br /&gt;
Teachers add videos directly from a course; no admin involvement is needed once local_fastpix is connected.&lt;br /&gt;
&lt;br /&gt;
# Open a course and turn &#039;&#039;&#039;Edit mode&#039;&#039;&#039; on.&lt;br /&gt;
# Select &#039;&#039;&#039;Add an activity or resource&#039;&#039;&#039;, then &#039;&#039;&#039;FastPix Video&#039;&#039;&#039;. It appears under the &#039;&#039;&#039;Assessment&#039;&#039;&#039; group, because the activity supports completion and writes a grade.&lt;br /&gt;
# Enter a &#039;&#039;&#039;Name&#039;&#039;&#039; and an optional &#039;&#039;&#039;Description&#039;&#039;&#039;.&lt;br /&gt;
# Set the access policy and captions in &#039;&#039;&#039;Media settings&#039;&#039;&#039;.&lt;br /&gt;
# Add the video in the &#039;&#039;&#039;Video source&#039;&#039;&#039; section.&lt;br /&gt;
# Set the playback, completion, and grade options.&lt;br /&gt;
# Select &#039;&#039;&#039;Save and display&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Important:&#039;&#039;&#039; The video is uploaded to FastPix when you save the activity, not while you are still filling in the form. If you choose a file and then leave without saving, nothing is uploaded.&lt;br /&gt;
&lt;br /&gt;
=== Media settings ===&lt;br /&gt;
&lt;br /&gt;
Choose how the video is protected and captioned before you add it. These choices are applied when the video is uploaded to FastPix.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Access policy&#039;&#039;&#039; — &#039;&#039;Private&#039;&#039; (default, recommended): only signed-in learners can play. &#039;&#039;Public&#039;&#039;: anyone with the link can play. &#039;&#039;DRM&#039;&#039;: encrypted playback on licensed devices, selectable only when local_fastpix has DRM configured.&lt;br /&gt;
* &#039;&#039;&#039;Captions &amp;amp; transcript&#039;&#039;&#039; — off by default. When enabled, either auto-generate (FastPix transcribes the audio in the chosen language; subtitles match the spoken language and are not translated) or upload your own WebVTT (.vtt) file.&lt;br /&gt;
&lt;br /&gt;
=== Adding the video ===&lt;br /&gt;
&lt;br /&gt;
You can add a video by uploading a file or by pulling one from a URL.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Upload a video.&#039;&#039;&#039; Drag a file onto the drop zone in &#039;&#039;&#039;Video source&#039;&#039;&#039;. The upload runs in resumable chunks with a live progress bar, so large files survive a flaky connection. Uploading requires the &amp;lt;code&amp;gt;mod/fastpix:uploadmedia&amp;lt;/code&amp;gt; capability, which editing teachers hold by default.&lt;br /&gt;
* &#039;&#039;&#039;Pull from a URL.&#039;&#039;&#039; Paste a direct video URL into the &#039;&#039;&#039;Video URL&#039;&#039;&#039; field and select &#039;&#039;&#039;Upload&#039;&#039;&#039;; FastPix fetches the file. local_fastpix includes an SSRF guard that rejects malformed or unreachable URLs.&lt;br /&gt;
&lt;br /&gt;
=== Playback options ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting !! Effect&lt;br /&gt;
|-&lt;br /&gt;
| Disable seeking || Blocks forward seeks during playback, so learners watch through. Backward seeks are still allowed.&lt;br /&gt;
|-&lt;br /&gt;
| Show captions by default || Turns captions on when the player loads. Learners can still toggle them off.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completion and grading ===&lt;br /&gt;
&lt;br /&gt;
Completion and grading work through Moodle&#039;s standard activity-completion and grade APIs. The activity adds one custom completion condition.&lt;br /&gt;
&lt;br /&gt;
# In the &#039;&#039;&#039;Activity completion&#039;&#039;&#039; section, set &#039;&#039;&#039;Completion tracking&#039;&#039;&#039; to &#039;&#039;&#039;Show activity as complete when conditions are met&#039;&#039;&#039;.&lt;br /&gt;
# Select &#039;&#039;&#039;Students must watch the video&#039;&#039;&#039; and enter a percentage (the default is 90%).&lt;br /&gt;
# In the &#039;&#039;&#039;Grade&#039;&#039;&#039; section, set the maximum grade (the default is 100).&lt;br /&gt;
&lt;br /&gt;
When a learner crosses the threshold, Moodle marks the activity complete and writes the grade once, at the maximum. Watching past the threshold does not rewrite the grade.&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Note:&#039;&#039;&#039; Completion is based on &#039;&#039;coverage&#039;&#039; — the unique seconds a learner actually watched, merged and deduplicated — not on the position of the playhead. Dragging the timeline to the end does not complete the activity, and rewatching the same minute counts only once.&lt;br /&gt;
&lt;br /&gt;
== Verifying your installation ==&lt;br /&gt;
&lt;br /&gt;
After you save the activity, run these checks to confirm that the integration is healthy.&lt;br /&gt;
&lt;br /&gt;
# From the course, open the activity you just created. You should see a &#039;&#039;&#039;Preparing your video&#039;&#039;&#039; card. It swaps to the player automatically when the video is ready, usually within a minute.&lt;br /&gt;
# Switch to a learner view through &#039;&#039;&#039;Switch role to -&amp;gt; Student&#039;&#039;&#039;, or sign in as a test student in a different browser.&lt;br /&gt;
# Open the activity and play past the completion threshold. The activity should be marked complete.&lt;br /&gt;
# Open &#039;&#039;&#039;Grades&#039;&#039;&#039; for the course and confirm that the test student has a grade for the activity.&lt;br /&gt;
&lt;br /&gt;
== How playback and completion work ==&lt;br /&gt;
&lt;br /&gt;
Learners see a modern adaptive player that works across browsers, mobile, and slow networks, with a progress indicator and a &#039;&#039;&#039;Completed&#039;&#039;&#039; marker after the threshold is met. Watch progress is saved server-side every 10 seconds and on tab close, so the video resumes where the learner left off on any device. A freshly uploaded video shows a &#039;&#039;&#039;Preparing your video&#039;&#039;&#039; card until processing finishes.&lt;br /&gt;
&lt;br /&gt;
Coverage drives completion: it only ever grows, rewinding does not change it, and seeking forward past unwatched content does not count those seconds.&lt;br /&gt;
&lt;br /&gt;
== Fraud prevention ==&lt;br /&gt;
&lt;br /&gt;
Each watch-progress callback runs six server-side checks. A failed check does not silently block the learner; it increments a per-attempt fraud counter and records a typed reason.&lt;br /&gt;
&lt;br /&gt;
# Watched time cannot exceed the video duration.&lt;br /&gt;
# Watched time cannot exceed wall-clock time since the session started, with a 10-second tolerance.&lt;br /&gt;
# Coverage cannot decrease.&lt;br /&gt;
# A single callback&#039;s gain cannot exceed the elapsed time, with a 10-second tolerance.&lt;br /&gt;
# The learner&#039;s view capability is re-verified on every callback.&lt;br /&gt;
# On activities with &#039;&#039;&#039;Disable seeking&#039;&#039;&#039; enabled, the server rejects any forward seek.&lt;br /&gt;
&lt;br /&gt;
When the per-attempt fraud counter passes 20, a badge appears on the learner&#039;s attempt, visible to anyone with the &amp;lt;code&amp;gt;mod/fastpix:viewallattempts&amp;lt;/code&amp;gt; capability. Any correction is a human decision, made with &amp;lt;code&amp;gt;mod/fastpix:graderoverride&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Watch report ==&lt;br /&gt;
&lt;br /&gt;
Teachers with the &amp;lt;code&amp;gt;mod/fastpix:viewallattempts&amp;lt;/code&amp;gt; capability can open a read-only &#039;&#039;&#039;Watch report&#039;&#039;&#039; tab on any FastPix Video activity. It surfaces already-recorded watch data with no extra tracking and no calls to FastPix.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Per-video view&#039;&#039;&#039; — unique viewers, average watched percentage, completion rate, the biggest drop-off point, an engagement curve, and a per-student table.&lt;br /&gt;
* &#039;&#039;&#039;Per-user view&#039;&#039;&#039; — a single learner&#039;s engagement across every FastPix Video activity in the course.&lt;br /&gt;
&lt;br /&gt;
Both views can be exported to CSV.&lt;br /&gt;
&lt;br /&gt;
== Backup and restore ==&lt;br /&gt;
&lt;br /&gt;
The plugin supports Moodle&#039;s standard course backup and restore. A backup captures the activity settings and the per-user attempt rows, and preserves the asset reference. It does not capture the video bytes, which stay on FastPix.&lt;br /&gt;
&lt;br /&gt;
* Restoring onto the same Moodle site, pointing at the same FastPix account, plays normally.&lt;br /&gt;
* Restoring onto a site that points at a different FastPix account shows &#039;&#039;&#039;Video unavailable&#039;&#039;&#039;, because the asset does not exist in the new account. This is expected behaviour, not a bug.&lt;br /&gt;
&lt;br /&gt;
Deleting an activity, including through the recycle bin, soft-deletes the underlying asset through local_fastpix.&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
&lt;br /&gt;
The plugin includes a full Moodle Privacy API provider declaring every personal-data column in the attempt table — watch progress, seek count, fraud count, completion state, and session timestamps. GDPR export and per-user delete requests are handled from Moodle&#039;s standard data-request UI. For full details, go to &#039;&#039;&#039;Site administration -&amp;gt; Users -&amp;gt; Privacy and policies -&amp;gt; Data registry&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;The video stays on &amp;quot;Preparing your video&amp;quot;.&#039;&#039;&#039; The asset is not ready yet. Confirm Moodle cron is running and that the local_fastpix webhook is registered with its signing secret saved.&lt;br /&gt;
# &#039;&#039;&#039;The player is a blank box.&#039;&#039;&#039; Usually a transient asset-loading issue — reload the page. If it persists, confirm the page is served over HTTPS (DRM playback requires a secure context).&lt;br /&gt;
# &#039;&#039;&#039;A video shows &amp;quot;Video unavailable&amp;quot;.&#039;&#039;&#039; The course was restored onto a site pointing at a different FastPix account, or the asset was deleted on the FastPix side.&lt;br /&gt;
# &#039;&#039;&#039;Seek buttons still appear after enabling &amp;quot;Disable seeking&amp;quot;.&#039;&#039;&#039; Save the activity again, reload the player, and purge caches at &#039;&#039;&#039;Site administration -&amp;gt; Development -&amp;gt; Purge caches&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;The completion condition does not appear.&#039;&#039;&#039; Set &#039;&#039;&#039;Completion tracking&#039;&#039;&#039; to &#039;&#039;&#039;Show activity as complete when conditions are met&#039;&#039;&#039;, and confirm completion is enabled at both site and course level.&lt;br /&gt;
# &#039;&#039;&#039;Private videos do not play, but public ones do.&#039;&#039;&#039; The issue is on the foundation-plugin side. Confirm local_fastpix has minted its signing key and that the asset carries a playback ID.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[local_fastpix]] - foundation plugin (required)&lt;br /&gt;
* [[filter_fastpix]] - short-code video embeds&lt;br /&gt;
* [https://github.com/FastPix/moodle-mod_fastpix Source code on GitHub]&lt;br /&gt;
* [https://github.com/FastPix/moodle-mod_fastpix/blob/main/CHANGELOG.md Release notes]&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Activity modules]]&lt;br /&gt;
[[Category:Plugin documentation]]&lt;/div&gt;</summary>
		<author><name>Fastpix-devs</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/502/en/index.php?title=local_fastpix&amp;diff=156053</id>
		<title>local fastpix</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/502/en/index.php?title=local_fastpix&amp;diff=156053"/>
		<updated>2026-06-24T08:44:07Z</updated>

		<summary type="html">&lt;p&gt;Fastpix-devs: Created page with &amp;quot;{{DISPLAYTITLE:local_fastpix — FastPix for Moodle}} {{FastPix}} {{Infobox plugin |type = Local plugin |entry = https://moodle.org/plugins/local_fastpix |tracker = https://github.com/FastPix/moodle-local_fastpix/issues |discussion = https://github.com/FastPix/moodle-local_fastpix/discussions |maintainer = Tharun Budidha (FastPix Inc) }}  The &amp;#039;&amp;#039;&amp;#039;local_fastpix&amp;#039;&amp;#039;&amp;#039; plugin connects a Moodle site to [https://www.fastpix.com FastPix] for video hosting a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:local_fastpix — FastPix for Moodle}}&lt;br /&gt;
{{FastPix}}&lt;br /&gt;
{{Infobox plugin&lt;br /&gt;
|type = Local plugin&lt;br /&gt;
|entry = https://moodle.org/plugins/local_fastpix&lt;br /&gt;
|tracker = https://github.com/FastPix/moodle-local_fastpix/issues&lt;br /&gt;
|discussion = https://github.com/FastPix/moodle-local_fastpix/discussions&lt;br /&gt;
|maintainer = [[User:Tharun Budidha|Tharun Budidha]] (FastPix Inc)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;local_fastpix&#039;&#039;&#039; plugin connects a Moodle site to [https://www.fastpix.com FastPix] for video hosting and delivery. It is a foundation plugin: it provides the shared HTTP gateway, asset cache, webhook ingestion, and playback-token signing that the other FastPix plugins rely on. On its own it ships an admin settings page, a webhook endpoint, and a health-check probe, and it adds no teacher- or learner-facing features by itself.&lt;br /&gt;
&lt;br /&gt;
The consumer plugins that build on it are [[mod_fastpix]] (the FastPix Video activity) and [[filter_fastpix]] (short-code video embeds).&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
Before you begin, make sure you have:&lt;br /&gt;
&lt;br /&gt;
* A Moodle site running version 4.5 LTS or later.&lt;br /&gt;
* PHP 8.1 or later (tested through PHP 8.3).&lt;br /&gt;
* Site administrator access to your Moodle dashboard.&lt;br /&gt;
* A FastPix account. If you do not have one, [https://dashboard.fastpix.com/signup sign up].&lt;br /&gt;
* A shared Moodle Universal Cache (MUC) backend — Redis, Memcached, or the file store on a single-server install.&lt;br /&gt;
&lt;br /&gt;
The gateway circuit breaker and rate limiter rely on cache state shared across all PHP workers, so a shared MUC backend is required. The plugin bundles &#039;&#039;firebase/php-jwt&#039;&#039; (BSD-3-Clause) and has no runtime Composer dependencies.&lt;br /&gt;
&lt;br /&gt;
== Getting your FastPix API credentials ==&lt;br /&gt;
&lt;br /&gt;
To connect Moodle to your FastPix account, generate API credentials in the FastPix Dashboard:&lt;br /&gt;
&lt;br /&gt;
# Sign in to your [https://dashboard.fastpix.com FastPix Dashboard].&lt;br /&gt;
# Go to &#039;&#039;&#039;Settings -&amp;gt; API Keys&#039;&#039;&#039;.&lt;br /&gt;
# Create a new key and give it a recognisable name, such as &#039;&#039;Moodle production&#039;&#039;.&lt;br /&gt;
# Copy the &#039;&#039;&#039;API Key&#039;&#039;&#039; and the &#039;&#039;&#039;API Secret&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Important:&#039;&#039;&#039; FastPix shows the API Secret only once. If you leave the page without copying it, you have to create a new key.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The plugin follows standard Moodle installation guidelines. You can install it from the Moodle plugins directory or from a ZIP file.&lt;br /&gt;
&lt;br /&gt;
=== Install from the Moodle plugins directory ===&lt;br /&gt;
&lt;br /&gt;
# Sign in to Moodle as a site administrator.&lt;br /&gt;
# Go to &#039;&#039;&#039;Site administration -&amp;gt; Plugins -&amp;gt; Install plugins&#039;&#039;&#039;.&lt;br /&gt;
# Search for &#039;&#039;FastPix&#039;&#039; and follow the prompts.&lt;br /&gt;
&lt;br /&gt;
=== Install from a ZIP file ===&lt;br /&gt;
&lt;br /&gt;
# Download the latest release from the [https://github.com/FastPix/moodle-local_fastpix/releases GitHub releases page].&lt;br /&gt;
# Sign in to Moodle as a site administrator.&lt;br /&gt;
# Go to &#039;&#039;&#039;Site administration -&amp;gt; Plugins -&amp;gt; Install plugins&#039;&#039;&#039;.&lt;br /&gt;
# Drag the ZIP onto the drop zone, or select &#039;&#039;&#039;Choose a file&#039;&#039;&#039; to upload it. Do not unzip the file first; Moodle installs the package directly from the ZIP.&lt;br /&gt;
# Select &#039;&#039;&#039;Install plugin from the ZIP file&#039;&#039;&#039;, then continue through the validation screen.&lt;br /&gt;
# On the &#039;&#039;&#039;Plugins requiring attention&#039;&#039;&#039; screen, select &#039;&#039;&#039;Upgrade Moodle database now&#039;&#039;&#039;.&lt;br /&gt;
# When the upgrade finishes, select &#039;&#039;&#039;Continue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
More information on how to install a plugin can be found [[Installing plugins|here]].&lt;br /&gt;
&lt;br /&gt;
== Connecting the plugin to FastPix ==&lt;br /&gt;
&lt;br /&gt;
After you install the plugin and have your API credentials, open the settings page at &#039;&#039;&#039;Site administration -&amp;gt; Server -&amp;gt; FastPix&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# In the &#039;&#039;&#039;API credentials&#039;&#039;&#039; section, paste your &#039;&#039;&#039;API Key&#039;&#039;&#039; and &#039;&#039;&#039;API Secret&#039;&#039;&#039;.&lt;br /&gt;
# Select &#039;&#039;&#039;Save changes&#039;&#039;&#039;.&lt;br /&gt;
# Select &#039;&#039;&#039;Test connection&#039;&#039;&#039;. A green check and an &#039;&#039;Authenticated&#039;&#039; message confirm that Moodle can authenticate with FastPix.&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Important:&#039;&#039;&#039; The &#039;&#039;&#039;Test connection&#039;&#039;&#039; and &#039;&#039;&#039;Send test event&#039;&#039;&#039; buttons act on the &#039;&#039;saved&#039;&#039; settings, not on the values currently typed into the fields. Always select &#039;&#039;&#039;Save changes&#039;&#039;&#039; first.&lt;br /&gt;
&lt;br /&gt;
Moodle stores the API Secret in the &#039;&#039;config_plugins&#039;&#039; table using the standard masked-password field. The browser hides the value, but the database does not encrypt it, so protect your database and backups accordingly.&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
=== Upload defaults ===&lt;br /&gt;
&lt;br /&gt;
These values are applied to every newly ingested video. Both are optional, and consumer plugins can override them per activity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting !! Values&lt;br /&gt;
|-&lt;br /&gt;
| Default access policy || &#039;&#039;public&#039;&#039; (no authentication), &#039;&#039;private&#039;&#039; (signed-token playback, the default), or &#039;&#039;drm&#039;&#039; (requires DRM configuration).&lt;br /&gt;
|-&lt;br /&gt;
| Default maximum resolution || Up to 1080p (the default).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To enable DRM, select &#039;&#039;&#039;Enable DRM&#039;&#039;&#039; and paste your FastPix &#039;&#039;&#039;DRM Configuration ID&#039;&#039;&#039; into the matching field. If either is missing, DRM stays off. DRM adds cost on FastPix, so enable it only for content that needs Widevine or FairPlay protection.&lt;br /&gt;
&lt;br /&gt;
=== Retention and cleanup ===&lt;br /&gt;
&lt;br /&gt;
These settings control how long the plugin keeps abandoned uploads and unattached videos before sweeping them. The defaults are safe; adjust them only if your site has specific retention needs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting !! Description !! Default&lt;br /&gt;
|-&lt;br /&gt;
| Stale upload-session lifetime || How long an upload session that never became a video is kept before it is cancelled and removed. || 1 day&lt;br /&gt;
|-&lt;br /&gt;
| Unattached video grace period || How long a ready video may stay unattached to any activity before it is released and soft-deleted. || 1 week&lt;br /&gt;
|-&lt;br /&gt;
| Unattached video warning lead time || How long before release the owner is warned. Must be less than the grace period. || 2 days&lt;br /&gt;
|-&lt;br /&gt;
| Automatically remove unattached videos || When enabled, ready videos with no activity reference are soft-deleted, then purged. When disabled, owners are only notified. || Disabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Important:&#039;&#039;&#039; Keep &#039;&#039;&#039;Automatically remove unattached videos&#039;&#039;&#039; disabled until the FastPix filter and editor plugins report video usage. Otherwise a video embedded through one of those plugins could be removed while still in use.&lt;br /&gt;
&lt;br /&gt;
== Registering the webhook ==&lt;br /&gt;
&lt;br /&gt;
FastPix uses webhooks to tell Moodle when an upload finishes processing and when assets change. The webhook URL is fixed; the signing secret is generated by FastPix and pasted into Moodle so that Moodle can verify each event&#039;s signature.&lt;br /&gt;
&lt;br /&gt;
# On the Moodle settings page, in the &#039;&#039;&#039;Webhooks&#039;&#039;&#039; section, select &#039;&#039;&#039;Copy&#039;&#039;&#039; next to the &#039;&#039;&#039;Webhook URL&#039;&#039;&#039;. The URL looks like &amp;lt;code&amp;gt;https://your.moodle.example/local/fastpix/webhook.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
# In the FastPix Dashboard, go to &#039;&#039;&#039;Webhooks&#039;&#039;&#039;, add a new destination, and paste the URL.&lt;br /&gt;
# Subscribe the destination to at least the following events:&lt;br /&gt;
## &amp;lt;code&amp;gt;video.media.created&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;video.media.ready&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;video.media.updated&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;video.media.failed&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;video.media.deleted&amp;lt;/code&amp;gt;&lt;br /&gt;
# Copy the &#039;&#039;&#039;signing secret&#039;&#039;&#039; that FastPix shows for the destination.&lt;br /&gt;
# Back on the Moodle settings page, paste the secret into &#039;&#039;&#039;Webhook signing secret&#039;&#039;&#039;, then select &#039;&#039;&#039;Save changes&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Note:&#039;&#039;&#039; The secret must be at least 32 characters; FastPix generates 64-character secrets by default. Until a secret is saved, Moodle rejects all incoming events. When you rotate the secret later, Moodle continues to accept the previous value for 30 minutes, so you can update both sides without losing deliveries.&lt;br /&gt;
&lt;br /&gt;
== Verifying your installation ==&lt;br /&gt;
&lt;br /&gt;
After you configure the plugin, run these three checks to confirm that the integration is healthy.&lt;br /&gt;
&lt;br /&gt;
=== Test the connection ===&lt;br /&gt;
&lt;br /&gt;
On the settings page, select &#039;&#039;&#039;Test connection&#039;&#039;&#039;. A green check and an &#039;&#039;Authenticated&#039;&#039; message confirm success. If the test fails, Moodle shows a descriptive error; re-check your API Key and Secret, save, and try again.&lt;br /&gt;
&lt;br /&gt;
=== Verify the webhook handshake ===&lt;br /&gt;
&lt;br /&gt;
Select &#039;&#039;&#039;Send test event&#039;&#039;&#039;. This drives the full verify-record-enqueue pipeline without leaving Moodle. To confirm the event was ingested, go to &#039;&#039;&#039;Site administration -&amp;gt; Reports -&amp;gt; Logs&#039;&#039;&#039; and filter by the component &#039;&#039;local_fastpix&#039;&#039;. If the same event arrives twice, the plugin silently ignores the duplicate.&lt;br /&gt;
&lt;br /&gt;
=== Verify the scheduled tasks ===&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Site administration -&amp;gt; Server -&amp;gt; Scheduled tasks&#039;&#039;&#039; and confirm that the FastPix tasks are present and enabled with their default schedules. They run on Moodle&#039;s standard cron; no separate infrastructure is required.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the integration ==&lt;br /&gt;
&lt;br /&gt;
The plugin exposes a public health-check endpoint for monitoring tools such as Pingdom, UptimeRobot, or a Prometheus blackbox exporter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;https://your.moodle.example/local/fastpix/health.php&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The endpoint requires no authentication and is rate-limited to 30 requests per minute per IP address. It makes an authenticated check against FastPix and never returns a 500; every server-side problem surfaces as a 503. The response is JSON with &#039;&#039;status&#039;&#039;, &#039;&#039;fastpix_reachable&#039;&#039;, &#039;&#039;latency_ms&#039;&#039;, and &#039;&#039;timestamp&#039;&#039; fields.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code !! status !! Meaning !! What to do&lt;br /&gt;
|-&lt;br /&gt;
| 200 || ok || Moodle reached FastPix and got an authenticated response. || Nothing. Treat this as &amp;quot;up&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 503 || degraded || The probe ran, but FastPix did not respond successfully. || Use &#039;&#039;&#039;Test connection&#039;&#039;&#039; to see the underlying error.&lt;br /&gt;
|-&lt;br /&gt;
| 503 || error || Something inside Moodle threw before the probe completed. || Usually the MUC cache backend is unreachable; confirm your shared cache is up.&lt;br /&gt;
|-&lt;br /&gt;
| 429 || rate_limited || More than 30 requests per minute from one IP. || Poll every 30-60 seconds, or spread checks across sources.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;degraded&#039;&#039; response can mean FastPix is down or slow, the network path is blocked, or the API credentials are wrong or revoked. To tell these apart, select &#039;&#039;&#039;Test connection&#039;&#039;&#039; on the settings page; unlike the health endpoint, it surfaces the underlying error message.&lt;br /&gt;
&lt;br /&gt;
== Scheduled tasks ==&lt;br /&gt;
&lt;br /&gt;
The plugin registers the following scheduled tasks. All run on Moodle&#039;s standard cron and are enabled by default. To adjust the schedules, go to &#039;&#039;&#039;Site administration -&amp;gt; Server -&amp;gt; Scheduled tasks&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Task !! Purpose !! Default schedule&lt;br /&gt;
|-&lt;br /&gt;
| Sweep expired upload sessions || Clears upload sessions that were never completed. || Daily, 03:17&lt;br /&gt;
|-&lt;br /&gt;
| Prune old processed webhook events || Trims the webhook ledger after a 90-day window. || Daily, 04:23&lt;br /&gt;
|-&lt;br /&gt;
| Hard-delete soft-deleted assets || Removes asset rows past the GDPR retention window. || Daily, 04:47&lt;br /&gt;
|-&lt;br /&gt;
| Retry pending GDPR deletions || Re-attempts remote deletions that previously failed. || Every 15 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Hard-purge soft-deleted assets || Permanently purges assets after the 7-day grace window. || Daily, 02:30&lt;br /&gt;
|-&lt;br /&gt;
| Rotate JWT signing key || Rotates the playback signing key every 90 days. || Daily, 05:11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Privacy ==&lt;br /&gt;
&lt;br /&gt;
The plugin includes a full Moodle Privacy API provider. It never sends raw Moodle user IDs to FastPix; instead, it sends a site-specific HMAC value. The webhook ledger is pruned after 90 days, and soft-deleted assets are permanently purged after a 7-day grace window. GDPR export and per-asset delete requests are handled on the Moodle side. For full details, go to &#039;&#039;&#039;Site administration -&amp;gt; Users -&amp;gt; Privacy and policies -&amp;gt; Data registry&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Test connection fails.&#039;&#039;&#039; Confirm the API Key and Secret are correct and not revoked, confirm Moodle can reach the FastPix API outbound, and save your changes before testing.&lt;br /&gt;
# &#039;&#039;&#039;Webhook returns 401.&#039;&#039;&#039; The signing secret in Moodle does not match FastPix. Re-copy the secret (watching for trailing whitespace), paste it in, and save. A freshly rotated secret keeps the old value working for 30 minutes.&lt;br /&gt;
# &#039;&#039;&#039;Webhook returns 400.&#039;&#039;&#039; Usually an unrecognised validation-probe body. Make sure you are on plugin version 2026051201 or later.&lt;br /&gt;
# &#039;&#039;&#039;Private videos do not play, but public ones do.&#039;&#039;&#039; The RS256 signing key has not been minted yet. It is created on first need - save valid credentials and load a private asset to trigger it.&lt;br /&gt;
# &#039;&#039;&#039;Videos show &amp;quot;Video unavailable&amp;quot;.&#039;&#039;&#039; Expected if a course was restored onto a site pointing at a different FastPix account; the asset IDs do not exist in the new account.&lt;br /&gt;
# &#039;&#039;&#039;Scheduled tasks are not running.&#039;&#039;&#039; Confirm Moodle cron is configured and running.&lt;br /&gt;
# &#039;&#039;&#039;Moodle is slow or unresponsive.&#039;&#039;&#039; Confirm a shared MUC backend (Redis, Memcached, or the file store) is configured.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[mod_fastpix]] - FastPix Video activity&lt;br /&gt;
* [[filter_fastpix]] - FastPix video embeds&lt;br /&gt;
* [https://github.com/FastPix/moodle-local_fastpix Source code on GitHub]&lt;br /&gt;
* [https://www.fastpix.com/technical-support FastPix support]&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Local plugins]]&lt;br /&gt;
[[Category:Plugin documentation]]&lt;/div&gt;</summary>
		<author><name>Fastpix-devs</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/502/en/index.php?title=Template:FastPix&amp;diff=156047</id>
		<title>Template:FastPix</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/502/en/index.php?title=Template:FastPix&amp;diff=156047"/>
		<updated>2026-06-24T05:51:48Z</updated>

		<summary type="html">&lt;p&gt;Fastpix-devs: Create FastPix navigation template for plugin docs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:right; margin:0 0 1em 1em; padding:0.6em 0.9em; border:1px solid #ccc; background:#f7f7f7; border-radius:4px; width:18em; font-size:0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[local_fastpix|FastPix for Moodle]]&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Plugins&#039;&#039;&#039;&lt;br /&gt;
* [[local_fastpix]] — foundation plugin&lt;br /&gt;
* [[mod_fastpix]] — FastPix Video activity&lt;br /&gt;
* [[filter_fastpix]] — video embeds filter&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
* [https://moodle.org/plugins/local_fastpix Plugins directory]&lt;br /&gt;
* [https://github.com/FastPix Source on GitHub]&lt;br /&gt;
* [https://docs.fastpix.io FastPix documentation]&lt;br /&gt;
* [https://www.fastpix.com/technical-support Support]&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This is the shared navigation template for the FastPix Moodle plugin documentation pages. Include it at the top of a plugin page with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{FastPix}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Templates]]&lt;br /&gt;
[[Category:Plugin documentation]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fastpix-devs</name></author>
	</entry>
</feed>