Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ClipSifTranscribe — Find the moment. Keep the context. Cut faster.

CI status MIT license Windows Local-first

Search YouTube captions, jump to the exact line, save timestamped notes and ranges, then export a clean edit list.

Visit the website  ·  Buy me a coffee

Created by Art Moreno.

ClipSifTranscribe local caption research workspace

Why ClipSifTranscribe

Long videos hide useful moments inside hours of footage. ClipSifTranscribe turns existing YouTube captions into a fast, searchable research workspace:

  1. Paste a YouTube link.
  2. Search the captions, including exact phrases.
  3. Jump the official player to any matching line.
  4. Save a line or mark an In/Out range.
  5. Add notes and move each moment from Candidate to Selected to Used.
  6. Export the timestamp map for editing, review, or handoff.

It does not download the video, and it does not upload your research library. The app, cached captions, notes, searches, and pairing data live in a local SQLite database on your PC.

Important

ClipSifTranscribe retrieves captions that already exist on YouTube or imports a transcript you provide. It does not perform speech-to-text on video audio.

Highlights

Find Shape Keep Share
YouTube watch, short, live, embed, and youtu.be links Synced embedded player Local library and resume position CSV
Human and auto-generated captions Adjustable seek preroll Favorites and archive state JSON
Full-text and quoted-phrase search Single-line moments Notes and status Markdown
Search suggestions Custom In/Out ranges Cached transcripts Plain text
SRT, VTT, and timestamped-text import Auto-scroll with manual lock Trusted phone devices Timestamp links

The responsive interface works on the host PC and, when explicitly enabled, on a paired phone over a trusted LAN or private Tailscale network.

Quick start

Requirements

  • Windows 10 or 11 with PowerShell
  • Python 3.10 or newer
  • Node.js 20.19 or newer, or Node.js 22.12 or newer
  • Internet access for YouTube metadata, captions, and playback
  • Tailscale only if you want private access away from the host PC

Clone the repository:

git clone https://github.com/ArtMoreno/ClipSifTranscribe.git
cd ClipSifTranscribe

Install the backend, build the interface, generate the icon, and create the desktop shortcut:

powershell -NoProfile -ExecutionPolicy Bypass -File .\Install-ClipSifTranscribe.ps1

Double-click the new ClipSifTranscribe desktop shortcut. The secure default is desktop-only mode at:

http://127.0.0.1:8765

You can also start or stop it from PowerShell:

.\Start-ClipSifTranscribe.ps1
.\Stop-ClipSifTranscribe.ps1

Installer options

Skip the frontend dependency install and build only when a current dist directory already exists:

.\Install-ClipSifTranscribe.ps1 -SkipNode

Create a shortcut that opts into trusted-network phone access:

.\Install-ClipSifTranscribe.ps1 -PhoneAccess

If a private Tailscale HTTPS address is already configured, include the address that the app should show and encode in its QR code:

.\Install-ClipSifTranscribe.ps1 -PhoneAccess -PhoneUrl "https://your-pc.your-tailnet.ts.net"

The -PhoneUrl option does not create a tunnel, configure HTTPS, or change Tailscale ACLs. It only sets the displayed connection address.

Using the workspace

Load captions

Paste a standard YouTube, youtu.be, Shorts, live replay, embed, or YouTube NoCookie link. ClipSifTranscribe normalizes the link, requests basic metadata, and retrieves the available caption tracks.

Human-created captions are preferred when available. The workspace identifies whether the cached track is human-created or auto-generated, and lets you refresh it.

Search and navigate

Enter words to search the current transcript with SQLite FTS5. Put an exact phrase in quotation marks. Select a result to seek the player to that line; use the preroll control when you want a little context before the match.

Useful keyboard controls:

Shortcut Action
Ctrl/Command + F Focus transcript search
Enter Open the selected result
Alt + Down Select the next result
Alt + Up Select the previous result

Save moments

  • Save a transcript line with one click.
  • Set In and Out points for a larger range.
  • Add a note and update the moment's status.
  • Track the moment as Candidate, Selected, or Used.
  • Reopen saved moments and seek directly to their timestamp.

Import a transcript

When YouTube captions are unavailable, import an SRT, VTT, or timestamped text file. Timestamped text can be as simple as:

1:02 First useful line
1:08 Second useful line

The imported transcript is indexed and searched like a retrieved caption track.

Export

Format Intended use
CSV Spreadsheet-friendly timestamp map
JSON Structured records for another tool or script
Markdown Readable notes with source and timestamp links
Plain text Compact pipe-separated handoff

Exports can include the source link, moment title, start and end times, duration, transcript excerpt, note, status, and timestamp link.

Phone access

Desktop-only mode binds the server to 127.0.0.1, so another device cannot reach it.

To opt into phone access for the current launch:

