packages/compliance/a11y/remotion.dev/RGAA-2026-04-14.md
Audit date: 14.04.2026 Standard: RGAA 4.1.2 (maps to WCAG 2.1 AA / EN 301 549) URL: https://www.remotion.dev/ Test environment: Chrome + NVDA Method: Manual testing using browser developer tools to inspect the DOM and accessibility tree, as well as other tools: Axe DevTools, NVDA, Colour Contrast Analyser Reference: https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/ Auditor: Victoria (external) Overall result: 54% — Partially Conformant
The audit covered 13 pages representative of all content types and functionality on the site.
| # | Page name | URL |
|---|---|---|
| 1 | Home | https://www.remotion.dev/ |
| 2 | Contact | https://www.remotion.dev/contact |
| 3 | Blog | https://www.remotion.dev/blog |
| 4 | Creating a new project | https://www.remotion.dev/docs/ |
| 5 | Encoding Guide | https://www.remotion.dev/docs/encoding |
| 6 | Dockerizing a Remotion app | https://www.remotion.dev/docs/docker |
| 7 | Remotion Lambda | https://www.remotion.dev/lambda |
| 8 | Webhooks | https://www.remotion.dev/docs/lambda/webhooks |
| 9 | Starting the Studio | https://www.remotion.dev/docs/studio/ |
| 10 | Editor Starter | https://www.remotion.dev/docs/editor-starter |
| 11 | Remotion Timeline | https://www.remotion.dev/docs/timeline |
| 12 | Remotion Recorder | https://www.remotion.dev/docs/recorder |
| 13 | Remotion Convert | https://www.remotion.dev/convert |
| # | Theme | C | NC | NA | Rate |
|---|---|---|---|---|---|
| 1 | Images | 1 | 5 | 3 | 16.7% |
| 2 | Frames | 0 | 2 | 0 | 0% |
| 3 | Colors | 1 | 2 | 0 | 33.3% |
| 4 | Multimedia | 2 | 7 | 4 | 22.2% |
| 5 | Tables | 4 | 0 | 4 | 100% |
| 6 | Links | 0 | 2 | 0 | 0% |
| 7 | Scripts | 2 | 3 | 0 | 40% |
| 8 | Mandatory Elements | 7 | 0 | 3 | 100% |
| 9 | Information Structure | 1 | 2 | 1 | 33.3% |
| 10 | Presentation of Information | 7 | 7 | 0 | 50% |
| 11 | Forms | 5 | 2 | 6 | 71.4% |
| 12 | Navigation | 8 | 3 | 0 | 72.7% |
| 13 | Content Access | 5 | 2 | 5 | 71.4% |
| TOTAL | 43 | 37 | 26 | 54% |
Legend: C = Conformant, NC = Non-Conformant, NA = Not Applicable.
| # | Criterion | Status | Observations / Evidence |
|---|---|---|---|
| 1.1 | Does each image conveying information have an alternative text? | NC | Homepage "Trusted by": four logos without text alternatives — for logos containing text ("musixmatch", "wistia") the alternative must contain all visible text. Footer: "Remotion" logo without `alt`. On /blog numerous elements lack alt, including informative images. Same issue on /lambda. |
| 1.2 | Is each decorative image ignored by assistive technologies? | NC | On /blog numerous `` elements lack alt, including decorative images. |
| 1.3 | Is the alternative text of each informational image relevant? | C | Pass |
| 1.4 | Does each CAPTCHA image have an accessible alternative? | NA | No CAPTCHA present |
| 1.5 | Does each CAPTCHA have an alternative access method? | NA | No CAPTCHA present |
| 1.6 | Does each complex image have a detailed description? | NC | /blog "Lambda renders are now faster": numerous charts are complex images without sufficient textual alternatives. Provide descriptive summary and/or data-table equivalent. |
| 1.7 | Is each detailed description relevant? | NC | See 1.6 |
| 1.8 | Are text images replaced with styled text wherever possible? | NC | /blog under "What can I do with a multimedia library in the browser?" — image containing embedded text. Use real text and style with CSS. |
| 1.9 | Is each image caption correctly associated with the image? | NA | No <figure>/<figcaption> present |
Theme 1 result: 1 C, 5 NC, 3 NA
| # | Criterion | Status | Observations / Evidence |
|---|---|---|---|
| 2.1 | Does each frame have a title? | NC | /contact: iframe without title attribute. Add e.g. "Map showing Remotion office location". |
| 2.2 | Is the title of each frame relevant? | NC | See 2.1. /blog: four iframes share title "YouTube video player" — not unique, doesn't describe what each video is about. Same issue on /docs/editor-starter. |
Theme 2 result: 0 C, 2 NC, 0 NA
| # | Criterion | Status | Observations / Evidence |
|---|---|---|---|
| 3.1 | Is information conveyed by color also available through another means? | NC | /lambda: links "in the README", "here", "Licensing" differ from surrounding static text by color only. Same on /convert "Mediabunny" link under "Free and no ads". On /convert ("Use a sample file") "Rotate" and "Mirror" toggle switches indicate selected option by color only. Add underline/border on hover/focus; expose selected state programmatically. |
| 3.2 | Is the contrast between text color and background color sufficient? | NC | Site-wide: blue #0B84F3 on white #FFFFFF (3.7:1, required 4.5:1); white text on same blue also fails. Homepage links "Remotion Studio", "Remotion Player", "Remotion Editor Starter". Header: #969FAF "Search" placeholder on #EBEDF0 (2.3:1). Sticky "Ask AI" button: white on #8D8D8D (3.3:1). "Ask AI" dialog placeholders (2.5:1), "Made by CrawlChat" (2.5:1), hover state (1.5:1). /blog charts grey #A6A6A6 on white (2.4:1). /docs sidebar "Deprecated" #C2C5C9 (1.7:1), "Paid" #8F949B (3.1:1). /lambda grey #777777 (4.48:1). /convert footer "Powered by Mediabunny" pink #F6339A on #F8FAFC (3.4:1). /convert error text pink #FB2C7D (3.6:1). |
| 3.3 | Is the contrast between non-text components and adjacent colors sufficient? | C | Pass |
Theme 3 result: 1 C, 2 NC, 0 NA
| # | Criterion | Status | Observations / Evidence |
|---|---|---|---|
| 4.1 | Does each prerecorded audio-only media have a text transcript? | NC | Homepage "Use Cases" → "Year in review" tab: silent video inaccessible to blind users. Provide written description or audio description. |
| 4.2 | Does each prerecorded synchronized media have captions? | NC | Videos lack captions. |
| 4.3 | Does each prerecorded synchronized media have an audio description or text alternative? | C | Pass |
| 4.4 | For each prerecorded synchronized media with synchronized subtitles, are these subtitles relevant? | NC | /blog "We raised CHF 180k to simplify programmatic video!" — voiceover video with automatically generated captions that are inaccurate. |
| 4.5 | Does each prerecorded synchronized media have, if necessary, a synchronized audio description? | NC | /blog videos contain visual information (texts, logos, mottos, speaker names) without media alternative. Blind users miss this. Similar issue on /docs/editor-starter. |
| 4.6 | Is each audio description relevant? | NC | See 4.5 |
| 4.7 | Does each live synchronized media have captions? | NA | No live media present |
| 4.8 | Does each media player have a caption on/off control? | C | Pass |
| 4.9 | Does each media player have an audio description on/off control? | NA | No media player with audio description control |
| 4.10 | Is each automatically triggered sound player controllable by the user? | NA | No automatically triggered sound player |
| 4.11 | Does each media player provide all required controls? | NA | No interactive media player |
| 4.12 | Are all media player controls correctly labeled? | NC | Homepage: control buttons in "Banger.Show" video and under "Demo" (play, sound, export), and "Newsletter" submit. Same with play/sound on /convert when "Use a sample file" is clicked. |
| 4.13 | Does prerecorded media content that moves or blinks have a pause/stop mechanism? | NC | Homepage: 3 videos autoplay without pause/stop/hide. Same on /blog, /lambda. Disruptive for users with cognitive impairments. Provide a clear pause/stop/hide mechanism. |
Theme 4 result: 2 C, 7 NC, 4 NA
| # | Criterion | Status | Observations / Evidence |
|---|---|---|---|
| 5.1 | Does each complex data table have a summary? | NA | No complex table present |
| 5.2 | Is the caption of each complex data table relevant? | NA | No complex table present |
| 5.3 | Do layout tables linearize correctly? | C | Layout tables linearize properly |
| 5.4 | For each data table that has a title, is this title correctly associated? | NA | No data table with title present |
| 5.5 | Is the caption of each data table relevant? | NA | No data table with caption present |
| 5.6 | Are headers for each data table correctly declared? | C | Pass |
| 5.7 | Are headers associated with each cell of a data table? | C | Pass |
| 5.8 | Are layout tables free of structural markup? | C | No <table> markup used for layout |
Theme 5 result: 4 C, 0 NC, 4 NA
| # | Criterion | Status | Observations / Evidence |
|---|---|---|---|
| 6.1 | Is the purpose of each link clear? | NC | Homepage "Trusted by": four images function as links but have no accessible name describing destination. |
| 6.2 | Are identical links with the same destination consistently labeled? | NC | /lambda: several links with identical text "Learn more" and "Read docs" lead to different destinations. Link text must be distinguishable. |
Theme 6 result: 0 C, 2 NC, 0 NA
| # | Criterion | Status | Observations / Evidence |
|---|---|---|---|
| 7.1 | Is each script, if necessary, compatible with assistive technologies? | NC | Homepage: video controls in "Banger.Show" and under "Demo" (play/sound/export) and "Newsletter" submit lack accessible names. "Company License" sliders (<input>) lack accessible names. "Company License" toggles that expand/hide content implemented as <div> elements without roles/names — should be <button> (or role="button") with aria-expanded. Same toggle issue on /convert. /docs: arrow button next to "Copy page" has no accessible name. |
| 7.2 | Is each script controllable by keyboard and any pointing device? | NC | Homepage "Company License" toggle sliders receive keyboard focus even when hidden — collapsed-section inner elements should be excluded from tab order. Homepage "Company License" "i" icon tooltips not keyboard-accessible. Homepage "Company License" toggle switches not keyboard-accessible; same on /convert. Site-wide: "Ask AI" button not keyboard-accessible. Homepage "Demo" drag-and-drop widgets not keyboard-accessible. |
| 7.3 | Does each script avoid keyboard traps? | C | No keyboard trap |
| 7.4 | Does each script that triggers context changes warn the user? | C | Pass |
| 7.5 | Are status messages correctly rendered by assistive technologies? | NC | /docs: "Copy page" → "Copied" message not announced; add aria-live="polite". /docs/lambda/webhooks: "Send success/timeout/error" wait spinner not accessible. /convert: "Convert" progress ("xx% is converted") not announced. |
Theme 7 result: 2 C, 3 NC, 0 NA
| # | Criterion | Status | Observations / Evidence |
|---|---|---|---|
| 8.1 | Does each web page have a valid DOCTYPE? | C | Pass |
| 8.2 | Does each web page have a language attribute? | C | Pass |
| 8.3 | Is the language attribute pertinent? | C | Pass |
| 8.4 | Are language changes within page content marked up? | NA | No foreign language content requiring lang attribute change present |
| 8.5 | Is the language attribute for each language change pertinent? | NA | No foreign language content requiring lang attribute change present |
| 8.6 | Does each web page have a relevant page title? | C | Pass |
| 8.7 | Does each web page have no duplicate IDs? | C | Pass |
| 8.8 | Is each HTML tag used according to its specification? | C | Pass |
| 8.9 | Are HTML tags not used solely for presentational purposes? | C | Pass |
| 8.10 | Is the source code direction relevant? | NA | No RTL content |
Theme 8 result: 7 C, 0 NC, 3 NA
| # | Criterion | Status | Observations / Evidence |
|---|---|---|---|
| 9.1 | Is the information structured by headings? | NC | Homepage: "Free License", "Company License", "Enterprise License" visually headings but not marked up. Footer: "Remotion", "Community", "More". Homepage: "Questions about our license?", "Get help with your Remotion project", "Editor Starter". /blog "Remotion Editor Starter": many headings use <strong> ("Demo", "Before you buy", "Buy") — <strong> is for emphasis, not headings. /lambda: "15 sec1", "12 min", "200x", "from $0.01" use <h1> for styling only — should be <p> styled with CSS. /docs/encoding: many <em> used for styling only — use <i> or CSS. |
| 9.2 | Are landmarks present and relevant? | C | Pass |
| 9.3 | Is each list correctly structured? | NC | Homepage: 4-item list under "Free License" lacks <ul>/<li>. Same under "Company License" and "Enterprise License". /blog list under "Easier data-driven videos" lacks list markup; same on /lambda. /lambda "Build video apps" cards: <hr> elements placed directly inside <ul> (not allowed as children of list) — use CSS to create visual separators. |
| 9.4 | Are quotations correctly marked up? | NA | No quotations present |
Theme 9 result: 1 C, 2 NC, 1 NA
| # | Criterion | Status | Observations / Evidence |
|---|---|---|---|
| 10.1 | Is the information still visible when stylesheets are disabled? | C | Pass |
| 10.2 | Does the content remain visible without stylesheets? | C | Pass |
| 10.3 | Is the reading order consistent when stylesheets are disabled? | C | Pass |
| 10.4 | Can text be resized to 200% without loss of content or functionality? | NC | /convert at 1280×1024 and 200% zoom: data under "video-1m.mp4" becomes invisible. Same after clicking "Show details". |
| 10.5 | Are CSS declarations for background colors and fonts used correctly? | C | Pass |
| 10.6 | Is each link in a block of text visually distinguishable from surrounding text? | NC | /lambda: links "in the README", "here", "Licensing" differ from surrounding static text by color only. Same on /convert with "Mediabunny" link under "Free and no ads". |
| 10.7 | On every web page, for every element that receives focus, is the focus indicator visible? | NC | Site-wide focus not visible on "$ npx create-video@latest" button, "export" button in Demo video, "submit" under "Newsletter". Same on /docs/lambda/webhooks with "Send success/timeout/error". /convert: "Choose file", "Use a sample file", "Load from URL". /docs: "Copy page" and adjacent arrow button. |
| 10.8 | Is hidden content correctly ignored by assistive technologies? | C | Pass |
| 10.9 | Is information never given solely through shape, size, or visual location? | C | Pass |
| 10.10 | Is information never given solely through color (for presentation)? | NC | See 3.1 — links distinguished only by color on some pages. |
| 10.11 | Can content be read without horizontal scrolling at 320 CSS px width? | NC | /convert at 1280×1024 and 200% zoom: data under "video-1m.mp4" becomes invisible. |
| 10.12 | Does text spacing adjustments cause any loss of content or functionality? | C | Pass |
| 10.13 | Can additional content appearing on hover or focus be dismissed without losing context? | NC | Main menu submenus expand on hover and overlap other content — no way to close without moving pointer/focus. Homepage "Company License" "i" icons ("$250 Mux credits", "Remotion for Creators", "Remotion for Automators") show tooltips on hover that overlap page content; Escape key not handled. |
| 10.14 | Is additional content appearing on hover or focus controllable by the user? | NC | Homepage "Company License" "i" icons not keyboard-accessible. Use focusable control (e.g. <button>) as tooltip trigger; show tooltip on both hover and keyboard focus. |
Theme 10 result: 7 C, 7 NC, 0 NA
| # | Criterion | Status | Observations / Evidence |
|---|---|---|---|
| 11.1 | Does each form field have a label? | NC | Homepage "Newsletter" input with placeholder [email protected] has no persistent label — placeholder disappears on typing. Same on /convert "Load from URL" dialog. Homepage "Company License" sliders (<input>) have no accessible names. /docs/lambda/webhooks: two input fields; visible labels not programmatically associated. |
| 11.2 | Is each label correctly associated with its form field pertinent? | NC | See 11.1. On /convert ("Use a sample file"), the "Resample" toggle opens a "Sample Rate" combobox whose label is not correctly associated. |
| 11.3 | Are similar labels consistent? | C | Pass |
| 11.4 | Are form fields of the same type grouped together? | NA | No group inputs present |
| 11.5 | Is the grouping legend relevant? | NA | No group inputs present |
| 11.6 | Is the type of grouping consistent for all groups of the same nature? | NA | No group inputs present |
| 11.7 | Is each grouping legend relevant in each form? | NA | No group inputs present |
| 11.8 | Are the required fields indicated? | NA | No required fields present |
| 11.9 | Can the purpose of each input be programmatically determined? | C | Pass |
| 11.10 | Are error messages relevant and linked to the field in error? | NA | No fields with error messages |
| 11.11 | Does each error message suggest a correction? | C | Pass |
| 11.12 | Is there a mechanism to review data before submitting legal/financial transactions? | C | Pass |
| 11.13 | Is accessible help available when filling in forms? | C | Pass |
Theme 11 result: 5 C, 2 NC, 6 NA
| # | Criterion | Status | Observations / Evidence |
|---|---|---|---|
| 12.1 | Is a skiplink present on each page? | C | Pass |
| 12.2 | Is there more than one way to find a page within the site? | C | Pass |
| 12.3 | Is the navigation consistent across pages? | C | Pass |
| 12.4 | Is active page indicated? | C | Pass |
| 12.5 | Are multiple navigation sets identifiable? | C | Pass |
| 12.6 | Are skip links and navigation links visible when they receive keyboard focus? | C | Pass |
| 12.7 | Do skip links work on all pages? | C | Pass |
| 12.8 | Is the tabulation order consistent with the logical reading order of the page? | NC | Homepage "Company License" toggle switches open sliders that receive focus even when not visible — exclude collapsed-section inner elements from tab order. Homepage: after "Remotion for Automators" slider, focus moves to invisible interactive element. Homepage: double focus on "Schedule a call", "Write an email", "Purchase" and other links (a nested <button> inside <a>); same on /contact with "Contact via email", "Schedule evaluation call", "Join Discord". /blog code sections: "Copy" buttons focusable but invisible on focus; same on /docs/ and other code-containing pages. Mobile menu opened from hamburger on / lets focus escape to underlying page — trap focus within the open menu. |
| 12.9 | Is navigation fully operable by keyboard? | NC | See 7.1 and 7.2 |
| 12.10 | Is single-character keyboard shortcuts manageable? | NC | /blog "Remotion Editor Starter": embedded YouTube player has single-key shortcuts (e.g. k play/pause, m mute) that interfere with screen readers and can cause issues for voice-control and for users who press keys by accident. |
| 12.11 | Is content accessible in both portrait and landscape orientation? | C | Pass |
Theme 12 result: 8 C, 3 NC, 0 NA
| # | Criterion | Status | Observations / Evidence |
|---|---|---|---|
| 13.1 | Does the user have control over any session time limits? | NA | No visible timeout mechanism present |
| 13.2 | Does the user have control over any time-based page refresh? | C | Pass |
| 13.3 | Are links that open in a new window or tab indicated? | C | Pass |
| 13.4 | Are the format and size of downloadable documents indicated? | NA | No files to download present |
| 13.5 | Are downloadable documents accessible or is an accessible alternative provided? | NA | No files to download present |
| 13.6 | Does cryptic content (ASCII art, emoticons, cryptic syntax) have text alternative? | NC | /docs/encoding: under heading "Audio codec", "Default" column shows icons with checkboxes. Informative but no textual alternative. |
| 13.7 | Is content available without reliance on CSS-only content property? | C | Pass |
| 13.8 | Can moving or blinking content be paused, stopped or hidden? | NC | Homepage: videos autoplay with no pause/stop/hide mechanism. Same with animations on /blog and /lambda. Disruptive for users with cognitive impairments. |
| 13.9 | Is the content viewable regardless of the screen orientation (portrait or landscape)? | C | Pass |
| 13.10 | Is there an alternative to complex gestures (pinch, swipe, drag)? | NA | No complex gestures present |
| 13.11 | Does the page avoid automatic audio playback? | C | Pass |
| 13.12 | Is there an alternative to motion activation? | NA | No device motion features present |
Theme 13 result: 5 C, 2 NC, 5 NA
| Priority | RGAA criterion | Recommended action |
|---|---|---|
| Critical | 3.2 | Fix text contrast site-wide: change primary blue #0B84F3 to a darker shade meeting 4.5:1; fix placeholder, sidebar, and button text contrasts. |
| Critical | 7.1 | Add accessible names (aria-label) to all interactive controls: video player buttons, toggle switches, dialogs, sliders. Use semantic <button> with aria-expanded. |
| Critical | 4.12, 4.13, 13.8 | Add accessible names to media player controls; provide pause/stop mechanism for auto-playing videos and animations. |
| High | 11.1, 11.2 | Associate visible persistent labels with all form inputs; replace placeholder-only labels; programmatically link labels via <label> + for/id. |
| High | 7.2 | Ensure all interactive elements are keyboard operable: toggle switches, color pickers, drag-and-drop widgets, "Ask AI" button. |
| High | 10.7 | Ensure visible keyboard focus indicator on all interactive elements: buttons, links, and custom controls across all pages. |
| High | 12.8 | Fix tab order: remove hidden elements from tab sequence; eliminate nested interactive elements (<button> inside <a>); trap focus in modal dialogs. |
| Medium | 9.1, 9.3 | Use proper heading elements instead of <strong>; remove non-heading content from <h1> tags; use correct list markup (<ul>/<li>). |
| Medium | 3.1, 10.6, 10.10 | Ensure links in text blocks have underline or non-color visual indicator; maintain 3:1 contrast against surrounding text. |
| Medium | 7.5 | Add aria-live regions for dynamic status messages: copy confirmations, progress indicators, loading spinners. |
| Medium | 10.4, 10.11 | Fix content visibility at 200% and 400% zoom and 320px width; ensure text reflow at all zoom levels. |
| Medium | 2.1, 2.2 | Add unique, descriptive title attributes to all iframes. |
| Medium | 6.1, 6.2 | Provide descriptive accessible names for image links; differentiate link text for links leading to different destinations. |
| Low | 1.1 | Add meaningful alt text to all informative images; add empty alt="" to decorative images; ensure footer logo has alt attribute on all pages. |
| Low | 4.1–4.6 | Add text transcripts and audio descriptions for multimedia content; fix auto-generated captions. |
| Low | 1.6–1.8 | Provide detailed descriptions for complex images (charts); replace text images with styled text. |
| Low | 10.13, 10.14, 12.10, 13.6 | Allow tooltip dismissal via Escape key; manage single-key shortcuts in embedded players; add text alternatives for cryptic content. |
Based on this audit, www.remotion.dev achieves 54% compliance with RGAA v.4.1.2 criteria, qualifying as Partially Conformant.
Primary gaps are with videos and frames, link accessibility, images, color contrast, and accessibility issues in input fields and other interactive elements. The application performs well on tables, mandatory elements, and content access.
This report was prepared on the basis of RGAA v.4.1.2 criteria and tests. Auditor: Victoria (external) — Chrome + NVDA Reference: https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/