README file from
GithubGeulo: YouTube Library Manager and AI Summarizer for Obsidian
Your YouTube library, connected to your Obsidian notes.
Geulo helps you consume YouTube content more intentionally. YouTube is designed to keep you watching more and more content, rather than helping you revisit what you've already watched and review it with your own notes.
This Obsidian plugin brings your liked videos, playlists, and subscriptions into Obsidian. You can rediscover videos through search and filters, read transcripts, generate AI summaries, and turn what you watch into Markdown notes.
To set up Geulo, you'll need to provide your own Google OAuth credentials. This involves creating a project in the Google Cloud Console, enabling the YouTube Data API v3, and generating OAuth client credentials. These credentials allow the plugin to access your YouTube account securely and retrieve information such as your liked videos, playlists, and subscriptions. Detailed setup instructions are provided below in the Requirements section.
Table of Contents
Features
-
Video retrieval: Access your entire YouTube liked video history
-
Playlist browsing: Browse your YouTube playlists and add custom playlists by ID
-
Add liked videos to playlists: Right-click a liked video, choose Add to playlist, then search and select one of your YouTube playlists. Existing entries are checked before adding; your like is kept.
-
Searching and content-type filtering: Search, filter, and sort videos by title, channel, tags, and content type — Long-form, Short-form, or Music.
About the Short-form filter - The YouTube Data API does not provide an official Shorts label for videos. Geulo therefore groups videos as Short-form based on the maximum duration selected in
Settings > Video display > Maximum Short-form duration. This is an approximation: short regular videos may be included, and Shorts longer than the selected limit may be excluded. -
Create Video Notes: Create video notes with a single click and write your own notes. You can also organize them by channel.
-
Your like status in video notes:
liked: trueorliked: falserecords the last confirmed rating of your Geulo-connected YouTube account;likesremains the video’s total like count. Geulo checks this when creating/opening a video note from cards or Web Viewer, and updates existing notes after like/unlike/Undo and liked-video sync. Recent sync confirms fetched likes; Full scan also checks existing notes outside the fetched list. Custom templates can use{{liked}}. Failed or unknown lookups preserve existing values and leave new values absent. Clearing the saved list does not change this property. Editing the property does not change YouTube. -
Daily note integration: Add videos to your daily notes with a single click
-
Collection curation: Remove videos from your liked list directly within Obsidian
-
AI video summaries: Generate video summaries using Google Gemini, OpenRouter, or OpenAI. Gemini analyzes the video directly, while OpenRouter and OpenAI summarize the selected transcript. Summaries include a collapsible one-liner preview and full expandable summary.
-
Add summary to note: Append AI-generated summaries to your video notes
-
Fetch transcripts: Choose Fetch transcript from a video card's menu in liked videos, playlists, or subscriptions. Read existing YouTube captions with timestamp links and copy the text. No extra API key is needed. Geulo prefers captions in your app's language, then English, then the first available language. Transcript access uses unofficial YouTube endpoints and may be unavailable for some videos or temporarily blocked. Captions are fetched on demand and are not saved automatically.
-
Video info display: Display video info with a single click
-
Search by channel name: Search by channel title when channel is clicked in the video card
It is inspired by the obsidian-google-calendar plugin.
Requirements
To use this plugin, you need to set up a project in Google Cloud Console and enable the YouTube Data API v3. Follow the steps below to set it up:
- Download the Plugin: Go to the Obsidian community plugins page and search for "Geulo".
- Enable the Plugin: In Obsidian, navigate to Settings > Community plugins and toggle the Geulo plugin on.
- Set Up API Credentials: Follow the steps in the "Setting up Google Cloud Console and YouTube Data API v3" section to obtain your credentials.
Setting up Google Cloud Console and YouTube Data API v3
The YouTube Data API v3 operates on a quota system where different API calls consume a specific number of “units” or “points” from a daily allowance. Using the API is free of charge; the “cost” refers to these quota units, not a monetary fee.
To use this plugin, you need to set up a project in Google Cloud Console and enable the YouTube Data API v3.
Follow the steps below to set it up:
1. Create a Project
- Go to Google Cloud Console.
- Click on the project dropdown and select "New Project".
- Enter a project name and click "Create".
2. Enable YouTube Data API v3
- Navigate to API & Services > Library.
- Search for YouTube Data API v3 and click on it.
- Click "Enable".
3. Create Credentials
- Go to API & Services > Credentials.
- Click on Create Credentials and select OAuth client ID.
- Configure the consent screen if prompted.
- Choose Web application and enter a name.
- In Authorized JavaScript origins, add
http://127.0.0.1:42813. - In Authorized redirect URIs, add
http://127.0.0.1:42813/callback. - Click "Create" and copy the Client ID and Client secret.
4. Create Login Permissions
- Open Google Cloud Console for the project you created for this plugin.
- Go to Google Auth Platform → Audience (this replaces the older “OAuth consent screen” UI).
- Confirm:
- Publishing status = Testing
- User type = External
- Under Test users, click Add users and add the Google account you use in Obsidian (for example
[email protected]). - Save.
Testing mode requires reconnection after 7 days. Google authorization for Geulo's YouTube access, including the refresh token, expires 7 days after you grant permission. Reconnect your Google account in Geulo to continue fetching videos.
For ongoing use, consider selecting Publish app under Google Auth Platform → Audience to switch to In production, then reconnect Geulo to obtain new tokens. This removes the Testing-specific 7-day limit, but does not guarantee that tokens will never expire or be revoked. Publishing is separate from Google's app verification: an unverified-app warning and applicable verification requirements may still remain. See Google's publishing status guidance.
5. Enter Credentials in Plugin
- Open Obsidian and go to Settings → Geulo → Google connection.
- Choose either setup method:
- Import JSON: Download your OAuth client JSON from Google Auth Platform → Clients, click Import JSON in Geulo, and select the file. Review the client type, project, and Client ID, then click Save credentials. Web and Desktop client JSON files are accepted; service account keys are not. The file is read locally, and the client secret is saved in Obsidian SecretStorage. If already connected, disconnect before replacing credentials.
- Manual entry: Expand Google API credentials and enter your Client ID and Client secret in the respective fields.
- Click Connect with Google to sign in. Importing a file does not sign you in or verify your project's API and consent settings.
6. Successful Authentication Confirmation
- When the OAuth flow succeeds, your browser will open a page at a URL like:
http://127.0.0.1:42813/callback?code=...&scope=... - The page will display:
Authentication successful! Please return to Obsidian.
- At that point you can close the tab and Obsidian should show that you are logged in.
Troubleshooting
If you encounter any issues, consider the following steps:
- Credentials: Double-check that your Client ID and Client secret are correctly entered in the plugin settings.
- Authorized URIs: Verify that http://127.0.0.1:42813 is listed in the Authorized JavaScript origins and http://127.0.0.1:42813/callback in the Authorized redirect URIs.
- If granting permission to your google project fails, check if there are multiple window/tabs for login process opened. If so, close all of them and try again.
Local video data
Liked videos are stored in liked-videos.json in this plugin's folder, separately from settings in data.json. On startup, the plugin reads the list into memory. Updates are saved asynchronously, with synchronous updates combined into one save. The previous valid file is backed up as liked-videos.json.bak before replacement.
Existing liked videos in localStorage migrate automatically after the new file is written and verified. Invalid files stop loading instead of being overwritten with an empty list. To restore a backup or edit the JSON manually, disable the plugin first, replace/edit liked-videos.json, and enable it again. Other devices do not automatically refresh the in-memory list when a synced file changes; reload the plugin after syncing. This change does not add conflict merging or incremental YouTube fetching.
AI Summary Setup
- Enable AI Summary in the plugin settings
- Choose a provider: Gemini (direct video analysis), OpenRouter, or OpenAI (transcript-based)
- Enter the API key for your chosen provider
- (OpenRouter or OpenAI) Select or enter a model ID
- Optionally customize the summary prompt
- Click the summary button on any video card to generate a summary
Tips
You can watch youtube video and take a note within Obsidian if you turn on Core Plugin > Web Viewer.
Release Notes
5.0.0 (upcoming)
Read, listen, and take notes from your YouTube library
- Transcript reader: Search captions, switch between paragraphs and original timestamps, choose a preferred language, copy text, and save transcripts as notes. No extra API key is needed; caption availability varies by video.
- More ways to summarize: OpenAI joins Gemini and OpenRouter. OpenAI and OpenRouter use transcripts; Gemini analyzes the video directly. Read summaries alongside transcripts, see their source and model, and customize line spacing.
- Listen to summaries: Read AI summaries aloud with playback speed and volume controls. Generated audio is saved for replay. Set up an OpenRouter API key, model, and voice separately in Settings → Speech.
- Better video discovery: Filter liked videos and playlist videos by upload date, duration, language, audio language, and whether they have an AI summary or video note.
- Easier playlist management: Pin favorites, filter your own and imported playlists, import by URL or ID, and open playlists on YouTube. Remove imported playlists from Geulo without deleting them on YouTube. Add liked videos to your own playlists from the video menu, with a duplicate check.
- Web Viewer actions: On desktop, open transcripts, AI summaries, video notes, and playlist imports from the menu on a YouTube page in Obsidian Web Viewer.
- Your likes in notes: The new
likedproperty tracks your connected account’s confirmed like status.likesremains the total like count; editing a note does not change YouTube. - Account-aware saved lists: Confirm how existing liked videos and subscriptions should be used when connecting a different or previously unverified YouTube account.
- Simpler Google setup: Import your OAuth client JSON in Settings instead of entering the Client ID and secret manually.
4.3
- Load up to 5 recent uploads per subscribed channel for lighter refreshes.
- Continue on YouTube when no videos match your search, using your preferred browser or Obsidian Web Viewer.
4.0–4.2.2
- Browse subscriptions with search, channel/date/content-type filters, sorting, and infinite scroll.
- Unsubscribe from individual or selected channels with a quota confirmation. This changes your YouTube subscriptions.
- Refresh subscriptions faster by loading multiple channels at once.
3.4
Smoother browsing and more dependable notes
- Scroll through large liked-video collections more smoothly. Infinite scroll now renders only the videos around your current position and loads more as you continue.
- Choose how videos open inside Obsidian. Enable Open Videos in Obsidian Web Viewer, then use Open Web Viewer in Split Pane to open videos beside your notes instead of in a new tab.
- Rename or move a video note without losing its connection to the video. Geulo now identifies notes by their YouTube video ID, so opening a note or adding a summary continues to use the same file instead of creating a duplicate.
- Existing video notes remain supported. Geulo adds the video ID when you next open an older note from a video card or add a summary to it. Leaving Video note location empty now uses Obsidian's default new-file location.
- Check your Google connection at a glance in Settings. Geulo clearly shows whether you are connected and presents the actions available for your current status.
- Your liked-video list now moves automatically from browser storage to a dedicated file in the Geulo plugin folder. Geulo keeps a backup before saving changes and preserves an unreadable file instead of replacing your videos with an empty list.
- If your sync includes plugin data, reload Geulo after syncing to see list changes from another device. Avoid changing the list on two devices at the same time, because 3.4 does not merge competing changes.
3.3.1
Google credential storage
- Google access tokens, refresh tokens, and the client secret now use Obsidian SecretStorage. Existing credentials move automatically when the plugin loads.
- This change applies to Google credentials; Gemini, OpenRouter, and OpenAI API keys still use the existing plugin settings storage.
3.3.0
Video tags and page navigation
- Liked videos and playlists now show video tags. Click a tag to show videos with that exact tag; select another to replace the filter, or clear it to return to the full list.
- Cards show a compact selection of tags. Click +N to view the rest. You can hide tag chips in Settings → Show video tags.
- In Settings → Video display, choose Pagination to navigate liked videos by page instead of scrolling.
- Requires Obsidian 1.13.0 or later.
3.2.0
Delete your YouTube playlists
- You can now delete playlists you own from the playlists view or an open playlist.
- A confirmation appears before deletion. This permanently deletes the playlist from YouTube, not just from Geulo, and cannot be undone.
3.1.0
Likes, undo, and full fetch
- You can like or unlike a video directly from a playlist.
- After unliking a video in liked videos, click Undo in the notification within 5 seconds to restore the like and return the video to the list.
- Run Geulo: Full Fetch Liked Videos from the command palette to fetch beyond the regular fetch limit, using your configured full-fetch limit.
3.0.0
- AI video summaries: Generate summaries using Google Gemini or OpenRouter with real-time streaming responses
- One-liner summaries: Automatic brief summary generation after full summary completes
- Summary management: Regenerate summaries, add summaries to notes, filter by AI note
- Content type filtering: Filter liked videos by Long-form, Short-form, or Music
- Streaming UI: Live streaming display with skeleton loading and cancel support
- OpenRouter support: Use OpenRouter API as an alternative AI provider with model selection
- UI improvements: Polishing the UI in general. reusable ViewHeader component, fixed thumbnail layout shift, chevron indicators for expandable sections
2.3.0
- Template system: Added template for video note, and reference for available template variables
- Updated fetching logics: Adjusted default fetch limit to 10 and maximum to 50 for better API quota management
- Full fetch warning: Added warning when auto note creation is enabled with full fetch mode
2.2.0
- Automatic note creation: Automatically create video notes for newly liked videos during auto-fetch
- Daily note linking: Option to automatically link new video notes to your daily note
- Full fetch mode: New option to fetch all liked videos on every auto-fetch (with quota warnings and user confirmation)
- Template system: Customize video notes with your own markdown templates
- Configure template folder and default template
- Fallback to built-in template option
- Create example templates with one click
2.1.0
- UI improvements: Replaced icons with Lucide React icons for better consistency
- Bug fix: Fixed duration badge color display
2.0.1
- Type safety: Improved type safety in PlaylistApi
2.0.0
- Enhanced daily note integration: Add video entries to daily notes with improved error handling
- Playlist pinning: Pin your favorite playlists for quick access
- Infinite scroll: Smooth infinite scroll for video loading in playlists
- Performance optimization: Video display limit for better performance
- Improved caching: Enhanced cache management in PlaylistApi
- UI refinements: Updated ribbon icon labels and command names for clarity
Support
Report bugs and request features on GitHub Issues.
If you're enjoying Geulo, you can support my work by buying me a coffee.
You can also help spread the word by sharing Geulo with other Obsidian users on Reddit, X, or your favorite community.
Thank you for using Geulo and supporting its development!