Media Extended

URI Protocol

Reference for the obsidian:// URIs handled by Media Extended, including the extended obsidian://open syntax for opening media at a timestamp.

Media Extended exposes several obsidian:// URIs that you can paste into a browser, link from an external app, or use in scripts. Most are thin wrappers around in-plugin actions; the extended obsidian://open lets external links open media files at a specific timestamp.

obsidian://open (extended)

Media Extended extends Obsidian's built-in obsidian://open handler with two extra query parameters: t and hash. They take effect only when all of the following are true:

  • The URI includes t=, hash=, or both.
  • The URI resolves to a file inside the active vault.
  • That file is a supported media format.

If any condition fails, the URI falls through to Obsidian's default handler — non-media notes still open as plain notes. All standard obsidian://open parameters (vault, file, path, paneType, …) keep their usual meaning; see Obsidian's URI docs for the full reference.

ParameterDescription
tTemporal fragment (e.g. t=10, t=01:30, t=10,20). See Timestamp Format.
hashURI-encoded media hash properties, passed through verbatim.

t — open at a timestamp

Seeks to the given time when the media loads. Accepts the full Normal Play Time grammar plus the e end sentinel.

obsidian://open?vault=MyVault&file=lectures/episode-3.mp3&t=120
obsidian://open?vault=MyVault&file=lectures/episode-3.mp3&t=01:30,02:00

hash — pass full hash properties

When you need more than a timestamp, encode the entire hash property string and pass it as hash=.... Use encodeURIComponent so & and = survive the URL.

obsidian://open?vault=MyVault&file=lectures/episode-3.mp3&hash=t%3D10%26speed%3D1.5%26mute

The example above is equivalent to opening lectures/episode-3.mp3#t=10&speed=1.5&mute.

Combining t and hash

If both are present, properties from hash= take precedence. The standalone t= is only used to fill in a missing temporal fragment.

InputEffective hash
&t=10#t=10
&hash=t%3D10%26speed%3D1.5#t=10&speed=1.5
&t=10&hash=speed%3D1.5#t=10&speed=1.5 (standalone t fills in)
&t=10&hash=t%3D30#t=30 (hash wins)

obsidian://mx-open

Opens a media URL or a library item in Media Extended. Useful for sending a link from a browser bookmark, a clipper, or another script.

ParameterDescription
urlMedia URL to open. May include a #-fragment with hash properties; see hash precedence for how it interacts with t / hash.
idLibrary item's mx-uid. Resolves to the media tracked by that note.
tTemporal fragment (e.g. t=10, t=01:30, t=10,20). See Timestamp Format.
hashURI-encoded media hash properties, passed through verbatim.
vaultOptional. The URI is ignored unless the active vault name matches (case-insensitive). Same behavior as obsidian://open.
paneTypeOptional. One of tab, split, or window — forces opening in a new pane instead of reusing the active leaf. Same values as obsidian://open.

Provide either url or id. When id is given, the URL is ignored for media resolution; use t and hash to pass timestamp/hash properties.

obsidian://mx-open?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=60
obsidian://mx-open?url=https://example.com/podcast.mp3&t=01:30,02:00
obsidian://mx-open?id=abc123def456&t=120&vault=MyVault&paneType=split

mx-open only accepts URLs whose scheme is http, https, or file. Other schemes are rejected with an "invalid URL" notice. Within those schemes, the plugin recognizes direct media files, file:// URIs, and supported hosted services (YouTube, Bilibili, Vimeo, Coursera, Google Drive, Baidu Pan).

t / hash precedence

t and hash work the same way as on obsidian://open, with one extra layer: the #-fragment of url (if any) acts as the default. The query parameters override that default when present.

InputEffective hash
?url=…%23t%3D10#t=10 (from URL fragment)
?url=…&t=20#t=20 (t fills in; URL has no fragment)
?url=…%23t%3D10&t=20#t=10 (URL fragment already has t; t only fills in)
?url=…%23t%3D10&hash=t%3D30#t=30 (hash replaces the URL fragment)
?url=…%23t%3D10&hash=speed%3D1.5#speed=1.5 (hash replaces — t=10 is gone)
?id=…&t=20#t=20
?id=…&hash=t%3D10%26mute#t=10&mute

If you want to keep some of the URL's fragment alongside an override, encode the full combined string into hash= yourself.

Pathname form

You can also write the target URL after mx-open/ instead of in the url query parameter. All query parameters (other than action) are merged into the target URL's query string verbatim, which is convenient when the URL has a long, structured query of its own.

The pathname form only accepts a URLid, vault, paneType, t, and hash are not interpreted here. To use any of those, switch to the query form.

Because browsers and OS handlers strip the fragment from an obsidian:// URI before passing it to Obsidian, you cannot put a literal #timestamp at the end of the pathname URL — it will be silently dropped. If you need a hash on the target URL, percent-encode the # as %23 so it survives intact:

obsidian://mx-open/https://www.youtube.com/watch?v=dQw4w9WgXcQ%23t=60

For most cases the query form is simpler — use ?t=60 or ?hash=… instead.

Setup and welcome URIs

URIAction
obsidian://mx-webviewer-setupOpen the Web Viewer setup dialog.
obsidian://mx-main-daemon-setupOpen the Main Daemon setup dialog.
obsidian://mx-welcomeShow the latest release's welcome page.

These URIs accept no parameters and are mainly used by the plugin's own onboarding flows. You can link to them from external docs to point users at the right setup screen.

See also

On this page