Easy to use
Copy one iframe snippet and add the player to your website. No complicated setup.

A live playground for the Vidstark player. Configure the same query parameters used by the production player, preview the result, and inspect its postMessage events in real time.
Copy one iframe snippet and add the player to your website. No complicated setup.
Test movies, TV shows, and anime with TMDB or AniList identifiers.
Tune themes, subtitles, start time, watermarks, autoplay, and next-episode behavior with URL parameters.
Refresh the player configuration from the latest options whenever you apply a change.
Use the available player sources and playback controls for a smooth viewing experience.
The inspector accepts events only from the Vidstark origin and the active player frame. Payloads are normalized before being displayed.
{
"status": "waiting",
"message": "Start playback to receive postMessage events."
}type=movie|tv|anime
tmdbId=27205
anilistId=172463
season=1
episode=1
t=90
theme=neonMovies use tmdbId. TV uses tmdbId, season, and episode. Anime uses anilistId and episode. The t parameter sets the initial playback position in seconds.
autoplay=1
autoSkipIntro=1
autoSkipOutro=1
autoNextEp=1
nextEpDelay=20
subtitle=English
lang=enBoolean options accept 1, true, yes, or on. Subtitle aliases include subtitle, sub, lang, and language.
showNextEpisode=1 Show overlay
showNextEpisode=0 Hide overlay
showNextEpisode=false Hide overlayUse showNextEpisode to control whether the next-episode overlay appears. Values1 andtrue show it;0 andfalse hide it. This is separate from autoNextEp, which controls automatic episode advancement.
default · neon · ember · rose · ocean · limeThe production player currently exposes six theme presets: default, neon, ember, rose, ocean, and lime. Use theme; colorTheme is also accepted.
watermark=https://...
watermarkName=Vidstarkwatermark, watermarkLogo, and wm identify the logo source.watermarkName and name provide the display name.
Add this listener to the page that embeds Vidstark. It checks the message origin and the exact iframe window before handling events. Replace the selector if your iframe uses a different identifier.
const playerFrame = document.querySelector(
"#Vidstark-player"
);
window.addEventListener("message", (event) => {
// Only accept messages from the player origin.
if (event.origin !== window.location.origin) return;
// Only accept messages from this player iframe.
if (!playerFrame || event.source !== playerFrame.contentWindow) {
return;
}
const message = event.data;
if (!message || typeof message !== "object") return;
console.log("Vidstark player event:", message);
switch (message.event) {
case "ready":
console.log("Player ready");
break;
case "play":
console.log("Playback started");
break;
case "pause":
console.log("Playback paused");
break;
case "timeupdate":
console.log("Playback time:", message.time, message.duration);
break;
case "ended":
console.log("Playback ended");
break;
}
});The origin check above assumes the player is served from the same origin as your site. If the player is hosted on another domain, replace window.location.origin with that exact trusted player origin.
<iframe
src="/oni?type=anime&anilistId=172463&episode=1&showNextEpisode=1&nextEpDelay=20&theme=neon&t=0"
title="Vidstark Player"
allow="autoplay; fullscreen; picture-in-picture"
allowfullscreen
></iframe>