From 693a77e73e984e81aee9a702092c5ef098d4e48f Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Tue, 17 Mar 2026 20:34:26 +0000 Subject: [PATCH] fix(extractor): add PixelDrain referer to HubCloud extractor --- src/extractor/HubCloud.ts | 6 +++- .../__snapshots__/HubCloud.test.ts.snap | 10 ++++-- .../__snapshots__/StreamResolver.test.ts.snap | 35 ++++++++++++++++--- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/extractor/HubCloud.ts b/src/extractor/HubCloud.ts index 8a1a33f..1657d5f 100644 --- a/src/extractor/HubCloud.ts +++ b/src/extractor/HubCloud.ts @@ -47,7 +47,10 @@ export class HubCloud extends Extractor { ...$('a') .filter((_i, el) => $(el).text().includes('PixelServer')) .map((_i, el) => { - const url = new URL(($(el).attr('href') as string).replace('/u/', '/api/file/')); + const userUrl = new URL(($(el).attr('href') as string).replace('/api/file/', '/u/')); + const url = new URL(userUrl.href.replace('/u/', '/api/file/')); + url.searchParams.set('download', ''); + return { url, format: Format.unknown, @@ -58,6 +61,7 @@ export class HubCloud extends Extractor { extractorId: `${this.id}_pixelserver`, title: $('title').text().trim(), }, + requestHeaders: { Referer: userUrl.href }, }; }).toArray(), ]); diff --git a/src/extractor/__snapshots__/HubCloud.test.ts.snap b/src/extractor/__snapshots__/HubCloud.test.ts.snap index be9f3a4..30b248e 100644 --- a/src/extractor/__snapshots__/HubCloud.test.ts.snap +++ b/src/extractor/__snapshots__/HubCloud.test.ts.snap @@ -26,8 +26,11 @@ exports[`HubCloud handle dark 2017 s03e08 1`] = ` "extractorId": "hubcloud_pixelserver", "title": "Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv", }, + "requestHeaders": { + "Referer": "https://pixeldrain.dev/u/2kFQBQio", + }, "ttl": 518400000, - "url": "https://pixeldrain.dev/api/file/2kFQBQio", + "url": "https://pixeldrain.dev/api/file/2kFQBQio?download=", }, ] `; @@ -53,8 +56,11 @@ exports[`HubCloud handle dexter original sin 2024 s01e01 1`] = ` "extractorId": "hubcloud_pixelserver", "title": "Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv", }, + "requestHeaders": { + "Referer": "https://pixeldrain.dev/u/HqAiguQV", + }, "ttl": 518400000, - "url": "https://pixeldrain.dev/api/file/HqAiguQV", + "url": "https://pixeldrain.dev/api/file/HqAiguQV?download=", }, ] `; diff --git a/src/utils/__snapshots__/StreamResolver.test.ts.snap b/src/utils/__snapshots__/StreamResolver.test.ts.snap index 54cc521..0ec3c5c 100644 --- a/src/utils/__snapshots__/StreamResolver.test.ts.snap +++ b/src/utils/__snapshots__/StreamResolver.test.ts.snap @@ -429,12 +429,17 @@ exports[`resolve skips fallback sources if possible 1`] = ` "behaviorHints": { "bingeGroup": "webstreamr-4khdhub-hubcloud_pixelserver-multi_en_hi", "notWebReady": true, + "proxyHeaders": { + "request": { + "Referer": "https://pixeldrain.dev/u/Kd5MqbDS", + }, + }, "videoSize": 19295140577, }, "name": "WebStreamr 🌐 🇺🇸 🇮🇳 2160p", "title": "Wake.Up.Dead.Man.A.Knives.Out.Mystery.2025.2160p.NF.WEB-DL.DUAL.DDP5.1.Atmos.H.265-4kHDHub.Com.mkv 💾 17.97 GB 🔗 HubCloud (PixelServer) from 4KHDHub", - "url": "https://pixeldrain.dev/api/file/Kd5MqbDS", + "url": "https://pixeldrain.dev/api/file/Kd5MqbDS?download=", }, { "behaviorHints": { @@ -451,12 +456,17 @@ exports[`resolve skips fallback sources if possible 1`] = ` "behaviorHints": { "bingeGroup": "webstreamr-4khdhub-hubcloud_pixelserver-multi_en_hi", "notWebReady": true, + "proxyHeaders": { + "request": { + "Referer": "https://pixeldrain.dev/u/h7hpWDSW", + }, + }, "videoSize": 10018011217, }, "name": "WebStreamr 🌐 🇺🇸 🇮🇳 1080p", "title": "Wake.Up.Dead.Man.A.Knives.Out.Mystery.2025.1080p.NF.WEB-DL.Hindi.DDP5.1.Atmos-English.DDP5.1.Atmos.H.265-4kHdHub.Com.mkv 💾 9.33 GB 🔗 HubCloud (PixelServer) from 4KHDHub", - "url": "https://pixeldrain.dev/api/file/h7hpWDSW", + "url": "https://pixeldrain.dev/api/file/h7hpWDSW?download=", }, { "behaviorHints": { @@ -473,12 +483,17 @@ exports[`resolve skips fallback sources if possible 1`] = ` "behaviorHints": { "bingeGroup": "webstreamr-4khdhub-hubcloud_pixelserver-multi_en_hi", "notWebReady": true, + "proxyHeaders": { + "request": { + "Referer": "https://pixeldrain.dev/u/yzyxiGzC", + }, + }, "videoSize": 9985798963, }, "name": "WebStreamr 🌐 🇺🇸 🇮🇳 1080p", "title": "Wake.Up.Dead.Man.A.Knives.Out.Mystery.2025.1080p.NF.WEB-DL.Hindi.DDP5.1.Atmos-English.DDP5.1.Atmos.H.264-4kHdHub.Com.mkv 💾 9.3 GB 🔗 HubCloud (PixelServer) from 4KHDHub", - "url": "https://pixeldrain.dev/api/file/yzyxiGzC", + "url": "https://pixeldrain.dev/api/file/yzyxiGzC?download=", }, { "behaviorHints": { @@ -495,12 +510,17 @@ exports[`resolve skips fallback sources if possible 1`] = ` "behaviorHints": { "bingeGroup": "webstreamr-4khdhub-hubcloud_pixelserver-multi_en_hi", "notWebReady": true, + "proxyHeaders": { + "request": { + "Referer": "https://pixeldrain.dev/u/gPsPz3B7", + }, + }, "videoSize": 5712306503, }, "name": "WebStreamr 🌐 🇺🇸 🇮🇳 1080p", "title": "Wake.Up.Dead.Man.A.Knives.Out.Mystery.2025.1080p.NF.WEB-DL.Hindi.DDP5.1.Atmos-English.DDP5.1.Atmos.HDR-DV.H.265-4kHdHub.Com.mkv 💾 5.32 GB 🔗 HubCloud (PixelServer) from 4KHDHub", - "url": "https://pixeldrain.dev/api/file/gPsPz3B7", + "url": "https://pixeldrain.dev/api/file/gPsPz3B7?download=", }, { "behaviorHints": { @@ -517,12 +537,17 @@ exports[`resolve skips fallback sources if possible 1`] = ` "behaviorHints": { "bingeGroup": "webstreamr-4khdhub-hubcloud_pixelserver-multi_en_hi", "notWebReady": true, + "proxyHeaders": { + "request": { + "Referer": "https://pixeldrain.dev/u/XsNetT2P", + }, + }, "videoSize": 1374389534, }, "name": "WebStreamr 🌐 🇺🇸 🇮🇳 1080p", "title": "Wake.Up.Dead.Man.A.Knives.Out.Mystery.2025.1080p.NF.WEB-DL.Hindi.AAC5.1-English.AAC5.1.AV1-4kHdHub.Com.mkv 💾 1.28 GB 🔗 HubCloud (PixelServer) from 4KHDHub", - "url": "https://pixeldrain.dev/api/file/XsNetT2P", + "url": "https://pixeldrain.dev/api/file/XsNetT2P?download=", }, ] `;