Select content and press Load to start streaming
















































Select content and press Load to start streaming
Easy to Use
Intuitive and simple. Just construct the URL and embed the player anywhere with minimal setup.
Huge Library
With content aggregated from multiple sources, we have one of the largest streaming libraries available.
Auto-Updated
Content is automatically updated with higher-quality versions when they become available from sources.
Fully Responsive
The player works seamlessly across desktops, mobiles, and tablets with adaptive quality selection.
High Quality
Links offer the highest available quality, with most content in 1080p Full HD resolution.
Fast Servers
Our player uses a list of the fastest streaming servers for buffer-free, smooth playback.
Customizable
Customize the player's appearance using simple query parameters to match your brand.
Autoplay & Auto-Next
Automatic playback on load and smart next-episode detection for seamless binge-watching.
Use TMDB ID from The Movie Database API.
/api/cinero/movie/[ID]
Returns an HTML page with the Cinero player embeddable in an iframe.
TMDB ID, season, and episode numbers, all in the URL path.
/api/cinero/tv/[ID]/[season]/[episode]
Supports autoplay, auto-next episode detection, and resume playback.
AniList ID or MAL ID + episode number. Supports sub & dub.
/api/cinero/anime/[lang]/[AniList-ID]/[episode]
/api/cinero/anime/mal/[lang]/[MAL-ID]/[episode]
Supports autoplay, auto-next episode detection, and resume playback.
Changes the player UI theme color (e.g., color=e91e63 for pink, color=E6B800 for gold)
Attempts to autoplay the video when the player loads. Note: browsers may block autoplay.
Displays a custom logo image in the top-left corner of the player overlay.
Overrides the default title displayed in the player. Useful for custom naming.
/api/cinero/tv/94997/1/1?color=e91e63&logo=[URL]
The simplest way to embed the player is using an HTML iframe. Just place the following code on your webpage and replace the TMDB ID with your content identifier. The player handles everything including stream fetching, quality selection, and subtitle loading.
<iframe src="https://cinextream.net/api/cinero/tv/94997/1/1" width="100%" style="aspect-ratio: 16/9;" frameborder="0" allowfullscreen allow="autoplay; encrypted-media"> </iframe>
The player broadcasts events to the parent window using the postMessage API. You can listen for these events to implement custom behaviors like auto-navigation, analytics tracking, or error recovery.
window.addEventListener('message', (event) => {
const data = typeof event.data === 'string'
? JSON.parse(event.data) : event.data;
switch (data.event) {
case 'player_ready':
console.log('Player loaded successfully');
break;
case 'time':
// { time: seconds, duration: seconds }
console.log(`Playing: ${data.time}/${data.duration}`);
break;
case 'complete':
console.log('Video finished');
break;
case 'player_error':
// { reason: 'stream_error' | 'all_servers_failed' }
console.error('Error:', data.reason);
break;
case 'VIDEO_ENDED':
// { tmdbId, season, episode }
console.log('Auto-next →', data.season, data.episode);
break;
}
});Here is a complete React component that wraps the embed player. It accepts TMDB ID, season, and episode as props, making it easy to drop into any React application. The component also handles loading states and errors gracefully.
function StreamPlayer({ tmdbId, type, season, episode, color }) {
const [loading, setLoading] = useState(true);
const url = type === 'series'
? `/api/cinero/tv/${tmdbId}/${season || 1}/${episode || 1}${color ? '?color=' + color : ''}`
: `/api/cinero/movie/${tmdbId}${color ? '?color=' + color : ''}`;
return (
<div style={{ position: 'relative', width: '100%', paddingTop: '56.25%' }}>
{loading && (
<div style={{
position: 'absolute', inset: 0, zIndex: 10,
display: 'flex', alignItems: 'center', justifyContent: 'center',
background: 'rgba(0,0,0,0.7)'
}}>
<p>Loading player...</p>
</div>
)}
<iframe
src={url}
style={{ position: 'absolute', inset: 0,
width: '100%', height: '100%', border: 'none' }}
allowFullScreen
allow="autoplay; encrypted-media"
onLoad={() => setLoading(false)}
/>
</div>
);
}The player broadcasts events to the parent window using the postMessage API. You can listen for these events to implement custom behaviors like auto-navigation, analytics tracking, or error recovery. Below are the available events and their data payloads.
window.addEventListener('message', (event) => {
const data = typeof event.data === 'string'
? JSON.parse(event.data) : event.data;
switch (data.event) {
case 'player_ready':
// Player has loaded and is ready
console.log('Player is ready');
break;
case 'time':
// Time update: { time: seconds, duration: seconds }
console.log(`Time: ${data.time}/${data.duration}`);
break;
case 'complete':
// Video finished playing
console.log('Video completed');
break;
case 'player_error':
// Error occurred: { reason: string }
console.error('Player error:', data.reason);
break;
case 'VIDEO_ENDED':
// Auto-next: { tmdbId, season, episode }
console.log(`Next: S${data.season}E${data.episode}`);
break;
}
});| Event | Payload | Description |
|---|---|---|
player_ready | {} | Fired when the player has fully loaded and is ready to play content. |
time | { time, duration } | Emitted continuously during playback with current time and total duration in seconds. |
complete | {} | Fired when the video reaches the end and playback is complete. |
player_error | { reason } | Sent on error. Reason: 'stream_error' (auto-switched) or 'all_servers_failed'. |
VIDEO_ENDED | { tmdbId, season, episode } | Broadcast when auto-next triggers with the next episode's details. |