Files
KoalaSync/docs/ROADMAP.md
T
KoalaDev 36e1291d2c feat: rank player candidates by ordered signals, add browser E2E suite
The weighted score summed incomparable units, so size could outvote traits
that disqualify an element outright. Measured on a real page: a display:none
preload reports its full 1080p intrinsic size and scored 2073600, beating a
visible unmuted player at 509920.

Selection now compares an ordered list of signals, highest priority first:
has a source, is rendered, is not a silent background loop, rendered size
bucket, is playing, has controls, duration. Rendered size replaces intrinsic
resolution, and mute state is gone from the ranking entirely: it is a viewer
preference, not evidence about which element is the player.

It stays a ranking rather than a filter, so a page of only bad candidates
still yields one and findVideo never returns null where a video exists.

The new tests/e2e suite runs the shipped finder against real fixture pages
and drives the packed extension for injection, reinjection and remote
play/pause/seek into a first-party frame. All five scoring scenarios fail
against the previous implementation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 07:23:12 +02:00

3.0 KiB

KoalaSync Roadmap

Feature priorities, planned work, backlog, and rejected ideas for KoalaSync.


Status Legend

Badge Meaning
🚧 In Progress Currently being developed
📋 Planned Prioritized for an upcoming phase
💡 Backlog Under evaluation, not yet prioritized
Rejected Declined (with rationale)
Completed Shipped

🚧 In Progress

Currently being worked on.

Feature Priority Area
(none yet)

📋 Planned

Prioritized for upcoming phases.

  • Priority: P2
  • Category: UX / Ease of Sharing
  • Background: The invite link currently only contains the room ID. The invited person has to manually open the page. Ideally, the link would include the shared tab's URL so the invitee gets redirected to the right page and the tab is auto-selected (auto-matching via tab title already exists).
  • Known challenges:
    • Many streaming sites (e.g., Emby, Jellyfin) don't have unique URLs per content — once inside the player, the URL stays the same.
    • Dozens of such edge cases exist; a generic solution is difficult.
    • Would likely need site-specific extractor logic (similar to the existing sync service adapters).
  • Possible approaches:
    • Fallback: if no unique URL can be determined, only pass the tab title.
    • Site-specific URL extraction for known services.

💡 Backlog

Ideas and feature requests under evaluation.

Cross-origin frame video detection and control

  • Priority: P3
  • Category: Compatibility / Embedded Players
  • Background: KoalaSync injects on demand into the selected tab's top frame. Since the same-origin frame walk shipped, the top-frame script also reaches players inside first-party iframes (jkanime.net-style /jkplayer/ frames, srcdoc and about:blank frames that inherit the parent origin). What remains uncovered is the real <video> living inside a cross-origin iframe, where contentDocument is unreachable by design.
  • Possible approach: Add an opt-in frame bridge (allFrames: true injection) where child frames announce detected videos to the top frame, and the top frame routes remote play/pause/seek commands to the active child video. Needs a frame-election rule so ad frames cannot claim the session.
  • Status: Same-origin part completed; cross-origin frame bridge still open. Not needed for current Emby behavior.

Sync a second video source per room

  • Priority: P3
  • Category: Compatibility / Player Selection
  • Background: Detection picks exactly one <video> per tab. Pages that legitimately show two players side by side (a lecture feed plus slides, a multi-camera stream) can only ever sync one of them.
  • Status: Backlog, no demand yet. Listed so the single-player assumption in the ranking is a recorded decision rather than an accident.

Rejected

Declined features with rationale — keeps decisions documented so they don't get re-debated.

Feature Reason
(none yet)