feat(extractor): add new MediaFlow Proxy extractors FileMoon, LuluStream and Voe

This commit is contained in:
WebStreamr 2025-10-06 12:52:59 +00:00
parent d1493cbb57
commit bb21bbc7fa
No known key found for this signature in database
23 changed files with 1688 additions and 0 deletions

View file

@ -0,0 +1,20 @@
import winston from 'winston';
import { createTestContext } from '../test';
import { FetcherMock } from '../utils';
import { ExtractorRegistry } from './ExtractorRegistry';
import { FileMoon } from './FileMoon';
const logger = winston.createLogger({ transports: [new winston.transports.Console({ level: 'nope' })] });
const extractorRegistry = new ExtractorRegistry(logger, [new FileMoon(new FetcherMock(`${__dirname}/__fixtures__/FileMoon`))]);
const ctx = createTestContext({ mediaFlowProxyUrl: 'https://mediaflow.test.org', mediaFlowProxyPassword: 'test' });
describe('FileMoon', () => {
test('z1ekv717 d', async () => {
expect(await extractorRegistry.handle(ctx, new URL('https://z1ekv717.fun/d/wkhcbggdxf1d'))).toMatchSnapshot();
});
test('page not found', async () => {
expect(await extractorRegistry.handle(ctx, new URL('https://filemoon.sx/e/n7i8zodwjqr9'))).toMatchSnapshot();
});
});

73
src/extractor/FileMoon.ts Normal file
View file

@ -0,0 +1,73 @@
import * as cheerio from 'cheerio';
import { NotFoundError } from '../error';
import { Context, Format, Meta, UrlResult } from '../types';
import { buildMediaFlowProxyExtractorStreamUrl, guessHeightFromPlaylist, supportsMediaFlowProxy } from '../utils';
import { Extractor } from './Extractor';
/** @see https://github.com/Gujal00/ResolveURL/blob/master/script.module.resolveurl/lib/resolveurl/plugins/filemoon.py */
export class FileMoon extends Extractor {
public readonly id = 'filemoon';
public readonly label = 'FileMoon (via MediaFlow Proxy)';
public override viaMediaFlowProxy = true;
public supports(ctx: Context, url: URL): boolean {
const supportedDomain = null !== url.host.match(/filemoon/)
|| [
'1azayf9w.xyz',
'222i8x.lol',
'81u6xl9d.xyz',
'8mhlloqo.fun',
'96ar.com',
'bf0skv.org',
'boosteradx.online',
'c1z39.com',
'cinegrab.com',
'f51rm.com',
'furher.in',
'kerapoxy.cc',
'l1afav.net',
'moonmov.pro',
'smdfs40r.skin',
'xcoic.com',
'z1ekv717.fun',
].includes(url.host);
return supportedDomain && supportsMediaFlowProxy(ctx);
}
public override normalize(url: URL): URL {
return new URL(url.href.replace('/e/', '/d/'));
}
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
const headers = { Referer: meta.referer ?? url.href };
const html = await this.fetcher.text(ctx, url, { headers });
if (/Page not found/.test(html)) {
throw new NotFoundError();
}
const playlistUrl = await buildMediaFlowProxyExtractorStreamUrl(ctx, this.fetcher, 'FileMoon', url, headers);
const $ = cheerio.load(html);
const title = $('h3').text().trim();
return [
{
url: playlistUrl,
format: Format.hls,
label: this.label,
sourceId: `${this.id}_${meta.countryCodes?.join('_')}`,
ttl: this.ttl,
meta: {
...meta,
height: await guessHeightFromPlaylist(ctx, this.fetcher, playlistUrl, { queueLimit: 4 }),
title,
},
},
];
};
}

View file

@ -0,0 +1,20 @@
import winston from 'winston';
import { createTestContext } from '../test';
import { FetcherMock } from '../utils';
import { ExtractorRegistry } from './ExtractorRegistry';
import { LuluStream } from './LuluStream';
const logger = winston.createLogger({ transports: [new winston.transports.Console({ level: 'nope' })] });
const extractorRegistry = new ExtractorRegistry(logger, [new LuluStream(new FetcherMock(`${__dirname}/__fixtures__/LuluStream`))]);
const ctx = createTestContext({ mediaFlowProxyUrl: 'https://mediaflow.test.org', mediaFlowProxyPassword: 'test' });
describe('LuluStream', () => {
test('streamhihi d', async () => {
expect(await extractorRegistry.handle(ctx, new URL('https://streamhihi.com/d/mk9m58lz8ts6'))).toMatchSnapshot();
});
test('no such file', async () => {
expect(await extractorRegistry.handle(ctx, new URL('https://lulustream.com/e/uthq0o0sljnx'))).toMatchSnapshot();
});
});

View file

@ -0,0 +1,65 @@
import bytes from 'bytes';
import * as cheerio from 'cheerio';
import { NotFoundError } from '../error';
import { Context, Format, Meta, UrlResult } from '../types';
import { buildMediaFlowProxyExtractorStreamUrl, guessHeightFromPlaylist, supportsMediaFlowProxy } from '../utils';
import { Extractor } from './Extractor';
/** @see https://github.com/Gujal00/ResolveURL/blob/master/script.module.resolveurl/lib/resolveurl/plugins/lulustream.py */
export class LuluStream extends Extractor {
public readonly id = 'lulustream';
public readonly label = 'LuluStream (via MediaFlow Proxy)';
public override viaMediaFlowProxy = true;
public supports(ctx: Context, url: URL): boolean {
const supportedDomain = null !== url.host.match(/lulu/)
|| [
'732eg54de642sa.sbs',
'cdn1.site',
'd00ds.site',
'streamhihi.com',
].includes(url.host);
return supportedDomain && supportsMediaFlowProxy(ctx);
}
public override normalize(url: URL): URL {
return new URL(url.href.replace('/d/', '/e/'));
}
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
const headers = { Referer: meta.referer ?? url.href };
const fileUrl = new URL(url.href.replace('/e/', '/d/'));
const html = await this.fetcher.text(ctx, fileUrl, { headers });
if (/No such file/.test(html)) {
throw new NotFoundError();
}
const $ = cheerio.load(html);
const title = $('h1').text().trim();
const sizeMatch = html.match(/([\d.]+ ?[GM]B)/) as string[];
const playlistUrl = await buildMediaFlowProxyExtractorStreamUrl(ctx, this.fetcher, 'LuluStream', url, headers);
return [
{
url: playlistUrl,
format: Format.hls,
label: this.label,
sourceId: `${this.id}_${meta.countryCodes?.join('_')}`,
ttl: this.ttl,
meta: {
...meta,
bytes: bytes.parse(sizeMatch[1] as string) as number,
height: await guessHeightFromPlaylist(ctx, this.fetcher, playlistUrl, { queueLimit: 4 }),
title,
},
},
];
};
}

20
src/extractor/Voe.test.ts Normal file
View file

@ -0,0 +1,20 @@
import winston from 'winston';
import { createTestContext } from '../test';
import { FetcherMock } from '../utils';
import { ExtractorRegistry } from './ExtractorRegistry';
import { Voe } from './Voe';
const logger = winston.createLogger({ transports: [new winston.transports.Console({ level: 'nope' })] });
const extractorRegistry = new ExtractorRegistry(logger, [new Voe(new FetcherMock(`${__dirname}/__fixtures__/Voe`))]);
const ctx = createTestContext({ mediaFlowProxyUrl: 'https://mediaflow.test.org', mediaFlowProxyPassword: 'test' });
describe('Voe', () => {
test('jilliandescribecompany', async () => {
expect(await extractorRegistry.handle(ctx, new URL('https://jilliandescribecompany.com/e/ea21l02gcygw'))).toMatchSnapshot();
});
test('encoding error', async () => {
expect(await extractorRegistry.handle(ctx, new URL('https://voe.sx/e/c2yxvit4f6bz'))).toMatchSnapshot();
});
});

151
src/extractor/Voe.ts Normal file
View file

