rmccorkl229 downloadsCreate comprehensive notes from YouTube transcripts using LLMs.
TubeSage is an Obsidian plugin that converts YouTube videos into structured notes using large language models. It extracts transcripts, generates summaries, and can add timestamped links back to specific moments in the video.
Demo — click the image to watch the walkthrough video:
Community Plugins: Install through Obsidian's Settings → Community plugins browser once TubeSage is listed in the directory.
Manual install from a GitHub release:
main.js, manifest.json, and styles.css.
Do not download "Source code (zip)" or "Source code (tar.gz)" — those are source archives and will not load as a plugin..obsidian/plugins/tubesage/.tubesage/ folder.Accept the MIT license terms in the settings panel before using the plugin. Use the "View License" button to read the full text.
Choose and configure a provider in settings:
Where API keys are stored: cloud-provider keys (OpenAI, Anthropic, Google, OpenRouter) are saved in Obsidian's native secret storage, not in the plugin's data.json. Type a key into its provider field and it is written to the secret store automatically — there is no separate setting to enable this, and it is not optional. The Ollama field holds a server URL rather than a secret, so it remains in plugin data.
When enabled, each section heading includes a link that opens the YouTube video at the corresponding moment.
main.ts): coordinator and UI.src/youtube-transcript.ts): multi-method extraction with mobile fallbacks.src/llm/llm-factory.ts): constructs the provider client.src/llm/transcript-summarizer.ts): orchestrates summarization.src/llm/langchain-client.ts): unified interface for cloud providers.src/utils/fetch-shim.ts): cross-platform HTTP via Obsidian's requestUrl.src/utils/timestamp-utils.ts): timestamp link generation.src/utils/error-utils.ts): error categorization and retry logic.Architecture diagrams are in the docs/ directory:
Cloud-provider API keys (OpenAI, Anthropic, Google, OpenRouter) are stored in Obsidian's native secret storage, never written to the plugin's data.json. Keys saved by versions older than 1.3.0 are migrated into secret storage automatically the first time you open the plugin after upgrading.
All requests use HTTPS. TubeSage contacts:
api.scrapecreators.com) and Supadata (api.supadata.ai) — contacted only if you choose to configure an API key for one of them. These are optional paid transcript services used as alternatives or fallbacks to direct YouTube extraction; with no key set, neither is contacted.That is the complete list. LangChain's bundled tiktoken helper, which would otherwise fetch tokenizer data from a third-party CDN, is replaced with a network-free stub at build time, so TubeSage contacts no other hosts.
No user data is stored on servers operated by the plugin author.
The plugin also bundles langsmith as a transitive dependency of @langchain/core. langsmith is LangChain's optional tracing library and contains a background cache-refresh timer. TubeSage never enables LangSmith tracing and never sets a LangSmith API key, so this code stays dormant and performs no background network transmission.
Static analysis of the bundled main.js shows a few atob()/btoa() (base64) calls. These all originate in bundled libraries, not in TubeSage's own code, and are all routine: decoding embedding vectors and image data URLs, reading a JWT header, and encoding Mermaid diagram syntax for rendering. None of them obscure code, API keys, or URLs.
This project is licensed under the MIT License — see the LICENSE file. A YouTube content-usage disclaimer is included in MIT-license-tubesage.md.
GitHub Repository: https://github.com/rmccorkl/TubeSage