Skip to content

Highlights: change subtitle styling so it does not cover the speaker's face #544

Description

@myrtoplem

Context

Admins can extract highlights (short video clips of council members speaking) from a meeting page. The generated video has burned-in subtitles and a speaker-name overlay, both currently rendered as white text on a black background.

Problem

When a speaker talks a lot, the subtitle box grows and covers the speaker's face, which looks bad in the exported clip.

Request

Change the subtitle styling so it doesn't obscure the speaker. Options, in order of preference:

  1. Render subtitles as white text with no background (e.g. white text with a subtle shadow/outline for legibility), instead of a solid black box; or
  2. Give the admin a choice of subtitle style/format at generation time (e.g. "white text on black box" vs "white text, no background").

Important: the styling lives in the external render service, not this repo

Highlight videos are generated server-side by an external media-processing service (TASK_API_URL) that burns the captions and speaker name into the MP4. This repo only sends render options and plays back the finished video — there is no client-side caption/subtitle overlay to restyle here.

So the actual white-text/black-background look is defined in that external render service (likely an ffmpeg/remotion-style renderer in a separate repo). The visual change must be implemented there. This repo needs to plumb through a new option.

What needs to change in THIS repo

  • Add a subtitle-style field to the render request type: GenerateHighlightRequest.render in src/lib/apiTypes.ts (~lines 390–404). Today it only has includeCaptions, includeSpeakerOverlay, aspectRatio, socialOptions — nothing for subtitle text color/background.
  • Wire a control into the generation dialog: src/components/meetings/HighlightPreviewDialog.tsx (render options at ~lines 48–52; the "Formatting" fieldset ~lines 216–252).
  • Pass it through the render payload: src/lib/tasks/generateHighlight.ts (~lines 118–126), which dispatches to the external server via src/lib/tasks/tasks.ts:120.
  • If the choice should be remembered per highlight (not just per session), a new column on model Highlight would be needed — prisma/schema.prisma (~lines 656–682). Currently render options are session-scoped only (not persisted).

What needs to change in the EXTERNAL render service (separate repo/service behind TASK_API_URL)

  • Actually apply the new subtitle style (white, no background / outline) when burning captions into the video.
  • Accept and honor the new style field from the render request.

Reference (current appearance options)

  • includeCaptions (default true), includeSpeakerOverlay (default true), aspectRatio (default | social-9x16), socialOptions (margins/background for the 9x16 format only — not the subtitle box).
  • Docs: docs/guides/meeting-highlights.md.

Acceptance criteria

  • Exported highlights no longer show a large black subtitle box covering the speaker's face.
  • Either subtitles are white with no solid background by default, or the admin can pick a subtitle style in the generation dialog.
  • Speaker-name overlay remains readable.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions