Stream any title with one iframe.
VidNest turns a TMDB or IMDb ID into a ready-to-play HD player. Subtitles, resume and quality memory are built in — you just drop in the URL.
- Movies & TV ShowsReady to stream
- Daily updatesNew releases added daily
<!-- Movie by TMDB ID --> <iframe src="https://vidnest.pro/movie/533533" width="100%" height="100%" frameborder="0" allowfullscreen allow="autoplay; fullscreen; picture-in-picture"> </iframe>
Build an embed, see it play.
Pick a title, set a start time or accent color, and copy the URL straight into your page.
Three URLs. That's the whole API.
Point an <iframe> at any of these. IDs can be TMDB numbers or IMDb tt… IDs.
Movie
A single filmTV episode
Season + episodeTV, short form
Hyphenated variantTune it with query params.
All optional and combinable, e.g. ?t=90&theme=16a085. A TV URL plays just that one episode unless you turn on the episode list or auto-next below.
Start time
tstartAtJump straight to a timestamp. Accepts plain seconds (90) or a compound duration (1h5m30s, 5m30s). An explicit start time always wins over a viewer's saved position.
https://vidnest.pro/movie/533533?t=1h5m30sAccent color
themeRecolor the progress bar, buttons and menus to match your site. A 6-digit hex color, with or without the leading #.
https://vidnest.pro/movie/533533?theme=16a085Autoplay
autoplay=1Starts playing as soon as the video is ready — with sound whenever the browser allows it. Browsers block sound until the viewer has clicked something on your site; then the video still starts, muted, with a "Tap to unmute" button. Keep allow="autoplay" on your iframe.
https://vidnest.pro/movie/533533?autoplay=1Episode list
episodes=1TVAdds an episode browser to the player — every season, with stills, names and each viewer's progress — plus a next-episode button. Viewers can binge without leaving your embed. Keys: E opens the list, N plays the next episode.
https://vidnest.pro/tv/66732/5/3?episodes=1Auto next
autonext=1TVIn the last seconds of an episode an "Up next" card counts down and the next episode starts playing on its own — rolling into the next season at a finale. Viewers can cancel it, or click to skip ahead.
https://vidnest.pro/tv/66732/5/3?episodes=1&autonext=1Auto-resume
Each viewer picks up where they left off on every movie and episode — no parameter needed.
Remembered quality
Adaptive quality by default. If a viewer picks a resolution, the closest one is restored next time.
Automatic subtitles
Extra languages are fetched in the background, and the viewer's language choice carries across titles.
Subtitle style & sync
Presets, font, outline, size and position with a live preview. Out-of-sync files are detected and fixed in about 20 seconds — saved for everyone.
Hold for 2×
Press and hold on the picture to play at double speed; let go to return. Double-tap either side to skip 10 seconds.
Pause screen
Pausing shows the title, episode and time left, and the bar shows when it ends — e.g. "Ends 11:42 PM".
Keyboard shortcuts
Work anywhere in the player once it has focus.
Listen to the player. Or drive it.
The player talks to your page over window.postMessage. Every event is tagged source: 'vidnest-player'.
window.addEventListener('message', (e) => { if (e.data?.source !== 'vidnest-player') return; const { event, currentTime, duration } = e.data; console.log(event, currentTime, duration); });
| Event | Payload | Fires when |
|---|---|---|
play | currentTime, duration | Playback starts or resumes |
pause | currentTime, duration | Playback pauses |
ended | currentTime, duration | Playback reaches the end |
seeked | currentTime, duration | Viewer jumps more than 3s |
timeupdate | + percentage | About once a second |
playerstatus | + paused, percentage | Reply to getStatus |
ready | — | Player is listening for commands |
episodechange | season, episode | Viewer moved to another episode (list or auto-next) — update your page's URL to match |
const player = document .querySelector('iframe').contentWindow; player.postMessage({ action: 'seek', time: 120 }, '*'); player.postMessage({ action: 'setVolume', volume: 0.5 }, '*'); player.postMessage({ action: 'setTheme', color: '16a085' }, '*'); player.postMessage({ action: 'getStatus' }, '*');
| Action | Fields | Effect |
|---|---|---|
getStatus | — | Replies with playerstatus |
play · pause | — | Resume or pause |
togglePlay | — | Toggle play / pause |
seek | time (s) | Jump to a time |
setVolume | volume (0–1) | Set the volume |
mute · unmute | — | Mute or unmute |
setSpeed | rate | Set playback rate |
setTheme | color (hex) | Recolor the player live |
enterFullscreen · exitFullscreen | — | Toggle fullscreen |
class WatchParty { constructor(iframe, channel) { this.player = iframe.contentWindow; this.channel = channel; // your WebSocket / Socket.IO / etc. // Local player → everyone else window.addEventListener('message', (e) => { if (e.data?.source !== 'vidnest-player') return; if (['play', 'pause', 'seeked'].includes(e.data.event)) { this.channel.send({ action: e.data.event, time: e.data.currentTime }); } }); // Everyone else → local player this.channel.onMessage(({ action, time }) => { if (action === 'seeked') return this.send({ action: 'seek', time }); this.send({ action }); // 'play' | 'pause' }); } send(msg) { this.player.postMessage(msg, '*'); } }
- This is integration code that runs on your page — the player has no built-in rooms; you bring the sync channel.
- Always check e.data.source: your window receives postMessage traffic from other scripts too.
- Commands apply asynchronously; seek takes a plain number of seconds.
Know what's available.
JSON endpoints listing every title we can play — use them to build browse pages, "new this week" rails or trending lists.
List movies
Query parameters
| Param | Description |
|---|---|
page | Page number (default 1) |
resultsPerPage | Results per page — max 100, default 20 |
ordering | id, title, year, views, views_day, views_week, views_month, created_at, updated_at |
direction | asc or desc |
query | Title search (min 3 characters) |
year | Release year |
imdb_id · tmdbid | Look up a single title |
slider · featured | Only slider / featured titles (1, true, yes) |
List TV shows
Query parameters
| Param | Description |
|---|---|
page | Page number (default 1) |
resultsPerPage | Results per page — max 100, default 20 |
ordering | id, last_upload_date, views, views_day, views_week, views_month |
direction | asc or desc |
query | Title search (min 3 characters) |
imdbid · tmdbid | Look up a single show |
slider | Only slider titles (1, true, yes) |
Trending
Query parameters
| Param | Description |
|---|---|
type | movie (default) or tv |
views | Window: day, week, month, total (default) |
page | Page number (default 1) |
year | Release year (movies only) |
resultsPerPage | Results per page — max 100, default 20 |
Your player is one line away.
No account, no key, no SDK. Copy a URL and ship.