DagerottDev934 downloadsSync public YouTube playlists into notes with metadata, transcripts, mobile support, and optional AI summaries.
Turn public YouTube playlists into Obsidian notes with metadata, transcripts, indexes, and optional AI summaries.
Install in Obsidian · Download a release · Usage guide · Report a bug · Request a feature

For Obsidian users who learn or research through YouTube, this plugin turns a playlist into searchable notes in your vault. Each video gets its own note with metadata and any available transcript. YouTube syncing requires no user-supplied YouTube API key; AI summaries are optional.
The plugin supports Obsidian on desktop, iOS, iPadOS, and Android.
YouTube/<Playlist Name>/._Index.md per playlist (table of all videos) and a root Index.md.Video notes are preserved during repeat syncs. The plugin-managed playlist and root indexes are regenerated, so keep personal annotations in video notes or separate notes.





Install the released plugin to use it in a vault. Node.js and npm are needed only for development.
Install YouTube Playlist Sync from the Obsidian Community Plugins directory, then enable it under Settings → Community plugins.
https://github.com/DagerottDev/Youtube_Obsidian_Sync as a beta plugin.main.js and manifest.json from the latest release..obsidian/plugins/youtube-playlist-sync/ if it does not exist.https://www.youtube.com/playlist?list=PL...) and click Add. Repeat for as many
playlists as you want.The first sync creates all video notes; later syncs only add new ones.
Open a generated video note and check its properties, video embed, and transcript. With the default settings, the output looks like this:
YouTube/
├── Index.md
└── <Playlist Name>/
├── _Index.md
├── <Video Title>.md
└── ...
Open _Index.md to browse the playlist's video links, or YouTube/Index.md to browse all
configured playlists. Run Sync YouTube playlists now again to add newly discovered videos
without rewriting existing video notes.
| Setting | Default | What it does |
|---|---|---|
| Playlists | — | Public YouTube playlist URLs to sync |
| Sync when Obsidian opens | on | Run a sync shortly after Obsidian starts |
| Sync interval (minutes) | 30 | Re-sync every N minutes while active; 0 disables |
| Base folder | YouTube |
Vault folder where playlists are written |
| Create index notes | on | Per-playlist _Index.md + root Index.md |
| Transcript format | readable | Readable paragraphs or timestamped lines |
| Preferred caption language | (empty) | e.g. en; empty = first available transcript |
| Media embed | video | Embed the YouTube player, thumbnail, or nothing |
| Tags | youtube |
Extra tags added to every generated note |
| Video frontmatter template | built-in metadata template | Customize properties for newly generated video notes |
| Enable AI summaries | off | Enables optional AI summary features |
| AI provider | OpenAI | OpenAI, NVIDIA NIM, or Custom OpenAI-compatible endpoint |
| API key | — | Secret selected from Obsidian SecretStorage; optional for unauthenticated custom/local endpoints |
| API base URL | provider default | Endpoint base URL, normally ending in /v1 |
| API protocol | provider default | Responses API or Chat Completions |
| Model ID | provider default | Any model ID available from the configured endpoint |
| AI prompt mode | default | Use, append to, or replace the built-in summarization guidance |
| Custom AI instructions | (empty) | Optional focus, tone, and detail instructions |
| Generate summaries automatically | on | When AI is enabled, summarize new notes after they are created |
AI is completely optional. YouTube playlist syncing, metadata, transcripts, and note creation continue to work without any AI provider.
To enable AI summaries:
The OpenAI preset uses:
https://api.openai.com/v1gpt-5.6-lunaThese are the plugin's preset values, not a guarantee of model access. The model ID and endpoint remain editable; select a model supported by your account and endpoint.
The plugin authenticates through the selected API-key secret. It does not implement ChatGPT subscription sign-in or OAuth.
The NVIDIA NIM preset uses:
https://integrate.api.nvidia.com/v1openai/gpt-oss-20bReplace the starter model with any model ID available to your NVIDIA endpoint. NVIDIA NIM is OpenAI-compatible, so the same summary provider can be reused with a NIM API key.
Choose Custom OpenAI-compatible endpoint to use another service or your own server. Configure:
This can work with compatible hosted providers or self-hosted servers such as NIM/vLLM-style endpoints. A trusted local endpoint that requires no authentication may leave the secret unset. Compatibility depends on the endpoint implementing the selected OpenAI-style API.
Security: the selected credential is sent as a Bearer token to the configured base URL. Only configure endpoints you trust. Switching provider presets clears the selected secret to reduce the chance of accidentally sending one provider's key to another provider.
Commands:
Automatic AI generation happens only after the YouTube note is successfully created. An AI-provider error therefore never causes the underlying playlist sync or note creation to fail.
For very long transcripts, the plugin summarizes transcript chunks first and then produces one final coherent summary.
The AI prompt mode setting has three choices:
The fixed JSON response contract is always retained so the five rendered summary sections stay reliable. The video title, channel, and transcript are supplied separately; custom instructions should describe the desired focus, tone, or level of detail. Clear the instructions and switch back to Default guidance to restore the original behavior.
The default video frontmatter template uses the same core property set as YT Knowledge Notes:
title, aliases, source, channel, channelUrl, channelId, videoUrl, videoId,
playlistUrl, playlistId, thumbnailUrl, videoDescription, uploadDate, videoCategory,
durationSeconds, keywords, generated, plus your tags.
When an AI summary is generated, the plugin also records aiSummary, aiProvider, aiModel,
and aiGenerated. The AI content is wrapped in internal markers so regeneration can safely
replace that block without touching your other edits.
The Video frontmatter template setting accepts YAML without the opening and closing ---
lines. Values are inserted with placeholders:
title, aliases, source, channel, channelUrl, channelId, videoUrl, videoId,
playlistUrl, playlistId, thumbnailUrl, videoDescription, uploadDate, videoCategory,
durationSeconds, keywords, generated, tags, aiSummary, aiProvider, aiModel, and
aiGenerated.
For example:
title: {{title}}
source: youtube
videoId: {{videoId}}
url: {{videoUrl}}
creator: {{channel}}
topics: {{tags}}
Placeholder values are YAML-encoded. If an optional value is unavailable, its entire template
line is omitted. source: youtube and a non-empty videoId are required so the plugin can
recognize notes and avoid duplicates. Use Validate and save before syncing, Preview to
inspect sample output, or Reset default to restore all standard properties.
Template changes affect new notes only. To update existing generated video notes, run Apply frontmatter template to existing YouTube notes from the command palette or plugin settings. The migration shows a sample and note counts before confirmation, preserves note bodies and unknown user properties, and reports changed, unchanged, skipped, and failed notes. YAML comments and formatting may be normalized. Playlist and root index notes are never migrated.
The plugin supports iOS/iPadOS and Android using Obsidian's cross-platform Vault and HTTP APIs. Mobile operating systems may suspend Obsidian when it is in the background, so the plugin does not claim background execution while the app is closed or suspended.
Supported mobile behavior:
If a mobile sync is interrupted, already-created notes are detected on the next run and skipped, so syncing resumes with the remaining videos.
For normal playlist syncing, the plugin makes outbound HTTPS requests to YouTube to fetch playlist data, video metadata, thumbnails, and captions for the public playlists you configure. It does not send telemetry or usage statistics to the developer or an analytics service.
Plugin settings include Your statistics, with Record local statistics enabled by
default. Only aggregate activity counters and their start date are stored locally in the
plugin's data.json. Your vault sync or backups may copy this file.
Current collection scans the configured base folder and its subfolders when the panel opens. It shows configured playlists, video notes, notes with transcripts, and notes with AI summaries. Refresh totals updates these counts after deletions or edits. Notes moved outside the base folder are excluded; index notes and unrelated files are not counted. Unreadable files and invalid plugin metadata are skipped, with partial totals clearly labeled. These totals remain available when recording is disabled.
Activity since recording began counts saved playlist additions, video notes created, transcripts saved, AI summaries generated (including regenerations), successful sync runs, and sync runs with errors. A partially successful sync counts as a run with errors; AI failures do not change the YouTube sync result. Activity starts when this feature first loads, so existing notes do not reconstruct past activity. Counters record successful writes, not unique videos, and are saved at operation boundaries. An abrupt shutdown can lose activity since the last save; a statistics-save failure does not fail a successful note or summary write.
Disabling recording pauses counters without deleting them; enabling it resumes them. Reset counters asks for confirmation, clears activity, and restarts its date while preserving notes, playlists, current collection totals, and the recording preference.
Preview report performs a fresh scan and displays a read-only JSON report. Copy report copies it for you to manually share if you choose. The report contains only plugin version, recording status/start date, counters, current totals, scan timestamp, and skipped-file count. It excludes URLs, titles, paths, note content, credentials, error messages, and user identifiers. Nothing uploads automatically, and this feature makes no network requests.
When AI summaries are disabled, no vault content is sent to an AI service.
When AI summaries are enabled, the plugin sends only the generated video's title, channel,
transcript, and configured summary instructions to the AI endpoint you configured. Other vault
notes and unrelated vault content are not sent. API keys are referenced through Obsidian
SecretStorage rather than stored in the plugin's data.json.
The hidden metadata marker used for repeatable frontmatter migrations contains video and playlist metadata plus AI provider/model status. It never contains transcripts, summary text, credentials, or API keys.
Use Node.js 24 with npm, matching the build workflow. The release-attestation workflow
uses Node.js 20; the package does not declare an engines constraint.
git clone https://github.com/DagerottDev/Youtube_Obsidian_Sync.git
cd Youtube_Obsidian_Sync
npm ci
npm run check # TypeScript checks + unit tests
npm run build # TypeScript checks + production main.js bundle
Other supported commands:
npm run typecheck # TypeScript checks only
npm test # Unit tests only
npm run dev # One development build with inline source maps; does not watch files
To try your build, copy main.js and manifest.json into
.obsidian/plugins/youtube-playlist-sync/ in a test vault, then reload Obsidian and enable
the plugin. Rebuild and copy main.js again after source changes.
For a live check of the YouTube fetch layer, replace YOUR_PUBLIC_PLAYLIST_ID with the value
of the playlist URL's list parameter:
node test/smoke.mjs YOUR_PUBLIC_PLAYLIST_ID
This smoke check needs network access and does not exercise Obsidian UI or AI providers. No environment-variable configuration is required by the plugin; playlists and AI credentials are configured in Obsidian settings.
| Area | Source |
|---|---|
| YouTube playlist, metadata, and caption fetching | src/youtube.ts |
| Note and index rendering | src/noteRenderer.ts |
| Sync orchestration and commands | src/main.ts |
| Frontmatter templates and migration | src/frontmatter.ts, src/noteFrontmatter.ts |
| AI request formatting and summary updates | src/ai/ |
See the publication checklist for release procedures and recorded validation, and the promotion checklist for project outreach history.
Read CONTRIBUTING.md for setup, tests, smoke checks, and pull request
expectations. Before submitting code changes, run npm run check and npm run build.
Discuss bugs and feature ideas through the issue tracker.
Distributed under the MIT License. See LICENSE for the full text.
Use the issue tracker for questions, reproducible bugs, and feature ideas. Bug reports can start with the bug report form.
If this plugin saves you time, you can support its development: