gilgamesh-tamarian516 downloadsConverts URLs into native iframe embeds and auto-formats embeddables.
An Obsidian plugin that turns selected URLs into rich inline embeds — with a live preview to confirm before inserting.
Supports 30+ websites out of the box, can save images and documents to your vault, and exports Quizlet flashcard sets to local Markdown notes.
When you select a URL in the editor and trigger the embed command, the plugin:
/embed/ URL, or a Google Drive share link to a /preview URL.<div><iframe> block directly into the note at your cursor position.Embeds are converted into iframe markup and continue to render even if the plugin is disabled or removed.
For URLs that do not match any known provider, the plugin falls back to a generic iframe using oEmbed data where available, or a plain full-page embed otherwise.
[!NOTE] The conversion is not perfect for every website. You can manually edit any part of the generated iframe/details in the note when needed.
link-iframe).| Provider | Notes |
|---|---|
| YouTube | All URL forms: watch, short (youtu.be), Shorts, Live, embed. Start-time via ?t= / ?start= in 1h2m3s notation |
| Vimeo | |
| Dailymotion | |
| Twitch | Channels, VODs (/videos/), clips |
| VK Video |
| Provider | Notes |
|---|---|
| Spotify | Tracks, albums, playlists, artists. Playback limited to 30 s without login |
| Apple Music | Albums, playlists, individual tracks (via ?i=) |
| Tidal | Tracks, albums, playlists, videos |
| Deezer | Tracks, albums, playlists, artists; light/dark theme follows plugin setting |
| SoundCloud |
| Provider | Notes |
|---|---|
| Twitter / X | Posts and profile timelines. Handles x.com only — Obsidian >= 1.7.0 handles twitter.com natively |
| Dark mode supported | |
| Posts, reels, and profiles | |
| TikTok | |
| Posts and videos | |
| Mastodon | Any public instance; validated via the Mastodon API before embedding |
| Threads | |
| Individual pins | |
| Telegram | Public post links |
| Provider | Notes |
|---|---|
| Google Docs* | Docs, Slides, and Spreadsheets links (/document/..., /presentation/..., and /spreadsheets/...) |
| Google Drive* | File share links (/file/d/... and ?id=...) converted to /preview |
| Google Calendar* | Extracts calendar ID from src or cid query parameter |
| Google Maps | Query links, place links, coordinate links, short maps.app.goo.gl links |
| Provider | Notes |
|---|---|
| Imgur | Single images and albums; auto-resizes via postMessage |
| CodePen | |
| Steam | Store pages |
| Quizlet* | Flashcard embed; full vault export available (see below) |
| Wikipedia | Any language subdomain |
| Geogebra | Material iframes |
| OpenStreetMap | Marker + bounding-box embed |
For any URL that does not match a known provider, the plugin attempts a generic oEmbed lookup and falls back to a full-page iframe.
[!NOTE] *Since you cannot authenticate in an iframe, the contents of the link must be available publicly or to anyone with the link.
There are two equivalent ways to trigger an embed:
Both open the Configure Embed modal before inserting anything into the note.
If you have notes using the old  Markdown embed syntax from a previous version of this plugin, run the command I link therefore iframe: Migrate legacy embeds in current note to convert them to the current HTML format.
Before the embed is inserted you see a live preview of the iframe. From here you can:
5/4).For providers that produce non-iframe native markup (e.g. social post widgets), sizing controls are hidden and the modal shows a plain static preview.
Controls how embeds behave before the iframe content has fully loaded. Found in Settings → Preload options.
| Option | Behaviour |
|---|---|
| None | Embed loads immediately when the note is opened |
| Placeholder | Shows a loading placeholder while the iframe fetches content |
| Placeholder + click to load | Shows a static placeholder; the iframe only loads after the user clicks on it |
The placeholder modes reduce Cumulative Layout Shift (CLS) and avoid network requests for embeds you never scroll to.
Enables dark theme variants for providers that support them. Currently applied to Twitter/X, Reddit, and Deezer. Toggle in Settings → Dark mode.
Appends an Open original link footer below every generated embed so you can always reach the source page directly. Toggle in Settings → Show original link under embed.
Save image embeds to vault — When enabled, direct image URLs (.jpg, .png, .gif, etc.) are downloaded to your vault and the embed link is replaced with a local vault path.
Save social media images to vault — When additionally enabled, the plugin fetches the first available media image from supported social/media platforms and saves it to your vault alongside the embed. The embed URL in the note is preserved; only the image asset is stored locally. For some sites like Instagram, this does not always work.
Platforms supported for social media image extraction:
Image folder path (default: linked-iframe-images) — vault folder for all downloaded image files.
When Save Google Docs to vault is enabled:
.md) files..pdf) or PPTX (.pptx) files, depending on your setting..pdf) or XLSX (.xlsx) files, depending on your setting.Refresh behavior and limitations:
google-docs-source frontmatter property.[!IMPORTANT] Google Docs/Slides/Spreadsheets exports only work if the file is shared with Anyone with the link.
Google Docs folder path (default: linked-iframe-docs) — vault folder for exported Google Docs (.md) plus Google Slides/Spreadsheets exports (.pdf, .pptx, .xlsx).
Enabling Save Quizlet cards to vault exports the flashcards from any Quizlet set you embed into local Markdown notes. The export runs at embed time and attempts several extraction strategies in sequence to maximise compatibility with Quizlet's varying page formats: REST API, __NEXT_DATA__ JSON, JSON-LD structured data, script variable patterns, and visible page text.
[!WARNING] This setting can impact general plugin performance. Embedding larger Quizlet sets may cause visible stutter while the export runs.
Single-file mode (default) — one Markdown file per set, with all cards listed as term/definition pairs. Good for quick reference.
Separate notes mode (toggle Quizlet: save as separate notes) — one folder per set and one Markdown note per card. Recommended for use with the Yanki plugin, which syncs Obsidian notes to Anki.
Quizlet image mode (toggle Quizlet: save card images to vault) — when enabled, card images are downloaded and embedded locally in exported notes; when disabled, exports keep text-only card content.
Separate notes mode is designed to work cleanly with Yanki workflows where each note maps to one flashcard.
Why this works well with Yanki:
QuizletSetId + QuizletCardId frontmatter gives each note a durable identity, so re-exports update the same note instead of creating duplicates.quizlet:user-notes blocks are preserved during updates, so your own edits and mnemonics stay intact after syncing new Quizlet changes.<!-- quizlet:stale=true --> rather than deleted, so you can decide in Obsidian/Yanki whether to archive, suspend, or keep them.Recommended workflow with Yanki:
linked-iframe-quizlet) so Yanki can target that path cleanly.quizlet:user-notes blocks available for personal additions.Each card note is structured as:
---
QuizletSetId: "123456789"
QuizletCardId: "987654321"
---
Card term
<!-- quizlet:user-notes:start -->
Your notes for the front of this card
<!-- quizlet:user-notes:end -->
---
Card definition
<!-- quizlet:user-notes:start -->
Your notes for the back of this card
<!-- quizlet:user-notes:end -->
<!-- quizlet:source=https://quizlet.com/... -->
Key behaviours:
QuizletSetId and QuizletCardId in frontmatter identify existing notes on re-export, so cards are updated in place rather than duplicated.<!-- quizlet:user-notes:start/end --> blocks are preserved across all future updates — anything you write inside them is never overwritten. There is one block for the front and one for the back of each card.<!-- quizlet:stale=true --> rather than deleted from your vault.![[path]].The Update all saved Quizlet cards button in settings scans your entire vault for <!-- quizlet:source=... --> markers, deduplicates by set ID, and re-exports every unique set. A notice reports the result: sets refreshed, saved, updated, unchanged, and any errors.
Quizlet folder path (default: linked-iframe-quizlet) — vault folder for all Quizlet exports.
Spotify — Playback is limited to 30-second previews. Full playback requires a logged-in browser session, which is not possible inside Obsidian.
Twitter / X — Only x.com URLs are handled by this plugin. Obsidian >= 1.7.0 handles twitter.com natively. Both domains point to the same content.
Mastodon — The plugin validates the instance domain against the Mastodon API before embedding. Always use the original post URL from the source instance (e.g. mastodon.social/@user/1234), not a cross-instance copy.
Reddit — Reddit short share links (/s/...) cannot be embedded directly. Open the link in a browser first — Reddit will redirect to the full /comments/... URL which the plugin handles correctly.
Quizlet — Card data is only accessible for public sets. Private or password-protected sets cannot be exported.
Google Docs — The Markdown vault export only works if the document is shared with Anyone with the link.
Google Slides — Vault export (PDF/PPTX) only works if the presentation is shared with Anyone with the link.
Google Spreadsheets — Vault export (PDF/XLSX) only works if the spreadsheet is shared with Anyone with the link.
Google Workspace refresh scope — The Refresh saved Google Docs action only applies to Google Docs notes with google-docs-source frontmatter. It does not refresh Slides or Spreadsheets exports.
The embed isn't appearing.
The Quizlet export produced no cards.
Confirm the set is public by opening the URL in a browser. If it is public and the export still fails, open an issue with the set URL.
A website I use is not supported.
Open a feature request. Until it is added, the plugin will embed the full page as a generic iframe.