Platform reference · Moodle (open-source) · MoodleCloud · Moodle Workplace · H5P · LTI 1.3
Moodle captions: file resource, H5P, and self-hosted retrofit
Moodle is the dominant open-source LMS in the world — by tenant count, the largest single LMS in EU higher education, the second-largest in US K-12, and a meaningful share of the corporate-L&D mid-market that prefers open-source infrastructure. The deployment pattern is what makes Moodle's captioning operationally distinct from Canvas, Brightspace, or Cornerstone: most Moodle tenants are self-hosted on the institution's own filesystem, which means the caption-track storage, retrieval, and access-control posture is the institution's responsibility, not a vendor's. Captioning a Moodle catalogue runs through three video surfaces: file-resource video with sidecar VTT or SRT, H5P interactive video's per-segment captioning, and external video embedded through the URL or oEmbed filter. After the EAA in EU member states, AODA in Ontario, and ADA Title II in the US, the back-catalogue retrofit is urgent at every Moodle tenant in scope.
TL;DR
A Moodle captioning workflow has three surfaces. (1) File-resource video — instructors upload an MP4 to the course Files area and embed it through Atto or TinyMCE; sidecar WebVTT or SRT caption files attach via the editor's media plug-in (the VideoJS player reads the track element). (2) H5P interactive video — the H5P content type ingests video and exposes a per-segment caption-text editor; H5P stores the caption inside the H5P package, not in a sidecar file. (3) External video via URL or oEmbed filter — YouTube, Vimeo, Panopto, Kaltura, Microsoft Stream, Loom embeds; captioning is the source platform's. Self-hosted Moodle's caption posture is GDPR-friendly by default (caption files live on the institution's filesystem, not in a vendor's cloud) but adds operational responsibility for backup, access control, and per-language track management. The retrofit pattern: inventory the catalogue → identify which surface owns each asset → re-caption with glossary-biased output → publish back to each surface → log the asset register for the EAA, AODA, or Title II audit-evidence pack.
Moodle's deployment shapes — and why captioning operates differently in each
Moodle is open-source GPLv3 software available in three principal deployment shapes, and the captioning operational pattern varies between them:
- Self-hosted Moodle. The institution runs the LMS on its own infrastructure (typically a Linux + PHP + MariaDB / PostgreSQL stack, often containerised). Caption files live on the institution's filesystem in the Moodle data directory; access control runs through Moodle's role-and-capability system. This is the default in most EU public universities, large NGOs, and government training arms. GDPR posture is straightforward — the caption text never leaves the institution's data residency.
- MoodleCloud. Moodle's hosted service, run on AWS by Moodle HQ. Caption files live in MoodleCloud's storage; the data-processing-agreement framing is between the institution and Moodle Pty Ltd. Common at SMB tenants and at institutions wanting Moodle without the operational footprint.
- Moodle Workplace. The premium variant for corporate-L&D buyers, distributed through Moodle Partners (commercial implementers). Captioning surfaces are the same as core Moodle; the Workplace addition is per-organisation reporting, learning paths, and dynamic rules — none of which change the caption-track shape.
For the EU SMB on EAA timelines, self-hosted Moodle is the default. For the US public-university or US K-12 tenant on Title II timelines, the deployment is often a managed-Moodle relationship with a Moodle Partner (Catalyst, eThink, Lambda Solutions, Moonami) where the partner runs the infrastructure and the institution owns the data.
Surface 1 — File-resource video with sidecar captions
The most common Moodle captioning surface is video uploaded as a course File resource (or via the Atto / TinyMCE media plug-in inside any text-editor surface). The flow:
- Add a File resource to the course or insert a media element into a Page, Label, Lesson, or Forum post.
- Open the media plug-in's Insert Media dialog. The Advanced tab exposes a Subtitles & Captions panel.
- Upload the caption track in WebVTT or SRT format. Set the language and the role (captions, descriptions, or chapters per the HTML5
trackkinds). - Save. Moodle's VideoJS-based player exposes the CC button and serves the caption track as an HTML5
trackelement.
Operational realities for the file-resource surface:
- Caption files inherit course context permissions. They're stored in the Moodle file area for the course and respect the course-level enrolment access control. For a public-facing self-enrolment course, captions are public by default; for a private course, captions inherit private access.
- Multi-language tracks attach by repeated insertion. Each language is a separate
trackelement added through the same dialog. The student's browser exposes the language selector through the VideoJS UI. - Course backup carries captions. A Moodle course backup (
.mbz) includes the caption files. Course restore brings them back, including the editor-side track associations — better behaviour than Canvas or Brightspace's course-copy pattern. - The Atto editor's media plug-in is the modern default. Older tenants on TinyMCE work, but the Subtitles & Captions panel landed earliest in Atto and is more polished there. Moodle 4.0+ tenants are typically on Atto.
For format choice, see the SRT and VTT reference pages — Moodle's player handles both, with VTT preferred when styling cues are needed.
Surface 2 — H5P interactive video
H5P is an open-source content-type framework heavily used inside Moodle. Of the H5P content types, "Interactive Video" is what most institutions use for video that needs in-line questions, summary tasks, branch points, or chapter navigation — and it has its own captioning surface.
The H5P interactive-video caption flow:
- Open the Interactive Video editor inside Moodle's H5P plug-in.
- On Step 1 (Upload video), the editor accepts the source MP4, WebM, or Vimeo URL.
- On Step 1's "Add subtitles" panel, upload a WebVTT track. Set the language. H5P stores the WebVTT inside the H5P package as part of the content.
- On Step 2 (Add interactions), the captioned playback runs alongside whatever questions, summary tasks, or chapter markers the editor adds.
- Publish the H5P content into the Moodle activity. The Moodle student view exposes the captions through H5P's player.
Two H5P-specific operational details matter:
- Captions are inside the H5P package, not the Moodle filesystem. A self-hosted Moodle's H5P content lives in the database and the H5P content directory. Re-captioning means editing the H5P package, not replacing a sidecar file. The H5P bulk export/import workflow is the volume tool.
- Per-segment captions are the H5P interactive-video shape. H5P's editor lets the author break the video into chapters and attach interactions; the caption track flows over the whole video, not per chapter, but the chapter-level summary tasks introduce reading-time questions about caption content.
Many institutions use H5P interactive video specifically for graded compliance training (HIPAA, SOX, GDPR, OSHA), where the in-line question is the audit-evidence artefact. Captioning quality on these videos is doubly important — the question depends on the student reading the caption right.
Surface 3 — External video via URL or oEmbed filter
Moodle's URL filter and oEmbed/multimedia plug-in expand pasted URLs from supported video platforms into embedded players. The captioning workflow follows the source platform:
- YouTube. Most prevalent; channel-owner manages captions. YouTube auto-captions are not sufficient for SC 1.2.2.
- Vimeo. See Vimeo captions for training videos — five caption formats supported, embed travels with the captions.
- Panopto, Kaltura. Embedded through their respective Moodle plug-ins (Panopto Block, Kaltura Video Package); see Panopto captions and Kaltura captions.
- Microsoft Stream. Common at corporate-L&D Moodle Workplace tenants on M365; see Microsoft Stream captions.
- Loom. Async-video for SaaS-flavoured Moodle tenants; see Loom captions.
The external-video surface is what most institutions miss in the catalogue audit. Title II / EAA / AODA all reach the video the student sees through the LMS, regardless of where the video is hosted.
The EAA sampling pattern, applied to a Moodle tenant
EU member-state market-surveillance authorities are the operational enforcement bodies under the European Accessibility Act (Directive 2019/882, transposed into member-state law and enforceable since 2025-06-28). The pattern when an authority lands on a Moodle tenant looks like this:
- Inspector opens the institution's public-facing portion of the Moodle site (often a public-enrolment course catalogue or a public OER programme).
- Inspector finds video. Often this is a welcome video, an open-online-course module, an open-access programme description.
- Inspector watches a slice with captions on.
- Inspector reads the caption track against the audio.
- If proper nouns the speaker is teaching are mangled, the inspector flags the accessibility statement (mandatory under the EAA + EN 301 549 V3.2.1) as out of conformance with the substantive captioning bar.
Member-state schedules vary. Germany's MLBF, France's DGCCRF, Italy's AgID, Spain's OADIS, and the Netherlands' Inspectie Leefomgeving en Transport (or sectoral equivalents) all run sampling sweeps. The 2025-06-28 deadline has passed; the 2026 cycle is expected to focus on tenants that previously published a "fully compliant" accessibility statement. See the accessibility statement template for the per-clause structure.
The proper-noun failure mode in Moodle content
Moodle's strongest concentrations are in EU higher education, large NGOs, government training, and corporate-L&D mid-market. The proper-noun failure mode varies by tenant type:
- EU regulatory citations. "GDPR" → unevenly cased; "ePrivacy Directive" → "e privacy directive"; "PSD2" → "P-S-D-two"; "DORA" → "Dora" (capitalisation drift); "NIS2" → "N-I-S-two"; "DSA" / "DMA" → letter-by-letter; "Schrems II" → "Shrems two".
- EU programme and agency names. "EUIPO" → letter-by-letter, "ENISA" → "Enisa", "EBA" / "EIOPA" / "ESMA" / "ESAs" → letter-by-letter, "EU-OSHA" → "EU OSHA", "EUR-Lex" → "Eurolex".
- Member-state regulatory citations. "BDSG", "PHIPA" (in Canada-French content), "Loi Informatique et Libertés", "Lei Geral de Proteção de Dados" (LGPD where Brazilian content shows up). Variation is wide.
- Higher-ed programme names in non-English languages. Long compound German nouns ("Wirtschaftsinformatik", "Verwaltungsrechtswissenschaft"); French course titles ("Sciences cognitives appliquées"); Italian and Spanish degree names; Polish and Czech academic terms.
- Indigenous community and language names (in Canadian Moodle tenants) — see the AODA captions reference.
- Healthcare drug, procedure, and instrument names for medical-faculty Moodle tenants — see medical training video captions.
The shared pattern: the words an EU or international Moodle student must learn to do their job are exactly the words generic STT has the least training data for, particularly in non-English-language content where the training data is thinner.
The back-catalogue retrofit pattern
For a self-hosted Moodle institution sitting on years of un-captioned or auto-captioned video, the retrofit runs in five phases:
- Inventory. Use Moodle's Web Services API (token-authenticated) to enumerate file resources and H5P content; cross-reference course backup directories on the filesystem; pull external-platform inventories from Panopto, Kaltura, Vimeo, YouTube. Self-hosted Moodle benefits from filesystem-direct grep — every
.vttand.srtfile in the data directory is on the institution's disks. - Triage. Mandatory-enrolment courses first; regulated-content modules first within those; public-facing OER and self-enrolment programme content first within marketing.
- Re-caption. Run glossary-biased captioning across the triaged catalogue. The glossary is built once and applies to every retrofit asset — institutional acronyms, programme names, faculty names, regulatory citations relevant to the institution's content profile.
- Publish. Sidecar VTT/SRT for file-resource video; replace the WebVTT inside H5P interactive video packages; upload through the platform API for Panopto/Kaltura/Vimeo; channel-owner action for YouTube.
- Log. Maintain an asset register tied to the institution's accessibility statement (under EAA + EN 301 549 V3.2.1, the statement is required and lists feedback and reporting mechanisms). The asset register is the documentation the market-surveillance inspector or the AODA Accessibility Compliance Authority asks for.
Self-hosted Moodle's data-residency advantage
Self-hosted Moodle's caption-text never leaves the institution's data residency unless the institution chooses to send it externally. For tenants in regulated-data verticals — EU public universities under member-state data-protection regimes, US healthcare institutions under HIPAA, US federal-contractor institutions under Section 508, EU healthcare under GDPR Article 9 — the self-hosted posture is what allows on-prem (or private-cloud) glossary-biased captioning without an external data-processing agreement.
The captioning workflow can run as a job inside the Moodle host, calling out to a glossary-biased captioning service over an institution-controlled boundary. The caption file lands back in the Moodle file area; the audit trail is the institution's. This is materially distinct from a vendor-cloud Canvas or Brightspace tenant, where the caption text passes through Instructure or D2L's infrastructure.
FAQ — Moodle captioning
Does Moodle ship with auto-captioning?
Core Moodle does not. Auto-captioning in a Moodle tenant comes through one of three paths: a vendor LTI integration that runs auto-caption on the source video before embedding (Panopto, Kaltura, Microsoft Stream, Vimeo); an explicit captioning plug-in (Captionscan, AcademyOcean, Cielo24-style integrations exist, with varying maintenance levels); or an admin-installed external pipeline that produces caption files and a Moodle file-area drop. The H5P interactive-video editor doesn't auto-caption; it accepts a WebVTT track.
What format does the Atto / TinyMCE media plug-in accept?
WebVTT and SRT are accepted in current Moodle versions. WebVTT is preferred where positioning cues, styling, or speaker-identification metadata are needed. SRT is the universal default and works across the consumption surface.
How do I bulk-replace captions in a back-catalogue retrofit?
Self-hosted Moodle: enumerate the file resources via the Web Services API or directly off the filesystem; map each video to its caption file (sidecar pattern is one-to-one); replace the caption file in place; clear the relevant Moodle cache. For H5P interactive video, the bulk export-import workflow (admin Site Administration → H5P → Manage H5P content) lets you re-upload an updated H5P package with a corrected WebVTT inside.
How does H5P captioning differ from H5P caption styling on the player?
The captioning is the WebVTT track loaded through the editor's "Add subtitles" step. The player's caption styling — font size, contrast, position — is governed by the H5P player CSS, which the institution can override at the site level. WCAG AA does not require a specific font-size; it requires that captions are readable in context.
Does MoodleCloud handle captions differently from self-hosted?
The user-facing captioning surfaces are identical. The differences are storage location and data-residency posture: MoodleCloud stores caption files in MoodleCloud's AWS-region of the institution's choice (EU regions are available); self-hosted stores them on the institution's filesystem. For GDPR-strict tenants, self-hosted is the cleanest posture; for GDPR-routine tenants, MoodleCloud's EU-region option is operationally fine.
Are H5P-only courses subject to the same captioning bar as file-resource video?
Yes. SC 1.2.2's substantive-accuracy bar applies to prerecorded audio-visual content, regardless of the player wrapper. H5P interactive video is a wrapper around prerecorded video; the captions on the underlying video have to clear the same accuracy bar.
What if a Moodle Partner runs our infrastructure — whose caption posture is it?
The institution's. The partner is a data processor under GDPR Article 28 and a service provider under most institutional procurement frames; the captions and the underlying video are the institution's content. The partner contract typically specifies the partner's role for caption-file backup, retention, and incident response, but doesn't transfer the substantive accessibility obligation. The accessibility statement is the institution's, not the partner's.
Further reading
- EAA captions: EU member-state context
- AODA captions: Ontario IASR rule
- ADA Title II captions: 2026-04-24 deadline
- WCAG 2.1 AA captions reference
- SC 1.2.2 Captions (Prerecorded) explained
- WebVTT captions for training videos
- SRT captions for training videos
- University lecture-capture captions
- EU accessibility statement template, annotated