@ -0,0 +1,151 @@
import * as cheerio from 'cheerio';
import { NotFoundError } from '../error';
import { Context, Format, Meta, UrlResult } from '../types';
import { buildMediaFlowProxyExtractorStreamUrl, guessHeightFromPlaylist, supportsMediaFlowProxy } from '../utils';
import { Extractor } from './Extractor';
/** @see https://github.com/Gujal00/ResolveURL/blob/master/script.module.resolveurl/lib/resolveurl/plugins/voesx.py */
export class Voe extends Extractor {
public readonly id = 'voe';
public readonly label = 'VOE (via MediaFlow Proxy)';
public override viaMediaFlowProxy = true;
public supports(ctx: Context, url: URL): boolean {
const supportedDomain = null !== url.host.match(/voe/)
|| [
'19turanosephantasia.com',
'20demidistance9elongations.com',
'30sensualizeexpression.com',
'321naturelikefurfuroid.com',
'35volitantplimsoles5.com',
'449unceremoniousnasoseptal.com',
'745mingiestblissfully.com',
'adrianmissionminute.com',
'alleneconomicmatter.com',
'antecoxalbobbing1010.com',
'apinchcaseation.com',
'audaciousdefaulthouse.com',
'availedsmallest.com',
'bigclatterhomesguideservice.com',
'boonlessbestselling244.com',
'bradleyviewdoctor.com',
'brittneystandardwestern.com',
'brucevotewithin.com',
'chromotypic.com',
'chuckle-tube.com',
'cindyeyefinal.com',
'counterclockwisejacky.com',
'crownmakermacaronicism.com',
'cyamidpulverulence530.com',
'diananatureforeign.com',
'donaldlineelse.com',
'edwardarriveoften.com',
'erikcoldperson.com',
'figeterpiazine.com',
'fittingcentermondaysunday.com',
'fraudclatterflyingcar.com',
'gamoneinterrupted.com',
'generatesnitrosate.com',
'graceaddresscommunity.com',
'greaseball6eventual20.com',
'guidon40hyporadius9.com',
'heatherdiscussionwhen.com',
'housecardsummerbutton.com',
'jamessoundcost.com',
'jamiesamewalk.com',
'jasminetesttry.com',
'jayservicestuff.com',
'jennifercertaindevelopment.com',
'jilliandescribecompany.com',
'johnalwayssame.com',
'jonathansociallike.com',
'josephseveralconcern.com',
'kathleenmemberhistory.com',
'kellywhatcould.com',
'kennethofficialitem.com',
'kristiesoundsimply.com',
'launchreliantcleaverriver.com',
'lisatrialidea.com',
'loriwithinfamily.com',
'lukecomparetwo.com',
'mariatheserepublican.com',
'matriculant401merited.com',
'maxfinishseveral.com',
'metagnathtuggers.com',
'michaelapplysome.com',
'nathanfromsubject.com',
'nectareousoverelate.com',
'nonesnanking.com',
'paulkitchendark.com',
'realfinanceblogcenter.com',
'rebeccaneverbase.com',
'reputationsheriffkennethsand.com',
'richardsignfish.com',
'roberteachfinal.com',
'robertordercharacter.com',
'robertplacespace.com',
'sandratableother.com',
'sandrataxeight.com',
'scatch176duplicities.com',
'sethniceletter.com',
'shannonpersonalcost.com',
'simpulumlamerop.com',
'stevenimaginelittle.com',
'strawberriesporail.com',
'telyn610zoanthropy.com',
'timberwoodanotia.com',
'toddpartneranimal.com',
'toxitabellaeatrebates306.com',
'uptodatefinishconferenceroom.com',
'v-o-e-unblock.com',
'valeronevijao.com',
'wolfdyslectic.com',
'yodelswartlike.com',
].includes(url.host);
return supportedDomain && supportsMediaFlowProxy(ctx);
}
public override normalize(url: URL): URL {
const videoId = url.pathname.split('/').slice(-1)[0] as string;
return new URL(`/e/${videoId}`, url);
}
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
const headers = { Referer: meta.referer ?? url.href };
const html = await this.fetcher.text(ctx, url, { headers });
const redirectMatch = html.match(/window\.location\.href\s*=\s*'([^']+)/);
if (redirectMatch && redirectMatch[1]) {
return await this.extractInternal(ctx, new URL(redirectMatch[1]), meta);
}
if (/An error occurred during encoding/.test(html)) {
throw new NotFoundError();
}
const $ = cheerio.load(html);
const title = $('meta[name="description"]').attr('content')?.trim().replace(/^Watch /, '').replace(/ at VOE$/, '').trim();
const playlistUrl = await buildMediaFlowProxyExtractorStreamUrl(ctx, this.fetcher, 'Voe', url, headers);
return [
{
url: playlistUrl,
format: Format.hls,
label: this.label,
sourceId: `${this.id}_${meta.countryCodes?.join('_')}`,
ttl: this.ttl,
meta: {
...meta,
height: await guessHeightFromPlaylist(ctx, this.fetcher, playlistUrl, { queueLimit: 4 }),
title,
},
},
];
};
}

View file

@ -0,0 +1,57 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script>
(function () {
// Get all script tags in the <head>
const scripts = document.head.querySelectorAll('script');
// Iterate through the scripts to find the one injecting the Proxy
scripts.forEach((script) => {
if (script.innerHTML.includes('window.open=new Proxy(window.open')) {
console.log('Detected and removing injected script:', script);
script.remove(); // Remove the script from the <head>
}
});
// Restore the original window.open functionality (optional)
const originalOpen = Function.prototype.apply.bind(window.open);
window.open = function (...args) {
console.log('Restored window.open called:', args);
return originalOpen(this, args);
};
console.log('Injected script removed and window.open restored.');
})();
</script>
<title>Not Found</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/assets/css/404.css?v=2">
<link rel="apple-touch-icon" href="https://filemoon.to/assets/images/favicon/apple-touch-icon.png" sizes="180x180">
<link rel="icon" href="https://filemoon.to/assets/images/favicon/favicon-32x32.png" sizes="32x32">
<link rel="icon" href="https://filemoon.to/assets/images/favicon/favicon-16x16.png" sizes="16x16">
<link rel="icon" href="https://filemoon.to/assets/images/favicon/favicon.ico">
</head>
<body>
</body>
<script src="/ad.js" type="text/javascript"></script>
<div id="adb" class="ad doubleclick skyscraper" style="height:1px;width:1px;position:absolute;left:-999px;top:-999px;">ad</div>
<script>
window.fmn7i8zodwjqr9 = { token: "bed5d8dfa2e30a9a04", adblock: false, blockadblock: true, fileid: "n7i8zodwjqr9", ampallow: false };
</script>
<div class="container">
<div class="error e404">
<div class="error-footer">
<h1>Page not found</h1>
<a href="/" class="button">Return home</a>
</div>
</div>
</div>
</html>

View file

@ -0,0 +1,4 @@
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=853331,RESOLUTION=1280x720,FRAME-RATE=24.000,CODECS="avc1.64001f,mp4a.40.2",VIDEO-RANGE=SDR
https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fz1ekv717.fun%2Fd%2Fwkhcbggdxf1d&d=https%3A%2F%2Fbe7713.rcr82.waw05.i8yz83pn.com%2Fhls2%2F01%2F09665%2Fwkhcbggdxf1d_h%2Findex-v1-a1.m3u8%3Ft%3D359izbQ_L-sOHaIjj275YKdBDyiPzUi3ETfbNoN9bzU%26s%3D1759754698%26e%3D10800%26f%3D48329866%26srv%3D1075%26asn%3D13335%26sp%3D4000%26p%3D
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=49442,RESOLUTION=1280x720,CODECS="avc1.64001f",URI="https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fz1ekv717.fun%2Fd%2Fwkhcbggdxf1d&d=https%3A%2F%2Fbe7713.rcr82.waw05.i8yz83pn.com%2Fhls2%2F01%2F09665%2Fwkhcbggdxf1d_h%2Fiframes-v1-a1.m3u8%3Ft%3D359izbQ_L-sOHaIjj275YKdBDyiPzUi3ETfbNoN9bzU%26s%3D1759754698%26e%3D10800%26f%3D48329866%26srv%3D1075%26asn%3D13335%26sp%3D4000%26p%3D",VIDEO-RANGE=SDR

View file

@ -0,0 +1 @@
{"destination_url":"https://be7713.rcr82.waw05.i8yz83pn.com/hls2/01/09665/wkhcbggdxf1d_h/master.m3u8?t=359izbQ_L-sOHaIjj275YKdBDyiPzUi3ETfbNoN9bzU&s=1759754698&e=10800&f=48329866&srv=1075&asn=13335&sp=4000&p=","request_headers":{"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","referer":"https://z1ekv717.fun/d/wkhcbggdxf1d"},"mediaflow_proxy_url":"https://mediaflow.test.org/proxy/hls/manifest.m3u8","query_params":{"api_password":"test"}}

View file

@ -0,0 +1,226 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Watch alien earth s01e01 1080p web h264 successfulcrab</title>
<meta name="description" content="">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#FFF">
<link rel="apple-touch-icon" href="//z1ekv717.fun/assets/images/favicon/apple-touch-icon.png" sizes="180x180">
<link rel="icon" href="//z1ekv717.fun/assets/images/favicon/favicon-32x32.png" sizes="32x32">
<link rel="icon" href="//z1ekv717.fun/assets/images/favicon/favicon-16x16.png" sizes="16x16">
<link rel="icon" href="//z1ekv717.fun/assets/images/favicon/favicon.ico">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="//z1ekv717.fun/assets/css/front.css?v=51">
<META NAME="description" CONTENT="Watch video alien earth s01e01 1080p web h264 successfulcrab">
<META NAME="keywords" CONTENT="alien, earth, s01e01, 1080p, web, h264, successfulcrab">
<meta name="robots" content="noindex, nofollow">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body class="is-home d-flex flex-column justify-content-between ">
<header class="header py-3 py-lg-4">
<div class="container">
<div class="row align-items-center justify-content-between justify-content-lg-start">
<div class="col-auto d-lg-none">
<button class="btn text-muted ssm-toggle-nav px-1" type="button">
<i class="icon icon-menu icon-size-22 text-muted"></i>
</button>
</div>
<div class="col-auto">
<a href="/" class="logo d-block"><img src="//z1ekv717.fun/assets/images/logo.svg" alt=""></a>
</div>
<div class="col-auto d-none d-lg-block flex-lg-grow-1">
<nav class="nav ml-lg-3">
<a class="nav-link" href="/premium">Premium</a>
<a class="nav-link" href="/affiliate">Make Money</a>
</nav>
</div>
<div class="col-auto">
<div class="d-none d-lg-flex">
<a href="/login" class="btn btn-dark sign-btn rounded-pill mr-2">Log In</a>
<a href="/register" class="btn btn-success sign-btn rounded-pill">Sign Up</a>
</div>
<div class="d-lg-none">
<button class="btn text-muted usrmobile-toggle-nav px-1" type="button">
<i class="icon icon-user icon-size-18 text-muted"></i>
</button>
</div>
</div>
</div>
</div>
</header>
<script src="https://filemoon.to/js/jquery.cookie.js"></script>
<script>
$.cookie('file_id', '48329866', { expires: 10 });
$.cookie('aff', '31148', { expires: 10 });
$.cookie('ref_url', 'https://z1ekv717.fun/d/wkhcbggdxf1d', { expires: 10 });
</script>
<script type="text/javascript" src='/js/ls.js'></script>
<main class="flex-grow-1 a-bean">
<div class="container mt-5">
<div class="mb-4 mb-lg-5 sm-bg px-4 py-5 p-lg-0 mx-lg-5 rounded-lg">
<div class="row justify-content-between align-items-center text-muted mb-4 mb-lg-5">
<div class="col-auto mb-2">
<h3 class="text-light mb-0 font-weight-bold">alien earth s01e01 1080p web h264-successfulcrab</h3>
</div>
<div class="col-auto mb-2"> Uploaded: <span class="text-success">2025-08-13 00:08:29</span>
</div>
</div>
<div class="mb-4 mb-lg-5 ">
<div class="position-relative">
<div class="bimg-top text-center">
<div>
</div>
<div>
</div>
</div>
<div style="height: 640px;" id="iframe-holder">
<iframe src="https://pqham.com/bkg/wkhcbggdxf1d" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="100%" height="100%" allowfullscreen></iframe>
</div>
<div class="bimg-bottom text-center">
<div>
</div>
<div>
</div>
</div>
</div>
</div>
<div class="mb-4 mb-lg-5 text-center">
<a href="/download/wkhcbggdxf1d" class="btn btn-success px-5">Download</a>
</div>
</div>
</div>
</main>
<style>
#vplayer {padding-top: 56.25%;}
.bimg-top,
.bimg-bottom {
display: -webkit-flex;
display: -ms-flex;
display: flex;
-ms-align-items: center;
align-items: center;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
justify-content: center;
}
.bimg-top div,
.bimg-bottom div {
margin: .5rem;
}
@media(min-width:1600px){
.bimg-top,
.bimg-bottom {
position: absolute;
top: 0;
bottom: 0;
flex-direction: column;
}
.bimg-top {
left: -310px;
}
.bimg-bottom {
right: -310px;
}
.bimg-top div,
.bimg-bottom div {
margin: .5rem 0;
}
}
@media(min-width:1800px){
.bimg-top {
left: -350px;
}
.bimg-bottom {
right: -350px;
}
}
</style>
<footer class="footer py-4 py-lg-5">
<div class="container">
<div class="row align-items-center justify-content-between">
<div class="col-auto my-1">
<div class="text-muted"> FileMoon © 2022 </div>
</div>
<div class="col-auto my-1">
<nav class="nav">
<a class="nav-link text-muted footer-link px-0 mr-4" href="/">Home</a>
<a class="nav-link text-muted footer-link px-0 mr-4" href="/tos">Terms of Service</a>
<a class="nav-link text-muted footer-link px-0 mr-4" href="/privacy">Privacy Policy</a>
<a class="nav-link text-muted footer-link px-0 mr-4" href="/copyright">Copyright Policy</a>
<a class="nav-link text-muted footer-link px-0 mr-4" href="/affiliate">Make Money</a>
<a class="nav-link text-muted footer-link px-0 mr-4" href="/api">API Documentation</a>
<a class="nav-link text-muted footer-link px-0 mr-4" href="https://status.filemoon.sx">Server Status</a>
</nav>
</div>
</div>
</div>
</footer>
</div>
<div class="ssm">
<nav class="nav ssm-nav flex-column">
<a class="nav-link ssm-nav-link active" href="/"><i class="icon icon-home icon-size-16 ssm-nav-icon mr-3"></i>Home</a>
<a class="nav-link ssm-nav-link" href="/dashboard"><i class="icon icon-account icon-size-16 ssm-nav-icon mr-3"></i>My account</a>
<a class="nav-link ssm-nav-link" href="/premium"><i class="icon icon-money icon-size-16 ssm-nav-icon mr-3"></i>Premium</a>
<a class="nav-link ssm-nav-link" href="/affiliate"><i class="icon icon-money icon-size-16 ssm-nav-icon mr-3"></i>Make Money</a>
</nav>
<hr class="mx-3">
<nav class="nav flex-column ssm-nav">
<a class="nav-link ssm-nav-link" href="/tos"><i class="icon icon-pen icon-size-16 ssm-nav-icon mr-3"></i>Terms of Service</a>
<a class="nav-link ssm-nav-link" href="/privacy"><i class="icon icon-key icon-size-16 ssm-nav-icon mr-3"></i>Privacy Policy</a>
<a class="nav-link ssm-nav-link" href="/api"><i class="icon icon-note icon-size-16 ssm-nav-icon mr-3"></i>API Documentation</a>
<a class="nav-link ssm-nav-link" href="https://status.filemoon.sx"><i class="icon icon-note icon-size-16 ssm-nav-icon mr-3"></i>Server Status</a>
</nav>
</div>
<div class="ssm-overlay ssm-toggle-nav"></div>
<div class="usrmobile p-5 usrmobile-toggle-nav">
<a href="/login" class="btn btn-success btn-success-custom btn-lg btn-block text-uppercase shadow">Sign in</a>
<a href="/register" class="btn btn-outline-success btn-lg btn-block mb-2 text-uppercase">Sign up</a>
</div>
<script src="//z1ekv717.fun/assets/js/bootstrap.bundle.min.js"></script>
<script src="//z1ekv717.fun/assets/js/jquery.slideandswipe.min.js"></script>
<script src="//z1ekv717.fun/assets/js/jquery.touchSwipe.min.js"></script>
<script src="//z1ekv717.fun/assets/js/front.js"></script>
</body>
</html>

View file

@ -0,0 +1,147 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>LuluStream</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!--<meta name="robots" content="noindex, nofollow, nosnippet, noarchive, noimageindex" />-->
<meta name="theme-color" content="#FFF">
<link rel="apple-touch-icon" href="/static/images/favicon/apple-touch-icon.png" sizes="180x180">
<link rel="icon" href="/static/images/favicon/favicon-32x32.png" sizes="32x32">
<link rel="icon" href="/static/images/favicon/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="/static/images/favicon/manifest.json">
<link rel="icon" href="/static/images/favicon/favicon.ico">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="crossorigin">
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;700&display=swap" rel="stylesheet">
<link href="/static/css/style.css?10" rel="stylesheet">
<script src="/static/js/jquery-3.2.1.min.js"></script>
<script src="/static/js/bootstrap.bundle.min.js"></script>
<script src="/static/js/app.js"></script>
<script src="/static/js/xupload.js?10"></script>
</head>
<body class="">
<header class="header">
<div class="container">
<div class="row align-items-center flex-nowrap">
<div class="col-auto flex-grow-1 flex-shrink-1">
<div class="row align-items-center">
<div class="col-auto d-lg-none">
<div class="dropdown">
<button class="btn icon-btn" data-bs-toggle="dropdown" data-bs-offset="0, 16">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="14">
<path fill-rule="evenodd" fill="currentcolor" d="M17 8H1a1 1 0 1 1 0-2h16a1 1 0 1 1 0 2Zm0-6H1a1 1 0 0 1 0-2h16a1 1 0 1 1 0 2ZM1 12h16a1 1 0 1 1 0 2H1a1 1 0 1 1 0-2Z" />
</svg>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<a href="/?op=upload" class="dropdown-item">Upload</a>
<a href="/premium" class="dropdown-item">Premium</a>
<a href="/make_money" class="dropdown-item">Earn Money</a>
<a href="/api.html" class="dropdown-item">Service API</a>
<a href="/tos" class="dropdown-item">Terms of Service</a>
<a href="/faq" class="dropdown-item">About us</a>
<a href="/contact" class="dropdown-item">Contacts</a>
</ul>
</div>
</div>
<div class="col-auto">
<a href="/" class="logo">
<img src="/static/images/logo.svg" alt="">
</a>
</div>
<div class="col-auto d-none d-lg-block">
<nav class="nav">
<a href="/make_money" class="nav-link">Earn Money</a>
<a href="/premium" class="nav-link">Premium</a>
<a href="/api.html" class="nav-link">Api Docs</a>
</nav>
</div>
</div>
</div>
<div class="col-auto d-none d-lg-block">
<a href="/login.html" class="btn login-btn me-1">Login</a>
<a href="/?op=registration" class="btn btn-gradient reg-btn">Register</a>
</div>
<div class="col-auto d-lg-none">
<div class="dropdown">
<button class="btn icon-btn" data-bs-toggle="dropdown" data-bs-offset="0, 16">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20">
<path fill-rule="evenodd" fill="currentcolor" d="M16.525 17.561c-.032.032-.062.063-.099.09A9.953 9.953 0 0 1 10 20a9.947 9.947 0 0 1-6.448-2.369c-.018-.014-.032-.029-.048-.043A9.976 9.976 0 0 1 0 10C0 4.486 4.486 0 10 0s10 4.486 10 10c0 3.02-1.351 5.726-3.475 7.561Zm-1.92-1.03A3.013 3.013 0 0 0 12.002 15H7.998a2.972 2.972 0 0 0-2.606 1.529 7.952 7.952 0 0 0 9.213.002ZM10 2c-4.411 0-8 3.589-8 8a7.96 7.96 0 0 0 1.889 5.151A4.962 4.962 0 0 1 7.998 13h4.005c1.657 0 3.184.84 4.103 2.157A7.962 7.962 0 0 0 18 10c0-4.411-3.589-8-8-8Zm0 10c-2.206 0-4-1.794-4-4s1.794-4 4-4 4 1.794 4 4-1.794 4-4 4Zm0-6c-1.103 0-2 .897-2 2s.897 2 2 2 2-.897 2-2-.897-2-2-2Z"
/>
</svg>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li>
<a class="dropdown-item" href="/login.html">Login</a>
</li>
<li>
<a class="dropdown-item" href="/?op=registration">Register</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</header>
<main>
<section class="section">
<div class="container">
<div class="alert alert-danger">
No such file=uthq0o0sljnx
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-between">
<div class="mb-3">
</div>
<p class="text-muted">© 2023 LuluStream. <br> All rights reserved.</p>
</div>
<div class="col-lg-3">
<div class="nav flex-column mb-2">
<a href="/tos" class="nav-link">Terms of service</a>
<a href="/api.html" class="nav-link">API Documentation</a>
<a href="/contact" class="nav-link">Contact Us</a>
</div>
</div>
<div class="col-lg-3">
<div class="nav flex-column mb-2">
<a href="/premium" class="nav-link">Premium</a>
<a href="/make_money" class="nav-link">Earn money</a>
<a href="/check_files" class="nav-link">Link Checker</a>
</div>
</div>
<div class="col-lg-2 align-self-end text-end">
<div class="mb-4">
<a href="#" class="logo">
<img src="/static/images/logo.svg" alt="">
</a>
</div>
</div>
</div>
</div>
</footer>
<script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'98a528aa0a1c9754',t:'MTc1OTc1MzcwOQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>

View file

@ -0,0 +1,4 @@
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1498884,RESOLUTION=1280x720,FRAME-RATE=24.000,CODECS="avc1.4d401f,mp4a.40.2"
https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fstreamhihi.com%2Fe%2Fmk9m58lz8ts6&d=https%3A%2F%2Fh1gdnnp1dr11.tnmr.org%2Fhls2%2F02%2F02416%2Fqx1ysro2ny1o_h%2Findex-v1-a1.m3u8%3Ft%3DC1RS64a-9j6bSDO9TmHU9jIZpVb59jsWah7j-KgJkRg%26s%3D1759753708%26e%3D28800%26f%3D12081096%26i%3D0.3%26sp%3D0
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=41327,RESOLUTION=1280x720,CODECS="avc1.4d401f",URI="https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fstreamhihi.com%2Fe%2Fmk9m58lz8ts6&d=https%3A%2F%2Fh1gdnnp1dr11.tnmr.org%2Fhls2%2F02%2F02416%2Fqx1ysro2ny1o_h%2Fiframes-v1-a1.m3u8%3Ft%3DC1RS64a-9j6bSDO9TmHU9jIZpVb59jsWah7j-KgJkRg%26s%3D1759753708%26e%3D28800%26f%3D12081096%26i%3D0.3%26sp%3D0"

View file

@ -0,0 +1 @@
{"destination_url":"https://h1gdnnp1dr11.tnmr.org/hls2/02/02416/qx1ysro2ny1o_h/master.m3u8?t=C1RS64a-9j6bSDO9TmHU9jIZpVb59jsWah7j-KgJkRg&s=1759753708&e=28800&f=12081096&i=0.3&sp=0","request_headers":{"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","referer":"https://streamhihi.com/e/mk9m58lz8ts6"},"mediaflow_proxy_url":"https://mediaflow.test.org/proxy/hls/manifest.m3u8","query_params":{"api_password":"test"}}

View file

