yt-dlp-bridge 0.6.0 → 0.6.1
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 +7 -0
- package/dist/progress.d.ts +10 -4
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +78 -30
- package/dist/progress.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -50,6 +50,13 @@ Requires Node.js >= 22.13 and ESM.
|
|
|
50
50
|
- Source-derived option catalog generated from `yt_dlp.options.create_parser`.
|
|
51
51
|
- ESM and TypeScript declarations.
|
|
52
52
|
|
|
53
|
+
## What changed in 0.6.1
|
|
54
|
+
|
|
55
|
+
0.6.1 requires `ytdlp-errors` 1.5.0.
|
|
56
|
+
|
|
57
|
+
- `requested-formats` events carry `filesizeFromBitrate`: bitrate × duration, as yt-dlp's `filesize_from_tbr`. yt-dlp leaves `filesize_approx` empty for a fragmented (HLS/DASH manifest) stream, so this is all such a stream has before it starts. `YT_DLP_REQUESTED_FORMATS_TEMPLATE` now also prints `tbr` and the duration.
|
|
58
|
+
- `YtDlpDownloadProgressTracker` weighs each stream by the best size known for it (exact, an estimate from its finished fragments, `filesizeApprox`, then `filesizeFromBitrate`), and a stream with none by the mean of the others; equal shares remain only when no size is known. A stream of unknown size moves by its fragments, and the percent never goes back when a size turns out larger. Before, a small video then an HLS audio held at 50% through the audio's first fragment, then fell back.
|
|
59
|
+
|
|
53
60
|
## What changed in 0.6.0
|
|
54
61
|
|
|
55
62
|
0.6.0 contains breaking changes and requires `ytdlp-errors` 1.4.0.
|
package/dist/progress.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { type YtDlpDownloadStatus } from './schemas.js';
|
|
|
2
2
|
export declare const YT_DLP_PROGRESS_PREFIX = "[yt-dlp-bridge:progress]";
|
|
3
3
|
export declare const YT_DLP_REQUESTED_FORMATS_PREFIX = "[yt-dlp-bridge:formats]";
|
|
4
4
|
export declare const YT_DLP_PROGRESS_TEMPLATE = "[yt-dlp-bridge:progress] {\"progress\":%(progress.{status,downloaded_bytes,total_bytes,total_bytes_estimate,speed,eta,elapsed,fragment_index,fragment_count})j,\"format_id\":%(info.format_id|null)j}";
|
|
5
|
-
export declare const YT_DLP_REQUESTED_FORMATS_TEMPLATE = "[yt-dlp-bridge:formats] {\"format_id\":%(format_id|null)j,\"filesize\":%(filesize|null)j,\"filesize_approx\":%(filesize_approx|null)j,\"requested\":%(requested_formats.:.{format_id,filesize,filesize_approx}|null)j}";
|
|
5
|
+
export declare const YT_DLP_REQUESTED_FORMATS_TEMPLATE = "[yt-dlp-bridge:formats] {\"format_id\":%(format_id|null)j,\"filesize\":%(filesize|null)j,\"filesize_approx\":%(filesize_approx|null)j,\"tbr\":%(tbr|null)j,\"duration\":%(duration|null)j,\"requested\":%(requested_formats.:.{format_id,filesize,filesize_approx,tbr}|null)j}";
|
|
6
6
|
export interface YtDlpDownloadProgress {
|
|
7
7
|
status: YtDlpDownloadStatus;
|
|
8
8
|
formatId?: string;
|
|
@@ -19,6 +19,7 @@ export interface YtDlpRequestedFormat {
|
|
|
19
19
|
formatId: string;
|
|
20
20
|
filesize?: number;
|
|
21
21
|
filesizeApprox?: number;
|
|
22
|
+
filesizeFromBitrate?: number;
|
|
22
23
|
}
|
|
23
24
|
export declare function parseProgressLine(line: string): YtDlpDownloadProgress | null;
|
|
24
25
|
export declare function parseRequestedFormatsLine(line: string): YtDlpRequestedFormat[] | null;
|
|
@@ -32,12 +33,17 @@ export interface CombinedDownloadProgress {
|
|
|
32
33
|
* download fetches its requested formats one after another, each reporting
|
|
33
34
|
* progress from 0% on its own; this weighs each by its size so the audio after
|
|
34
35
|
* the video counts. A stream's size is the first known of: its exact size from
|
|
35
|
-
* live progress, its exact size from the requested formats,
|
|
36
|
-
*
|
|
37
|
-
*
|
|
36
|
+
* live progress, its exact size from the requested formats, an estimate from
|
|
37
|
+
* its finished fragments, its approximate size from the requested formats, its
|
|
38
|
+
* bitrate × duration. A stream with none of these weighs as the mean of the
|
|
39
|
+
* others; when no size is known at all, every stream gets an equal share.
|
|
40
|
+
*
|
|
41
|
+
* Sizes learned along the way can shift the shares; the percent never goes
|
|
42
|
+
* back, and holds until the download catches up with it.
|
|
38
43
|
*/
|
|
39
44
|
export declare class YtDlpDownloadProgressTracker {
|
|
40
45
|
private streams;
|
|
46
|
+
private shownPercent;
|
|
41
47
|
setRequestedFormats(formats: readonly YtDlpRequestedFormat[]): void;
|
|
42
48
|
update(progress: YtDlpDownloadProgress): CombinedDownloadProgress;
|
|
43
49
|
}
|
package/dist/progress.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,mBAAmB,EAAC,MAAM,cAAc,CAAA;AAQhF,eAAO,MAAM,sBAAsB,6BAA6B,CAAA;AAChE,eAAO,MAAM,+BAA+B,4BAA4B,CAAA;AAOxE,eAAO,MAAM,wBAAwB,0MAAiH,CAAA;AAKtJ,eAAO,MAAM,iCAAiC,
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,mBAAmB,EAAC,MAAM,cAAc,CAAA;AAQhF,eAAO,MAAM,sBAAsB,6BAA6B,CAAA;AAChE,eAAO,MAAM,+BAA+B,4BAA4B,CAAA;AAOxE,eAAO,MAAM,wBAAwB,0MAAiH,CAAA;AAKtJ,eAAO,MAAM,iCAAiC,mRAA4P,CAAA;AAE1S,MAAM,WAAW,qBAAqB;IACrC,MAAM,EAAE,mBAAmB,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IAIvB,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC5B;AA8BD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAkB5E;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,EAAE,GAAG,IAAI,CAUrF;AAED,MAAM,WAAW,wBAAwB;IAExC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB;AAkED;;;;;;;;;;;;GAYG;AACH,qBAAa,4BAA4B;IACxC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,YAAY,CAAI;IAExB,mBAAmB,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI;IAgBnE,MAAM,CAAC,QAAQ,EAAE,qBAAqB,GAAG,wBAAwB;CA0BjE"}
|
package/dist/progress.js
CHANGED
|
@@ -9,14 +9,14 @@ import { YtDlpDownloadStatusSchema } from './schemas.js';
|
|
|
9
9
|
export const YT_DLP_PROGRESS_PREFIX = '[yt-dlp-bridge:progress]';
|
|
10
10
|
export const YT_DLP_REQUESTED_FORMATS_PREFIX = '[yt-dlp-bridge:formats]';
|
|
11
11
|
const PROGRESS_FIELDS = 'status,downloaded_bytes,total_bytes,total_bytes_estimate,speed,eta,elapsed,fragment_index,fragment_count';
|
|
12
|
-
const FORMAT_FIELDS = 'format_id,filesize,filesize_approx';
|
|
12
|
+
const FORMAT_FIELDS = 'format_id,filesize,filesize_approx,tbr';
|
|
13
13
|
// `--progress-template download:…`. `info` is the dict of the stream being
|
|
14
14
|
// downloaded, so `info.format_id` names one stream of a merged download.
|
|
15
15
|
export const YT_DLP_PROGRESS_TEMPLATE = `${YT_DLP_PROGRESS_PREFIX} {"progress":%(progress.{${PROGRESS_FIELDS}})j,"format_id":%(info.format_id|null)j}`;
|
|
16
16
|
// `--print before_dl:…`, once per video before any stream downloads.
|
|
17
17
|
// `requested_formats` lists the streams of a merged download in the order yt-dlp
|
|
18
18
|
// downloads them; a single-stream download has none and its own fields instead.
|
|
19
|
-
export const YT_DLP_REQUESTED_FORMATS_TEMPLATE = `${YT_DLP_REQUESTED_FORMATS_PREFIX} {"format_id":%(format_id|null)j,"filesize":%(filesize|null)j,"filesize_approx":%(filesize_approx|null)j,"requested":%(requested_formats.:.{${FORMAT_FIELDS}}|null)j}`;
|
|
19
|
+
export const YT_DLP_REQUESTED_FORMATS_TEMPLATE = `${YT_DLP_REQUESTED_FORMATS_PREFIX} {"format_id":%(format_id|null)j,"filesize":%(filesize|null)j,"filesize_approx":%(filesize_approx|null)j,"tbr":%(tbr|null)j,"duration":%(duration|null)j,"requested":%(requested_formats.:.{${FORMAT_FIELDS}}|null)j}`;
|
|
20
20
|
// yt-dlp prints `null` for a field it does not know; absent and null mean the
|
|
21
21
|
// same. A negative value is dropped on its own (an ETA computed from a fragment
|
|
22
22
|
// estimate that undercuts the bytes so far), so it cannot discard the record.
|
|
@@ -30,8 +30,8 @@ const formatId = z
|
|
|
30
30
|
.nullish()
|
|
31
31
|
.transform(value => value ?? undefined);
|
|
32
32
|
const progressLineSchema = z.object({ progress: z.object({ status: YtDlpDownloadStatusSchema, downloaded_bytes: count, total_bytes: count, total_bytes_estimate: count, speed: count, eta: count, elapsed: count, fragment_index: count, fragment_count: count }), format_id: formatId });
|
|
33
|
-
const requestedFormatSchema = z.object({ format_id: z.string().min(1), filesize: count, filesize_approx: count });
|
|
34
|
-
const requestedFormatsLineSchema = z.object({ format_id: formatId, filesize: count, filesize_approx: count, requested: z.array(requestedFormatSchema).nullish() });
|
|
33
|
+
const requestedFormatSchema = z.object({ format_id: z.string().min(1), filesize: count, filesize_approx: count, tbr: count });
|
|
34
|
+
const requestedFormatsLineSchema = z.object({ format_id: formatId, filesize: count, filesize_approx: count, tbr: count, duration: count, requested: z.array(requestedFormatSchema).nullish() });
|
|
35
35
|
function jsonAfter(line, prefix) {
|
|
36
36
|
if (!line.startsWith(prefix))
|
|
37
37
|
return undefined;
|
|
@@ -66,8 +66,11 @@ export function parseRequestedFormatsLine(line) {
|
|
|
66
66
|
const parsed = requestedFormatsLineSchema.safeParse(jsonAfter(line, YT_DLP_REQUESTED_FORMATS_PREFIX));
|
|
67
67
|
if (!parsed.success)
|
|
68
68
|
return null;
|
|
69
|
-
const
|
|
70
|
-
const
|
|
69
|
+
const { requested, format_id: id, duration } = parsed.data;
|
|
70
|
+
const toFormat = (id, format) => ({
|
|
71
|
+
formatId: id,
|
|
72
|
+
...definedFields({ filesize: format.filesize, filesizeApprox: format.filesize_approx, filesizeFromBitrate: format.tbr && duration ? Math.trunc(duration * format.tbr * 125) : undefined })
|
|
73
|
+
});
|
|
71
74
|
if (requested?.length)
|
|
72
75
|
return requested.map(format => toFormat(format.format_id, format));
|
|
73
76
|
return id ? [toFormat(id, parsed.data)] : null;
|
|
@@ -77,12 +80,6 @@ export function parseRequestedFormatsLine(line) {
|
|
|
77
80
|
function usableEstimate(progress) {
|
|
78
81
|
return progress.fragmentIndex === 0 ? undefined : progress.totalBytesEstimate;
|
|
79
82
|
}
|
|
80
|
-
// A fragmented stream reports its exact size only once finished, and its live
|
|
81
|
-
// estimate follows the real stream, while a format list's approximate size can
|
|
82
|
-
// be far off: an underestimate would read as complete early.
|
|
83
|
-
function streamSize(stream) {
|
|
84
|
-
return stream.totalBytes ?? stream.plannedBytes ?? stream.estimatedBytes ?? stream.approxBytes;
|
|
85
|
-
}
|
|
86
83
|
function streamPercent(progress) {
|
|
87
84
|
if (progress.status === 'finished')
|
|
88
85
|
return 100;
|
|
@@ -91,19 +88,72 @@ function streamPercent(progress) {
|
|
|
91
88
|
return undefined;
|
|
92
89
|
return Math.min(100, (progress.downloadedBytes / size) * 100);
|
|
93
90
|
}
|
|
91
|
+
// The finished fragments' average size times their count. yt-dlp's own
|
|
92
|
+
// `total_bytes_estimate` adds the fragment in flight as if it were whole, and
|
|
93
|
+
// swings with every one (in a captured run, from 530 KiB to 180 KiB for a
|
|
94
|
+
// 302 KiB stream).
|
|
95
|
+
function fragmentEstimate(stream) {
|
|
96
|
+
const { fragmentIndex, fragmentCount, finishedFragmentBytes } = stream;
|
|
97
|
+
if (!fragmentIndex || !fragmentCount || !finishedFragmentBytes)
|
|
98
|
+
return undefined;
|
|
99
|
+
return (finishedFragmentBytes / fragmentIndex) * fragmentCount;
|
|
100
|
+
}
|
|
101
|
+
function exactSize(stream) {
|
|
102
|
+
return stream.totalBytes ?? stream.plannedBytes;
|
|
103
|
+
}
|
|
104
|
+
// A fragmented stream reports its exact size only once finished, and its live
|
|
105
|
+
// estimate follows the real stream, while a format list's approximate size can
|
|
106
|
+
// be far off.
|
|
107
|
+
function streamSize(stream) {
|
|
108
|
+
return exactSize(stream) ?? fragmentEstimate(stream) ?? stream.approxBytes ?? stream.bitrateBytes;
|
|
109
|
+
}
|
|
110
|
+
// How much of a stream is on disk, 0–1. Without an exact size, a fragmented
|
|
111
|
+
// stream goes by its fragments, so an estimate that undershoots cannot read as
|
|
112
|
+
// complete before its last fragment.
|
|
113
|
+
function streamFraction(stream) {
|
|
114
|
+
if (stream.done)
|
|
115
|
+
return 1;
|
|
116
|
+
const exact = exactSize(stream);
|
|
117
|
+
if (exact)
|
|
118
|
+
return Math.min(1, stream.downloadedBytes / exact);
|
|
119
|
+
const { fragmentIndex, fragmentCount } = stream;
|
|
120
|
+
if (fragmentIndex !== undefined && fragmentCount) {
|
|
121
|
+
const estimate = fragmentEstimate(stream);
|
|
122
|
+
return estimate ? Math.min((fragmentIndex + 1) / fragmentCount, stream.downloadedBytes / estimate) : fragmentIndex / fragmentCount;
|
|
123
|
+
}
|
|
124
|
+
const size = streamSize(stream);
|
|
125
|
+
return size ? Math.min(1, stream.downloadedBytes / size) : 0;
|
|
126
|
+
}
|
|
94
127
|
/**
|
|
95
128
|
* One percent over every stream yt-dlp downloads for a video. A merged
|
|
96
129
|
* download fetches its requested formats one after another, each reporting
|
|
97
130
|
* progress from 0% on its own; this weighs each by its size so the audio after
|
|
98
131
|
* the video counts. A stream's size is the first known of: its exact size from
|
|
99
|
-
* live progress, its exact size from the requested formats,
|
|
100
|
-
*
|
|
101
|
-
*
|
|
132
|
+
* live progress, its exact size from the requested formats, an estimate from
|
|
133
|
+
* its finished fragments, its approximate size from the requested formats, its
|
|
134
|
+
* bitrate × duration. A stream with none of these weighs as the mean of the
|
|
135
|
+
* others; when no size is known at all, every stream gets an equal share.
|
|
136
|
+
*
|
|
137
|
+
* Sizes learned along the way can shift the shares; the percent never goes
|
|
138
|
+
* back, and holds until the download catches up with it.
|
|
102
139
|
*/
|
|
103
140
|
export class YtDlpDownloadProgressTracker {
|
|
104
141
|
streams = [];
|
|
142
|
+
shownPercent = 0;
|
|
105
143
|
setRequestedFormats(formats) {
|
|
106
|
-
this.streams = formats.map(format => ({
|
|
144
|
+
this.streams = formats.map(format => ({
|
|
145
|
+
formatId: format.formatId,
|
|
146
|
+
plannedBytes: format.filesize,
|
|
147
|
+
approxBytes: format.filesizeApprox,
|
|
148
|
+
bitrateBytes: format.filesizeFromBitrate,
|
|
149
|
+
downloadedBytes: 0,
|
|
150
|
+
totalBytes: undefined,
|
|
151
|
+
fragmentIndex: undefined,
|
|
152
|
+
fragmentCount: undefined,
|
|
153
|
+
finishedFragmentBytes: undefined,
|
|
154
|
+
done: false
|
|
155
|
+
}));
|
|
156
|
+
this.shownPercent = 0;
|
|
107
157
|
}
|
|
108
158
|
update(progress) {
|
|
109
159
|
const index = progress.formatId === undefined ? -1 : this.streams.findIndex(stream => stream.formatId === progress.formatId);
|
|
@@ -115,24 +165,22 @@ export class YtDlpDownloadProgressTracker {
|
|
|
115
165
|
// the only sign the streams before this one are complete.
|
|
116
166
|
for (const earlier of this.streams.slice(0, index))
|
|
117
167
|
earlier.done = true;
|
|
168
|
+
if (progress.fragmentIndex !== undefined && progress.fragmentIndex !== stream.fragmentIndex)
|
|
169
|
+
stream.finishedFragmentBytes = progress.downloadedBytes;
|
|
118
170
|
stream.downloadedBytes = progress.downloadedBytes ?? stream.downloadedBytes;
|
|
119
171
|
stream.totalBytes = progress.totalBytes ?? stream.totalBytes;
|
|
120
|
-
stream.
|
|
172
|
+
stream.fragmentIndex = progress.fragmentIndex ?? stream.fragmentIndex;
|
|
173
|
+
stream.fragmentCount = progress.fragmentCount ?? stream.fragmentCount;
|
|
121
174
|
stream.done = progress.status === 'finished';
|
|
122
175
|
const sizes = this.streams.map(streamSize);
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
if (each.done)
|
|
132
|
-
return 1;
|
|
133
|
-
return size ? Math.min(1, each.downloadedBytes / size) : 0;
|
|
134
|
-
});
|
|
135
|
-
return { percent: (shares.reduce((sum, share) => sum + share, 0) / shares.length) * 100, ...transfer };
|
|
176
|
+
const known = sizes.filter((size) => size !== undefined && size > 0);
|
|
177
|
+
const fallback = known.length ? known.reduce((sum, size) => sum + size, 0) / known.length : 1;
|
|
178
|
+
const weights = sizes.map(size => (size && size > 0 ? size : fallback));
|
|
179
|
+
const total = weights.reduce((sum, weight) => sum + weight, 0);
|
|
180
|
+
const done = this.streams.reduce((sum, each, i) => sum + streamFraction(each) * (weights[i] ?? 0), 0);
|
|
181
|
+
this.shownPercent = Math.max(this.shownPercent, (done / total) * 100);
|
|
182
|
+
const eta = known.length === sizes.length && progress.speedBps && progress.status !== 'finished' ? { etaSeconds: (total - done) / progress.speedBps } : {};
|
|
183
|
+
return { percent: this.shownPercent, ...transfer, ...eta };
|
|
136
184
|
}
|
|
137
185
|
}
|
|
138
186
|
//# sourceMappingURL=progress.js.map
|
package/dist/progress.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAA;AACrB,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AACzC,OAAO,EAAC,yBAAyB,EAA2B,MAAM,cAAc,CAAA;AAEhF,uEAAuE;AACvE,4EAA4E;AAC5E,2EAA2E;AAC3E,8EAA8E;AAC9E,mFAAmF;AAEnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAA;AAChE,MAAM,CAAC,MAAM,+BAA+B,GAAG,yBAAyB,CAAA;AAExE,MAAM,eAAe,GAAG,0GAA0G,CAAA;AAClI,MAAM,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yt-dlp-bridge",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "TypeScript library for safe, no-shell yt-dlp integration: workflow planning, argv generation, process execution, output parsing, and structured errors.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"argv",
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"pack:dry-run": "bun pm pack --dry-run"
|
|
110
110
|
},
|
|
111
111
|
"dependencies": {
|
|
112
|
-
"ytdlp-errors": "1.
|
|
112
|
+
"ytdlp-errors": "1.5.0",
|
|
113
113
|
"zod": "4.6.7"
|
|
114
114
|
},
|
|
115
115
|
"devDependencies": {
|