No speaker/subject assignment during live recording #6

Closed
opened 2026-05-13 05:38:19 +00:00 by Mark · 1 comment
Owner

Description

During recording, no way to tag who is speaking or what subject is being discussed. Transcripts come out as undifferentiated blobs of text.

Impact

Cannot distinguish speakers. No topic segmentation. Reviewing transcripts is manual and slow.

Suggested Fix

Speaker labeling UI + time-range subject tagging during/after recording.

Blockers

  • #10 Research: Speaker identification and subject tagging approaches for live transcription
  • #11 Plan: Implementation plan for speaker/subject assignment

When #10 and #11 are complete, they will comment here with findings and the implementation plan.

## Description During recording, no way to tag who is speaking or what subject is being discussed. Transcripts come out as undifferentiated blobs of text. ## Impact Cannot distinguish speakers. No topic segmentation. Reviewing transcripts is manual and slow. ## Suggested Fix Speaker labeling UI + time-range subject tagging during/after recording. ## Blockers - #10 Research: Speaker identification and subject tagging approaches for live transcription - #11 Plan: Implementation plan for speaker/subject assignment When #10 and #11 are complete, they will comment here with findings and the implementation plan.
Author
Owner

Implementation Plan — Speaker & Subject Assignment During Recording

This is the implementation plan from #11. The feature breaks down into 9 sub-issues in dependency order:

Phase 1: Core Recording Tags (foundation)

Order Issue Title Rationale
1 #13 SessionTag-based speaker time-range tracking in recording UI Core data flow: tap speaker chip → insert SessionTag(TYPE_SPEAKER) with time range
2 #14 SessionTag-based subject time-range tracking in recording UI Same pattern for subjects → insert SessionTag(TYPE_SUBJECT)

Phase 2: Inline Creation (UX polish, parallel)

Order Issue Title Rationale
3 #16 Inline speaker creation during recording ("+" chip) Extract + reuse AddSpeakerDialog from MainScreen.kt
4 #17 Inline subject creation during recording ("+" chip) Extract + reuse AddSubjectDialog from MainScreen.kt

Phase 3: Playback & Transcript Display (depends on Phase 1)

Order Issue Title Rationale
5 #15 Speaker label display + subject markers in playback/transcript UI Colored speaker borders on transcript lines, topic timeline bar in playback

Phase 4: Post-Recording ML Enhancement (independent, parallel)

Order Issue Title Rationale
6 #18 Post-recording cloud STT diarization Google Cloud STT batch diarization — backfill speaker SessionTags from ML output
7 #19 Post-recording LLM topic extraction LLM chunk summarization → subject SessionTags with review screen
8 #20 Keyword-based live topic detection Lightweight supplement: keyword detection → "?" suggestion chips during recording

Phase 5: Data Migration (enable new UI on old recordings)

Order Issue Title Rationale
9 #21 Data migration (MIGRATION_3_4) Backfill SessionTags from existing segment speakerId/subjectId

Architecture Summary

  • Dual tracking: segment-level (TranscriptSegment.speakerId/subjectId) + time-range (SessionTag with tagType/startOffsetMs/endOffsetMs)
  • SessionTag infrastructure already exists (entity, DAO, repository) — just needs wiring into recording UI
  • Post-recording ML uses Google Cloud STT for diarization (recommended in research from #10), LLM for topics
  • Live keyword detection is lightweight — regex/TF-IDF matching, no on-device ML

Closes #11.

## Implementation Plan — Speaker & Subject Assignment During Recording This is the implementation plan from #11. The feature breaks down into 9 sub-issues in dependency order: ### Phase 1: Core Recording Tags (foundation) | Order | Issue | Title | Rationale | |-------|-------|-------|-----------| | 1 | #13 | SessionTag-based speaker time-range tracking in recording UI | Core data flow: tap speaker chip → insert SessionTag(TYPE_SPEAKER) with time range | | 2 | #14 | SessionTag-based subject time-range tracking in recording UI | Same pattern for subjects → insert SessionTag(TYPE_SUBJECT) | ### Phase 2: Inline Creation (UX polish, parallel) | Order | Issue | Title | Rationale | |-------|-------|-------|-----------| | 3 | #16 | Inline speaker creation during recording ("+" chip) | Extract + reuse `AddSpeakerDialog` from `MainScreen.kt` | | 4 | #17 | Inline subject creation during recording ("+" chip) | Extract + reuse `AddSubjectDialog` from `MainScreen.kt` | ### Phase 3: Playback & Transcript Display (depends on Phase 1) | Order | Issue | Title | Rationale | |-------|-------|-------|-----------| | 5 | #15 | Speaker label display + subject markers in playback/transcript UI | Colored speaker borders on transcript lines, topic timeline bar in playback | ### Phase 4: Post-Recording ML Enhancement (independent, parallel) | Order | Issue | Title | Rationale | |-------|-------|-------|-----------| | 6 | #18 | Post-recording cloud STT diarization | Google Cloud STT batch diarization — backfill speaker SessionTags from ML output | | 7 | #19 | Post-recording LLM topic extraction | LLM chunk summarization → subject SessionTags with review screen | | 8 | #20 | Keyword-based live topic detection | Lightweight supplement: keyword detection → "?" suggestion chips during recording | ### Phase 5: Data Migration (enable new UI on old recordings) | Order | Issue | Title | Rationale | |-------|-------|-------|-----------| | 9 | #21 | Data migration (MIGRATION_3_4) | Backfill SessionTags from existing segment speakerId/subjectId | ### Architecture Summary - **Dual tracking**: segment-level (`TranscriptSegment.speakerId`/`subjectId`) + time-range (`SessionTag` with `tagType`/`startOffsetMs`/`endOffsetMs`) - **SessionTag infrastructure** already exists (entity, DAO, repository) — just needs wiring into recording UI - **Post-recording ML** uses Google Cloud STT for diarization (recommended in research from #10), LLM for topics - **Live keyword detection** is lightweight — regex/TF-IDF matching, no on-device ML Closes #11.
Mark 2026-05-23 03:31:16 +00:00
Sign in to join this conversation.
No description provided.