Cross-platform desktop downloader for YouTube and other platforms, built with Electron + React and powered by yt-dlp. Pre-built release artifacts are published for Windows, macOS, and Linux.
- Queue-based downloads with per-item progress and logs
- Pause, resume, cancel, and retry controls
- Optional clip-range downloads (start/end time)
- Smart fallback strategy for format/download failures
- Built-in
yt-dlpupdater - In-app app-update notification (checks GitHub latest release)
- Conditional auth handling for age/bot-restricted content
- Clear centered popup when no downloadable formats are available
StreamFetch now handles restricted content in a guided flow:
- Try normal fetch/download first.
- If authentication is required, a popup appears (browser cookies).
- If browser cookie access fails (DPAPI/locked DB), popup enables
cookies.txtimport. - Retry can be applied both at fetch-time and download-time.
- If video still has no downloadable streams, StreamFetch shows a dedicated "No Downloadable Formats" popup.
- Single video and playlist support
- Advanced format picker from extracted format IDs
- Clip-range download for single videos (
ss,mm:ss,hh:mm:ss) - Playlist range controls (
start,end, include, exclude) - Global + per-download speed limits (
500K,2M,1.5M) - Download history and runtime logs
- Frameless desktop UI with custom window controls
- Electron 34
- React 18 + Vite 6
- Tailwind CSS 3
yt-dlp+ optionalffmpeg
streamfetch/
electron/ # Main process + preload bridge
src/ # React renderer
bin/ # Platform binaries bundled into release builds
release/ # Build outputs
npm install
npm run devnpm run build:renderer
npm startRelease builds bundle yt-dlp and ffmpeg automatically in CI.
For local source builds, provide binaries in bin/ for your platform (yt-dlp and optional ffmpeg) or install them in your system $PATH, then clone and build:
git clone https://github.com/Shripad735/streamfetch.git
cd streamfetch
npm install
npm run buildPre-built Windows setup executables are published with every release. To build locally:
npm run build:winArtifact is created in release/:
StreamFetch-Setup-<version>.exe(installer)
npm run build:macnpm run build:linuxYou can download only a specific part of a single video:
- Fetch video metadata.
- In
Download Options, enableClip Range. - Enter
Start TimeandEnd Timeusingss,mm:ss, orhh:mm:ss. - Queue the job.
Notes:
- Clip range is available only for single videos (not playlist jobs).
ffmpegis required for clip extraction.
- GitHub workflow runs on
v*tags (for examplev1.2.0). - Workflow validates that tag version (
vX.Y.Z) matchespackage.jsonversion. - Tagged releases build artifacts for Windows, Linux, and macOS.
- macOS build is configured as non-blocking in CI (to avoid blocking release when mac runners are unavailable).
- Release notes are auto-generated from commits between the previous release tag and the current tag.
- Notes are grouped into
Features,Fixes, andOther Changesbased on commit message prefix.
Use these commit prefixes to classify notes:
feat: add app update notification bannerfix: handle age-restricted download retryhotfix: prevent renderer crash on startup
nodeIntegration: falsecontextIsolation: true- Strict preload bridge for allowed IPC channels only
- Download execution uses validated
spawnarguments
For source-based development, place these files in bin/ for your target platform:
yt-dlporyt-dlp.exe(required)ffmpegorffmpeg.exe(optional, enables merged best-quality outputs)
These binaries are not committed to git to keep repository size small.
Install from GitHub Releases for the easiest setup. Each tagged release includes:
- Windows installer (
Setup .exe) - macOS disk image (
.dmg) - Linux AppImage (
.AppImage)
MIT
.png)
.png)