Announcing OEmbed - An Open Standard for Embedded Content

Pownce is the best way to share media with your friends online and one of the best parts of Pownce is the embedded images and video. When you post a link-type note with a URL to an image site such as Flickr, the Pownce website displays a thumbnail of that image. Video links display an embedded video player for sites such as Ustream, Qik, or Viddler.

At Pownce, we were adding these new video and photo service embeds on a case-by-case basis with custom code for each site. As we got more requests for supporting different services, we realized that we didn’t want to pick and choose which services we would implement. We want to support as many services as possible!

While at dinner with Cal Henderson (Flickr), Mike Malone (Pownce), and Richard Crowley (OpenDNS), we chatted about this problem and chatted about creating an open standard for accessing embed code from a URL via an API endpoint. Cal drafted up the initial spec for this standard overnight and we named it OEmbed (or oEmbed).

OEmbed is an open web API standard for fetching embed code based on a URL. The spec is fairly simple and can be found at oembed.com.

Since creating OEmbed, we’ve been working with various photo and video sites to implement this standard. OEmbed is currently supported by Flickr, Viddler, Qik, Pownce, Revision3 and Hulu. Vimeo and Blip.tv are currently working on implementations. Pownce is the first consumer of OEmbed; we use these APIs to display inline images and video on the Pownce site. We’ve been working with Digg and Facebook to use OEmbed for story and share embeds.

We’re excited about gaining more support and feedback for OEmbed. If you work on a photo or video sharing site and are interested in adding OEmbed to your API or if you’d like to use OEmbed as a consumer, please join our Google Group - we’d love to hear from you.

More press:

11 Comments

  1. Posted May 29, 2008 at 11:44 am | Permalink

    Also, if you’re using Django, I recently wrote a reusable application for quickly getting up and running with oembed. You can find it here: http://code.google.com/p/django-oembed/

  2. Posted May 29, 2008 at 2:36 pm | Permalink

    oEmbed is coming soon on Dailymotion! It’s already “soft launched”. Example: http://www.dailymotion.com/oembed/video/x5kyog_weezer-pork-and-beans_music?format=xml

  3. Posted May 29, 2008 at 3:58 pm | Permalink

    This is really cool! A concise spec with a well-defined, much needed use case, implemented in an efficient and elegant RESTful manner! Kudos to you guys!

    While we are waiting for some services to support it, does it make sense to create an oEmbed proxy?

  4. Posted May 30, 2008 at 12:17 am | Permalink

    Whoah, thinking / working on such solutions for ages! :)

    Another thing: maybe a http header extension or catalog would be needed, so it could be auto-detected if some site supports oembed or such. Like RSS auto-discovery:

    link type=”alternative” type=”oembed/json”…

    something like such.. maybe provided by regexps.. relative to the element url (s/flickr.com\//photo\//.*/flickr.com\/oembed?\1 ?), maybe provided in the root page, like favicon (even better, maybe forcing the provider to always use the same scheme, eg. it should be http://www.domainname.com/oembed always…)

    All this stuff is for consumers to auto-discover new oembed providers.

  5. Matt Froese

    Posted May 30, 2008 at 10:55 am | Permalink

    Excellent idea. I am happy to see many sites on board already.

    Is it really necessary to pass a full url to the oembed request. Seems somewhat redudant to request something from Flickr by sending it a Flickr URL!

  6. Posted May 30, 2008 at 12:53 pm | Permalink

    @adam, there are too many link tags. XRDS-Simple http://xrds-simple.net/ was created for this so we should use it.

    Leah, I’d be curious to know if you have discussed using a template in addition to the currently-defined per-instance mechanism. For the most part, the chunk of HTML used for embedding a particular URL scheme (such as Youtube) won’t change much, so it could be a waste of resources to do that for every call.

    Of course, there are still plenty of use-cases for having per-instance call so as to allow providers to control it at a finer-granularity.

    There are definitely interesting applications of this in the “mobile web” arena.

  7. Posted June 2, 2008 at 10:19 am | Permalink

    Beautiful. I can envision this being useful for all kinds of rich objects, not just media. Most objects have at least a few natural metaphors for how they would be represented when embedding — this would allow the object’s owner to provide a skeleton for that metaphor. Especially if some kind of autodiscovery a la rss be were in the offing?

    I’m not much of a security weenie, but perhaps autodiscovering foreign code to embed may be a bit too risky. Perhaps a whitelist providers could register domains with as part of the autodiscovery spec would alleviate some of the problems.

    Still, elegant spec. Brilliant.

  8. Michael R. Bernstein

    Posted June 2, 2008 at 10:42 am | Permalink

    Standardizing the format and the endpoint schema for information about embeddable content is a great idea and will obviously save a lot of duplicated effort. But there is no provision here for autodiscovery, so this does not actually accomplish the stated goal of eliminating manually picking and choosing which services to support.

  9. Posted June 8, 2008 at 2:09 am | Permalink

    Finally data is getting out of pages! I’m so sure that in a short time, major media providers like youtube will go for this marvelous concept!

  10. Posted June 10, 2008 at 11:18 am | Permalink

    Does oembed output standards compliant code, or code that will work across all the old browsers instead? I figure I know the answer, but figured I would ask anyways.

    Also a port of this to say a wordpress plug in, could be infinitely useful as well.

    Other than that, great job, I am surprised you guys had to come up with this and it wasn’t available in the first place.

  11. Posted June 10, 2008 at 4:13 pm | Permalink

    Don’t forget about Plurk!

    Hey, I was gonna write about OEmbed at the same time :(

3 Trackbacks

  1. […] We’ve been working with Digg and Facebook to use OEmbed for story and share embeds. — Leah Culver » Announcing OEmbed - An Open Standard for Embedded Content View the forum thread.blog comments powered by Disqus May 30th, 2008 / Tags: oembed, api, […]

  2. By Review: oEmbed 1.0 » I’m JBF on June 8, 2008 at 10:07 am

    […] Leah Culver announced that oEmbed comes with an idea to distribute machine readable data for embed elements from photo, video and rich content providers. So as you provide the media’s permalink, it returns you its title, description, embed code and etc. […]

  3. By dns on June 10, 2008 at 11:53 pm

    […] Pownce an OpenDNS, this early spec has already been adopted up by Viddler, Qik, Revision3 and Hulu.http://leahculver.com/2008/05/29/announcing-oembed-an-open-standard-for-embedded-content/Howstuffworks &quotHow Domain Name Servers Work&quotDomain name servers, or DNS, are an incredibly […]