How logosww/hls-downloader works
HLS Downloader parses playlists, retrieves media segments, and produces downloadable MP4 files or streamed fMP4. Its shared HlsDownloader API delegates to either a browser or Node adapter; the browser path uses WebAssembly transmuxing and optional WebCodecs transcoding, while Node uses a Rust native implementation. The repository also includes browser and Bun applications. Relationships among major stages are documented in the README; unsampled implementation details are represented only where supported by the source index or documentation.
Main entry points: src/index.ts Downloader API · browser/index.ts Browser Adapter · node/index.ts Node Adapter · lib.rs Native Bridge
Components 24
Shared API
- Downloader API
packages/core/src/index.ts - Shared Types
packages/shared/src/types.ts - Error Model
packages/shared/src/errors.ts - Playlist Cache
packages/shared/src/parse-hls-cache.ts
Browser Adapter
- Browser Adapter
packages/adapters/src/browser/index.ts - Retry Requests
packages/adapters/src/browser/retry.ts - Poster Extraction
packages/adapters/src/browser/poster.ts - WebCodecs Transcode
packages/adapters/src/browser/mediabunny.ts - Stream Output
packages/adapters/src/browser/writable.ts - WASM Bridge
packages/adapters/src/browser/wasm.ts
Node Adapter
- Node Adapter
packages/adapters/src/node/index.ts - Native Bridge
packages/adapters/src/node/crates/napi/src/lib.rs - Native Playlist
packages/adapters/src/node/crates/core/src/hls.rs - Native Download
packages/adapters/src/node/crates/core/src/download.rs
Applications
- Web Interface
packages/app/web/app/page.tsx - Browser Download Manager
packages/app/web/hooks/use-download-manager.ts - Stream Preview
packages/app/web/hooks/use-stream-preview.ts - Bun HTTP Routes
packages/app/bun/app.ts - Download Tasks
packages/app/bun/task-manager.ts - File Output
packages/app/web/lib/file-output.ts
Media Processing
- WASM Transmux
packages/adapters/src/browser/crates/hls-transmux-wasm/src/lib.rs - Transmux Engine
packages/adapters/src/browser/crates/hls-transmux/src - Transcode Presets
packages/shared/src/transcode.ts
Other components
- Caller
Connections 26
- Caller → Downloader API: calls
- Downloader API → Browser Adapter: selects adapter
- Downloader API → Node Adapter: selects adapter
- Downloader API → Shared Types: uses types
packages/core/src/index.ts - Downloader API → Playlist Cache: caches playlists
- Browser Adapter → Retry Requests: retries fetches
packages/adapters/src/browser/index.ts - Browser Adapter → Poster Extraction: extracts poster
packages/adapters/src/browser/index.ts - Browser Adapter → WebCodecs Transcode: transcodes media
packages/adapters/src/browser/index.ts - Browser Adapter → Stream Output: resolves playlist
packages/adapters/src/browser/index.ts - Browser Adapter → WASM Bridge: transmuxes media
packages/adapters/src/browser/index.ts - WASM Bridge → WASM Transmux: calls WASM
- WASM Transmux → Transmux Engine: invokes engine
- Transmux Engine → Shared Types: reports media
- WebCodecs Transcode → Transcode Presets: uses options
packages/adapters/src/browser/mediabunny.ts - Node Adapter → Native Bridge: calls native module
- Native Bridge → Native Playlist: dispatches playlist
- Native Bridge → Native Download: dispatches download
- Native Download → Native Playlist: uses playlist
packages/adapters/src/node/crates/core/src/download.rs - Node Adapter → Poster Extraction: extracts poster
- Web Interface → Browser Download Manager: manages downloads
- Browser Download Manager → Downloader API: downloads via
packages/app/web/hooks/use-download-manager.ts - Browser Download Manager → File Output: saves files
packages/app/web/hooks/use-download-manager.ts - Stream Preview → Downloader API: streams preview
packages/app/web/hooks/use-stream-preview.ts - Bun HTTP Routes → Download Tasks: routes tasks
packages/app/bun/app.ts - Download Tasks → Downloader API: downloads via
- Download Tasks → Downloader API: gets poster
packages/app/bun/task-manager.ts