@ -0,0 +1,529 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>The.Thursday.Murder.Club.2025.1080p.NF.WEB-DL.DDP5.1.Atmos.H.264-playWEB - Lulustream.mp4</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#FFF">
<meta name="og:image" content="https://img.lulucdn.com/mk9m58lz8ts6_xt.jpg">
<meta name="twitter:image" content="https://img.lulucdn.com/mk9m58lz8ts6_xt.jpg">
<link rel="dns-prefetch" href="https://img.lulucdn.com" crossorigin>
<link rel="apple-touch-icon" href="/static/images/favicon/apple-touch-icon.png" sizes="180x180">
<link rel="icon" href="/static/images/favicon/favicon-32x32.png" sizes="32x32">
<link rel="icon" href="/static/images/favicon/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="/static/images/favicon/manifest.json">
<link rel="icon" href="/static/images/favicon/favicon.ico">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="crossorigin">
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;700&display=swap" rel="stylesheet">
<link href="/static/css/style.css?10" rel="stylesheet">
<script src="/static/js/jquery-3.2.1.min.js"></script>
<script src="/static/js/bootstrap.bundle.min.js"></script>
<script src="/static/js/app.js"></script>
<script src="/static/js/xupload.js?10"></script>
</head>
<body class="">
<header class="header">
<div class="container">
<div class="row align-items-center flex-nowrap">
<div class="col-auto flex-grow-1 flex-shrink-1">
<div class="row align-items-center">
<div class="col-auto d-lg-none">
<div class="dropdown">
<button class="btn icon-btn" data-bs-toggle="dropdown" data-bs-offset="0, 16">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="14">
<path fill-rule="evenodd" fill="currentcolor" d="M17 8H1a1 1 0 1 1 0-2h16a1 1 0 1 1 0 2Zm0-6H1a1 1 0 0 1 0-2h16a1 1 0 1 1 0 2ZM1 12h16a1 1 0 1 1 0 2H1a1 1 0 1 1 0-2Z" />
</svg>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<a href="/?op=upload" class="dropdown-item">Upload</a>
<a href="/premium" class="dropdown-item">Premium</a>
<a href="/make_money" class="dropdown-item">Earn Money</a>
<a href="/api.html" class="dropdown-item">Service API</a>
<a href="/tos" class="dropdown-item">Terms of Service</a>
<a href="/faq" class="dropdown-item">About us</a>
<a href="/contact" class="dropdown-item">Contacts</a>
</ul>
</div>
</div>
<div class="col-auto">
<a href="/" class="logo">
<img src="/static/images/logo.svg" alt="">
</a>
</div>
<div class="col-auto d-none d-lg-block">
<nav class="nav">
<a href="/make_money" class="nav-link">Earn Money</a>
<a href="/premium" class="nav-link">Premium</a>
<a href="/api.html" class="nav-link">Api Docs</a>
</nav>
</div>
</div>
</div>
<div class="col-auto d-none d-lg-block">
<a href="/login.html" class="btn login-btn me-1">Login</a>
<a href="/?op=registration" class="btn btn-gradient reg-btn">Register</a>
</div>
<div class="col-auto d-lg-none">
<div class="dropdown">
<button class="btn icon-btn" data-bs-toggle="dropdown" data-bs-offset="0, 16">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20">
<path fill-rule="evenodd" fill="currentcolor" d="M16.525 17.561c-.032.032-.062.063-.099.09A9.953 9.953 0 0 1 10 20a9.947 9.947 0 0 1-6.448-2.369c-.018-.014-.032-.029-.048-.043A9.976 9.976 0 0 1 0 10C0 4.486 4.486 0 10 0s10 4.486 10 10c0 3.02-1.351 5.726-3.475 7.561Zm-1.92-1.03A3.013 3.013 0 0 0 12.002 15H7.998a2.972 2.972 0 0 0-2.606 1.529 7.952 7.952 0 0 0 9.213.002ZM10 2c-4.411 0-8 3.589-8 8a7.96 7.96 0 0 0 1.889 5.151A4.962 4.962 0 0 1 7.998 13h4.005c1.657 0 3.184.84 4.103 2.157A7.962 7.962 0 0 0 18 10c0-4.411-3.589-8-8-8Zm0 10c-2.206 0-4-1.794-4-4s1.794-4 4-4 4 1.794 4 4-1.794 4-4 4Zm0-6c-1.103 0-2 .897-2 2s.897 2 2 2 2-.897 2-2-.897-2-2-2Z"
/>
</svg>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li>
<a class="dropdown-item" href="/login.html">Login</a>
</li>
<li>
<a class="dropdown-item" href="/?op=registration">Register</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</header>
<main>
<section class="section">
<div class="container">
<div class="videoplayer mb-5">
<script src="/js/jquery.cookie.js"></script>
<script>
$.cookie('file_id', '12081096', { expires: 10 });
</script>
<div class="videoplayer-embed mb-4">
<iframe src="https://luluvid.com/e/mk9m58lz8ts6" scrolling="no" frameborder="0" width="640" height="360" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"></iframe>
</div>
<div class="row align-items-center flex-lg-nowrap">
<div class="col-12 col-lg-auto flex-grow-1 flex-shrink-1 mb-4">
<div class="row align-items-center flex-nowrap">
<!--<div class="col-auto pe-0">
<div class="photo">
<img src="" alt="">
</div>
</div>-->
<div class="col-auto flex-grow-1 flex-shrink-1">
<h1 class="h5">The Thursday Murder Club 2025 1080p NF WEB-DL DDP5 1 Atmos H 264-playWEB</h1>
<div class="xsmall text-muted">
<span class="me-2">on Aug 28, 2025</span>
<span class="me-2">&bull;</span>
<span class="me-2">1.2 GB</span>
</div>
</div>
<!--<div class="col-auto pe-0">
<div class="dropdown">
<button class="btn icon-btn" data-bs-toggle="dropdown" data-bs-offset="-12, 4">
<svg xmlns="http://www.w3.org/2000/svg" width="5" height="16">
<path fill-rule="evenodd" fill="currentColor" d="M2.37 9.846C1.297 9.846.424 9.018.424 8c0-1.018.873-1.846 1.946-1.846 1.072 0 1.946.828 1.946 1.846 0 1.018-.874 1.846-1.946 1.846Zm0-6.154c-1.073 0-1.946-.828-1.946-1.846C.424.828 1.297 0 2.37 0c1.072 0 1.946.828 1.946 1.846 0 1.018-.874 1.846-1.946 1.846Zm0 8.615c1.072 0 1.946.829 1.946 1.847S3.442 16 2.37 16c-1.073 0-1.946-.828-1.946-1.846 0-1.018.873-1.847 1.946-1.847Z"></path>
</svg>
</button>
<div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item" href="#" data-bs-toggle="modal" data-bs-target="#modal-flag">Flag video</a>
</div>
</div>
</div>-->
</div>
</div>
<!-- <div class="col-auto mb-4 ms-auto">
<div class="rating">
<button class="btn rating-plus vote_up" onclick="return jah('/?op=vote&file_code=mk9m58lz8ts6&v=up')" title="Like">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="14" class="me-2">
<path fill-rule="evenodd" d="m15.843 5.892-.815 6.409c-.121.957-.952 1.683-1.934 1.687H1.557A1.407 1.407 0 0 1 .14 12.595V6.72c0-.768.636-1.392 1.417-1.392h2.718L6.749.461a.874.874 0 0 1 .781-.474c1.679 0 3.046 1.343 3.046 2.995v.743h3.332c1.073 0 1.948.859 1.952 1.915 0 .086-.006.169-.017.252ZM3.942 7.045H1.887v5.226h2.055V7.045Zm9.965-1.602H9.702a.866.866 0 0 1-.873-.859V2.982a1.28 1.28 0 0 0-.807-1.183l-2.334 4.59v5.882h7.402a.21.21 0 0 0 .205-.182l.816-6.41c.002-.145-.091-.236-.204-.236Z"></path>
</svg>
<span id="likes_num"></span></button>
<button class="btn rating-minus vote_down" onclick="return jah('/?op=vote&file_code=mk9m58lz8ts6&v=down')" title="Don&#39;t Like">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="14" class="me-2">
<path fill-rule="evenodd" d="M13.908 10.275h-3.332v.743c0 1.652-1.366 2.995-3.046 2.995a.874.874 0 0 1-.781-.474L4.275 8.672H1.557C.776 8.672.14 8.047.14 7.28V1.405C.14.637.776.012 1.557.012H13.094c.982.004 1.813.73 1.934 1.687l.816 6.409c.01.083.016.166.016.252-.004 1.056-.879 1.915-1.952 1.915ZM1.887 6.955h2.055V1.729H1.887v5.226Zm11.408-5.044a.21.21 0 0 0-.205-.182H5.688v5.882l2.334 4.59a1.28 1.28 0 0 0 .807-1.183V9.416c0-.474.391-.859.873-.859h4.205c.113 0 .206-.091.204-.237l-.816-6.409Z"></path>
</svg>
<span id="dislikes_num"></span></button>
</div>
</div>-->
</div>
<div class="download text-center mb-5">
<div class="dropdown">
<button type="button" class="btn btn-gradient submit-btn py-3" data-bs-toggle="modal" data-bs-target="#modal-download">
<svg class="me-2" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path fill-rule="evenodd" fill="currentColor" d="M10 20C4.486 20 0 15.514 0 10S4.486 0 10 0s10 4.486 10 10-4.486 10-10 10Zm0-18c-4.411 0-8 3.589-8 8s3.589 8 8 8 8-3.589 8-8-3.589-8-8-8Zm0 13h-.003a.988.988 0 0 1-.704-.293l-3-3a.999.999 0 1 1 1.414-1.414L9 11.586V6a1 1 0 0 1 2 0v5.586l1.293-1.293a.999.999 0 1 1 1.414 1.414l-3 3a.993.993 0 0 1-.704.293H10Z"/></svg>
<small>Download</small>
</button>
</div>
</div>
<div align="center">
<!--Banner ads-->
</div>
<div class="block">
<div class="nav tabs mb-3">
<a data-bs-toggle="tab" class="nav-link active" href="#tab_down_link">Download Link</a>
<a data-bs-toggle="tab" class="nav-link" href="#tab_code_bb">Forum Code</a>
<a data-bs-toggle="tab" class="nav-link" href="#tab_html_info">HTML Code</a>
<a data-bs-toggle="tab" class="nav-link" href="#tab_code_embed">Embed Code</a>
</div>
<div class="tab-content">
<div class="tab-pane fade show active" id="tab_down_link">
<textarea class="form-control" rows="5">https://luluvid.com/mk9m58lz8ts6</textarea>
</div>
<div class="tab-pane fade" id="tab_code_bb">
<textarea class="form-control" rows="5">[URL=https://luluvid.com/mk9m58lz8ts6][IMG]https://img.lulucdn.com/mk9m58lz8ts6_t.jpg[/IMG]
The Thursday Murder Club 2025 1080p NF WEB-DL DDP5 1 Atmos H 264-playWEB[/URL] [1280x720, 02:00:21]</textarea>
</div>
<div class="tab-pane fade" id="tab_html_info">
<textarea class="form-control" rows="5"><a href="https://luluvid.com/mk9m58lz8ts6"><img src="https://img.lulucdn.com/mk9m58lz8ts6_t.jpg" border=0><br>The Thursday Murder Club 2025 1080p NF WEB-DL DDP5 1 Atmos H 264-playWEB</a><br>[1280x720, 02:00:21]</textarea>
</div>
<div class="tab-pane fade" id="tab_code_embed">
<div class="mb-3">Embed size: <input class="form-control form-control-sm d-inline-block py-2" style="width: 80px;" type="text" id="iew" value="640" size=3><span class="p-2">x</span><input class="form-control form-control-sm d-inline-block py-2" style="width: 80px;" type="text" id="ieh" value="360"></div>
<textarea id="iet" class="form-control" rows="5"><iframe src="https://luluvid.com/e/mk9m58lz8ts6" scrolling="no" frameborder="0" width="640" height="360" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"></iframe></textarea>
</div>
</div>
</div>
<div class="modal fade" id="modal-download" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header pb-0">
<h5 class="modal-title">
Download video
</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<a class="btn btn-dark w-100 mb-2" href="https://lulustream.com/d/mk9m58lz8ts6_h">
<svg class="me-3" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><defs><linearGradient id="a" x1="0%" x2="100%" y1="0%" y2="0%"><stop offset="0%" stop-color="#4949E7"/><stop offset="100%" stop-color="#51E3C0"/></linearGradient></defs><path fill="none" d="M10 20C4.486 20 0 15.514 0 10S4.486 0 10 0s10 4.486 10 10-4.486 10-10 10Zm0-18c-4.411 0-8 3.589-8 8s3.589 8 8 8 8-3.589 8-8-3.589-8-8-8Zm0 13h-.003a.988.988 0 0 1-.704-.293l-3-3a.999.999 0 1 1 1.414-1.414L9 11.586V6a1 1 0 0 1 2 0v5.586l1.293-1.293a.999.999 0 1 1 1.414 1.414l-3 3a.993.993 0 0 1-.704.293H10Z"/><path fill="url(#a)" d="M10 20C4.486 20 0 15.514 0 10S4.486 0 10 0s10 4.486 10 10-4.486 10-10 10Zm0-18c-4.411 0-8 3.589-8 8s3.589 8 8 8 8-3.589 8-8-3.589-8-8-8Zm0 13h-.003a.988.988 0 0 1-.704-.293l-3-3a.999.999 0 1 1 1.414-1.414L9 11.586V6a1 1 0 0 1 2 0v5.586l1.293-1.293a.999.999 0 1 1 1.414 1.414l-3 3a.993.993 0 0 1-.704.293H10Z"/></svg>
<b class="text-white flex-grow-1 text-start">
HD quality
</b>
<span class="small text-muted">
1280x720, 1.2 GB
</span>
</a>
</div>
</div>
</div>
</div>
<div class="modal fade" id="modal-flag" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header pb-0">
<h5 class="modal-title">
Flag
</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form method="POST" action="/" onsubmit="$.post('/',$(this).serialize(),function(code){ eval(code); } );return false;">
<input type="hidden" name="op" value="report_file">
<input type="hidden" name="file_code" value="mk9m58lz8ts6">
<div class="form-group mb-3">
<label class="form-label">
Reason
</label>
<select name="report_type" class="form-select">
<option>
Broken video
</option>
<option>
Wrong title/description
</option>
<option>
Copyright restriction
</option>
<option>
Other
</option>
</select>
</div>
<div class="form-group mb-3">
<textarea name="report_info" class="form-control" rows="2" placeholder="Details"></textarea>
</div>
<div class="text-center">
<button class="btn btn-gradient submit-btn" type="submit" name="add">Send Report<i class="icon icon-send icon-size-20 ms-2"></i></button>
</div>
</form>
</div>
</div>
</div>
</div>
<script type='text/javascript'>
jwplayer("vplayer").setup({
sources: [{file:"https://h1gdnnp1dr11.tnmr.org/hls2/02/02416/qx1ysro2ny1o_h/master.m3u8?t=Wzh5ciexf_W1kZKtO8sCUH6eR_aLIWOsvgO1ifx2w2I&s=1759753708&e=28800&f=12081096&i=0.3&sp=0"}],
image: "https://img.lulucdn.com/mk9m58lz8ts6_xt.jpg",
width: "100%",
height: "100%",
skin: {
url:"/player/jw8/jw8-theme.css",
name: "jw8-theme"
},
stretching: "uniform",
duration: "7221.57",
//aspectratio: "16:9",
preload: 'none',
//displayPlaybackLabel: true,
//horizontalVolumeSlider: true,
//allowFullscreen: false,
//"autoPause": { "viewability": true, "pauseAds": true },
//skin: {controlbar: {text:"#6F6", icons:"#6F6"}, timeslider:{progress:"#6F6"}, menus:{text:"#6F6"} },
//pipIcon: 'disabled',
androidhls: "true"
,tracks: [{file: "/srt/empty.srt", label: "Upload captions", kind: "captions"}]
,captions: {
userFontScale: 1,
color: '#FFFFFF',
backgroundColor: '#303030',
fontFamily:"Tahoma",
backgroundOpacity: 30,
fontOpacity: '100',
},'qualityLabels':{"1436":"HD"},abouttext:"LuluStream", aboutlink:"https://lulustream.com",logo: {file:"https://lulustream.com/player/jw8/player-logo.svg", link:"https://lulustream.com", position:"control-bar", margin:"5"}
});
var vvplay,vvad;
var vastdone1=0,vastdone2=0;
var player = jwplayer();
var prevt=0, tott=0, v2done=0, lastt=0;
$.ajaxSetup({ headers: { 'Content-Cache': 'no-cache' } });
player.on('time', function(x) {
if(5>0 && x.position>=5 && vvad!=1){vvad=1;$('div.video_ad_fadein').fadeIn('slow');}
});
player.on('seek', function(x) { prevt=x.position; });
player.on('play', function(x) { doPlay(x); });
player.on('complete', function() { $('div.video_ad').show(); });
player.on('pause', function(x) { });
//player.on('all', function(x) { console.log(x); });
function doPlay(x)
{
$('div.video_ad').hide();
$('#over_player_msg').hide();
if(vvplay)return;
vvplay=1;
adb=0;
if( window.cRAds === undefined ){ adb=1; }
$.get('/dl?op=view&file_code=mk9m58lz8ts6&hash=&embed=&referer=&adb='+adb, function(data) {$('#fviews').html(data);} );
}
function set_audio_track()
{
var tracks=player.getAudioTracks(track_name);
console.log(tracks);
if(tracks.length>1){
for(i=0;i<tracks.length;i++){ if(tracks[i].name==track_name){ console.log('!!='+i); player.setCurrentAudioTrack(i); } }
}
}
player.on('ready', function(){
player.on('captionsChanged',function(tr){
if( RegExp('empty').test(tr.tracks[tr.track].id) )
{
jwplayer().pause(true);
jwplayer().setCurrentCaptions(0);
openIframeOverlay('/?op=upload_srt&file_code=mk9m58lz8ts6');
}
} );
function openIframeOverlay(url)
{
var $dd= $("<div />").css({
position: "absolute",
width: "100%",
height: "100%",
left: 0,
top: 0,
zIndex: 1000000,
background: "rgba(10%, 10%, 10%, 0.4)",
"text-align": "center"
});
$("<iframe />").css({
width: "60%",
height: "60%",
zIndex: 1000001,
"margin-top": "50px"
}).prop({'src':url, 'frameborder':'0', 'scrolling':'no'}).appendTo($dd);
$dd.click(function (){ $(this).remove(); jwplayer().play(); });
$dd.appendTo( $('#vplayer') );
}
jwplayer().addButton(
'<svg xmlns="http://www.w3.org/2000/svg" class="jw-svg-icon" viewBox="0 0 320 512"><path d="M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416V96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4l192 160L256 241V96c0-17.7 14.3-32 32-32s32 14.3 32 32V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V271l-11.5 9.6-192 160z"/></svg>',
"Forward 10 sec",
function() {
jwplayer().seek( jwplayer().getPosition()+10 );
},
"ff11"
);
$("div[button=ff11]").detach().insertAfter('.jw-icon-rewind');
jwplayer().addButton(
'<svg xmlns="http://www.w3.org/2000/svg" class="jw-svg-icon" viewBox="0 0 320 512"><path d="M267.5 440.6c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29V96c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4l-192 160L64 241V96c0-17.7-14.3-32-32-32S0 78.3 0 96V416c0 17.7 14.3 32 32 32s32-14.3 32-32V271l11.5 9.6 192 160z"/></svg>',
"Rewind 10 sec",
function() {
var tt = jwplayer().getPosition()-10;
if(tt<0)tt=0;
jwplayer().seek( tt );
},
"ff00"
);
$("div[button=ff00]").detach().insertAfter('.jw-icon-rewind');
$("div.jw-icon-rewind").hide();
$('.jw-slider-time').append($('.jw-text-countdown'));
});
player.on("audioTracks",function(event){
var tracks=player.getAudioTracks();
if(tracks.length<2)return;
$('.jw-settings-topbar-buttons').mousedown(function() {
$('#jw-settings-submenu-audioTracks').removeClass('jw-settings-submenu-active');
$('.jw-submenu-audioTracks').attr('aria-expanded','false');
});
player.addButton("/images/dualy.svg","Audio Track",function(){
$('.jw-controls').toggleClass('jw-settings-open');
$('.jw-settings-captions, .jw-settings-playbackRates').attr('aria-checked','false');
if( $('.jw-controls').hasClass('jw-settings-open') ){
$('.jw-submenu-audioTracks').attr('aria-checked','true');
$('.jw-submenu-audioTracks').attr('aria-expanded','true');
$('.jw-settings-submenu-quality').removeClass('jw-settings-submenu-active');
$('.jw-settings-submenu-audioTracks').addClass('jw-settings-submenu-active');
}
else {
$('.jw-submenu-audioTracks').attr('aria-checked','false');
$('.jw-submenu-audioTracks').attr('aria-expanded','false');
$('.jw-settings-submenu-audioTracks').removeClass('jw-settings-submenu-active');
}
},"dualSound");
if( !localStorage.getItem('default_audio') ) setTimeout("audio_set('English')", 300 );
});
var current_audio;
function audio_set(audio_name)
{
var tracks=player.getAudioTracks();
if(tracks.length>1){
for(i=0;i<tracks.length;i++){ if(tracks[i].name==audio_name){ if(i==current_audio){return;} current_audio=i; player.setCurrentAudioTrack(i); } }
}
}
</script>
<Script>
$("#embed_div textarea").focus(function (){ $(this).select(); })
var tab_cookie='tab_down';
$('ul.tabs').on('click', 'li:not(.current)', function() {
$(this).addClass('current').siblings().removeClass('current')
.parents('div.section').find('div.box').eq($(this).index()).fadeIn(150).siblings('div.box').hide();
});
$("#iew,#ieh").change(function (){
var ww = $("#iew").val();
var hh = $("#ieh").val();
ww = ww.replace(/\D/g,'');
hh = hh.replace(/\D/g,'');
if(!ww)ww=640;
if(!hh)hh=360;
tt = $("#iet").val();
tt = tt.replace(/ WIDTH=\d+ HEIGHT=\d+ /,' WIDTH='+ww+' HEIGHT='+hh+' ');
$("#iet").val(tt);
});
</Script>
<script src="https://lulustream.com/js/tabber.js"></script>
<Script>
$(function() {
});
</Script>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-between">
<div class="mb-3">
</div>
<p class="text-muted">© 2023 LuluStream. <br> All rights reserved.</p>
</div>
<div class="col-lg-3">
<div class="nav flex-column mb-2">
<a href="/tos" class="nav-link">Terms of service</a>
<a href="/api.html" class="nav-link">API Documentation</a>
<a href="/contact" class="nav-link">Contact Us</a>
</div>
</div>
<div class="col-lg-3">
<div class="nav flex-column mb-2">
<a href="/premium" class="nav-link">Premium</a>
<a href="/make_money" class="nav-link">Earn money</a>
<a href="/check_files" class="nav-link">Link Checker</a>
</div>
</div>
<div class="col-lg-2 align-self-end text-end">
<div class="mb-4">
<a href="#" class="logo">
<img src="/static/images/logo.svg" alt="">
</a>
</div>
</div>
</div>
</div>
</footer>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
{"destination_url":"https://cdn-kuc3ehpz4wnczfyz.orbitcache.com/engine/hls2-c/01/15242/ea21l02gcygw_,n,.urlset/master.m3u8?t=3iMAKoJqij6nC4HDamYxtDB75a_-AlG_wD1demRBo0I&s=1759754183&e=14400&f=76213694&node=FPYruvgfgORaUYuYfpByMgjFbC8X/HWKW1utbUQQRyQ=&i=104.28&sp=2500&asn=13335&q=n&rq=zKNpONzQJHzTeXTzr0V2M9V4DUnzwX9C8hTNxrUW","request_headers":{"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","referer":"https://jilliandescribecompany.com/e/ea21l02gcygw"},"mediaflow_proxy_url":"https://mediaflow.test.org/proxy/hls/manifest.m3u8","query_params":{"api_password":"test"}}

View file

@ -0,0 +1,4 @@
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1186371,RESOLUTION=1368x720,FRAME-RATE=24.000,CODECS="avc1.640020,mp4a.40.2",VIDEO-RANGE=PQ
https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fjilliandescribecompany.com%2Fe%2Fea21l02gcygw&d=https%3A%2F%2Fcdn-kuc3ehpz4wnczfyz.orbitcache.com%2Fengine%2Fhls2-c%2F01%2F15242%2Fea21l02gcygw_%2Cn%2C.urlset%2Findex-v1-a1.m3u8%3Ft%3D3iMAKoJqij6nC4HDamYxtDB75a_-AlG_wD1demRBo0I%26s%3D1759754183%26e%3D14400%26f%3D76213694%26node%3DFPYruvgfgORaUYuYfpByMgjFbC8X%2FHWKW1utbUQQRyQ%3D%26i%3D104.28%26sp%3D2500%26asn%3D13335%26q%3Dn%26rq%3DzKNpONzQJHzTeXTzr0V2M9V4DUnzwX9C8hTNxrUW
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=25403,RESOLUTION=1368x720,CODECS="avc1.640020",URI="https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fjilliandescribecompany.com%2Fe%2Fea21l02gcygw&d=https%3A%2F%2Fcdn-kuc3ehpz4wnczfyz.orbitcache.com%2Fengine%2Fhls2-c%2F01%2F15242%2Fea21l02gcygw_%2Cn%2C.urlset%2Fiframes-v1-a1.m3u8%3Ft%3D3iMAKoJqij6nC4HDamYxtDB75a_-AlG_wD1demRBo0I%26s%3D1759754183%26e%3D14400%26f%3D76213694%26node%3DFPYruvgfgORaUYuYfpByMgjFbC8X%2FHWKW1utbUQQRyQ%3D%26i%3D104.28%26sp%3D2500%26asn%3D13335%26q%3Dn%26rq%3DzKNpONzQJHzTeXTzr0V2M9V4DUnzwX9C8hTNxrUW",VIDEO-RANGE=PQ

View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Redirecting...</title>
</head>
<body>
<script>
if (typeof localStorage !== 'undefined') {
const permanentToken = localStorage.getItem('permanentToken');
if (permanentToken) {
const currentUrl = new URL(window.location.href);
currentUrl.searchParams.set('permanentToken', permanentToken);
window.location.href = currentUrl.toString();
} else {
window.location.href = 'https://jilliandescribecompany.com/e/c2yxvit4f6bz';
}
} else {
window.location.href = 'https://jilliandescribecompany.com/e/c2yxvit4f6bz';
}
</script>
</body>
</html>

View file

@ -0,0 +1,20 @@
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`FileMoon page not found 1`] = `[]`;
exports[`FileMoon z1ekv717 d 1`] = `
[
{
"format": "hls",
"label": "FileMoon (via MediaFlow Proxy)",
"meta": {
"countryCodes": [],
"height": 720,
"title": "alien earth s01e01 1080p web h264-successfulcrab",
},
"sourceId": "filemoon_",
"ttl": 900000,
"url": "https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fz1ekv717.fun%2Fd%2Fwkhcbggdxf1d&d=https%3A%2F%2Fbe7713.rcr82.waw05.i8yz83pn.com%2Fhls2%2F01%2F09665%2Fwkhcbggdxf1d_h%2Fmaster.m3u8%3Ft%3D359izbQ_L-sOHaIjj275YKdBDyiPzUi3ETfbNoN9bzU%26s%3D1759754698%26e%3D10800%26f%3D48329866%26srv%3D1075%26asn%3D13335%26sp%3D4000%26p%3D",
},
]
`;

View file

@ -0,0 +1,21 @@
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`LuluStream no such file 1`] = `[]`;
exports[`LuluStream streamhihi d 1`] = `
[
{
"format": "hls",
"label": "LuluStream (via MediaFlow Proxy)",
"meta": {
"bytes": 1288490188,
"countryCodes": [],
"height": 720,
"title": "The Thursday Murder Club 2025 1080p NF WEB-DL DDP5 1 Atmos H 264-playWEB",
},
"sourceId": "lulustream_",
"ttl": 900000,
"url": "https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fstreamhihi.com%2Fe%2Fmk9m58lz8ts6&d=https%3A%2F%2Fh1gdnnp1dr11.tnmr.org%2Fhls2%2F02%2F02416%2Fqx1ysro2ny1o_h%2Fmaster.m3u8%3Ft%3DC1RS64a-9j6bSDO9TmHU9jIZpVb59jsWah7j-KgJkRg%26s%3D1759753708%26e%3D28800%26f%3D12081096%26i%3D0.3%26sp%3D0",
},
]
`;

View file

@ -0,0 +1,20 @@
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`Voe encoding error 1`] = `[]`;
exports[`Voe jilliandescribecompany 1`] = `
[
{
"format": "hls",
"label": "VOE (via MediaFlow Proxy)",
"meta": {
"countryCodes": [],
"height": 720,
"title": "Superman.2025.2160p.WEB-DL.DV.HDR10Plus.X265.DDP5.1.Atmos-YIN.mp4",
},
"sourceId": "voe_",
"ttl": 900000,
"url": "https://mediaflow.test.org/proxy/hls/manifest.m3u8?api_password=test&h_user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F136.0.0.0+Safari%2F537.36&h_referer=https%3A%2F%2Fjilliandescribecompany.com%2Fe%2Fea21l02gcygw&d=https%3A%2F%2Fcdn-kuc3ehpz4wnczfyz.orbitcache.com%2Fengine%2Fhls2-c%2F01%2F15242%2Fea21l02gcygw_%2Cn%2C.urlset%2Fmaster.m3u8%3Ft%3D3iMAKoJqij6nC4HDamYxtDB75a_-AlG_wD1demRBo0I%26s%3D1759754183%26e%3D14400%26f%3D76213694%26node%3DFPYruvgfgORaUYuYfpByMgjFbC8X%2FHWKW1utbUQQRyQ%3D%26i%3D104.28%26sp%3D2500%26asn%3D13335%26q%3Dn%26rq%3DzKNpONzQJHzTeXTzr0V2M9V4DUnzwX9C8hTNxrUW",
},
]
`;

