untube 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +132 -47
- package/dist/downloader.d.ts +7 -0
- package/dist/downloader.d.ts.map +1 -0
- package/dist/downloader.js +107 -0
- package/dist/downloader.js.map +1 -0
- package/dist/index.d.ts +25 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +75 -1
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts +12 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +84 -0
- package/dist/utils.js.map +1 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -3,14 +3,7 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/untube)
|
|
4
4
|
[](LICENSE)
|
|
5
5
|
|
|
6
|
-
A lightweight YouTube
|
|
7
|
-
|
|
8
|
-
## Features
|
|
9
|
-
|
|
10
|
-
- ✅ Fetch complete video metadata.
|
|
11
|
-
- ✅ HTTP/HTTPS Proxy support via `undici`.
|
|
12
|
-
- ✅ Automatic Cookie management (File or Remote DB).
|
|
13
|
-
- ✅ Full TypeScript support.
|
|
6
|
+
A lightweight, extremely fast YouTube video downloader and metadata scraper for Node.js. Ported from the core extraction logic of [yt-dlp](https://github.com/yt-dlp/yt-dlp).
|
|
14
7
|
|
|
15
8
|
## Installation
|
|
16
9
|
|
|
@@ -18,72 +11,164 @@ A lightweight YouTube metadata and streaming URL scraper for Node.js, featuring
|
|
|
18
11
|
npm install untube
|
|
19
12
|
```
|
|
20
13
|
|
|
21
|
-
##
|
|
14
|
+
## Quick Start (Downloading Videos)
|
|
15
|
+
|
|
16
|
+
`untube` provides a readable stream that you can pipe anywhere (e.g., to a file, to `fluent-ffmpeg`, or an HTTP response).
|
|
17
|
+
|
|
18
|
+
> **⚠️ Important Note on Video & Audio:**
|
|
19
|
+
> YouTube separates high-quality video (1080p, 4K) and audio into different streams (DASH formats). If you choose a high-quality video format (like `highestvideo`), the resulting file will **not have sound**. If you want a single file with both high-quality video and audio, you must download the video and audio streams separately and merge them yourself using a tool like `ffmpeg`.
|
|
22
20
|
|
|
23
21
|
```typescript
|
|
24
|
-
import
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
22
|
+
import fs from 'node:fs';
|
|
23
|
+
import untube from 'untube';
|
|
24
|
+
|
|
25
|
+
// Setup AbortController to cancel download if needed
|
|
26
|
+
const controller = new AbortController();
|
|
27
|
+
|
|
28
|
+
// Start downloading a video
|
|
29
|
+
const stream = untube('dQw4w9WgXcQ', {
|
|
30
|
+
format: 'highestvideo', // Select highest video quality (will likely be video-only)
|
|
31
|
+
signal: controller.signal, // Pass the abort signal
|
|
32
|
+
// cookie: './cookies.txt', // Optional: avoid age-restrictions
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// Optional: Listen to events
|
|
36
|
+
stream.on('info', (info, format) => {
|
|
37
|
+
console.log(`Downloading: ${info.title}`);
|
|
38
|
+
console.log(`Format: ${format.resolution} (${format.container})`);
|
|
39
|
+
|
|
40
|
+
// You can also access subtitles/captions
|
|
41
|
+
if (info.captions.length > 0) {
|
|
42
|
+
console.log(`Available Subtitles: ${info.captions.map(c => c.language).join(', ')}`);
|
|
44
43
|
}
|
|
45
|
-
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
stream.on('progress', (progress) => {
|
|
47
|
+
const downloadedMb = (progress.downloadedBytes / 1024 / 1024).toFixed(2);
|
|
48
|
+
const totalMb = (progress.totalBytes / 1024 / 1024).toFixed(2);
|
|
49
|
+
console.log(`Progress: ${progress.percent}% (${downloadedMb}MB / ${totalMb}MB)`);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
stream.on('error', (err) => {
|
|
53
|
+
console.error(`Error: ${err.message}`);
|
|
54
|
+
});
|
|
46
55
|
|
|
47
|
-
|
|
56
|
+
// Pipe the stream directly to a file
|
|
57
|
+
stream.pipe(fs.createWriteStream('video.mp4'));
|
|
58
|
+
|
|
59
|
+
// Example: Cancel download after 5 seconds
|
|
60
|
+
// setTimeout(() => controller.abort(), 5000);
|
|
48
61
|
```
|
|
49
62
|
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Configuration Options
|
|
66
|
+
|
|
67
|
+
When calling `untube(id, options)` or `untube.getVideoInfo(id, options)`, you can pass an options object.
|
|
68
|
+
|
|
69
|
+
### `format` (Quality Selection)
|
|
70
|
+
You can easily pick the desired quality using preset strings or specific format IDs (`itag`):
|
|
71
|
+
|
|
72
|
+
- **Presets:** `'highest'` (default), `'lowest'`, `'highestaudio'`, `'lowestaudio'`, `'highestvideo'`, `'lowestvideo'`.
|
|
73
|
+
- **Resolutions:** `'1080p'`, `'720p'`, etc.
|
|
74
|
+
- **Format ID / itag:** Use specific itags like `'137'` (1080p video-only), `'140'` (m4a audio), or `'18'` (360p video+audio).
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
// Download exactly 1080p MP4 (Video only)
|
|
78
|
+
untube('videoId', { format: '137' });
|
|
79
|
+
|
|
80
|
+
// Download the best audio available
|
|
81
|
+
untube('videoId', { format: 'highestaudio' });
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### `mode` (Streaming Behavior)
|
|
85
|
+
By default, `untube` uses **parallel** downloading to bypass YouTube bandwidth throttling.
|
|
86
|
+
|
|
87
|
+
| Mode | Characteristics | Best for |
|
|
88
|
+
| :--- | :--- | :--- |
|
|
89
|
+
| `'parallel'` (Default) | Incredibly fast. Downloads chunks concurrently into a temp file and streams the result. Emits `progress` events. | Downloading files, massive scrapers. |
|
|
90
|
+
| `'sequential'` | Pure RAM streaming. Slower (throttled by YouTube). No temp files used. Start-up time is instant. | Real-time audio playback. |
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
// Use sequential mode for instant start-up time
|
|
94
|
+
const stream = untube('videoId', { format: 'highestaudio', mode: 'sequential' });
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Fetching Metadata
|
|
100
|
+
|
|
101
|
+
If you only need the video details without downloading the stream, use `untube.getVideoInfo()`:
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
import untube from 'untube';
|
|
105
|
+
|
|
106
|
+
const info = await untube.getVideoInfo('videoId');
|
|
107
|
+
|
|
108
|
+
console.log('Title:', info.title);
|
|
109
|
+
console.log('Views:', info.view_count);
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Format Utilities
|
|
113
|
+
|
|
114
|
+
`untube` includes powerful utility functions to help you manage and filter formats from the `info` object.
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
const info = await untube.getVideoInfo('videoId');
|
|
118
|
+
|
|
119
|
+
// 1. Choose a specific format manually
|
|
120
|
+
const bestAudio = untube.chooseFormat(info.formats, { quality: 'highestaudio' });
|
|
121
|
+
|
|
122
|
+
// 2. Filter formats custom logic
|
|
123
|
+
const mp4Only = untube.filterFormats(info.formats, format => format.container === 'mp4');
|
|
124
|
+
|
|
125
|
+
// 3. Filter using presets ('video', 'audio', 'audioandvideo', 'videoonly', 'audioonly')
|
|
126
|
+
const videoNoSound = untube.filterFormats(info.formats, 'videoonly');
|
|
127
|
+
|
|
128
|
+
// 4. Sort formats from highest to lowest quality
|
|
129
|
+
const sorted = untube.sortFormats(info.formats);
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
50
134
|
## Cookie Handling
|
|
51
135
|
|
|
52
136
|
Using cookies is highly recommended to avoid rate limits, access age-restricted (NSFW) videos, or videos only available in specific regions.
|
|
53
137
|
|
|
54
138
|
### 1. Using a File (Netscape format)
|
|
55
|
-
1. Install a browser extension like **"Get cookies.txt LOCALLY"** (
|
|
56
|
-
2. Open YouTube and ensure you are logged in
|
|
57
|
-
3.
|
|
58
|
-
4.
|
|
59
|
-
|
|
139
|
+
1. Install a browser extension like **"Get cookies.txt LOCALLY"** (Chrome/Firefox).
|
|
140
|
+
2. Open YouTube and ensure you are logged in.
|
|
141
|
+
3. Export the cookies in **Netscape format** and save it as `cookies.txt`.
|
|
142
|
+
4. Provide the file path:
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
untube('videoId', { cookie: './cookies.txt' });
|
|
146
|
+
```
|
|
60
147
|
|
|
61
|
-
### 2. Advanced: Remote Storage (
|
|
148
|
+
### 2. Advanced: Remote Storage (Database / Firebase)
|
|
62
149
|
If you want to store cookies in a remote database or as a string, use the `RawCookie` class:
|
|
63
150
|
|
|
64
151
|
```typescript
|
|
65
|
-
import
|
|
152
|
+
import untube from 'untube';
|
|
66
153
|
|
|
67
|
-
const myRawCookie = new RawCookie(
|
|
154
|
+
const myRawCookie = new untube.RawCookie(
|
|
68
155
|
async () => {
|
|
69
|
-
// Implement
|
|
70
|
-
|
|
71
|
-
return cookies; // Must return Netscape format string
|
|
156
|
+
// Implement read logic (e.g., fetch from DB)
|
|
157
|
+
return await fetchCookiesFromDB(); // Must return Netscape format string
|
|
72
158
|
},
|
|
73
159
|
async (newCookies) => {
|
|
74
|
-
// Implement
|
|
75
|
-
// This is called whenever YouTube sends new cookies
|
|
160
|
+
// Implement write logic (called when YouTube refreshes cookies)
|
|
76
161
|
await saveCookiesToDB(newCookies);
|
|
77
162
|
}
|
|
78
163
|
);
|
|
79
164
|
|
|
80
|
-
|
|
81
|
-
cookie: myRawCookie
|
|
82
|
-
});
|
|
165
|
+
untube('videoId', { cookie: myRawCookie });
|
|
83
166
|
```
|
|
84
167
|
|
|
85
168
|
> **⚠️ Security:** Never share your cookies with anyone as they contain your login session. Ensure local cookie files are added to your `.gitignore`.
|
|
86
169
|
|
|
170
|
+
---
|
|
171
|
+
|
|
87
172
|
## Disclaimer
|
|
88
173
|
|
|
89
174
|
This project is created for educational and research purposes only. Users are solely responsible for how they use this tool. Ensure you comply with YouTube's Terms of Service and applicable copyright laws in your region. The author is not responsible for any misuse of this tool.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface DownloadProgress {
|
|
2
|
+
percent: number;
|
|
3
|
+
downloadedBytes: number;
|
|
4
|
+
totalBytes: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function downloadVideoParallel(url: string, proxy?: string, signal?: AbortSignal, onProgressCallback?: ((progress: DownloadProgress) => void) | null): Promise<string | null>;
|
|
7
|
+
//# sourceMappingURL=downloader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../src/downloader.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,kBAAkB,GAAE,CAAC,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC,GAAG,IAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsG/L"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { createWriteStream } from 'node:fs';
|
|
3
|
+
import fs from 'node:fs/promises';
|
|
4
|
+
import os from 'node:os';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { Readable } from 'node:stream';
|
|
7
|
+
import { pipeline } from 'node:stream/promises';
|
|
8
|
+
import pLimit from 'p-limit';
|
|
9
|
+
import { fetch, ProxyAgent } from 'undici';
|
|
10
|
+
const CHUNK_SIZE = 5 * 1024 * 1024;
|
|
11
|
+
const CONCURRENCY = 20;
|
|
12
|
+
const RETRY_LIMIT = 3;
|
|
13
|
+
export async function downloadVideoParallel(url, proxy, signal, onProgressCallback = null) {
|
|
14
|
+
const tempFileName = `download_${randomUUID()}.mp4`;
|
|
15
|
+
const filePath = path.join(os.tmpdir(), tempFileName);
|
|
16
|
+
const dispatcher = proxy ? new ProxyAgent(proxy) : undefined;
|
|
17
|
+
try {
|
|
18
|
+
let progress = 0;
|
|
19
|
+
const limit = pLimit(CONCURRENCY);
|
|
20
|
+
let fileHandle = null;
|
|
21
|
+
async function downloadAndWriteChunk(start, end, chunkIndex, retryCount = 0) {
|
|
22
|
+
try {
|
|
23
|
+
const response = await fetch(url, {
|
|
24
|
+
headers: { Range: `bytes=${start}-${end}` },
|
|
25
|
+
signal: signal || AbortSignal.timeout(30000),
|
|
26
|
+
dispatcher
|
|
27
|
+
});
|
|
28
|
+
if (!response.ok) {
|
|
29
|
+
throw new Error(`HTTP error ${response.status} for chunk ${chunkIndex}`);
|
|
30
|
+
}
|
|
31
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
32
|
+
const buffer = Buffer.from(arrayBuffer);
|
|
33
|
+
if (fileHandle) {
|
|
34
|
+
await fileHandle.write(buffer, 0, buffer.length, start);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (retryCount >= RETRY_LIMIT) {
|
|
39
|
+
throw new Error(`Chunk ${chunkIndex} failed after ${RETRY_LIMIT} retries: ${error.message}`);
|
|
40
|
+
}
|
|
41
|
+
return downloadAndWriteChunk(start, end, chunkIndex, retryCount + 1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const headResponse = await fetch(url, {
|
|
46
|
+
method: 'HEAD',
|
|
47
|
+
headers: { 'Accept-Encoding': 'identity' },
|
|
48
|
+
dispatcher
|
|
49
|
+
});
|
|
50
|
+
if (!headResponse.ok) {
|
|
51
|
+
throw new Error(`Server response: ${headResponse.status}`);
|
|
52
|
+
}
|
|
53
|
+
const acceptRanges = headResponse.headers.get('accept-ranges') === 'bytes';
|
|
54
|
+
const totalSize = Number.parseInt(String(headResponse.headers.get('content-length')), 10);
|
|
55
|
+
if (!acceptRanges || Number.isNaN(totalSize)) {
|
|
56
|
+
console.log(`[Downloader] Range not supported or unknown size. Using fallback streaming...`);
|
|
57
|
+
const response = await fetch(url, { dispatcher, signal });
|
|
58
|
+
if (!response.ok || !response.body)
|
|
59
|
+
throw new Error(`Fallback HTTP Error: ${response.status}`);
|
|
60
|
+
await pipeline(Readable.fromWeb(response.body), createWriteStream(filePath), { signal });
|
|
61
|
+
return filePath;
|
|
62
|
+
}
|
|
63
|
+
fileHandle = await fs.open(filePath, 'w');
|
|
64
|
+
const totalChunks = Math.ceil(totalSize / CHUNK_SIZE);
|
|
65
|
+
const downloadTasks = [];
|
|
66
|
+
let downloadedCount = 0;
|
|
67
|
+
for (let i = 0; i < totalChunks; i++) {
|
|
68
|
+
const start = i * CHUNK_SIZE;
|
|
69
|
+
const end = Math.min(start + CHUNK_SIZE - 1, totalSize - 1);
|
|
70
|
+
const task = limit(async () => {
|
|
71
|
+
await downloadAndWriteChunk(start, end, i);
|
|
72
|
+
downloadedCount++;
|
|
73
|
+
const percent = Math.ceil((downloadedCount / totalChunks) * 100);
|
|
74
|
+
const downloadedBytes = Math.min(downloadedCount * CHUNK_SIZE, totalSize);
|
|
75
|
+
if (onProgressCallback && percent !== progress) {
|
|
76
|
+
progress = percent;
|
|
77
|
+
try {
|
|
78
|
+
onProgressCallback({ percent, downloadedBytes, totalBytes: totalSize });
|
|
79
|
+
}
|
|
80
|
+
catch (cbError) {
|
|
81
|
+
console.error(cbError);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
downloadTasks.push(task);
|
|
86
|
+
}
|
|
87
|
+
await Promise.all(downloadTasks);
|
|
88
|
+
await fileHandle.close();
|
|
89
|
+
return filePath;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.error(`[Downloader] Failed to process ${url}:`, error.message);
|
|
93
|
+
if (fileHandle) {
|
|
94
|
+
await fileHandle.close().catch(() => { });
|
|
95
|
+
}
|
|
96
|
+
await fs.unlink(filePath).catch(() => { });
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
await fs.unlink(filePath).catch(() => { });
|
|
102
|
+
const errStr = err instanceof Error ? err.stack || err.message : String(err);
|
|
103
|
+
console.error(`[Downloader] Critical Error:\n${errStr}`);
|
|
104
|
+
throw err;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=downloader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloader.js","sourceRoot":"","sources":["../src/downloader.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { RawCookie } from './cookie-manager.js';
|
|
2
|
+
import { filterFormats, sortFormats, chooseFormat, FilterFunction, FilterString, ChooseFormatQuality, ChooseFormatOptions } from './utils.js';
|
|
3
|
+
import { PassThrough } from 'node:stream';
|
|
2
4
|
export interface YouTubeFormat {
|
|
3
5
|
asr: number | null;
|
|
4
6
|
filesize: number | null;
|
|
@@ -23,6 +25,12 @@ export interface YouTubeFormat {
|
|
|
23
25
|
resolution: string;
|
|
24
26
|
format: string;
|
|
25
27
|
}
|
|
28
|
+
export interface YouTubeCaption {
|
|
29
|
+
url: string;
|
|
30
|
+
ext: string;
|
|
31
|
+
name: string;
|
|
32
|
+
language: string;
|
|
33
|
+
}
|
|
26
34
|
export interface VideoInfo {
|
|
27
35
|
id: string;
|
|
28
36
|
title: string;
|
|
@@ -43,6 +51,7 @@ export interface VideoInfo {
|
|
|
43
51
|
thumbnail: string;
|
|
44
52
|
thumbnails: any[];
|
|
45
53
|
formats: YouTubeFormat[];
|
|
54
|
+
captions: YouTubeCaption[];
|
|
46
55
|
availability: string;
|
|
47
56
|
}
|
|
48
57
|
export interface GetVideoInfoOptions {
|
|
@@ -50,5 +59,20 @@ export interface GetVideoInfoOptions {
|
|
|
50
59
|
proxy?: string;
|
|
51
60
|
}
|
|
52
61
|
declare function getVideoInfo(videoId: string, options?: GetVideoInfoOptions): Promise<VideoInfo>;
|
|
53
|
-
export
|
|
62
|
+
export interface UntubeOptions extends GetVideoInfoOptions {
|
|
63
|
+
format?: ChooseFormatQuality;
|
|
64
|
+
filter?: FilterString | FilterFunction;
|
|
65
|
+
mode?: 'parallel' | 'sequential';
|
|
66
|
+
signal?: AbortSignal;
|
|
67
|
+
}
|
|
68
|
+
declare function untube(id: string, options?: UntubeOptions): PassThrough;
|
|
69
|
+
declare namespace untube {
|
|
70
|
+
var getVideoInfo: typeof import("./index.js").getVideoInfo;
|
|
71
|
+
var RawCookie: typeof import("./cookie-manager.js").RawCookie;
|
|
72
|
+
var filterFormats: typeof import("./utils.js").filterFormats;
|
|
73
|
+
var sortFormats: typeof import("./utils.js").sortFormats;
|
|
74
|
+
var chooseFormat: typeof import("./utils.js").chooseFormat;
|
|
75
|
+
}
|
|
76
|
+
export { getVideoInfo, RawCookie, filterFormats, sortFormats, chooseFormat, FilterFunction, FilterString, ChooseFormatQuality, ChooseFormatOptions };
|
|
77
|
+
export default untube;
|
|
54
78
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAsB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,11 @@ import CookieManager, { RawCookie } from './cookie-manager.js';
|
|
|
2
2
|
import jsc from './solver-bundle.js';
|
|
3
3
|
import crypto from 'node:crypto';
|
|
4
4
|
import { fetch, ProxyAgent } from 'undici';
|
|
5
|
+
import { filterFormats, sortFormats, chooseFormat } from './utils.js';
|
|
6
|
+
import { PassThrough, Readable } from 'node:stream';
|
|
7
|
+
import { createReadStream } from 'node:fs';
|
|
8
|
+
import fs from 'node:fs/promises';
|
|
9
|
+
import { downloadVideoParallel } from './downloader.js';
|
|
5
10
|
async function getVideoInfo(videoId, options = {}) {
|
|
6
11
|
const cookieSource = options.cookie || './cookies.txt';
|
|
7
12
|
const cm = new CookieManager(cookieSource);
|
|
@@ -84,6 +89,9 @@ async function getVideoInfo(videoId, options = {}) {
|
|
|
84
89
|
throw new Error(`InnerTube API failed: ${apiRes.status} ${apiRes.statusText}`);
|
|
85
90
|
}
|
|
86
91
|
const json = await apiRes.json();
|
|
92
|
+
if (json.playabilityStatus && json.playabilityStatus.status !== 'OK') {
|
|
93
|
+
throw new Error(`YouTube Error: ${json.playabilityStatus.reason || json.playabilityStatus.status}`);
|
|
94
|
+
}
|
|
87
95
|
let preprocessedPlayerCache = null;
|
|
88
96
|
const getPreprocessedPlayer = async () => {
|
|
89
97
|
if (preprocessedPlayerCache)
|
|
@@ -246,6 +254,17 @@ function normalizeYtDlp(json) {
|
|
|
246
254
|
const duration = Number.parseInt(vd.lengthSeconds || mf.lengthSeconds || '0', 10);
|
|
247
255
|
const view_count = Number.parseInt(vd.viewCount || mf.viewCount || '0', 10);
|
|
248
256
|
const isLive = vd.isLiveContent || false;
|
|
257
|
+
const captions = [];
|
|
258
|
+
if (json.captions?.playerCaptionsTracklistRenderer?.captionTracks) {
|
|
259
|
+
for (const track of json.captions.playerCaptionsTracklistRenderer.captionTracks) {
|
|
260
|
+
captions.push({
|
|
261
|
+
url: track.baseUrl,
|
|
262
|
+
ext: 'vtt',
|
|
263
|
+
name: track.name?.simpleText || track.languageCode,
|
|
264
|
+
language: track.languageCode,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
}
|
|
249
268
|
return {
|
|
250
269
|
id: vd.videoId,
|
|
251
270
|
title: vd.title || mf.title?.simpleText,
|
|
@@ -266,8 +285,63 @@ function normalizeYtDlp(json) {
|
|
|
266
285
|
thumbnail: mf.thumbnail?.thumbnails?.[mf.thumbnail.thumbnails.length - 1]?.url || vd.thumbnail?.thumbnails?.[vd.thumbnail.thumbnails.length - 1]?.url || '',
|
|
267
286
|
thumbnails: mf.thumbnail?.thumbnails || vd.thumbnail?.thumbnails || [],
|
|
268
287
|
formats,
|
|
288
|
+
captions,
|
|
269
289
|
availability: json.playabilityStatus?.status || 'OK',
|
|
270
290
|
};
|
|
271
291
|
}
|
|
272
|
-
|
|
292
|
+
function untube(id, options = {}) {
|
|
293
|
+
const stream = new PassThrough();
|
|
294
|
+
(async () => {
|
|
295
|
+
try {
|
|
296
|
+
const info = await getVideoInfo(id, options);
|
|
297
|
+
const format = chooseFormat(info.formats, {
|
|
298
|
+
quality: options.format,
|
|
299
|
+
filter: options.filter
|
|
300
|
+
});
|
|
301
|
+
stream.emit('info', info, format);
|
|
302
|
+
if (options.mode === 'sequential' || format.url.includes('.m3u8')) {
|
|
303
|
+
const dispatcher = options.proxy ? new ProxyAgent(options.proxy) : undefined;
|
|
304
|
+
const fetchOptions = { dispatcher, signal: options.signal };
|
|
305
|
+
if (!format.url.includes('.m3u8')) {
|
|
306
|
+
fetchOptions.headers = { Range: 'bytes=0-' };
|
|
307
|
+
}
|
|
308
|
+
const response = await fetch(format.url, fetchOptions);
|
|
309
|
+
if (!response.ok || !response.body) {
|
|
310
|
+
throw new Error(`Failed to fetch video stream: ${response.status}`);
|
|
311
|
+
}
|
|
312
|
+
const webStream = Readable.fromWeb(response.body);
|
|
313
|
+
webStream.on('error', (err) => stream.emit('error', err));
|
|
314
|
+
webStream.pipe(stream);
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
const tempFile = await downloadVideoParallel(format.url, options.proxy, options.signal, (percent) => {
|
|
318
|
+
stream.emit('progress', percent);
|
|
319
|
+
});
|
|
320
|
+
if (!tempFile) {
|
|
321
|
+
throw new Error('Download failed, no file returned.');
|
|
322
|
+
}
|
|
323
|
+
const readStream = createReadStream(tempFile);
|
|
324
|
+
readStream.on('error', (err) => {
|
|
325
|
+
stream.emit('error', err);
|
|
326
|
+
fs.unlink(tempFile).catch(() => { });
|
|
327
|
+
});
|
|
328
|
+
readStream.on('end', () => {
|
|
329
|
+
fs.unlink(tempFile).catch(() => { });
|
|
330
|
+
});
|
|
331
|
+
readStream.pipe(stream);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
catch (err) {
|
|
335
|
+
stream.emit('error', err);
|
|
336
|
+
}
|
|
337
|
+
})();
|
|
338
|
+
return stream;
|
|
339
|
+
}
|
|
340
|
+
untube.getVideoInfo = getVideoInfo;
|
|
341
|
+
untube.RawCookie = RawCookie;
|
|
342
|
+
untube.filterFormats = filterFormats;
|
|
343
|
+
untube.sortFormats = sortFormats;
|
|
344
|
+
untube.chooseFormat = chooseFormat;
|
|
345
|
+
export { getVideoInfo, RawCookie, filterFormats, sortFormats, chooseFormat };
|
|
346
|
+
export default untube;
|
|
273
347
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,EAAE,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,GAAG,MAAM,oBAAoB,CAAA;AACpC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AA+D1C,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,UAA+B,EAAE;IAC1E,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,eAAe,CAAA;IACtD,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,YAAY,CAAC,CAAA;IAC1C,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;IAEf,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAE5E,MAAM,QAAQ,GAAG,mCAAmC,OAAO,EAAE,CAAA;IAC7D,MAAM,OAAO,GAA2B;QACpC,YAAY,EAAE,iHAAiH;QAC/H,iBAAiB,EAAE,gBAAgB;QACnC,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE;KAC/C,CAAA;IAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,UAAU,EAAS,CAAC,CAAA;IACrE,MAAM,QAAQ,GAAG,MAAO,OAAe,CAAC,IAAI,EAAE,CAAA;IAE9C,MAAM,UAAU,GAAI,OAAO,CAAC,OAAe,CAAC,YAAY,EAAE,CAAA;IAC1D,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;QACzE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClE,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAE9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAA;IACtC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;IAErB,IAAI,qBAAqB,GAAQ,EAAE,CAAA;IACnC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAA;IACrF,IAAI,kBAAkB,EAAE,CAAC;QACrB,IAAI,CAAC;YACD,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAE,CAAC,CAAA;QAC9D,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,kDAAkD,MAAM,oBAAoB,CAAA;IAC3F,MAAM,UAAU,GAAG,SAAS,CAAA;IAC5B,MAAM,aAAa,GAAG,YAAY,CAAA;IAElC,MAAM,OAAO,GAAG;QACZ,OAAO,EAAE;YACL,MAAM,EAAE;gBACJ,UAAU;gBACV,aAAa;gBACb,SAAS,EAAE,oDAAoD;gBAC/D,EAAE,EAAE,IAAI;gBACR,EAAE,EAAE,IAAI;aACX;SACJ;QACD,OAAO;QACP,eAAe,EAAE;YACb,sBAAsB,EAAE;gBACpB,eAAe,EAAE,kBAAkB;gBACnC,kBAAkB,EAAE,GAAG;aAC1B;SACJ;KACJ,CAAA;IAED,MAAM,UAAU,GAA2B;QACvC,YAAY,EAAE,oDAAoD;QAClE,cAAc,EAAE,kBAAkB;QAClC,uBAAuB,EAAE,GAAG;QAC5B,0BAA0B,EAAE,aAAa;QACzC,QAAQ,EAAE,yBAAyB;QACnC,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE;KAC7C,CAAA;IAED,MAAM,aAAa,GAAG,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAA;IACzF,IAAI,aAAa,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,IAAI,aAAa,CAAC,KAAK,0BAA0B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1H,UAAU,CAAC,aAAa,GAAG,eAAe,SAAS,IAAI,IAAI,EAAE,CAAA;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;QAC/B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAC7B,UAAU;KACN,CAAC,CAAA;IAET,MAAM,aAAa,GAAI,MAAM,CAAC,OAAe,CAAC,YAAY,EAAE,CAAA;IAC5D,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,aAAa,CAAC,OAAO,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QAC1E,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;IACnB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;IAClF,CAAC;IAED,MAAM,IAAI,GAAQ,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IAErC,IAAI,uBAAuB,GAAQ,IAAI,CAAA;IACvC,MAAM,qBAAqB,GAAG,KAAK,IAAI,EAAE;QACrC,IAAI,uBAAuB;YAAE,OAAO,uBAAuB,CAAA;QAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,0BAA0B,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,2EAA2E,CAAA;QACrK,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,UAAU,EAAS,CAAC,CAAA;QACzD,MAAM,MAAM,GAAG,MAAO,GAAW,CAAC,IAAI,EAAE,CAAA;QAExC,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAA;QACzF,MAAM,MAAM,GAAQ,GAAG,CAAC,KAAK,CAAC,CAAA;QAE9B,uBAAuB,GAAG,MAAM,CAAC,mBAAmB,CAAA;QACpD,OAAO,uBAAuB,CAAA;IAClC,CAAC,CAAA;IAED,MAAM,UAAU,GAAU;QACtB,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,IAAI,EAAE,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,IAAI,EAAE,CAAC;KACjD,CAAA;IAED,MAAM,aAAa,GAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAa,EAAE,CAAA;IAEhC,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;YAChE,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC/B,IAAI,CAAC;gBAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAE5B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACvC,IAAI,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;gBAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACjC,IAAI,CAAC;oBAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC9B,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,CAAC;gBAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC9B,CAAC;IACL,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,kBAAkB,GAAG,MAAM,qBAAqB,EAAE,CAAA;QACxD,MAAM,QAAQ,GAAU,EAAE,CAAA;QAC1B,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAA;QACrG,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAA;QAE/F,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAA;QACzF,MAAM,MAAM,GAAQ,GAAG,CAAC,KAAK,CAAC,CAAA;QAE9B,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAA;QAC5I,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAA;QAExI,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBACzB,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;gBAChE,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACvC,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAA;gBAC1C,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAE/B,IAAI,OAAO,EAAE,CAAC;oBACV,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;oBAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBAEjC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;wBAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;oBACvD,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;wBAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;oBAEpD,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;gBAC7B,CAAC;gBACD,OAAO,MAAM,CAAC,eAAe,CAAA;YACjC,CAAC;iBAAM,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;gBACpB,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACjC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;oBACjC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;gBAC7B,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,CAAC,qBAAqB,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAA;IACnG,IAAI,CAAC,WAAW,GAAG,qBAAqB,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAA;IAExE,OAAO,cAAc,CAAC,IAAI,CAAC,CAAA;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,IAAS;IAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAA;IAClC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,yBAAyB,IAAI,EAAE,CAAA;IAC5D,MAAM,OAAO,GAAoB,EAAE,CAAA;IAEnC,MAAM,SAAS,GAAG,CAAC,CAAM,EAAiB,EAAE;QACxC,IAAI,MAAM,GAAG,MAAM,CAAA;QACnB,IAAI,MAAM,GAAG,MAAM,CAAA;QAEnB,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACzE,IAAI,GAAG,KAAK,OAAO;YAAE,GAAG,GAAG,KAAK,CAAA;QAChC,IAAI,GAAG,KAAK,mBAAmB;YAAE,GAAG,GAAG,KAAK,CAAA;QAE5C,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;YAChD,IAAI,KAAK,EAAE,CAAC;gBACR,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;gBAC/D,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;gBACtB,CAAC;qBAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACzC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;oBAClB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACpB,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;oBACtB,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,SAAS,GAAG,GAAG,CAAA;QACnB,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS,GAAG,KAAK,CAAA;aAC7C,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS,GAAG,MAAM,CAAA;aACpD,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS,GAAG,KAAK,CAAA;aACnD,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS,GAAG,KAAK,CAAA;QAEzD,IAAI,UAAU,GAAG,YAAY,CAAA;QAC7B,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACtB,UAAU,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,CAAA;QACzC,CAAC;aAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAClB,UAAU,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAA;QAC/B,CAAC;aAAM,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACjB,UAAU,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAA;QAC9B,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,UAAU,EAAE,CAAA;QAE7F,OAAO;YACH,GAAG,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;YACtE,QAAQ,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;YACvE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;YAC1C,WAAW,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE;YAC9C,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,IAAI;YAClB,cAAc,EAAE,CAAC,CAAC,aAAa,IAAI,IAAI;YACvC,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI;YACxB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI;YACtB,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI;YAC5C,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;YACpD,GAAG;YACH,MAAM;YACN,MAAM;YACN,SAAS;YACT,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YACvD,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;YAC/E,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;YAC3C,GAAG,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;YAClE,GAAG,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;YACzF,UAAU;YACV,MAAM;SACT,CAAA;IACL,CAAC,CAAA;IAED,IAAI,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;IAC9D,CAAC;IACD,IAAI,IAAI,CAAC,aAAa,EAAE,eAAe,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;IACtE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;IACjF,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;IAC3E,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,IAAI,KAAK,CAAA;IAExC,OAAO;QACH,EAAE,EAAE,EAAE,CAAC,OAAO;QACd,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU;QACvC,WAAW,EAAE,EAAE,CAAC,gBAAgB,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,IAAI,EAAE;QACpE,OAAO,EAAE,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,gBAAgB;QACzC,QAAQ,EAAE,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,gBAAgB;QAC1C,UAAU,EAAE,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,iBAAiB;QAChD,WAAW,EAAE,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,mCAAmC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI;QACpI,QAAQ;QACR,UAAU;QACV,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,IAAI,GAAG,CAAC,IAAI,IAAI;QAClE,SAAS,EAAE,CAAC,EAAE,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,KAAK,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvH,WAAW,EAAE,mCAAmC,EAAE,CAAC,OAAO,EAAE;QAC5D,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9C,iBAAiB,EAAE,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU;QACtE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;QAC5C,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7E,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE;QAC3J,UAAU,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE;QACtE,OAAO;QACP,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,IAAI,IAAI;KACvD,CAAA;AACL,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { YouTubeFormat } from './index.js';
|
|
2
|
+
export type FilterFunction = (format: YouTubeFormat) => boolean;
|
|
3
|
+
export type FilterString = 'audioandvideo' | 'videoandaudio' | 'video' | 'videoonly' | 'audio' | 'audioonly';
|
|
4
|
+
export declare function filterFormats(formats: YouTubeFormat[], filter: FilterString | FilterFunction): YouTubeFormat[];
|
|
5
|
+
export declare function sortFormats(formats: YouTubeFormat[]): YouTubeFormat[];
|
|
6
|
+
export type ChooseFormatQuality = 'highest' | 'lowest' | 'highestaudio' | 'lowestaudio' | 'highestvideo' | 'lowestvideo' | string;
|
|
7
|
+
export interface ChooseFormatOptions {
|
|
8
|
+
quality?: ChooseFormatQuality;
|
|
9
|
+
filter?: FilterString | FilterFunction;
|
|
10
|
+
}
|
|
11
|
+
export declare function chooseFormat(formats: YouTubeFormat[], options?: ChooseFormatOptions): YouTubeFormat;
|
|
12
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,eAAe,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AAS7G,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,YAAY,GAAG,cAAc,GAAG,aAAa,EAAE,CAoB9G;AASD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAcrE;AAED,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,GAAG,aAAa,GAAG,cAAc,GAAG,aAAa,GAAG,MAAM,CAAC;AAelI,MAAM,WAAW,mBAAmB;IAChC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC;CAC1C;AASD,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,OAAO,GAAE,mBAAwB,GAAG,aAAa,CAiDvG"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export function filterFormats(formats, filter) {
|
|
2
|
+
if (typeof filter === 'function') {
|
|
3
|
+
return formats.filter(filter);
|
|
4
|
+
}
|
|
5
|
+
switch (filter) {
|
|
6
|
+
case 'audioandvideo':
|
|
7
|
+
case 'videoandaudio':
|
|
8
|
+
return formats.filter((f) => f.vcodec !== 'none' && f.acodec !== 'none');
|
|
9
|
+
case 'video':
|
|
10
|
+
return formats.filter((f) => f.vcodec !== 'none');
|
|
11
|
+
case 'videoonly':
|
|
12
|
+
return formats.filter((f) => f.vcodec !== 'none' && f.acodec === 'none');
|
|
13
|
+
case 'audio':
|
|
14
|
+
return formats.filter((f) => f.acodec !== 'none');
|
|
15
|
+
case 'audioonly':
|
|
16
|
+
return formats.filter((f) => f.acodec !== 'none' && f.vcodec === 'none');
|
|
17
|
+
default:
|
|
18
|
+
return formats;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function sortFormats(formats) {
|
|
22
|
+
return [...formats].sort((a, b) => {
|
|
23
|
+
const aRes = a.height || 0;
|
|
24
|
+
const bRes = b.height || 0;
|
|
25
|
+
if (aRes !== bRes)
|
|
26
|
+
return bRes - aRes;
|
|
27
|
+
const aVbr = a.vbr || 0;
|
|
28
|
+
const bVbr = b.vbr || 0;
|
|
29
|
+
if (aVbr !== bVbr)
|
|
30
|
+
return bVbr - aVbr;
|
|
31
|
+
const aAbr = a.abr || 0;
|
|
32
|
+
const bAbr = b.abr || 0;
|
|
33
|
+
return bAbr - aAbr;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
export function chooseFormat(formats, options = {}) {
|
|
37
|
+
let filtered = options.filter ? filterFormats(formats, options.filter) : formats;
|
|
38
|
+
if (filtered.length === 0) {
|
|
39
|
+
throw new Error('No formats found matching the given criteria.');
|
|
40
|
+
}
|
|
41
|
+
const quality = options.quality || 'highest';
|
|
42
|
+
switch (quality) {
|
|
43
|
+
case 'highest':
|
|
44
|
+
filtered = sortFormats(filtered);
|
|
45
|
+
return filtered[0];
|
|
46
|
+
case 'lowest':
|
|
47
|
+
filtered = sortFormats(filtered).reverse();
|
|
48
|
+
return filtered[0];
|
|
49
|
+
case 'highestaudio':
|
|
50
|
+
filtered = filterFormats(filtered, 'audio');
|
|
51
|
+
filtered.sort((a, b) => (b.abr || 0) - (a.abr || 0));
|
|
52
|
+
if (filtered.length === 0)
|
|
53
|
+
throw new Error('No audio formats found.');
|
|
54
|
+
return filtered[0];
|
|
55
|
+
case 'lowestaudio':
|
|
56
|
+
filtered = filterFormats(filtered, 'audio');
|
|
57
|
+
filtered.sort((a, b) => (a.abr || 0) - (b.abr || 0));
|
|
58
|
+
if (filtered.length === 0)
|
|
59
|
+
throw new Error('No audio formats found.');
|
|
60
|
+
return filtered[0];
|
|
61
|
+
case 'highestvideo':
|
|
62
|
+
filtered = filterFormats(filtered, 'video');
|
|
63
|
+
filtered = sortFormats(filtered);
|
|
64
|
+
if (filtered.length === 0)
|
|
65
|
+
throw new Error('No video formats found.');
|
|
66
|
+
return filtered[0];
|
|
67
|
+
case 'lowestvideo':
|
|
68
|
+
filtered = filterFormats(filtered, 'video');
|
|
69
|
+
filtered = sortFormats(filtered).reverse();
|
|
70
|
+
if (filtered.length === 0)
|
|
71
|
+
throw new Error('No video formats found.');
|
|
72
|
+
return filtered[0];
|
|
73
|
+
default: {
|
|
74
|
+
const exactMatch = filtered.find((f) => f.format_id === quality ||
|
|
75
|
+
f.resolution === quality ||
|
|
76
|
+
(typeof quality === 'string' && f.resolution.includes(quality)));
|
|
77
|
+
if (!exactMatch) {
|
|
78
|
+
throw new Error(`No format found matching quality: ${quality}`);
|
|
79
|
+
}
|
|
80
|
+
return exactMatch;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "untube",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Lightweight YouTube video metadata and streaming URL extractor for Node.js. Features automatic signature decryption (n-parameter), proxy support, and cookie management. Ported from yt-dlp.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"youtube",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
],
|
|
38
38
|
"scripts": {
|
|
39
39
|
"build": "npx tsc",
|
|
40
|
-
"
|
|
40
|
+
"update-solver": "node scripts/update-solver.js",
|
|
41
41
|
"prepublishOnly": "npm run build"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"typescript": "^5.9.3"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
+
"p-limit": "^7.3.0",
|
|
49
50
|
"tough-cookie": "^6.0.1",
|
|
50
51
|
"undici": "^7.24.3"
|
|
51
52
|
}
|