player
One embed link for movies, shows and anime
Drop one iframe into your site. TMDB or IMDb IDs, subtitles, watch progress and player events, all from the link.
Test the player
Pick a player type, copy the link and put it in an iframe. The player only loads when you press play, so visiting this page never starts a download.
Built to drop in
Everything is controlled from the link, no account needed
- Easy to useCopy the link and embed it into your website.
- Finds a working sourceSearches several sources at once and quietly switches if one is slow or stops.
- CustomizableColours, title, poster, autoplay and more, using only query parameters.
- SubtitlesBuilt-in subtitles in the CC menu, plus your own VTT file.
- Watch progressResume where the viewer stopped and build a Continue watching row on your site.
- Player eventsPlay, pause, seek, ended and time updates are sent to your page.
API documentation
Use TMDB IDs (1396) or IMDb IDs (tt0903747).
Embed movies
The TMDB or IMDb ID is required.
/embed/movie/{tmdbId}
<iframe
src="/embed/movie/786892"
style="width:100%;aspect-ratio:16/9;border:0"
allow="autoplay; fullscreen; picture-in-picture; encrypted-media"
allowfullscreen
></iframe>
Embed shows
The ID, season and episode number are required.
/embed/tv/{tmdbId}/{season}/{episode}
<iframe
src="/embed/tv/94997/1/1"
style="width:100%;aspect-ratio:16/9;border:0"
allow="autoplay; fullscreen; picture-in-picture; encrypted-media"
allowfullscreen
></iframe>
Embed anime
Anime works like any TV show. Add ?audio=dub to prefer English-dubbed sources.
/embed/tv/{tmdbId}/{season}/{episode}
/embed/tv/1429/1/1?audio=dub
Customization parameters
Append parameters to the embed URL. Start with ? and separate more with &. Colours are hex codes without the #.
| Parameter | Example | What it does |
|---|---|---|
primaryColor | 7c5cff | Progress bar, active icons and menu highlights (also color) |
secondaryColor | 15151d | Slider rail |
iconColor | ffffff | Control bar icons |
title | false | Hide the title on the loading screen |
poster | false | Hide the backdrop |
autoplay | false | Wait for the viewer to press play |
nextbutton | false | Hide the next episode button (shows) |
autonext | false | Don't start the next episode when one ends |
startAt | 90 | Start at this many seconds |
resume | false | Don't resume from the saved position |
sub | en | Turn on subtitles in this language |
sub_file | https://…/en.vtt | Add your own VTT file to the CC menu |
sub_label | English | Name for sub_file in the CC menu |
fallback_url | https://… | Send the viewer here if nothing plays |
audio | dub | Prefer English-dubbed anime |
debug | 1 | Show source, speed and error details |
Customize the player
Change the options and the link updates. Press Load in player to see it.
Watch progress
Track your viewers' progress across movies and shows to build a Continue watching feature on your website. The player sends a MEDIA_DATA message to your page while it plays.
1. Add an event listener
Add this script where your iframe is. In React or Next.js, put it in a useEffect hook.
window.addEventListener('message', (event) => {
if (event.origin !== '') return;
if (event.data?.type === 'MEDIA_DATA') {
const mediaData = event.data.data;
localStorage.setItem('playerProgress', JSON.stringify(mediaData));
}
});
2. Stored data structure
The data holds the title details, the watch progress, the last watched episode and each episode's progress for shows.
{
"76479": {
"id": 76479,
"type": "tv",
"title": "The Boys",
"poster_path": "/2zmTngn1tYC1AvfnrFLhxeD82hz.jpg",
"backdrop_path": "/example.jpg",
"progress": { "watched": 31.4, "duration": 3609.8 },
"last_season_watched": "1",
"last_episode_watched": "1",
"show_progress": {
"s1e1": {
"season": "1",
"episode": "1",
"progress": { "watched": 31.4, "duration": 3609.8 }
}
},
"last_updated": 1725723972695
},
"786892": {
"id": 786892,
"type": "movie",
"title": "Furiosa: A Mad Max Saga",
"poster_path": "/iADOJ8Zymht2JPMoy3R7xceZprc.jpg",
"progress": { "watched": 8726.9, "duration": 8891.7 },
"last_updated": 1725723972695
}
}
Player events
Listen to player events to track playback. Events are sent to the parent window with postMessage.
Available events
play when the video starts playing, pause when it is paused, seeked when the viewer jumps to another time, ended when playback finishes and timeupdate every few seconds while playing.
{
type: "PLAYER_EVENT",
data: {
event: "play" | "pause" | "seeked" | "ended" | "timeupdate",
currentTime: number,
duration: number,
progress: number, // percent watched
tmdbId: number,
mtmdbId: number,
imdbId: string | null,
mediaType: "movie" | "tv",
season?: number,
episode?: number
}
}
Implementation example
window.addEventListener('message', (event) => {
if (event.origin !== '') return;
if (event.data?.type === 'PLAYER_EVENT') {
const { event: eventType, currentTime, duration } = event.data.data;
console.log(`Player ${eventType} at ${currentTime}s of ${duration}s`);
}
});