Skip to content

[Epic] Dialogue Jump — subtitle-powered in-video moment search #41

Description

@HamadTheIronside

Search inside what you're watching. Type "where they open the vault" or a half-remembered line, and Driftfin seeks the player straight to that timestamp with a trickplay thumbnail preview. Cross-item, it turns every subtitled title into a searchable transcript.

Why 10x

No Jellyfin client (Swiftfin, Findroid, Streamyfin, JMP) — nor Plex or Infuse — ships this. It's the pragmatic, GPU-free, offline 90% of the multi-thousand-dollar "scene search" everyone else defers. For rewatchers, parents skipping to a scene, and quote-hunters it's a pure "how did I live without this." Highest-differentiation idea in the analysis (scored 23/30).

How it maps to the architecture

  • SubStreamModel (lib/models/items/media_streams_model.dart:360) already derives a downloadable .srt URL from Jellyfin's deliveryUrl (line 411–413, it even rewrites .vtt.srt).
  • Net-new: a VTT/SRT cue parser + a cue-index provider.
  • UI: a new search panel in video_player_options_sheet.dart (which already composes the subtitle / quality / queue / syncplay sub-sheets); seek via MediaControlsWrapper / videoPlayerProvider; render the preview from the existing TrickPlayModel / video_progress_bar code.
  • No server plugin, no vision model.

Scope

L. Net-new work is the cue parser and the search UI.

Honest limitations

Coverage depends on text subtitle tracks — image-based PGS/DVBSUB carry no indexable text. Must degrade gracefully and clearly show which titles are searchable. In-video search first; cross-library transcript search is a follow-on.

Definition of done

Unit tests for the cue parser (SRT + VTT edge cases); widget test for the search panel + seek; flutter analyze lib/ clean; dart format --line-length 120.

Source: product-vision analysis (2026-07). Part of the Driftfin 10x tracking issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions