> For the complete documentation index, see [llms.txt](https://docs.convai.com/api-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.convai.com/api-docs/plugins-and-integrations/convai-unity-sdk/ui-and-presentation/transcript-ui.md).

# Transcript UI

`ConvaiManager.ActiveManager.Transcripts` is the single entry point for transcript data in the Convai Unity SDK. It exposes two purposes side by side — a durable turn-by-turn chat history and a stream of speech-aligned captions — so your scene UI can show conversation history and live subtitles without building either pipeline yourself.

{% hint style="warning" %}
**Breaking change in SDK 4.4.0.** `ITranscriptUI`, `ITranscriptListener`, `TranscriptViewModel`, `TranscriptUIController`, and `ITranscriptPresentationStrategy` were removed. Custom transcript displays now subscribe directly through `ConvaiManager.ActiveManager.Transcripts` — see the durable and caption paths below.
{% endhint %}

### How transcript data reaches your scene UI

The runtime's internal transcript engine maintains room state and exposes it through the `ConvaiTranscripts` facade at `ConvaiManager.ActiveManager.Transcripts`. That facade splits into two independent read paths.

```mermaid
graph TD
    A[Room transcript engine] --> B[ConvaiTranscripts facade]
    B -->|CurrentTimeline / Subscribe / SubscribeCommitted| C[Durable chat history]
    B -->|CurrentCaptions / SubscribeCaptions| D[Speech-aligned captions]
    C --> E[ChatTranscriptUI]
    D --> F[SubtitleTranscriptUI]
    E --> G[Scene UI]
    F --> G[Scene UI]
```

Both paths read from the same room session, so a character's speech always appears in history and, if a caption UI is present, as a caption at the same time.

### Durable chat history vs. speech-aligned captions

`CurrentTimeline`, `Subscribe`, and `SubscribeCommitted` give you the durable side of the transcript: a timeline of committed conversation turns that persists for the life of the room, suitable for scroll-back chat panels, post-session review, and export. `ChatTranscriptUI` is built on this path.

`CurrentCaptions` and `SubscribeCaptions` give you the ephemeral side: text aligned to what is currently being spoken, replaced as soon as the next segment starts. Caption text is never written into the durable chat history — it exists only to drive a subtitle-style overlay. `SubtitleTranscriptUI` is built on this path.

Choose the durable path when the reader needs to see or query what was said. Choose the caption path when the reader needs to see what is being said right now.

### Built-in presentation components

`ChatTranscriptUI` ships as a ready-to-use component with two prefabs in the <code class="expression">space.vars.sdk\_package\_id</code> package: `Prefabs/TranscriptUI/TranscriptUI_Chat.prefab` for a screen-space chat panel, and `Prefabs/TranscriptUI/TranscriptUI_Chat_WorldSpace.prefab` for the same component rendered on a world-space `Canvas` — for example a panel mounted above a character or kiosk. Both prefabs subscribe to the durable timeline on `Start` (and re-subscribe on `OnEnable`) and render committed and in-progress turns as message bubbles.

`SubtitleTranscriptUI` ships as sample reference code at `SamplesShared/Scripts/UI/Transcript/Subtitle/SubtitleTranscriptUI.cs` rather than a drop-in prefab. It subscribes to captions and renders the current speaker's text with auto-hide after a configurable delay, and is meant to be copied into your project and adapted.

Neither component is the only option. Any script can call `Subscribe`, `SubscribeCommitted`, or `SubscribeCaptions` directly to drive a custom display.

### Hide presentation without losing history

`IsPresentationEnabled` and the `PresentationEnabledChanged` event let shipped presentation components hide their rendered content — for example while a cutscene or menu is on screen — without stopping the room from recording. `ChatTranscriptUI` and `SubtitleTranscriptUI` both clear their rendered content when presentation is disabled, then resubscribe with replay enabled when it turns back on, so no turns are lost from the durable history while the UI was hidden.

### Next steps

You have covered how the durable and caption paths split and which shipped component reads each. Continue to querying the durable timeline from code, configuring the two built-in display modes, or controlling transcript visibility from the settings panel.

{% content-ref url="/pages/351d64ae28927aa533926b237ec3ddf6860763c6" %}
[Transcript history and queries](/api-docs/plugins-and-integrations/convai-unity-sdk/ui-and-presentation/transcript-ui/transcript-history-and-queries.md)
{% endcontent-ref %}

{% content-ref url="/pages/04dba1e30bd200179a770ba5dffcaab5b5eadf16" %}
[Chat and subtitle modes](/api-docs/plugins-and-integrations/convai-unity-sdk/ui-and-presentation/transcript-ui/chat-and-subtitle-modes.md)
{% endcontent-ref %}

{% content-ref url="/pages/1e28d73ef0dad9569b5d54c8f9f0b70586425f5a" %}
[Settings panel](/api-docs/plugins-and-integrations/convai-unity-sdk/ui-and-presentation/settings-panel.md)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.convai.com/api-docs/plugins-and-integrations/convai-unity-sdk/ui-and-presentation/transcript-ui.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