.\Start-ClipSifTranscribe.ps1 -PhoneAccess

Phone mode binds to 0.0.0.0. Open Settings on the host PC to see the connection URL, QR code, and pairing code. A remote browser must pair before it can call protected API routes. Paired devices can be reviewed and revoked from Settings.

For an existing private Tailscale address:

.\Start-ClipSifTranscribe.ps1 -PhoneAccess -PhoneUrl "https://your-pc.your-tailnet.ts.net"

Caution

Use phone mode only on a network you trust or through a private tailnet. Never forward port 8765 directly to the public internet. Pairing is not a replacement for HTTPS, firewall rules, Tailscale ACLs, or network-level rate limiting. The host PC must remain awake and connected.

More detail is available in SECURITY.md.

Data and privacy

ClipSifTranscribe creates the following private runtime directory:

data/
  clipsiftranscribe.sqlite3
  server.log
  server-error.log

The database can contain:

  • YouTube URLs and metadata
  • Cached or imported transcripts
  • Searches and playback positions
  • Saved ranges, excerpts, and notes
  • Favorites, archive state, and library records
  • Pairing codes and trusted-device tokens
  • Diagnostics

The project does not provide cloud sync and does not upload this database. It does contact YouTube for oEmbed metadata, caption retrieval, thumbnails, and embedded playback.

The entire data directory is ignored by Git. Do not force-add it. To back up your research, stop the server and copy the SQLite file to a secure location.

Uninstall

Stop the app and remove the desktop shortcut:

.\Uninstall-ClipSifTranscribe.ps1

Also delete the local library, cached captions, notes, and pairing data:

.\Uninstall-ClipSifTranscribe.ps1 -RemoveData

The uninstaller deliberately leaves the source folder in place. Delete that folder manually after confirming that you no longer need its contents.

Development

Create the Python environment and install dependencies:

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install -r requirements.txt

Install and build the frontend:

npm ci
npm run build

Run the full application:

.\.venv\Scripts\python.exe -m uvicorn app.main:app --host 127.0.0.1 --port 8765

Then open http://127.0.0.1:8765.

For backend auto-reload:

.\.venv\Scripts\python.exe -m uvicorn app.main:app --reload --host 127.0.0.1 --port 8765

The FastAPI server serves the built frontend from dist. Run npm run build again after frontend changes. The current npm run dev command starts Vite without an API proxy, so the built frontend is the reliable full-stack development loop.

Validation

Run the Python tests:

.\.venv\Scripts\python.exe -m pytest tests -q

Type-check and build the frontend:

npm run build

Install Playwright's Chromium browser once, then run the browser test:

npx playwright install chromium
npm run test:e2e

The Playwright test expects a built frontend and working Python environment.

Architecture

Layer Technology Responsibility
Interface React, TypeScript, Vite Player, transcript, search, moments, library, settings
Local server FastAPI, Uvicorn API, pairing, imports, exports, static frontend
Storage SQLite, FTS5 Library, caption cache, full-text index, notes, devices
YouTube oEmbed, youtube-transcript-api, IFrame Player Metadata, existing captions, playback
Windows tooling PowerShell Installation, launch, shutdown, shortcut, uninstall

Project layout:

app/                              FastAPI backend and icon builder
assets/                           Windows application icon
docs/                             Repository artwork
e2e/                              Playwright browser test
src/                              React and TypeScript frontend
tests/                            Python unit tests
Install-ClipSifTranscribe.ps1     Installer and shortcut creation
Start-ClipSifTranscribe.ps1       Local server launcher
Stop-ClipSifTranscribe.ps1        Safe server shutdown
Uninstall-ClipSifTranscribe.ps1   Shortcut and data cleanup

The following are generated locally and intentionally excluded:

.venv/
node_modules/
dist/
data/
test-results/
playwright-report/

Limitations and YouTube notice

  • Caption retrieval can fail when captions are disabled, private, restricted, unavailable in a region, or temporarily blocked.
  • Caption retrieval uses youtube-transcript-api, which is not an official YouTube API and can be affected by upstream changes or rate limits.
  • Internet access is required for metadata, retrieved captions, thumbnails, and playback.
  • Imported transcripts remain searchable offline, but the embedded YouTube player still needs a network connection.
  • The installation and launch workflow is Windows-first.
  • Phone mode is designed for trusted private networks, not public hosting.

ClipSifTranscribe is an independent project. It is not affiliated with, endorsed by, or sponsored by YouTube or Google. Use it only with material you are allowed to access and process, and follow applicable copyright rules and platform terms.

Author

Created and maintained by Art Moreno.

License

ClipSifTranscribe is open source under the MIT License.

Copyright (c) 2026 Art Moreno.

About

Local-first YouTube caption research workspace for finding moments, saving timestamped notes, and exporting edit-ready clip lists.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages