Files
documentation/sdk/vyla-sdk/quickstart.md
2026-11-14 18:21:12 -08:00

163 lines
4.0 KiB
Markdown

# Vyla SDK Quickstart
<p class="page-description">Get up and running with the Vyla SDK in under five minutes. Learn how to resolve movies, television episodes, subtitles, and downloads.</p>
## Prerequisites
Ensure you have Node.js 20+ installed on your system. Create a new Node.js project:
```bash
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:
```ini
TMDB_API_KEY=your_tmdb_api_key_here
```
---
## 1. Initializing the SDK
Create an `index.js` file and initialize the `VylaSDK` class:
```javascript
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:
```javascript
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:
```javascript
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:
```javascript
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:
```javascript
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:
```javascript
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](/sdk/vyla-sdk/reference) for exhaustive class and method parameters.
- Learn how to integrate manga reading with the [Manga SDK Guide](/sdk/vyla-sdk/manga).
- Deploy an HTTP/SSE bridge with the [Stream API Guide](/stream-api/overview).