Skip to content

bridge architecture with page context downloading would be killer #7

Description

@tomkabel

Hi,

I’m a developer and came across Flowpick while researching media sniffing implementations. I found the project really interesting!

For downloading media, I’ve historically relied on yt-dlp, falling back to the Video DownloadHelper extension for unsupported sites. Recently, Video DownloadHelper started pushing premium pricing (the usual enshittification), which made me wonder if it's worth building something custom, better, and faster.

I previously built a student project called Vooglaadija (Estonian for "stream downloader"), which wrapped yt-dlp. However, yt-dlp can be fragile and misses media streams on a lot of sites. That left me debating whether to build a new tool from scratch or contribute to something existing.

When I tested the Flowpick extension, I thought it was very well built, but I ran into an issue with the m3u8 downloader tool on a site that enforces strict Referer headers. After digging into it, I realized the issue was architectural: downloads need to be executed from the page context itself (which seems related to issue #4, if I translated and understood it correctly).

To fix this, you need a sort of "bridge" architecture:

Injected script (page main world)         ← runs natively in the page
  ↓ postMessage("FLOWPICK_FETCH_BRIDGE_INIT", port)
Content script (isolated world)           ← extension context, has chrome.runtime
  ↔ MessagePort (main ↔ content)
  ↔ MessagePort (content ↔ iframe)
  ↓ injects <iframe src="download-host.html">
Download host (iframe, extension origin)  ← extension context, has OPFS
  → StreamDownloadEngine
  → PageFetchClient (bridges fetch through ports)

I built a prototype of this bridge and it worked well, enabling downloads even for source-protected streams.

I'm curious—are you still actively working on this project, or is it currently passive? Have you hit a specific blocker, or would you be interested in collaborating on a v1.1 (or v2) release for Flowpick?

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