{"id":50571428,"url":"https://github.com/Shripad735/streamfetch","last_synced_at":"2026-06-21T14:00:38.468Z","repository":{"id":339561927,"uuid":"1162421180","full_name":"Shripad735/streamfetch","owner":"Shripad735","description":"Fast, cross-platform video downloader optimized for Windows. Powered by Electron, React, and yt-dlp.","archived":false,"fork":false,"pushed_at":"2026-04-19T06:48:51.000Z","size":1999,"stargazers_count":25,"open_issues_count":0,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-19T08:33:40.706Z","etag":null,"topics":["electron","ffmpeg","reactjs","yt-dlp"],"latest_commit_sha":null,"homepage":"https://shripad735.github.io/streamfetch/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Shripad735.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-20T08:40:41.000Z","updated_at":"2026-04-19T06:48:53.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Shripad735/streamfetch","commit_stats":null,"previous_names":["shripad735/streamfetch"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/Shripad735/streamfetch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shripad735%2Fstreamfetch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shripad735%2Fstreamfetch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shripad735%2Fstreamfetch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shripad735%2Fstreamfetch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Shripad735","download_url":"https://codeload.github.com/Shripad735/streamfetch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shripad735%2Fstreamfetch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34610832,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["electron","ffmpeg","reactjs","yt-dlp"],"created_at":"2026-06-04T19:00:27.660Z","updated_at":"2026-06-21T14:00:38.463Z","avatar_url":"https://github.com/Shripad735.png","language":"JavaScript","funding_links":[],"categories":["Comparison at a glance"],"sub_categories":["The board"],"readme":"# StreamFetch\n\nCross-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.\n\n## Screenshots\n\n### Link \u0026 Fetch Workspace\n\n![StreamFetch Main Dashboard](Images/Dashboard-01.png)\n\nMain dashboard for pasting a link, fetching metadata, selecting clip range, enabling Turbo download, adding items to queue, and using the built-in `yt-dlp` updater.\n\n### Queue Overview \u0026 Logs\n\n![StreamFetch Active Queue](Images/Dashboard-02.png)\n\nActive queue workspace with download overview, per-job status, and inline logs for the selected item.\n\n### History Archive\n\n![StreamFetch History Dashboard](Images/Dashboard-03.png)\n\nHistory dashboard for browsing past downloads, completed items, failed jobs, and archived activity.\n\n### Defaults \u0026 Updates Settings\n\n![StreamFetch Settings Dashboard](Images/Dashboard-04.png)\n\nSettings workspace for saving defaults, managing clipboard watcher preferences, and checking app/update status.\n\n## Highlights\n\n- Notion-like desktop workspace with dedicated `New Download`, `Active Queue`, `History`, and `Settings` views\n- Queue-based downloads with per-item progress and logs\n- Pause, resume, cancel, and retry controls\n- Optional clip-range downloads with structured Clip Studio controls\n- Smart fallback strategy for format/download failures\n- Built-in `yt-dlp` updater\n- In-app app-update notification (checks GitHub latest release)\n- Conditional auth handling for age/bot-restricted content\n- Clear centered popup when no downloadable formats are available\n\n## Restricted/Age Content Handling\n\nStreamFetch now handles restricted content in a guided flow:\n\n1. Try normal fetch/download first.\n2. If authentication is required, a popup appears (browser cookies).\n3. If browser cookie access fails (DPAPI/locked DB), popup enables `cookies.txt` import.\n4. Retry can be applied both at fetch-time and download-time.\n5. If video still has no downloadable streams, StreamFetch shows a dedicated \"No Downloadable Formats\" popup.\n\n## Features\n\n- Single video and playlist support\n- Structured workspace shell with sidebar navigation and saved defaults\n- Advanced format picker from extracted format IDs\n- Clip-range download for single videos (`ss`, `mm:ss`, `hh:mm:ss`)\n- Playlist range controls (`start`, `end`, include, exclude`)\n- Global + per-download speed limits (`500K`, `2M`, `1.5M`)\n- Download history, runtime logs, and active queue overview\n- Frameless desktop UI with custom window controls\n\n## Tech Stack\n\n- Electron 34\n- React 18 + Vite 6\n- Tailwind CSS 3\n- `yt-dlp` + optional `ffmpeg`\n\n## Project Structure\n\n```text\nstreamfetch/\n  electron/        # Main process + preload bridge\n  src/             # React renderer\n  bin/             # Platform binaries bundled into release builds\n  release/         # Build outputs\n```\n\n## Quick Start (Development)\n\n```bash\nnpm install\nnpm run dev\n```\n\n## Run Built Renderer + Electron\n\n```bash\nnpm run build:renderer\nnpm start\n```\n\n## Build for macOS or Linux (Source)\n\nRelease builds bundle `yt-dlp` and `ffmpeg` automatically in CI.\n\nFor 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:\n\n```bash\ngit clone https://github.com/Shripad735/streamfetch.git\ncd streamfetch\nnpm install\nnpm run build\n```\n\n## Build Windows Setup (Local)\n\nPre-built Windows setup executables are published with every release. To build locally:\n\n```bash\nnpm run build:win\n```\n\nArtifact is created in `release/`:\n- `StreamFetch-Setup-\u003cversion\u003e.exe` (installer)\n\n## Build macOS DMG (Local)\n\n```bash\nnpm run build:mac\n```\n\n## Build Linux AppImage (Local)\n\n```bash\nnpm run build:linux\n```\n\n## Clip-Range Download (Time Span)\n\nYou can download only a specific part of a single video:\n\n1. Fetch video metadata.\n2. In `Download Options`, enable `Clip Range`.\n3. Enter `Start Time` and `End Time` using `ss`, `mm:ss`, or `hh:mm:ss`.\n4. Queue the job.\n\nNotes:\n- Clip range is available only for single videos (not playlist jobs).\n- `ffmpeg` is required for clip extraction.\n\n## Release Workflow\n\n- GitHub workflow runs on `v*` tags (for example `v1.2.0`).\n- Workflow validates that tag version (`vX.Y.Z`) matches `package.json` version.\n- Tagged releases build artifacts for Windows, Linux, and macOS.\n- macOS build is configured as non-blocking in CI (to avoid blocking release when mac runners are unavailable).\n- Release notes are auto-generated from commits between the previous release tag and the current tag.\n- Notes are grouped into `Features`, `Fixes`, and `Other Changes` based on commit message prefix.\n\nUse these commit prefixes to classify notes:\n\n- `feat: add app update notification banner`\n- `fix: handle age-restricted download retry`\n- `hotfix: prevent renderer crash on startup`\n\n## Security Model\n\n- `nodeIntegration: false`\n- `contextIsolation: true`\n- Strict preload bridge for allowed IPC channels only\n- Download execution uses validated `spawn` arguments\n\n## Required Local Binaries\n\nFor source-based development, place these files in `bin/` for your target platform:\n- `yt-dlp` or `yt-dlp.exe` (required)\n- `ffmpeg` or `ffmpeg.exe` (optional, enables merged best-quality outputs)\n\nThese binaries are not committed to git to keep repository size small.\n\n## Releases\n\nInstall from GitHub Releases for the easiest setup. Each tagged release includes:\n- Windows installer (`Setup .exe`)\n- macOS disk image (`.dmg`)\n- Linux AppImage (`.AppImage`)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FShripad735%2Fstreamfetch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FShripad735%2Fstreamfetch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FShripad735%2Fstreamfetch/lists"}