Movie embed
4K demoTMDB movie 1081003
https://stellar.rip/en/watch/embed/movie/1081003?theme=9B8CFF&title=true&poster=true&autoPlay=false&startAt=0Stellar embed API
Embed the Stellar player for a movie or a specific TV episode using its TMDB ID. Every embed is ad-free, with no API key or player SDK required.
TMDB movie 1081003
https://stellar.rip/en/watch/embed/movie/1081003?theme=9B8CFF&title=true&poster=true&autoPlay=false&startAt=0TMDB show 83867 · Season 1 · Episode 1
https://stellar.rip/en/watch/embed/tv/83867-1-1?theme=9B8CFF&title=true&poster=true&autoPlay=false&startAt=0&nextButton=true&autoNext=falseConfigure and preview
Select media, configure its chrome and playback, then compare the exact player at desktop and mobile widths.
<iframe
id="stellar-player"
src="https://stellar.rip/en/watch/embed/movie/1081003?theme=9B8CFF&title=true&poster=true&autoPlay=false&startAt=0"
title="Stellar 4K movie player demo"
width="100%"
style="aspect-ratio: 16 / 9; border: 0;"
allow="autoplay; fullscreen; picture-in-picture; encrypted-media"
allowfullscreen
></iframe>Movie
https://stellar.rip/{language}/watch/embed/movie/{tmdb_id}TV episode
https://stellar.rip/{language}/watch/embed/tv/{tmdb_id}-{season}-{episode}Use the numeric ID from TMDB, not an IMDb ID. Season and episode numbers are required for TV embeds. Replace languagewith one of the supported locale codes below.
Change the locale immediately after the hostname. For example, use /fr/watch/embed/... for French or /fil/watch/embed/... for Filipino. The selected locale translates player controls and available localized metadata. It does not force an audio or subtitle language; available tracks depend on the stream and can be selected in the player.
ennldeites-ESes-419zh-CNzh-TWkojafrfilhipt-BRruarAdd any combination after ? and join additional values with &. Invalid values are ignored and use the normal player defaults.
titleMovie + TVShow or hide the media title.
Value: true | false
posterMovie + TVShow or hide player artwork.
Value: true | false
autoPlayMovie + TVStart when ready, or show the zero-progress artwork and Play screen when false.
Value: true | false
startAtMovie + TVBegin at a non-negative timestamp.
Value: seconds
themeMovie + TVSet the player accent color.
Value: RRGGBB
nextButtonTVShow Up Next after 90% watched.
Value: true | false
autoNextTVLoad the next episode at the end; enable autoplay too.
Value: true | false
| Parameter | Available on | Value | Behavior |
|---|---|---|---|
title | Movie + TV | true | false | Show or hide the media title. |
poster | Movie + TV | true | false | Show or hide player artwork. |
autoPlay | Movie + TV | true | false | Start when ready, or show the zero-progress artwork and Play screen when false. |
startAt | Movie + TV | seconds | Begin at a non-negative timestamp. |
theme | Movie + TV | RRGGBB | Set the player accent color. |
nextButton | TV | true | false | Show Up Next after 90% watched. |
autoNext | TV | true | false | Load the next episode at the end; enable autoplay too. |
Listen for parent-window messages to sync progress or update your own interface. Always verify the message origin before reading its data.
playpauseseekedendedtimeupdatePLAYER_EVENT includes time, duration, TMDB ID, media type, and TV season/episode. MEDIA_DATA provides a progress snapshot.
const playerOrigin = "https://stellar.rip";
const getPlayerFrame = () => document.getElementById("stellar-player");
const initializePlayerMessages = () => {
const playerFrame = getPlayerFrame();
playerFrame?.contentWindow?.postMessage(
{ type: "STELLAR_EMBED_INIT" },
playerOrigin
);
};
window.addEventListener("message", (event) => {
if (event.origin !== playerOrigin) return;
const playerFrame = getPlayerFrame();
if (event.source !== playerFrame?.contentWindow) return;
if (event.data?.type === "STELLAR_EMBED_READY") {
initializePlayerMessages();
return;
}
if (event.data?.type === "PLAYER_EVENT") {
const { event: name, currentTime, duration } = event.data.data;
console.log(name, currentTime, duration);
}
if (event.data?.type === "MEDIA_DATA") {
console.log("Playback progress", event.data.data);
}
});
const connectPlayerFrame = () => {
const playerFrame = getPlayerFrame();
playerFrame?.addEventListener("load", initializePlayerMessages);
if (playerFrame) initializePlayerMessages();
};
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", connectPlayerFrame, {
once: true,
});
} else {
connectPlayerFrame();
}