YT links

approved

by quietbyday

Clean YouTube links and timestamps: strip notification counts, make timestamp URLs readable, and link bare time notations to a note's source video. - This plugin has not been manually reviewed by Obsidian staff.

37 downloadsUpdated 6d agoMIT

YT links

An Obsidian plugin that makes YouTube links clean and useful — a companion to the official Obsidian Web Clipper, which captures a video's URL into a source property and a transcript full of unlinked time notations.

It does four things, each available as a command and (for functions 1, 2, and 4) on paste:

  1. Strip notification count — removes a leading count like (58) from the title of a YouTube Markdown link.
  2. Readable timestamps — turns a YouTube URL that carries a timestamp into a Markdown link showing the time, e.g. [0:56](…?t=56).
  3. Link time notations — turns a bare 2:34 / 1:02:05 into a link into the note's source video at that moment.
  4. Strip hashtags — removes or defuses hashtags like #music in a YouTube link title, so pasted video titles don't seed the vault with foreign tags.

Each function can be toggled on or off.

Features

1. Strip notification count

A YouTube page title copied from the browser as a Markdown link often starts with a notification count:

[(62) Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster) - YouTube](https://www.youtube.com/watch?v=dQw4w9WgXcQ)

becomes

[Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster) - YouTube](https://www.youtube.com/watch?v=dQw4w9WgXcQ)

Only the leading count is removed — the other parenthesised parts of the title ((Official Video), (4K Remaster)) are kept. And only short counts (up to three digits) are removed, so a title that genuinely starts with a year like (2049) is left alone.

2. Readable timestamps

A YouTube URL with a timestamp becomes a readable link:

https://youtu.be/dQw4w9WgXcQ?list=RDdQw4w9WgXcQ&t=56

becomes

[0:56](https://youtu.be/dQw4w9WgXcQ?list=RDdQw4w9WgXcQ&t=56)

The time is read from t or start, in any of the forms YouTube accepts (56, 56s, 1m30s, 1h2m3s). Under an hour the title is m:ss; an hour or more, h:mm:ss.

3. Link time notations

Turns bare time notations in the note body into links into the note's source video. The video URL is read from a frontmatter property (default source), which may be a raw URL or a Markdown link:

source: https://youtu.be/dQw4w9WgXcQ

Then 2:34 becomes [2:34](https://youtu.be/dQw4w9WgXcQ?t=154).

Only valid clock times are linked (minutes and seconds 0–59), so scores like 75:68, one-digit forms like 1:5, and ISO datetimes are skipped. Notations inside markup are linked while the markup is kept: **2:34****[2:34](…)**. Nothing inside frontmatter, code, existing links, wikilinks, or URLs is touched, and running a command twice never double-links.

If the source property is missing or isn't a YouTube URL, or no notations are found, the plugin tells you and stops.

4. Strip hashtags

Creators often pack hashtags into a video title. Copied into a note, they clutter the link and can seed your vault with foreign tags:

[Live at Montreux #jazz #live-set - YouTube](https://youtu.be/dQw4w9WgXcQ)

Two ways to handle them, chosen in settings:

  • Replace # character (default) — swaps only the # for a character of your choice (default -, or leave the field empty to drop just the #), keeping the word: #jazz-jazz.
  • Remove entire hashtag — drops the whole #jazz and tidies the leftover spacing.

A hashtag is recognised the same way Obsidian recognises a tag: a # at the start of the title or after a space, followed by letters, digits, _, -, or /, with at least one letter. So #4k and #live-set are handled, while C#, a purely numeric #2049, and a lone # are left alone.

How each command decides what to convert

Each command scopes its work to what you're pointing at, with more warning for bigger changes:

  • On paste (functions 1, 2, and 4): converts automatically and shows a notice of what changed.
  • Text selected: converts everything in the selection after a brief confirmation.
  • No selection, cursor inside a target: converts just that one, no confirmation.
  • No selection, cursor elsewhere: offers to convert the whole note after a warning.

Settings

  • Toggles to turn each of the four functions on or off.
  • YouTube URL property — the frontmatter property that holds the video URL for function 3 (default source).
  • Hashtag handling — for function 4, whether to replace only the # (with a character of your choice, default -) or remove the entire hashtag.

Installing from Community Plugins (recommended)

  1. Open Settings → Community plugins and make sure Restricted mode is off.
  2. Click Browse, search for YT links, and click Install.
  3. Click Enable.

Installing with BRAT (for pre-release testing)

BRAT installs and auto-updates in-development builds straight from a GitHub repo:

  1. Install the BRAT plugin from the Obsidian Community Plugins store and enable it.
  2. Go to Settings → Community plugins → BRAT.
  3. Click Add beta plugin.
  4. Paste this repository URL: https://github.com/Quietbyday/obsidian-yt-links
  5. Click Add plugin.
  6. Enable YT links in Settings → Community plugins.

To update later, open BRAT and click Check for updates (or just restart Obsidian).

Installing manually

  1. Build main.js with npm install then npm run build, or download main.js and manifest.json from a release.
  2. Copy main.js and manifest.json into <Vault>/.obsidian/plugins/yt-links/.
  3. Reload Obsidian and enable YT links in Settings → Community plugins.

Changelog

1.0.1

Maintenance release addressing the community-store audit. No user-facing behavior changes: replaced the builtin-modules build dependency with Node's native module.builtinModules, and tightened two any-typed reads (frontmatter property lookup and saved-settings load) to satisfy the type checker.

1.0.0

First public release on the Obsidian community store. No functional changes from 0.3.0-beta — the four commands (strip notification count, readable timestamps, link time notations, strip hashtags) and their paste/selection/cursor/whole-note behavior are unchanged.

0.3.0-beta

Fixes the strip-hashtags notice, which counted a link with several hashtags as just "1 hashtag". It now reports the number of links cleaned — e.g. "Cleaned 1 hashtagged link" — which is accurate however many hashtags a title holds.

Adds an opt-in Debug logging setting (off by default). When on, the paste handler logs to the developer console what it sees — including whether another plugin already handled the paste — which makes conflicts with other paste plugins easy to track down.

0.2.0-beta

Adds strip hashtags (function 4): removes or defuses hashtags like #music in a YouTube link title, using Obsidian's own tag rules so C# and years like #2049 are left alone. Choose between replacing just the # (default -) or removing the whole hashtag. Runs on paste alongside strip-count and as its own command.

0.1.0-beta

Initial beta. Three commands — strip notification count, readable timestamps, link time notations — each with the paste / selection / cursor / whole-note activation cascade. Region-aware safety (skips frontmatter, code, links, wikilinks, URLs), valid-clock-time checking, and idempotent conversions.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.