Skip to content

Recordings marketplace: timed WebVTT captions for preview clips and purchased playback #1262

Description

@teetangh

Follow-up from the review thread on #1244.

What shipped

#1244 gates publishing: a preview clip cannot go public without a text alternative. Recording.previewTranscript holds plain text, resolvePreviewTranscript() enforces the rule at the publish route (422 PREVIEW_TRANSCRIPT_REQUIRED), and the detail page renders it in a collapsed <details> beside the player with aria-describedby wiring the two together.

That closes the text-access gap — someone who reads rather than listens can now get the content of a preview.

What it does not close

A transcript is not captions. It is untimed, it sits below the player instead of on it, and it covers only the preview clip — purchased playback has no text alternative at all.

The remaining work:

  • WebVTT track on preview clips. A real <track kind="captions"> so text is synchronised with the audio and rendered by the player's own caption UI, which respects the viewer's caption styling preferences.
  • WebVTT on purchased playback. The buyer-mode player is the surface people actually watch; it currently has nothing.
  • Generation. Deciding whether tracks are consultant-uploaded, derived from the transcript with timings, or produced by an ASR pass at transfer time. Stream exposes transcription (video_start_transcription) — worth assessing whether its output can be converted rather than building a pipeline. See Stream: what the SDK offers that we have not assessed, with costs #1160 for the wider "what the SDK offers that we have not assessed" question.

Why it was deferred

The transcript gate is enforceable today with no new infrastructure and no tooling burden on consultants. A caption pipeline is a heavy lift that would have blocked a 51-file PR, and shipping it later does not un-help anyone the transcript already helps.

Notes

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions