A local-first video transcript workbench for YouTube and Bilibili.
Read a timestamped transcript beside the video, keep the passages that matter, ask questions grounded in the captions, and turn one video—or an entire Bilibili collection—into Markdown notes you own.
中文说明 · Download v0.2.0 · Changelog
Read the transcript → keep an excerpt → generate an AI note → process the whole collection
- Read beside the video. Search every caption, follow playback, and jump to the source from a timestamp.
- Keep the useful parts. Select text to copy, edit, or add it as a priority excerpt for the note.
- Ask and write. Chat against the current transcript, then create Chinese, English, or line-by-line bilingual notes with clickable timeline citations.
- Save now, read later. Send the current video to a persistent background queue, close the panel, and open the finished note from the Chrome notification.
- Leave a collection running. Bilibili multi-part videos continue sequentially in the local service after the panel closes or the service restarts.
- Own the result. Notes are Markdown files on your Mac. API credentials stay in the local service and never enter the extension.
OpenTranscript v0.2.0 supports Apple Silicon Macs and Chrome-compatible browsers.
Run this in Terminal:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/cassieliang6709/open-transcript/main/scripts/install-macos.sh)"The installer puts the service under ~/.local/share/open-transcript, creates ~/Documents/OpenTranscript for notes, and starts a user LaunchAgent on 127.0.0.1:4242. Edit ~/.config/open-transcript/.env to use Ollama or an OpenAI-compatible provider, then restart it with:
launchctl kickstart -k "gui/$(id -u)/com.opentranscript.server"Download open-transcript-chrome-v0.2.0.zip and unzip it. Open chrome://extensions, enable Developer mode, choose Load unpacked, and select the unzipped folder.
Open a captioned YouTube video or a bilibili.com/video/BV... page and click OpenTranscript. In Extension options, keep the server URL at http://127.0.0.1:4242 and select 测试连接.
The default profile uses local Ollama with qwen2.5:7b:
ollama pull qwen2.5:7b
ollama serveOpenTranscript also supports OpenAI-compatible chat-completions providers, including OpenAI, SiliconFlow, OpenRouter, and local compatible servers. Put the endpoint, model, and key in ~/.config/open-transcript/.env:
LLM_PROVIDER=openai
LLM_BASE_URL=https://api.siliconflow.cn/v1
LLM_MODEL=deepseek-ai/DeepSeek-V4-Flash
LLM_API_KEY=your-key-hereNever put an API key in the extension directory or commit it to Git.
| Area | Behavior |
|---|---|
| Sources | YouTube watch pages and Bilibili BV pages with an accessible subtitle track |
| Transcript | Search, timestamp seek, playback following, inline paragraph edits, full copy |
| Notes | Summary and long article in Chinese, English, or immersive bilingual format |
| Grounding | Key claims cite clickable timestamps that seek the source video; selected excerpts influence the note |
| Background inbox | One-click current-video jobs persist across service restarts and notify you when the Obsidian note is ready |
| Batch | Up to 100 Bilibili parts, sequential processing, skip existing, continue on item failure, cancel between items |
| Storage | Idempotent, source-aware Markdown files in a local directory such as ~/Documents/OpenTranscript |
| Providers | Ollama native API or an OpenAI-compatible chat-completions endpoint |
OpenTranscript reads existing platform captions. Videos with no usable subtitle track are reported clearly; speech-to-text fallback is planned rather than silently uploading media.
Prerequisites: Rust, Bash, and a Chromium browser.
git clone https://github.com/cassieliang6709/open-transcript.git
cd open-transcript
cp .env.example .env
cargo test
cargo run --releaseLoad extension/ from chrome://extensions for development. Build release artifacts with:
./scripts/package-extension.sh
./scripts/package-macos-backend.shThe health check is curl http://127.0.0.1:4242/health.
The extension reads the active video's metadata and available subtitle track. It sends transcript text to the local Rust service. The service writes Markdown locally and contacts only the model endpoint you configure, plus optional Resend email when all Resend settings are present. Bilibili requests reuse the active browser session without copying cookie values into project files.
For a remote service, set an exact CORS_ALLOWED_ORIGINS=chrome-extension://YOUR_EXTENSION_ID value and put the service behind HTTPS and appropriate access control.
These are planned features, not current capabilities. Each issue lists scope and acceptance criteria. For larger features, propose a first milestone before implementation.
- Opt-in local speech-to-text fallback for videos without captions
- Process youtube playlists through the persistent background queue
- Configure model providers from the extension
- Browse a persistent local video and note library
- Prepare signed and notarized macos distribution
- Prepare chrome web store submission
More starter tasks: feature request template, Bilibili URL tests, and manual release checklist.
Contributors wanted — including your first open-source PR! Help with documentation, tests, bug reports, translation, or focused improvements. You do not need to know Rust to get started. English and Chinese are both welcome.
- First issue: improve the installation troubleshooting guide — documentation.
- First issue: test Bilibili subtitle language selection — JavaScript, no live account or API key needed.
- Add English/Chinese support to the options page — a focused extension UI task.
Browse good first issues or help wanted. Check the current issue status and comments, then leave a short plan before starting so we can avoid duplicate work. For larger ideas, open an issue to agree on scope first.
Read CONTRIBUTING.md for checks and PR expectations. Bug reports and testing feedback also count: include the source site, browser/OS version, reproduction steps, and a redacted error message. Never post API keys, browser cookies, or private transcripts.
