mirror of
https://gitlab.com/vyla-entertainment/documentation.git
synced 2026-11-14 22:47:26 -05:00
4.0 KiB
4.0 KiB
Vyla SDK Quickstart
Get up and running with the Vyla SDK in under five minutes. Learn how to resolve movies, television episodes, subtitles, and downloads.
Prerequisites
Ensure you have Node.js 20+ installed on your system. Create a new Node.js project:
mkdir vyla-demo && cd vyla-demo
npm init -y
npm pkg set type="module"
npm install @vyla-entertainment/sdk dotenv
Create a .env file containing your TMDB API key:
TMDB_API_KEY=your_tmdb_api_key_here
1. Initializing the SDK
Create an index.js file and initialize the VylaSDK class:
import 'dotenv/config';
import VylaSDK from '@vyla-entertainment/sdk';
const sdk = new VylaSDK({
tmdbApiKey: process.env.TMDB_API_KEY
});
console.log('Vyla SDK initialized successfully!');
2. Resolving a Movie Stream
To resolve a movie stream, supply the source key and the numeric TMDB movie ID:
const sourceKey = 'vidlink';
const tmdbId = 155;
try {
const result = await sdk.getStream(sourceKey, tmdbId);
console.log('Stream Candidate URL:', result.url);
console.log('Container Type:', result.type);
console.log('Video Quality:', result.quality);
console.log('Upstream Server:', result.server);
} catch (error) {
console.error(`Failed to resolve ${sourceKey}:`, error.message);
}
3. Resolving a Television Episode
For TV series, provide the TMDB show ID, season number, and episode number:
const showId = 1396;
const season = 1;
const episode = 1;
try {
const tvStream = await sdk.getStream('vixsrc', showId, season, episode);
console.log('TV Episode Stream:', tvStream.url);
} catch (error) {
console.error('TV stream resolution failed:', error.message);
}
4. Multi-Source Concurrent Resolution with Fallbacks
In production, you should query multiple active providers concurrently and select the fastest viable stream:
async function resolveFastestStream(tmdbId, s = null, e = null) {
const activeSources = sdk.getSources(true);
const queryPromises = activeSources.map(async (cfg) => {
try {
const stream = await Promise.race([
sdk.getStream(cfg.key, tmdbId, s, e),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Timeout')), cfg.timeout || 10000)
)
]);
return { source: cfg.key, label: cfg.label, stream };
} catch {
return null;
}
});
const results = await Promise.all(queryPromises);
const successful = results.filter(Boolean);
if (successful.length === 0) {
throw new Error('No viable streaming sources resolved.');
}
console.log(`Resolved ${successful.length} valid streams!`);
return successful;
}
const sources = await resolveFastestStream(155);
console.log('Primary Source:', sources[0].label, sources[0].stream.url);
5. Fetching Subtitles and Downloads
Subtitles and direct download links can be fetched in parallel:
const [subtitles, downloads] = await Promise.all([
sdk.getSubtitles(155),
sdk.getDownloads(155)
]);
console.log('--- Subtitle Tracks ---');
subtitles.slice(0, 5).forEach((sub) => {
console.log(`[${sub.type.toUpperCase()}] ${sub.label}: ${sub.file}`);
});
console.log('--- Download Packages ---');
downloads.forEach((dl) => {
console.log(`[${dl.quality}] Size: ${dl.size ? (dl.size / (1024**3)).toFixed(2) + ' GB' : 'Unknown'} -> ${dl.url}`);
});
6. Live Source Health Probing
To check which providers are operational in your network environment:
const healthReport = await sdk.probeAllSources();
for (const [key, status] of Object.entries(healthReport)) {
const icon = status.ok ? 'OK' : 'FAIL';
console.log(`[${icon}] ${key}: ${status.ok ? status.ms + 'ms' : 'offline'}`);
}
Next Steps
- Consult the Complete API Reference for exhaustive class and method parameters.
- Learn how to integrate manga reading with the Manga SDK Guide.
- Deploy an HTTP/SSE bridge with the Stream API Guide.