A GUI-based YouTube transcript search tool for Windows
- Overview
- Features
- Architecture
- Tech Stack
- Project Structure
- Installation
- Building from Source
- CLI Reference
- Troubleshooting
- Contributing
- License
CapScript Pro searches YouTube captions at scale and turns the results into usable media — clips, rendered videos, and reusable video-ID lists. It ships as a native Qt/C++ desktop app for Windows, backed by an embedded Python engine, plus a standalone CLI for headless or automated workflows.
Typical workflow:
- Search for a keyword across a channel or a list of videos.
- Review exact timestamp matches in the built-in transcript viewer.
- Extract clips at the matched moments.
- Render clips into a single output video via FFmpeg.
- Save reusable video-ID lists for future searches.
No YouTube Data API. As of v2.5, CapScript Pro runs entirely on yt-dlp — no API key, no quota limits, no credential management.
| Page | What it does |
|---|---|
| Search | Query by video or channel, with proxy support, cookie-based auth, and language selection |
| Viewer | Browse transcripts with clickable timestamps and in-app playback; import/export transcripts |
| Clip Downloader | Pull clips from matched timestamps in mp4, mkv, webm, or mp3, with quality controls |
| Renderer | Merge clips into a final video via FFmpeg, with control over format, resolution, frame rate, and CRF |
| List Creator | Build video-ID lists from a channel by date range or keyword, with thumbnail previews |
| Updater | Built-in update checker that stages new releases automatically |
The UI is native Qt/C++; YouTube-facing logic runs in an embedded Python runtime.
- The app resolves Python runtime paths relative to the executable.
PythonBridgeinitializes an embedded interpreter with scoped module search paths.- C++ calls into Python for channel resolution, transcript search, and proxy/credential storage.
- Progress streams back to C++ via callback trampolines and updates the UI (or CLI output) live.
This keeps the interface fast and native while reusing the Python/yt-dlp ecosystem for the parts that need it.
Desktop app
- C++17, Qt 6 (Core, Gui, Widgets, Network, Concurrent, Svg)
- Optional: Multimedia/MultimediaWidgets, Quick/Qml/QuickWidgets/WebView/WebViewQuick
- Embedded Python 3 interpreter
- WebView2 runtime (optional, enables the in-app player)
Python engine / CLI — see python/requirements.txt
- yt-dlp, cryptography, rich
External tools (required for clip/render features) — resolved from app/bin/, the app root, or system PATH
- yt-dlp, ffmpeg, ffprobe
Optional
- A Cloudflare Worker (TypeScript) handles feedback delivery and rate limiting.
.github/workflows/ CI workflows
assets/
├── fonts/ Bundled fonts (+ licenses)
├── icons/ App icons
└── qml/ QML resources for web player integration
cloudflare-worker/
└── capscript-feedback-worker/ Optional feedback backend (TypeScript)
docs/ Web documentation assets
python/ capscript_engine.py, cli.py, requirements.txt
scripts/ Build utilities, incl. the embedded runtime bundler
src/
├── app/ Application entry point
├── core/ Python bridge, settings, updater, URL handling
├── ui/
│ ├── pages/ Search, Viewer, Clip Downloader, Renderer, List Creator, About
│ ├── styles/ Theming (ThemeManager)
│ └── widgets/ Reusable UI widgets
├── updater/ Standalone updater executable
└── workers/ Background threads for search, clip, and render jobs
third_party/
├── phantomstyle/ Vendored Qt style (src/phantom, src/styleplugin)
└── webview2/sdk/ WebView2 SDK headers and native libs
CMakeLists.txt
CapScriptPro.rc
CapScriptUpdater.rc
LICENSE
CapScript Pro can be used two ways: the GUI app (Windows only, no setup) or the CLI (cross-platform-friendly, requires Python).
- Download the latest Windows build from Releases (currently v2.6.0).
- Extract the archive and run
CapScriptPro.exe. - No separate Python or Qt install is needed — the release ships with a bundled Python runtime and all required DLLs.
Optional - Note: CapScript Pro bundles the WebView2 loader only — the actual WebView2 Runtime (Microsoft's embedded browser engine) is not shipped with the app. It comes preinstalled on virtually all up-to-date Windows 10/11 systems alongside Edge. If it's missing, the in-app player won't load; install it from Microsoft (Evergreen Bootstrapper, a ~2 MB installer).
git clone https://github.com/serptail/CapScript-Youtube-Subtitle-Search-Tool.git
cd CapScript-Youtube-Subtitle-Search-Tool/python
python -m pip install -r requirements.txtThen run searches directly:
python cli.py --search-type channel --channel "@mkbhd" --keyword "sponsors" --max-results 20See CLI Reference below for full usage, options, and examples. ffmpeg and yt-dlp should be on your PATH if you plan to use clip/render features from the CLI as well.
- Windows 10/11
- CMake 3.21+
- Qt 6 (matching your compiler toolchain)
- Python 3 with headers/libs discoverable by CMake
- WebView2 runtime (optional, recommended)
- yt-dlp and ffmpeg on
PATH(optional, needed for clip/render features)
cmake -S . -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config ReleaseThe build output includes the app executable alongside a bundled python/ runtime — no additional setup needed to run it.
To package an embeddable Python runtime with dependencies manually:
python scripts/bundle_python.py 3.11.9 .\python .\python\requirements.txtThe Python CLI (python/cli.py) covers automation, headless environments, and quick one-off searches without launching the GUI.
cd python
python -m pip install -r requirements.txtRecommended: Python 3.10+.
No API key is needed — everything runs through yt-dlp. For age-restricted or private content, pass cookies directly from your browser:
--cookies-from-browser chrome|firefox|edge|braveLegacy API-key flags are still accepted as no-ops, for compatibility with older scripts.
python cli.py --search-type channel --channel "@mkbhd" --keyword "sponsors" --max-results 20Required
--search-type—channelorvideo--keyword— search term--channel(channel mode) or--video-ids(video mode)
Common options
--language en--output-dir transcripts--cookies FILE/--cookies-from-browser chrome|firefox|edge|brave--proxy-type,--proxy-username,--proxy-password,--proxy-url--save-proxy,--clear-proxy
# Search a channel by handle
python cli.py --search-type channel --channel "@mkbhd" --keyword "sponsors" --max-results 20
# Search explicit video URLs/IDs
python cli.py --search-type video --video-ids "https://youtu.be/dQw4w9WgXcQ,abc123XYZ00" --keyword "never gonna"
# Use browser cookies
python cli.py --search-type channel --channel "@mkbhd" --keyword "AI" --cookies-from-browser chrome
# Webshare proxy + cookies file
python cli.py --search-type channel --channel "UCxxxxxx" --keyword "AI" --proxy-type webshare --proxy-username USER --proxy-password PASS --cookies cookies.txt
# Save a generic proxy once, reuse on later runs
python cli.py --proxy-type generic --proxy-url "http://1.2.3.4:8080" --save-proxy
python cli.py --search-type video --video-ids abc123 --keyword test| Symptom | Fix |
|---|---|
| Python engine fails to initialize | Confirm python/ exists next to the executable with Lib, the Python zip, and required modules |
| No transcript results | Try --cookies-from-browser or a cookies.txt, and confirm the language code exists for that video |
| Clip download/render fails | Verify yt-dlp and ffmpeg are installed and discoverable; check app logs for tool-path errors |
| Rate limiting / access errors | Pass browser cookies via --cookies-from-browser, reduce concurrent activity, and retry |
Found a bug or have a feature idea? Open an issue — bug reports and suggestions are both welcome.
MIT License + Commons Clause v1.0.
Free to use, modify, and distribute — but not to sell or offer as a paid/SaaS service. See LICENSE for the full text.

