The link is the player
Embedding a video usually goes like this. Open the platform, click Share, click Embed, copy the blob of HTML it hands you, paste it into your post. What you have just filed in your own archive is somebody else's markup: an iframe, sometimes a script, a couple of tracking parameters and a class name from a design system you don't use. And when the platform changes its embed path — they do — every post you ever wrote that way breaks on the same afternoon.
Here you paste the address you would send a friend.
Two of them, actually playing
A video, with a caption:
Audio, the same gesture:
Two lines of markdown. No embed dialog, no account, no copied code.
What the post actually stores
Not their HTML. A provider, the identifying part of the address, and — because PeerTube is federated and has no single home — which instance it came from:
"type": "video",
"provider": "peertube",
"url": "https://framatube.org/w/kkGMgK9ZtnKfYAgnEtQxbv",
"embed_id": "kkGMgK9ZtnKfYAgnEtQxbv",
"embed_origin": "https://framatube.org"
The build assembles the player from that. Two things follow. No foreign markup ever enters your archive, so nothing arrives carrying its own tracking. And when a platform moves its embed path, the fix is one edit in the engine, not a re-import of fifteen years of posts.
The page's own policy follows the same rule. Beyond YouTube's two origins, which are granted everywhere because an imported embed can point at either of them, a page allows only what its own posts play. This one names framatube.org and w.soundcloud.com — and so does whichever listing page happens to be showing it, because a listing is made of the posts on it. A page with no player in it names neither. A blog with no Spotify in it never mentions Spotify.
Being straight about the limit: the player is still an iframe served by the platform, and the moment a reader presses play, the platform knows. What changes is that your archive doesn't carry their code, and the rest of your site doesn't reach for them at all. (YouTube players are built on youtube-nocookie.com, which at least holds the cookies until playback.)
Video, audio, and two that have to be asked
Video: YouTube, Vimeo, PeerTube, archive.org. Audio: Spotify, SoundCloud, Mixcloud. Every one of those is a string transform, so writing a post stays an offline operation.
Funkwhale and Bandcamp couldn't be. Funkwhale's obvious embed path builds a player that looks entirely correct and stays a black rectangle forever; Bandcamp's address contains no id at all, only a slug. Both are asked once, when the post is saved — the only moment writing needs the network — and the answer is stored as an address, so an edit never asks again and the build stays offline. If the lookup fails, you get a sentence and a saved post with a link in it. Never a refused save: writing on a train has to end with a written post.
The rules came from the services, not from their docs
Every pattern here carries a correction that no documentation page would have given us. An unlisted Vimeo link needs its hash or the player answers 403. A Spotify address copied out of a browser carries an intl-xx segment the embed path rejects. SoundCloud has no id to extract at all, so the whole address goes to the widget — which is also how a private track's secret token reaches it. Mixcloud's widget redirects to a second hostname, and the page's policy has to allow that one too.
PeerTube is the awkward one, and instructive. Being federated, it has no domain to match against: the shape of the path is the entire signal — a full UUID, or the 22-character short id PeerTube derives from one. Which means a 22-character slug sitting on some other site's /w/ page would be taken for a video as well. That is the residual cost of a platform with no home address, and it fails where you can see it — an empty player, one edit away from being a link again — rather than quietly.
And when an address says nothing the engine recognises, nothing is guessed at. The post keeps the link, and the page says the video is unavailable, politely, instead of drawing an empty frame and hoping.

Comments