View file

@ -5,8 +5,10 @@ import { ExternalUrl } from './ExternalUrl';
import { Extractor } from './Extractor';
import { Fastream } from './Fastream';
import { FileLions } from './FileLions';
import { FileMoon } from './FileMoon';
import { HubCloud } from './HubCloud';
import { KinoGer } from './KinoGer';
import { LuluStream } from './LuluStream';
import { Mixdrop } from './Mixdrop';
import { SaveFiles } from './SaveFiles';
import { Soaper } from './Soaper';
@ -16,6 +18,7 @@ import { SuperVideo } from './SuperVideo';
import { Uqload } from './Uqload';
import { VidSrc } from './VidSrc';
import { VixSrc } from './VixSrc';
import { Voe } from './Voe';
import { YouTube } from './YouTube';
export * from './Extractor';
@ -29,8 +32,10 @@ export const createExtractors = (fetcher: Fetcher): Extractor[] => {
new Dropload(fetcher),
new Fastream(fetcher),
new FileLions(fetcher),
new FileMoon(fetcher),
new HubCloud(fetcher),
new KinoGer(fetcher),
new LuluStream(fetcher),
new Mixdrop(fetcher),
new SaveFiles(fetcher),
new Soaper(fetcher),
@ -52,6 +57,7 @@ export const createExtractors = (fetcher: Fetcher): Extractor[] => {
'xyz',
]),
new VixSrc(fetcher),
new Voe(fetcher),
new YouTube(fetcher),
new ExternalUrl(fetcher), // fallback extractor which must come last
].filter(extractor => !disabledExtractors.includes(extractor.id));