Fast by default
A focused playback surface without a heavy interface around it.
Multiple sources, multi-language subtitles—all in one simple player.
Lightweight · responsive · all for free
A focused playback surface without a heavy interface around it.
One player that brings movie, series, and anime sources together.
Use a clean URL, then tune playback with documented parameters.
Player
Choose a type, enter its TMDB ID, and preview the playback experience.
Documentation
Configure the embed and connect watch progress without adding unnecessary complexity.
Customize player
Turn options on or off to build your embed URL.
Generated embed URL
https://your-player-domain.com/tv/124364/1/3autoplayControls if the media starts playing automatically.
startAtStarts the media at the specified time in seconds.
overlayShows metadata and logo while paused.
skipShows skip button when timestamps are available.
These are ignored on movie URLs.
nextButtonShows the Next Episode button in the player controls.
epSelectorShows the season and episode selector.
autoNextLoads and plays the next episode when the current one ends.
Watch Progress
The player stores progress inside its own localStorage and can also send the same data to your parent page when you pass eventsOrigin.
window.addEventListener("message", ({ origin, data }) => {
if (origin !== "https://your-player-domain.com" || !data) return;
if (data.type === "PLAYER_EVENT") {
const { event, currentTime, duration, tmdbId, mediaType } = data.data;
console.log(event, currentTime, duration, tmdbId, mediaType);
}
if (data.type === "MEDIA_DATA") {
localStorage.setItem("vidMagicProgress", JSON.stringify(data.data));
}
});const iframe = document.querySelector("iframe");
iframe?.contentWindow?.postMessage(
{ type: "GET_STATUS" },
"https://your-player-domain.com"
);{
type: "PLAYER_EVENT",
data: {
event: "play" | "pause" | "seeked" | "ended" | "timeupdate" | "playerstatus",
currentTime: number,
duration: number,
tmdbId: number,
mediaType: "movie" | "tv",
season?: number,
episode?: number,
playing: boolean,
muted: boolean,
volume: number
}
}{
"t63174": {
"id": 63174,
"type": "tv",
"title": "Lucifer",
"poster_path": "/ekZobS8isE6mA53RAiGDG93hBxL.jpg",
"backdrop_path": "/wbiPjTWpZMIB8ffBq7HvzAph4Ft.jpg",
"progress": {
"watched": 793.207692,
"duration": 2695.3689
},
"last_season_watched": 1,
"last_episode_watched": 1,
"show_progress": {
"s1e1": {
"season": 1,
"episode": 1,
"progress": {
"watched": 793.207692,
"duration": 2695.3689
},
"last_updated": 1742578021768
}
},
"last_updated": 1742578021768
},
"m533535": {
"id": 533535,
"type": "movie",
"title": "Deadpool & Wolverine",
"poster_path": "/8cdWjvZQUExUUTzyp4t6EDMubfO.jpg",
"backdrop_path": "/by8z9Fe8y7p4jo2YlW2SZDnptyT.jpg",
"progress": {
"watched": 353.530349,
"duration": 7667.227
},
"last_updated": 1742577064433
}
}