Narration markup

If you need fine-grained, page-specific control over the text that appears in your narration, use the markup below.

Skip content

class="t3a-do-not-narrate"

Anything inside an element with this class is removed before narration.

<div class="t3a-do-not-narrate">
  <p>Subscribe to our newsletter for weekly updates.</p>
</div>

Add audio-only notes

class="t3a-audio-note"

Anything inside an element with this class is available to the narration pipeline, but can be visually hidden from the page.

<div class="t3a-audio-note">
  <p>Audio note: there's a picture of a cat here.</p>
</div>

Your CSS must include a rule to hide the audio notes:

.t3a-audio-note {
  display: none !important;
}

Narrate content we would leave out

class="t3a-must-narrate"

By default, some parts of a page are announced rather than read in full:

  • appendices are left out, and the narration names them;
  • tables are announced with their caption or column headings, and the listener is pointed to the original text;
  • collapsed boxes (<details>) and long examples are announced without their contents.

Add t3a-must-narrate to have one of these narrated in full. Put the class on the element itself, or on a wrapper around it.

Appendices. Put the class on the appendix heading, or on a wrapper around the whole appendix: the heading and everything under it. For an appendix in a collapsed box, put it on the <details> element. Everything inside a narrated appendix is narrated in full too, including its tables and boxes.

<h2 class="t3a-must-narrate">Appendix A: Methods</h2>
<p>We recruited 16 developers…</p>

Tables. The table is read row by row, with each value introduced by its column name, so listeners can follow it. Put the class on the <table>, or on the figure or wrapper around it. Tables up to about 3,000 words of narration, roughly 20 minutes, are read in full; a longer table gets the usual announcement. A table inside an appendix that is left out is left out with it: mark the appendix instead.

<table class="t3a-must-narrate">
  <caption>Time horizons by model</caption>
  …
</table>

Collapsed boxes and examples. Put the class on the <details> element, or on a wrapper around the example.

<details class="t3a-must-narrate">
  <summary>Example transcript</summary>
  <p>…</p>
</details>

Markdown and Jekyll

If you write posts in Markdown with Jekyll (kramdown), wrap the part you want to mark in a div with the class and markdown="1". The markdown="1" attribute keeps the Markdown inside the div converted as usual. A wrapper can hold a single paragraph or table, or a whole section with its heading.

Leave a blank line after the opening <div …> line and another before </div>. Without the blank line before </div>, a table just above it is not converted.

<div class="t3a-must-narrate" markdown="1">

## Appendix A: Methods

Everything in this appendix is narrated in full, including this table:

| Model | Time horizon |
| ----- | ------------ |
| GPT-5 | 138 minutes  |

</div>

<div class="t3a-do-not-narrate" markdown="1">

Subscribe to our newsletter for weekly updates.

</div>

<div class="t3a-audio-note" markdown="1">

Audio note: the chart above shows time horizons doubling roughly every seven months.

</div>

Wrap a collapsed box in the same way:

<div class="t3a-must-narrate" markdown="1">

<details markdown="1">
<summary>Example transcript</summary>
…
</details>

</div>

WordPress

If you use the TYPE III AUDIO WordPress plugin, you do not need to write these classes by hand. Use the "Do not narrate" block control to exclude a block from audio, or insert an "Audio Note" block for narration-only text. The plugin adds the correct markup and hides audio notes on the front end.