Documentation · v3.0

Chrome
Embed API

Free streaming links for movies and TV episodes. Drop our player into any website with a single iframe — full postMessage API control with chrome: events.

Quickstart

Embed the player directly into your site using an iframe. Point src to a Chrome embed URL and you're done.

Movie
<iframe
  src="https://chromiumsrc.pages.dev/embed?movie={tmdb_id}"
  width="100%" height="100%"
  frameborder="0" allowfullscreen
  allow="autoplay; fullscreen; picture-in-picture"
></iframe>
TV Show
<iframe
  src="https://chromiumsrc.pages.dev/embed?tv={tmdb_id}&s={season}&e={episode}"
  width="100%" height="100%"
  frameborder="0" allowfullscreen
  allow="autoplay; fullscreen; picture-in-picture"
></iframe>

URL Structure

All content is identified by TMDB IDs. Find any ID on themoviedb.org — it's in the URL when you view a title.

Movies
GET https://chromiumsrc.pages.dev/embed?movie={tmdb_id}
TV Shows
GET https://chromiumsrc.pages.dev/embed?tv={tmdb_id}&s={season}&e={episode}

URL Customization

Customize player behavior with URL parameters:

ParameterTypeDescription
seeknumberSeek button duration in seconds (default: 10)
autoplaybooleanAuto-start playback (default: true)
mutedbooleanStart muted (default: false)
colorhexAccent color (use %23 for #)
controlsbooleanShow player controls (default: true)
backstringURL for back button, or "close" to send chrome:close event
autonextbooleanAuto-play next episode (default: true)
autoskipbooleanAuto-skip intro/recap when detected (default: false)
prioritizebooleanPrioritize the last used server on load (default: false)
lastserverstringServer ID to use as the preferred server
t / timenumberStart time in seconds
continuepromptbooleanShow continue/restart prompt (default: true)
qualitystringPreferred video quality ("1080", "720", "480")
Example
<iframe src="https://chromiumsrc.pages.dev/embed?tv=31132&s=1&e=1&seek=15&autoplay=true&color=ff5722&autoskip=true"></iframe>

Player Events (chrome:)

Listen for events via postMessage to sync your application with the player. All events are prefixed with chrome:.

Event Listener Setup
window.addEventListener('message', (event) => {
  if (event.origin !== 'https://chromiumsrc.pages.dev') return;
  
  const { type, ...data } = event.data;
  
  switch (type) {
    case 'chrome:ready':
      console.log('Player ready');
      break;
    case 'chrome:timeupdate':
      console.log(data.currentTime, '/', data.duration);
      break;
  }
});
Available Events
EventDataDescription
chrome:readyPlayer loaded and ready
chrome:playPlayback started
chrome:pausePlayback paused
chrome:timeupdate{ currentTime, duration }Periodic time update
chrome:seeking{ currentTime, duration }User started seeking
chrome:seeked{ currentTime, duration }Seek operation completed
chrome:endedPlayback ended
chrome:volumechange{ volume, muted }Volume changed
chrome:ratechange{ playbackRate }Playback speed changed
chrome:loadedmetadata{ duration }Media metadata loaded
chrome:nextepisode{ season, episode }Auto-navigated to next episode
chrome:skipintro{ time }Intro skipped, seeked to specified time
chrome:sourceused{ sourceId }Stream source/server changed
chrome:closeBack button clicked when back=close
chrome:error{ error }Error occurred
chrome:response{ command, result }Response to a getter command

Player Methods

Control the player programmatically by sending commands via postMessage. Commands are sent with type chrome:command.

Sending Commands
const iframe = document.querySelector('iframe');

function sendCommand(command, args = []) {
  iframe.contentWindow.postMessage({
    type: 'chrome:command',
    command,
    args
  }, 'https://chromiumsrc.pages.dev');
}

// Examples
sendCommand('play');
sendCommand('pause');
sendCommand('seek', [120]);
sendCommand('setVolume', [0.5]);
Available Methods
MethodParametersReturnsDescription
playPromiseStart playback
pausevoidPause playback
seektime: numbervoidSeek to time in seconds
setVolumevol: numbervoidSet volume (0-1)
setMutedmuted: boolvoidMute/unmute
setPlaybackRaterate: numbervoidSet speed (0.25-2)
getCurrentTimenumberGet current playback time in seconds
getDurationnumberGet total media duration
getVolumenumberGet current volume
getMutedbooleanGet current muted state
getPausedbooleanGet current paused state
getPlaybackRatenumberGet current playback speed
Getter Response Example
window.addEventListener('message', (event) => {
  if (event.origin !== 'https://chromiumsrc.pages.dev') return;
  if (event.data.type !== 'chrome:response') return;

  switch (event.data.command) {
    case 'getCurrentTime':
      console.log('Current time:', event.data.result);
      break;
  }
});

Content Parameters

ParameterTypeDescription
tmdb_idnumberTMDB identifier for the movie or TV show
snumber TV onlySeason number, starting from 1
enumber TV onlyEpisode number, starting from 1

Advanced Usage

For fully responsive embeds, wrap the iframe in a container with a fixed aspect ratio.

<div style="aspect-ratio: 16 / 9; width: 100%;">
  <iframe
    src="https://chromiumsrc.pages.dev/embed?movie=550"
    style="width: 100%; height: 100%; border: none;"
    allowfullscreen
    allow="autoplay; fullscreen; picture-in-picture"
  ></iframe>
</div>
Best Practices
  • Always verify message origin before processing postMessage events
  • Set iframe to 100% width/height and control size with parent container
  • Include allow="autoplay; fullscreen; picture-in-picture" on your iframe
  • Lazy-load iframe when it enters viewport for better performance
  • Listen for chrome:error events and provide fallback UI

Player Features

Play / Pause — Spacebar or click
Volume slider & Mute — M key
Customizable seek duration (URL param)
Fullscreen — F key
Picture-in-Picture
Playback speed — 0.5× to 2×
Multi-source fallback
Auto-play on source ready
Responsive — fits any container
Smart source caching
Auto-next episode (TV only)
Auto-skip intro/recap
Accent color customization
Full postMessage API (chrome: events)

Important Notes

  • All content is served via third-party public sources — Chrome acts as a metadata and discovery layer only.
  • TMDB IDs can be found on themoviedb.org — search any title and check the URL.
  • Season and episode numbers always use official numbering, starting from 1.
  • The embed is fully client-side — no server dependency for the end viewer.
  • Chrome does not store user data or require API keys.
  • Always verify event.origin in production for security.