mirror of
https://gitlab.com/vyla-entertainment/documentation.git
synced 2026-11-15 06:57:21 -05:00
163 lines
4.0 KiB
Markdown
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).
|