mgifford/accessibility-skills/audio-video
Claude Code and agent skill by mgifford/accessibility-skills
- community
Checking that the SKILL.md file is still in the repository.
Load 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 apply WCAG 1.2 criteria for time-based media.
Install
npx vskill@latest install mgifford/accessibility-skills/audio-videoSKILL.md
Audio/Video Accessibility Skill
Canonical source:examples/AUDIO_VIDEO_ACCESSIBILITY_BEST_PRACTICES.mdinmgifford/ACCESSIBILITY.mdThis skill is derived from that file. When in doubt, the example is authoritative.
Apply these rules when implementing or reviewing any audio or video content. Only load this skill if the project contains audio or video.
Core Mandate
Accessible media provides equivalent access to speech, sound, visual information, and playback controls. The required alternatives depend on whether the media is audio-only, video-only, synchronized, prerecorded, or live.
Plan captions, description, transcripts, and sign-language access before production begins. Use qualified human review — unreviewed automatic output is not an accessible final deliverable. Keep alternatives easy to find next to the media, and preserve them when media is embedded, translated, archived, or moved to another platform.
Severity Scale (this skill)
| Level | Meaning | |
|---|---|---|
| Critical | Media content completely inaccessible to a disability group | |
| Serious | Access significantly impaired; workaround unreasonable to expect | |
| Moderate | Access degraded but partially available | |
| Minor | Best-practice gap; marginal impact on access |
What the Media Requires (WCAG Level Matrix)
The time-based media criteria are cumulative — Level AA includes applicable Level A requirements.
| Media type | Level A | Level AA | Level AAA / additional practice | |
|---|---|---|---|---|
| Prerecorded audio-only | Transcript (alternative for time-based media) | — | Enhanced presentation | |
| Prerecorded video-only | Alternative or equivalent audio track | — | Media alternative (1.2.8) | |
| Prerecorded synchronized audio+video | Captions; audio description OR full media alternative | Audio description | Sign-language, extended audio description, media alternative | |
| Live synchronized audio+video | No caption criterion | Live captions | Additional language/description services | |
| Live audio-only | No criterion | No criterion | Equivalent live alternative (1.2.9) |
No meaningful audio/visual information: video with no meaningful audio (silence, decorative music) doesn't need captions. Audio with no speech can still need a transcript if meaningful sound communicates information. Decorative video conveys no information, but continuous motion can still require pause controls. If all important visual information is already spoken, no additional audio description is needed. Document these decisions per-file rather than assuming every video has identical requirements — and do not label primary media "an alternative for text" merely to avoid captions/ description/transcript.
Critical: Never Autoplay Audible Media
WCAG 1.4.2 does not literally ban every autoplay instance — it requires a mechanism to pause/stop audio playing automatically for more than 3 seconds, or independent volume control. This project's stricter rule: do not autoplay audible media at all, to avoid interfering with screen reader speech. If sound autoplays for any reason, the stop/pause/mute control must be the first keyboard stop on the page.
Muted autoplay does not resolve every issue: meaningful audio is unavailable while muted; moving content can distract or cause physical symptoms; motion for 5+ seconds alongside other content can need pause/stop/ hide (WCAG 2.2.2); users who request reduced motion should not get automatic decorative motion regardless of a caption track existing.
Critical: Captions on Pre-recorded Video with Audio
Use kind="captions" for tracks including dialogue AND meaningful non-speech audio; use kind="subtitles" for translated dialogue only — subtitles containing only dialogue are not a replacement for captions in the original language. Use only one default track per kind. Serve WebVTT as UTF-8 with the correct text/vtt media type.
Caption content must include: complete spoken dialogue/narration; speaker identification when not otherwise clear; meaningful sound effects/music cues ([door slams]); correct punctuation/capitalization preserving meaning; synchronized timing; readable cue duration/line breaks; placement avoiding important visual content. Do not remove words, simplify technical language, or censor in a way that changes meaning.
Never publish auto-generated captions without human review — a qualified person must review the complete file against the audio and correct substitutions/omissions/invented words, names/technical terms/numbers, missing negation, speaker changes, punctuation, and synchronization. Unreviewed auto-captions are at best Serious.
Open vs. closed captions: prefer closed captions (toggleable, customizable) when the platform supports them reliably. Open captions (permanently rendered) are a recognized WCAG technique and acceptable when closed captions aren't available — don't categorically reject them, but note users can't turn them off or resize them independently.
Critical: Transcript for Audio-Only Content
Transcript content (in the same sequence as the media): title/metadata; speaker names; all dialogue and narration; meaningful sound/music information; important on-screen text; for a descriptive transcript, visual actions/expressions/demonstrations/charts/scene changes; equivalent instructions/links for any interaction in the media.
Publish as accessible HTML with a clearly named link immediately before/after the player — not only as a download or inaccessible PDF/image, and never only inside aria-label, a tooltip, or a visually-hidden element. A stable anchor URL (#transcript-ep12) makes it directly shareable and discoverable by search engines; collapsing in <details> for visual space is fine as long as the heading/anchor stay in the DOM. Keep transcript corrections synchronized with caption and media revisions.
Interactive transcripts (highlighting current passage, seek-by-timestamp) are enhancements, not substitutes for a complete linear transcript — use buttons for seek actions, give each an understandable time/topic, don't move keyboard focus as playback advances, don't force unpausable auto-scroll, respect reduced-motion, and preserve reading/copying when JS is unavailable.
Serious: Audio Descriptions for Pre-recorded Video
At Level A, WCAG 1.2.3 permits either audio description OR a complete media alternative. At Level AA, WCAG 1.2.5 requires audio description for prerecorded video content — a Level A transcript choice does not remove this AA requirement. If the main audio already communicates all important visual information, no additional description is necessary.
This <track kind="descriptions"> technique is advisory in current WCAG techniques and depends on browser/player/AT support — do not rely on it without testing; provide a supported selectable track or described version when the player can't present descriptions audibly.
Plan description during production — integrated description (speakers naturally stating names, reading on-screen text, explaining charts) is often clearest and can reduce separately-recorded description needed. Description should be objective, concise, timed around important dialogue, written by people with appropriate expertise, and reviewed with blind/low-vision users. Extended audio description (1.2.7, pausing video for more time) is Level AAA — needed only when pauses in the main audio are insufficient.
Critical: Accessible Media Player
Do not designate one player library as universally accessible — evaluate and test the specific version and configuration against the requirements below; pin dependency versions and review updates.
Start with native <audio controls>/<video controls> when they provide what's needed — native controls reduce custom code but vary by browser; test rather than assume sufficiency. A row of visually styled custom buttons is not an accessible player unless the complete behavior, state, timing, captions, description, seeking, and full-screen interaction are implemented and tested.
Controls and state: play/pause, stop, elapsed time/duration, seek, volume/mute, caption/language selection, audio-description selection, playback speed, chapters, full screen, picture-in-picture, transcript display as applicable. Every control needs an accessible name/role/state/ value — a play button can change its name to "Pause" while playing; a caption toggle can use aria-pressed when truly two-state; a timeline needs name/min/max/current-value and a useful text value (elapsed time). Do not announce every `timeupdate` event through a live region. Keep visible labels in accessible names for speech input; don't communicate selected tracks or muted state through color alone.
Keyboard: every control reachable in logical tab order; Enter/Space operate buttons natively; arrow keys operate ranges and documented composite widgets; focus never trapped in player or full-screen; focus stays visible and unobscured by auto-hiding controls; entering/leaving full screen preserves a logical focus location; controls don't disappear while they or their descendants have focus. Single-character shortcuts must meet WCAG 2.1.4 (off/remap/scoped-to-focus) and must not intercept keys while typing in a field.
Visual/touch: text/icons meet contrast requirements; controls reflow at 400% zoom; touch targets meet WCAG 2.5.8; labels/icons remain understandable in forced-colors mode; pointer hover is never required to reveal the only path to controls; auto-hiding controls meet Content on Hover/Focus (1.4.13) and never hide the focused control.
Captions/description controls: easy to find without starting playback; current language and on/off state programmatically determinable; changing a track doesn't unexpectedly reset playback; preferences persist when promised.
Serious: Embedded and Third-Party Players
The content owner remains responsible for the experience delivered through an embed.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/audio-video/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/mgifford/accessibility-skills/audio-video)