$npx -y skills add mgifford/accessibility-skills --skill audio-videoLoad this skill whenever the project contains audio or video content, media players, podcasts, video embeds, or any <audio>/<video> elements. Under no circumstances publish audio or video without captions, transcripts, and audio descriptions where required. Absolutely always appl
| 1 | # Audio/Video Accessibility Skill |
| 2 | |
| 3 | > **Canonical source**: `examples/AUDIO_VIDEO_ACCESSIBILITY_BEST_PRACTICES.md` in `mgifford/ACCESSIBILITY.md` |
| 4 | > This skill is derived from that file. When in doubt, the example is authoritative. |
| 5 | |
| 6 | Apply these rules when implementing or reviewing any audio or video content. |
| 7 | **Only load this skill if the project contains audio or video.** |
| 8 | |
| 9 | --- |
| 10 | |
| 11 | ## Core Mandate |
| 12 | |
| 13 | Accessible media provides equivalent access to speech, sound, visual |
| 14 | information, and playback controls. The required alternatives depend on |
| 15 | whether the media is audio-only, video-only, synchronized, prerecorded, or live. |
| 16 | |
| 17 | Plan captions, description, transcripts, and sign-language access **before |
| 18 | production begins**. Use qualified human review — unreviewed automatic output |
| 19 | is not an accessible final deliverable. Keep alternatives easy to find next |
| 20 | to the media, and preserve them when media is embedded, translated, archived, |
| 21 | or moved to another platform. |
| 22 | |
| 23 | --- |
| 24 | |
| 25 | ## Severity Scale (this skill) |
| 26 | |
| 27 | | Level | Meaning | |
| 28 | | --- | --- | |
| 29 | | **Critical** | Media content completely inaccessible to a disability group | |
| 30 | | **Serious** | Access significantly impaired; workaround unreasonable to expect | |
| 31 | | **Moderate** | Access degraded but partially available | |
| 32 | | **Minor** | Best-practice gap; marginal impact on access | |
| 33 | |
| 34 | --- |
| 35 | |
| 36 | ## What the Media Requires (WCAG Level Matrix) |
| 37 | |
| 38 | The time-based media criteria are cumulative — Level AA includes applicable |
| 39 | Level A requirements. |
| 40 | |
| 41 | | Media type | Level A | Level AA | Level AAA / additional practice | |
| 42 | |---|---|---|---| |
| 43 | | Prerecorded audio-only | Transcript (alternative for time-based media) | — | Enhanced presentation | |
| 44 | | Prerecorded video-only | Alternative or equivalent audio track | — | Media alternative (1.2.8) | |
| 45 | | Prerecorded synchronized audio+video | Captions; audio description OR full media alternative | Audio description | Sign-language, extended audio description, media alternative | |
| 46 | | Live synchronized audio+video | No caption criterion | Live captions | Additional language/description services | |
| 47 | | Live audio-only | No criterion | No criterion | Equivalent live alternative (1.2.9) | |
| 48 | |
| 49 | **No meaningful audio/visual information:** video with no meaningful audio |
| 50 | (silence, decorative music) doesn't need captions. Audio with no speech can |
| 51 | still need a transcript if meaningful sound communicates information. |
| 52 | Decorative video conveys no information, but continuous motion can still |
| 53 | require pause controls. If all important visual information is already |
| 54 | spoken, no additional audio description is needed. Document these decisions |
| 55 | per-file rather than assuming every video has identical requirements — and do |
| 56 | not label primary media "an alternative for text" merely to avoid captions/ |
| 57 | description/transcript. |
| 58 | |
| 59 | --- |
| 60 | |
| 61 | ## Critical: Never Autoplay Audible Media |
| 62 | |
| 63 | ```html |
| 64 | <!-- Never do this --> |
| 65 | <video src="intro.mp4" autoplay></video> |
| 66 | |
| 67 | <!-- Muted autoplay still needs reduced-motion handling and a pause control --> |
| 68 | <video src="background.mp4" autoplay muted loop playsinline |
| 69 | controls aria-label="Background animation — muted by default"></video> |
| 70 | @media (prefers-reduced-motion: reduce) { |
| 71 | video[autoplay] { display: none; } |
| 72 | } |
| 73 | ``` |
| 74 | |
| 75 | WCAG 1.4.2 does not literally ban every autoplay instance — it requires a |
| 76 | mechanism to pause/stop audio playing automatically for more than 3 seconds, |
| 77 | or independent volume control. **This project's stricter rule: do not |
| 78 | autoplay audible media at all**, to avoid interfering with screen reader |
| 79 | speech. If sound autoplays for any reason, the stop/pause/mute control must |
| 80 | be the first keyboard stop on the page. |
| 81 | |
| 82 | **Muted autoplay does not resolve every issue:** meaningful audio is |
| 83 | unavailable while muted; moving content can distract or cause physical |
| 84 | symptoms; motion for 5+ seconds alongside other content can need pause/stop/ |
| 85 | hide (WCAG 2.2.2); users who request reduced motion should not get automatic |
| 86 | decorative motion regardless of a caption track existing. |
| 87 | |
| 88 | --- |
| 89 | |
| 90 | ## Critical: Captions on Pre-recorded Video with Audio |
| 91 | |
| 92 | ```html |
| 93 | <video controls preload="metadata" playsinline poster="training-poster.jpg"> |
| 94 | <source src="training.mp4" type="video/mp4"> |
| 95 | <track kind="captions" src="training.en.vtt" srclang="en" label="English captions" default> |
| 96 | <track kind="subtitles" src="training.fr.vtt" srclang="fr" label="Sous-titres français"> |
| 97 | <p>Your browser cannot play this video. <a href="training.mp4">Download the video</a>.</p> |
| 98 | </video> |
| 99 | ``` |
| 100 | |
| 101 | Use `kind="captions"` for tracks including dialogue AND meaningful non-speech |
| 102 | audio; use `kind="subtitles"` for translated dialogue only — subtitles |
| 103 | containing only dialogue are **not** a replac |