Skip to content

Instantly share code, notes, and snippets.

@xor10
Last active April 15, 2025 23:12
// ==UserScript==
// @name Flix
// @version 2.1.4
// @namespace @XOR
// @description User script para facilitar download de legendas e áudios na(o) Netflix
// @author XOR
// @include https://www.netflix.com/*
// @icon data:image/png;base64,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
// @grant none
// @homepageURL https://gist.github.com/xor10/8f65c1e66a34386e1131f8c28ff6bf64
// @downloadURL https://gist.github.com/xor10/8f65c1e66a34386e1131f8c28ff6bf64/raw/flix.min.user.js
// @updateURL https://gist.github.com/xor10/8f65c1e66a34386e1131f8c28ff6bf64/raw/flix.min.user.js
// @run-at document-start
// @noframes
// ==/UserScript==
/* jshint ignore:start */
!(function(){'use strict';var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):$jscomp.arrayIterator(a)};$jscomp.arrayFromIterator=function(a){for(var b,d=[];!(b=a.next()).done;)d.push(b.value);return d};
$jscomp.arrayFromIterable=function(a){return a instanceof Array?a:$jscomp.arrayFromIterator($jscomp.makeIterator(a))};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.objectCreate=$jscomp.ASSUME_ES5||"function"==typeof Object.create?Object.create:function(a){var b=function(){};b.prototype=a;return new b};$jscomp.underscoreProtoCanBeSet=function(){var a={a:!0},b={};try{return b.__proto__=a,b.a}catch(d){}return!1};
$jscomp.setPrototypeOf="function"==typeof Object.setPrototypeOf?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null;
$jscomp.inherits=function(a,b){a.prototype=$jscomp.objectCreate(b.prototype);a.prototype.constructor=a;if($jscomp.setPrototypeOf){var d=$jscomp.setPrototypeOf;d(a,b)}else for(d in b)if("prototype"!=d)if(Object.defineProperties){var g=Object.getOwnPropertyDescriptor(b,d);g&&Object.defineProperty(a,d,g)}else a[d]=b[d];a.superClass_=b.prototype};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,d){a!=Array.prototype&&a!=Object.prototype&&(a[b]=d.value)};$jscomp.polyfill=function(a,b,d,g){if(b){d=$jscomp.global;a=a.split(".");for(g=0;g<a.length-1;g++){var e=a[g];e in d||(d[e]={});d=d[e]}a=a[a.length-1];g=d[a];b=b(g);b!=g&&null!=b&&$jscomp.defineProperty(d,a,{configurable:!0,writable:!0,value:b})}};$jscomp.FORCE_POLYFILL_PROMISE=!1;
$jscomp.polyfill("Promise",function(a){function b(){this.batch_=null}function d(a){return a instanceof e?a:new e(function(b,r){b(a)})}if(a&&!$jscomp.FORCE_POLYFILL_PROMISE)return a;b.prototype.asyncExecute=function(a){if(null==this.batch_){this.batch_=[];var b=this;this.asyncExecuteFunction(function(){b.executeBatch_()})}this.batch_.push(a)};var g=$jscomp.global.setTimeout;b.prototype.asyncExecuteFunction=function(a){g(a,0)};b.prototype.executeBatch_=function(){for(;this.batch_&&this.batch_.length;){var a=
this.batch_;this.batch_=[];for(var b=0;b<a.length;++b){var d=a[b];a[b]=null;try{d()}catch(E){this.asyncThrow_(E)}}}this.batch_=null};b.prototype.asyncThrow_=function(a){this.asyncExecuteFunction(function(){throw a;})};var e=function(a){this.state_=0;this.result_=void 0;this.onSettledCallbacks_=[];var b=this.createResolveAndReject_();try{a(b.resolve,b.reject)}catch(x){b.reject(x)}};e.prototype.createResolveAndReject_=function(){function a(a){return function(r){d||(d=!0,a.call(b,r))}}var b=this,d=!1;
return{resolve:a(this.resolveTo_),reject:a(this.reject_)}};e.prototype.resolveTo_=function(a){if(a===this)this.reject_(new TypeError("A Promise cannot resolve to itself"));else if(a instanceof e)this.settleSameAsPromise_(a);else{a:switch(typeof a){case "object":var b=null!=a;break a;case "function":b=!0;break a;default:b=!1}b?this.resolveToNonPromiseObj_(a):this.fulfill_(a)}};e.prototype.resolveToNonPromiseObj_=function(a){var b=void 0;try{b=a.then}catch(x){this.reject_(x);return}"function"==typeof b?
this.settleSameAsThenable_(b,a):this.fulfill_(a)};e.prototype.reject_=function(a){this.settle_(2,a)};e.prototype.fulfill_=function(a){this.settle_(1,a)};e.prototype.settle_=function(a,b){if(0!=this.state_)throw Error("Cannot settle("+a+", "+b+"): Promise already settled in state"+this.state_);this.state_=a;this.result_=b;this.executeOnSettledCallbacks_()};e.prototype.executeOnSettledCallbacks_=function(){if(null!=this.onSettledCallbacks_){for(var a=0;a<this.onSettledCallbacks_.length;++a)t.asyncExecute(this.onSettledCallbacks_[a]);
this.onSettledCallbacks_=null}};var t=new b;e.prototype.settleSameAsPromise_=function(a){var b=this.createResolveAndReject_();a.callWhenSettled_(b.resolve,b.reject)};e.prototype.settleSameAsThenable_=function(a,b){var d=this.createResolveAndReject_();try{a.call(b,d.resolve,d.reject)}catch(E){d.reject(E)}};e.prototype.then=function(a,b){function d(a,b){return"function"==typeof a?function(b){try{g(a(b))}catch(z){r(z)}}:b}var g,r,K=new e(function(a,b){g=a;r=b});this.callWhenSettled_(d(a,g),d(b,r));return K};
e.prototype.catch=function(a){return this.then(void 0,a)};e.prototype.callWhenSettled_=function(a,b){function d(){switch(e.state_){case 1:a(e.result_);break;case 2:b(e.result_);break;default:throw Error("Unexpected state: "+e.state_);}}var e=this;null==this.onSettledCallbacks_?t.asyncExecute(d):this.onSettledCallbacks_.push(d)};e.resolve=d;e.reject=function(a){return new e(function(b,d){d(a)})};e.race=function(a){return new e(function(b,e){for(var g=$jscomp.makeIterator(a),r=g.next();!r.done;r=g.next())d(r.value).callWhenSettled_(b,
e)})};e.all=function(a){var b=$jscomp.makeIterator(a),g=b.next();return g.done?d([]):new e(function(a,e){function r(b){return function(d){t[b]=d;x--;0==x&&a(t)}}var t=[],x=0;do t.push(void 0),x++,d(g.value).callWhenSettled_(r(t.length-1),e),g=b.next();while(!g.done)})};return e},"es6","es3");$jscomp.SYMBOL_PREFIX="jscomp_symbol_";$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};
$jscomp.SymbolClass=function(a,b){this.$jscomp$symbol$id_=a;$jscomp.defineProperty(this,"description",{configurable:!0,writable:!0,value:b})};$jscomp.SymbolClass.prototype.toString=function(){return this.$jscomp$symbol$id_};$jscomp.Symbol=function(){function a(d){if(this instanceof a)throw new TypeError("Symbol is not a constructor");return new $jscomp.SymbolClass($jscomp.SYMBOL_PREFIX+(d||"")+"_"+b++,d)}var b=0;return a}();
$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.iterator;a||(a=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("Symbol.iterator"));"function"!=typeof Array.prototype[a]&&$jscomp.defineProperty(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return $jscomp.iteratorPrototype($jscomp.arrayIteratorImpl(this))}});$jscomp.initSymbolIterator=function(){}};
$jscomp.initSymbolAsyncIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.asyncIterator;a||(a=$jscomp.global.Symbol.asyncIterator=$jscomp.global.Symbol("Symbol.asyncIterator"));$jscomp.initSymbolAsyncIterator=function(){}};$jscomp.iteratorPrototype=function(a){$jscomp.initSymbolIterator();a={next:a};a[$jscomp.global.Symbol.iterator]=function(){return this};return a};$jscomp.generator={};
$jscomp.generator.ensureIteratorResultIsObject_=function(a){if(!(a instanceof Object))throw new TypeError("Iterator result "+a+" is not an object");};$jscomp.generator.Context=function(){this.isRunning_=!1;this.yieldAllIterator_=null;this.yieldResult=void 0;this.nextAddress=1;this.finallyAddress_=this.catchAddress_=0;this.finallyContexts_=this.abruptCompletion_=null};
$jscomp.generator.Context.prototype.start_=function(){if(this.isRunning_)throw new TypeError("Generator is already running");this.isRunning_=!0};$jscomp.generator.Context.prototype.stop_=function(){this.isRunning_=!1};$jscomp.generator.Context.prototype.jumpToErrorHandler_=function(){this.nextAddress=this.catchAddress_||this.finallyAddress_};$jscomp.generator.Context.prototype.next_=function(a){this.yieldResult=a};
$jscomp.generator.Context.prototype.throw_=function(a){this.abruptCompletion_={exception:a,isException:!0};this.jumpToErrorHandler_()};$jscomp.generator.Context.prototype.return=function(a){this.abruptCompletion_={return:a};this.nextAddress=this.finallyAddress_};$jscomp.generator.Context.prototype.jumpThroughFinallyBlocks=function(a){this.abruptCompletion_={jumpTo:a};this.nextAddress=this.finallyAddress_};$jscomp.generator.Context.prototype.yield=function(a,b){this.nextAddress=b;return{value:a}};
$jscomp.generator.Context.prototype.yieldAll=function(a,b){a=$jscomp.makeIterator(a);var d=a.next();$jscomp.generator.ensureIteratorResultIsObject_(d);if(d.done)this.yieldResult=d.value,this.nextAddress=b;else return this.yieldAllIterator_=a,this.yield(d.value,b)};$jscomp.generator.Context.prototype.jumpTo=function(a){this.nextAddress=a};$jscomp.generator.Context.prototype.jumpToEnd=function(){this.nextAddress=0};
$jscomp.generator.Context.prototype.setCatchFinallyBlocks=function(a,b){this.catchAddress_=a;void 0!=b&&(this.finallyAddress_=b)};$jscomp.generator.Context.prototype.setFinallyBlock=function(a){this.catchAddress_=0;this.finallyAddress_=a||0};$jscomp.generator.Context.prototype.leaveTryBlock=function(a,b){this.nextAddress=a;this.catchAddress_=b||0};
$jscomp.generator.Context.prototype.enterCatchBlock=function(a){this.catchAddress_=a||0;a=this.abruptCompletion_.exception;this.abruptCompletion_=null;return a};$jscomp.generator.Context.prototype.enterFinallyBlock=function(a,b,d){d?this.finallyContexts_[d]=this.abruptCompletion_:this.finallyContexts_=[this.abruptCompletion_];this.catchAddress_=a||0;this.finallyAddress_=b||0};
$jscomp.generator.Context.prototype.leaveFinallyBlock=function(a,b){b=this.finallyContexts_.splice(b||0)[0];if(b=this.abruptCompletion_=this.abruptCompletion_||b){if(b.isException)return this.jumpToErrorHandler_();void 0!=b.jumpTo&&this.finallyAddress_<b.jumpTo?(this.nextAddress=b.jumpTo,this.abruptCompletion_=null):this.nextAddress=this.finallyAddress_}else this.nextAddress=a};$jscomp.generator.Context.prototype.forIn=function(a){return new $jscomp.generator.Context.PropertyIterator(a)};
$jscomp.generator.Context.PropertyIterator=function(a){this.object_=a;this.properties_=[];for(var b in a)this.properties_.push(b);this.properties_.reverse()};$jscomp.generator.Context.PropertyIterator.prototype.getNext=function(){for(;0<this.properties_.length;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a};
$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()};
$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var b=this.context_.yieldAllIterator_;if(b)return this.yieldAllStep_("return"in b?b["return"]:function(a){return{value:a,done:!0}},a,this.context_.return);this.context_.return(a);return this.nextStep_()};
$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_["throw"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()};
$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,b,d){try{var g=a.call(this.context_.yieldAllIterator_,b);$jscomp.generator.ensureIteratorResultIsObject_(g);if(!g.done)return this.context_.stop_(),g;var e=g.value}catch(t){return this.context_.yieldAllIterator_=null,this.context_.throw_(t),this.nextStep_()}this.context_.yieldAllIterator_=null;d.call(this.context_,e);return this.nextStep_()};
$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(b){this.context_.yieldResult=void 0,this.context_.throw_(b)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a.return,done:!0}}return{value:void 0,done:!0}};
$jscomp.generator.Generator_=function(a){this.next=function(b){return a.next_(b)};this.throw=function(b){return a.throw_(b)};this.return=function(b){return a.return_(b)};$jscomp.initSymbolIterator();this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,b){b=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(b));$jscomp.setPrototypeOf&&$jscomp.setPrototypeOf(b,a.prototype);return b};
$jscomp.asyncExecutePromiseGenerator=function(a){function b(b){return a.next(b)}function d(b){return a.throw(b)}return new Promise(function(g,e){function t(a){a.done?g(a.value):Promise.resolve(a.value).then(b,d).then(t,e)}t(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))};
(function(a,b){function d(){return $jscomp.asyncExecutePromiseGeneratorProgram(function(a){return k?a.return(k):a.return(new Promise(function(a,c){var b=indexedDB.open("netflix.player");b.onerror=function(a){c(new G("Erro ao abrir BD",this.result))};b.onsuccess=function(b){b=b.target.result;try{var f=b.transaction(["namedatapairs"]).objectStore("namedatapairs").get("mslstore");f.onerror=function(a){c(new G("Erro ao obter objeto do BD",this.result))};f.onsuccess=function(b){k=b.target.result.data;
k.sequencenumber=JSON.parse(atob(k.masterTokenJSON.tokendata)).sequencenumber;a(k)}}catch(n){c(new G("Erro ao iniciar transa\u00e7\u00e3o",n))}}}))})}function g(a,b){var c={headers:{"Content-Type":"text/plain"},credentials:"include"};Object.keys(b||{}).forEach(function(a){"headers"===a?Object.keys(headers).forEach(function(a){return c.headers[a]=b.headers[a]}):c[a]=b[a]});c.method="POST";return fetch(a,c).then(function(a){return a.text()})}function e(a){var b;return $jscomp.asyncExecutePromiseGeneratorProgram(function(c){if(1==
c.nextAddress)return c.yield(crypto.subtle.sign({name:"HMAC"},k.hmacKey,P.encode(a)).then(function(a){return new Uint8Array(a)}),2);b=c.yieldResult;return c.return(A.fromByteArray(b))})}function t(a){var b=new Uint8Array(a);for(--a;0<=a;--a)b[a]=256*Math.random();return b}function r(a){var b,c,d;return $jscomp.asyncExecutePromiseGeneratorProgram(function(f){if(1==f.nextAddress)return b=t(16),c={keyid:k.esn+"_"+k.sequencenumber,sha256:"AA==",iv:A.fromByteArray(b)},f.yield(crypto.subtle.encrypt({name:"AES-CBC",
iv:b},k.encryptionKey,P.encode(a)).then(function(a){return new Uint8Array(a)}),2);d=f.yieldResult;c.ciphertext=A.fromByteArray(d);return f.return(JSON.stringify(c))})}function K(){var a;return $jscomp.asyncExecutePromiseGeneratorProgram(function(b){if(1==b.nextAddress)return b.yield(crypto.subtle.exportKey("spki",k.keyxPublicKey).then(function(a){return new Uint8Array(a)}),2);a=b.yieldResult;return b.return(A.fromByteArray(a))})}function x(a){var b,c,d,h,l,n,m;return $jscomp.asyncExecutePromiseGeneratorProgram(function(f){if(1==
f.nextAddress)return b=Math.random()*Math.pow(2,52),d=c={sender:k.esn,capabilities:{languages:[],compressionalgos:a&&(Array.isArray(a)?a:[a])||[]},renewable:!0,messageid:b},f.yield(K(),2);d.keyrequestdata=[{scheme:"ASYMMETRIC_WRAPPED",keydata:{publickey:f.yieldResult,mechanism:"JWK_RSA",keypairid:"rsaKeypairId"}}];if(k.userList&&k.userList.length){h=[];l=$jscomp.makeIterator(k.userList[0].serviceTokenJSONList);for(n=l.next();!n.done;n=l.next())m=n.value,h.push(m);c.useridtoken=k.userList[0].userIdTokenJSON;
c.servicetokens=h}return f.return({id:b,header:JSON.stringify(c)})})}function E(a){var b,c,d,h,l,n,m,H,u,Q,g,p;return $jscomp.asyncExecutePromiseGeneratorProgram(function(f){switch(f.nextAddress){case 1:return f.yield(x(),2);case 2:return b=f.yieldResult,f.yield(r(b.header),3);case 3:return c=f.yieldResult,d=k.masterTokenJSON,h=btoa(c),f.yield(e(c),4);case 4:return l={mastertoken:d,headerdata:h,signature:f.yieldResult},n=JSON.stringify(a),m=A.fromByteArray(aa.compress(n)),H={messageid:b.id,data:m,
compressionalgo:"LZW",sequencenumber:1,endofmsg:!0},f.yield(r(JSON.stringify(H)),5);case 5:return u=f.yieldResult,Q=btoa(u),f.yield(e(u),6);case 6:return g={payload:Q,signature:f.yieldResult},p=JSON.stringify(l)+JSON.stringify(g),f.return(p)}})}function W(a){var b,c,e,h;return $jscomp.asyncExecutePromiseGeneratorProgram(function(f){switch(f.nextAddress){case 1:return f.yield(d(),2);case 2:return b={version:2,url:"/manifest",languages:["en-US"],uiVersion:"shakti-vb45817f4",clientVersion:"6.0011.445.051",
params:{type:"standard",viewableId:a,profiles:"playready-h264mpl30-dash playready-h264mpl31-dash playready-h264hpl30-dash playready-h264hpl31-dash vp9-profile0-L30-dash-cenc vp9-profile0-L31-dash-cenc heaac-2-dash ddplus-2.0-dash ddplus-atmos-dash ddplus-5.1-dash dd-5.1-elem ddplus-5.1hq-dash dfxp-ls-sdh".split(" "),flavor:"STANDARD",drmType:"widevine",drmVersion:25,usePsshBox:!0,isBranching:!1,useHttpsStreams:!0,imageSubtitleHeight:1080,uiVersion:"shakti-vb45817f4",clientVersion:"6.0011.445.051",
supportsPreReleasePin:!0,supportsWatermark:!0,showAllSubDubTracks:!0,videoOutputInfo:[{type:"DigitalVideoOutputDescriptor",outputType:"unknown",supportedHdcpVersions:[],isHdcpEngaged:!1}],preferAssistiveAudio:!1,isNonMember:!1}},f.yield(E(b),3);case 3:return c=f.yieldResult,f.yield(g(ba.manifest,{body:c}),4);case 4:return e=f.yieldResult,f.yield(Z(X(e)),5);case 5:return h=f.yieldResult,f.return(h)}})}function Z(a){var b,c,d,h,l,n,m,H,e;return $jscomp.asyncExecutePromiseGeneratorProgram(function(f){switch(f.nextAddress){case 1:b=
"",c=$jscomp.makeIterator(a),d=c.next();case 2:if(d.done){f.jumpTo(4);break}h=d.value;l=JSON.parse(atob(h));n=A.toByteArray(l.iv);m=A.toByteArray(l.ciphertext);return f.yield(crypto.subtle.decrypt({name:"AES-CBC",iv:n},k.encryptionKey,m).then(function(a){return new Uint8Array(a)}),5);case 5:H=f.yieldResult;e=JSON.parse((new TextDecoder).decode(H));b+=atob(e.data);d=c.next();f.jumpTo(2);break;case 4:return f.return(JSON.parse(b))}})}function X(a){for(var b=[],c=a.indexOf('payload":"'),d;~c;)c+=10,
d=a.indexOf('"',c),b.push(a.slice(c,d)),c=a.indexOf('payload":"',d);return b}function Y(a){return new Promise(function(b){setTimeout(b,a)})}function F(a,b){if(a){var c=a;Array.isArray(c)?c=!0:(c=Object.prototype.toString.call(c),c="[object HTMLCollection]"===c||"[object NodeList]"===c?!0:!1);c||(a=[a]);for(c=a.length-1;0<=c;--c)a[c].style.display=b}}function z(a){F(a,"none")}function q(a,b){b=void 0===b?document:b;return b.querySelector(a)}function R(a,b){b=void 0===b?document:b;return b.querySelectorAll(a)}
function D(a,b){a=""+a;return"0".repeat(Math.max(0,b-a.length))+a}function ca(a){var b=function(a){var b=Math.round(~~a.substr(-8,7)/1E4);a=~~a.slice(0,-8);var c=a%60,f=Math.floor(a/60%60);return D(Math.floor(a/3600),2)+":"+D(f,2)+":"+D(c,2)+","+D(b,3)},c=(new DOMParser).parseFromString(a,"text/xml"),d=[];a=c.getElementsByTagName("style");for(var h=a.length-1;0<=h;--h){var l=a[h];"italic"===l.getAttribute("tts:fontStyle")&&d.push(l.getAttribute("xml:id"))}a=function(a,b){return~d.indexOf(b.getAttribute("style"))?
"<i>"+a+"</i>":a};h=/<\/i>\n<i>/g;c=c.getElementsByTagName("p");l=c.length;for(var n=[],m=0,e=0,u;m<l;){for(var g=c[m++],v=g.childNodes,p=v.length,y="",L=0;L<p;++L){var k=v[L];"br"===k.tagName?y+="\n":k.textContent&&(y="span"===k.tagName?y+a(k.textContent,k):y+k.textContent)}y&&(v=b(g.getAttribute("begin")),p=b(g.getAttribute("end")),y=a(y,g),v===u?n[e-1]+="\n"+y.replace(h,"\n"):n[e]=++e+"\n"+v+" --\x3e "+p+"\n"+y.replace(h,"\n"),u=v)}n.push("");return n.join("\n\n")}function da(a){if((a=q(".video-title > div")||
q(".player-status")||q(".video-title > h4"))&&1<a.children.length){var b=a.children,c=/(\d+):.+?(\d+)$/.exec(b[1].textContent);if(c)return b[0].textContent+".S"+D(c[1],2)+"E"+D(c[2],2)}return a&&a.textContent||""}function ea(a,b){var c=URL.createObjectURL(a);a=document.createElement("a");a.style.display="none";a.download=b;a.href=c;document.body.appendChild(a);a.click();a.remove();setTimeout(function(){return URL.revokeObjectURL(c)},1E4)}function fa(a,b){for(var c=0,f=a.length;c<f;++c)a[c].addEventListener("click",
b)}function S(a,b){return b.includes(a)?a:b[0]}function T(a,b,d){for(var c="pt-BR"===navigator.language?"For\u00e7ada":"Forced",f={},l=0,n=a.length;l<n;f={$jscomp$loop$prop$langTrack$8:f.$jscomp$loop$prop$langTrack$8},++l){var m=a[l],e=m.language;if(e)if(b[e]||(b[e]={}),f.$jscomp$loop$prop$langTrack$8=b[e],d){e=m.streams;m="ASSISTIVE"===m.trackType?"-ad":"";for(var u={},g=e.length-1;0<=g;--g){var C=e[g],p=C.content_profile+m;u[p]=!0;C={bitrate:C.bitrate,type:"AUDIO",text:C.bitrate+"kbps",downloadUrl:C.urls[0].url};
f.$jscomp$loop$prop$langTrack$8[p]||(f.$jscomp$loop$prop$langTrack$8[p]=[]);f.$jscomp$loop$prop$langTrack$8[p].push(C)}Object.keys(u).forEach(function(a){return function(b){a.$jscomp$loop$prop$langTrack$8[b].sort(function(a,b){return b.bitrate-a.bitrate})}}(f))}else"timedtext"===m.type&&(u=m.ttDownloadables,f.$jscomp$loop$prop$langTrack$8["dfxp-ls-sdh"]||(f.$jscomp$loop$prop$langTrack$8["dfxp-ls-sdh"]=[]),e="closedcaptions"===m.rawTrackType?" [CC]":"",u=u["dfxp-ls-sdh"].downloadUrls,e={isForced:m.isForcedNarrative,
type:"SUBTITLES",isCC:""!==e,text:m.isForcedNarrative?c+e:"Normal"+e,downloadUrl:u[Object.keys(u)[0]]},e.isForced?f.$jscomp$loop$prop$langTrack$8["dfxp-ls-sdh"].push(e):f.$jscomp$loop$prop$langTrack$8["dfxp-ls-sdh"].unshift(e))}}function ha(a){if(a.error)throw new M(a.error.detail);var c=a.result,d={};T(c.audio_tracks,d,!0);T(c.timedtexttracks,d,!1);var e={"ddplus-5.1hq-dash":0,"ddplus-5.1hq-dash-ad":1,"ddplus-atmos-dash":2,"ddplus-atmos-dash-ad":3,"dd-5.1-elem":4,"dd-5.1-elem-ad":5,"ddplus-5.1-dash":6,
"ddplus-5.1-dash-ad":7,"ddplus-2.0-dash":8,"ddplus-2.0-dash-ad":9,"heaac-2-dash":10,"heaac-2-dash-ad":11,"dfxp-ls-sdh":12},h=Object.keys(d),l={"ddplus-5.1hq-dash":"E-AC-3 5.1 HQ:","ddplus-atmos-dash":"E-AC-3 5.1 ATMOS:","dd-5.1-elem":"AC-3 5.1:","ddplus-5.1-dash":"E-AC-3 5.1:","ddplus-2.0-dash":"E-AC-3 2.0:","heaac-2-dash":"AAC 2.0:","dfxp-ls-sdh":"pt-BR"===navigator.language?"Legendas:":"Subtitles:"};Object.keys(l).forEach(function(a){a.startsWith("dfxp")||(l[a+"-ad"]=l[a].replace(":"," [AD]:"))});
a=document.createElement("section");a.id="flix-manifest";a.setAttribute("data-movieid",c.movieId);a.innerHTML='\n <div class="flix-middle">\n <div class="flix-select">\n <select name="flix-lang" id="flix-lang">\n '+h.map(function(a){return'<option value="'+a+'">'+a+"</option>"}).join("")+'\n </select>\n </div>\n <div class="flix-select">\n <select name="flix-subtitle-type" id="flix-subtitle-type">\n <option value="SRT">SRT</option>\n <option value="DFXP">DFXP</option>\n </select>\n </div>\n <div class="flix-select">\n <select name="flix-charset" id="flix-charset">\n <option value="UTF8">UTF-8</option>\n <option value="UTF8B">UTF-8 BOM</option>\n <option value="ANSI">ANSI</option>\n </select>\n </div>\n </div>\n '+
h.map(function(a){return'<div data-lang="'+a+'" class="flix-content">\n '+Object.keys(d[a]).sort(function(a,b){return e[a]-e[b]}).map(function(b){return"<ul><li>"+l[b]+"</li>\n "+d[a][b].map(function(a){return'<li><a data-type="'+a.type+'" '+("SUBTITLES"===a.type?'data-isforced="'+a.isForced+'" data-iscc="'+a.isCC+'"':"")+' href="'+a.downloadUrl+'">'+a.text+"</a></li>"}).join("")+"\n </ul>"}).join("")+"\n </div>\n "}).join("")+"\n ";var n=q("#flix-lang",
a),m=q("#flix-subtitle-type",a),g=q("#flix-charset",a),u=R(".flix-content",a),k=Object.create(null),v=da()||"subtitle";fa(R('a[data-type="SUBTITLES"]',a),function(a){a.preventDefault();var c="true"===this.getAttribute("data-iscc"),f="true"===this.getAttribute("data-isforced"),d=n.value,e=g.value,h=m.value;fetch(this.href).then(function(a){if(!a.ok)throw Error(a.statusText);return"DFXP"===h?a.blob():a.text()}).then(function(a){if(a instanceof Blob){var b=a;a="dfxp"}else{a=ca(a);a=a.replace(/(\r)?\n/g,
"\r\n");b=[];switch(e.toUpperCase()){case "ANSI":for(var h=new Uint8Array(a.length),l=0,n=a.length;l<n;++l){var m=a.charCodeAt(l);h[l]=256>m?m:37}b.push(h);break;case "UTF8B":b.push("\ufeff");default:b.push(a)}b=new Blob(b,{type:"application/octet-stream"});a="srt"}ea(b,""+v+(c?".[CC]":"")+"."+d+(f?".forced":"")+"."+a)}).catch(b.error)});m.addEventListener("change",function(){g.disabled="DFXP"===this.value?"disabled":"";localStorage.setItem("flix-subtitle-type",this.value)});g.addEventListener("change",
function(){localStorage.setItem("flix-charset",this.value)});n.value=localStorage.getItem("flix-lang")||"en";for(c=u.length-1;0<=c;--c)h=u[c],k[h.getAttribute("data-lang")]=h,h.style.display="none";if(c=k[n.value])c.style.display="";n.addEventListener("change",function(){localStorage.setItem("flix-lang",this.value);z(u);k[this.value].style.display=""});m.value=S(localStorage.getItem("flix-subtitle-type"),["SRT","DFXP"]);g.value=S(localStorage.getItem("flix-charset"),["UTF8","UTF8B","ANSI"]);c=new Event("change");
m.dispatchEvent(c);g.dispatchEvent(c);return a}function I(a){return"none"===a.style.display}function ia(){var a,f,d,e,h,l;return $jscomp.asyncExecutePromiseGeneratorProgram(function(c){switch(c.nextAddress){case 1:if(!I(w))return z(w),c.return();if(!I(J))return U.pause(),F(w,""),c.return();a=/^\/watch\/(\d{4,})$/.exec(location.pathname);c.setCatchFinallyBlocks(2);if(!a){c.jumpTo(4);break}U.pause();f=a[1];if(B.getAttribute("data-movieid")===f)return F(w,""),c.return();B.remove();F(w,"");F(J,"");return c.yield(W([parseInt(f)]),
5);case 5:d=c.yieldResult,B=ha(d),N.appendChild(B);case 4:c.leaveTryBlock(3);break;case 2:e=c.enterCatchBlock(),b.error(e),h=document.createElement("section"),h.setAttribute("data-movieid","0"),h.id="flix-manifest",l=document.createElement("div"),l.className="flix-error",l.textContent=e.message,h.appendChild(l),B=h,N.appendChild(B);case 3:z(J),c.jumpToEnd()}})}function ja(){document.body.addEventListener("keydown",function(a){I(w)||a.stopPropagation();a.altKey&&a.shiftKey&&"KeyN"===a.code&&ia()},
!0);document.body.addEventListener("keydown",function(a){"Escape"!==a.code||I(w)||(z(w),a.stopPropagation())},!0)}function ka(){var a=document.createElement("div");a.id="flix-overlay";a.style.display="none";a.innerHTML='\n <div id="flix-dialog">\n <div class="flix-header">\n <div class="text" title="'+O+" v"+V+'"><img src="'+la+'"></img>'+O+' <span class="small-text">v'+V+'</span></div>\n <div class="small-text author">by '+ma+'</div>\n </div>\n <hr>\n <div id="flix-loading" style="display: none"><div class="flix-bar"></div></div>\n <span id="flix-dialog-close" title="'+
("pt-BR"===navigator.language?"Fechar":"Close")+'">\u00d7</span>\n <section data-movieid="-1" id="flix-manifest"></section>\n </div>\n ';document.body.appendChild(a);w=q.id("flix-overlay");J=q.id("flix-loading");B=q.id("flix-manifest");N=q.id("flix-dialog");q.id("flix-dialog-close").addEventListener("click",function(){z(w)})}if(a.top===a.self){a=b.info.script;var O=a.name,V=a.version;a=b.info.scriptMetaStr;var ma=/@author\s*(.+)/.exec(a)[1],la=/@icon\s*(.+)/.exec(a)[1],na=
"["+O+"]";["log","error"].forEach(function(a){b[a]=function(b){for(var c=[],d=0;d<arguments.length;++d)c[d-0]=arguments[d];console[a].apply(console,[na].concat($jscomp.arrayFromIterable(c)))}});b.log("Loading...");var ba={manifest:"https://www.netflix.com/nq/msl_v1/cadmium/pbo_manifests/^1.0.0/router"},A=function(){function a(a,c,d){for(var e=[],f=c;f<d;f+=3)c=(a[f]<<16)+(a[f+1]<<8)+a[f+2],e.push(b[c>>18&63]+b[c>>12&63]+b[c>>6&63]+b[c&63]);return e.join("")}for(var b=[],d=[],e=0;64>e;++e)b[e]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[e],
d["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charCodeAt(e)]=e;d[45]=62;d[95]=63;return{toByteArray:function(a){var b;var c=b=a.length;if(0<c%4)throw Error("Invalid string. Length must be a multiple of 4");c="="===a[c-2]?2:"="===a[c-1]?1:0;var f=new Uint8Array(3*b/4-c);var e=0<c?b-4:b;var h=0;for(b=0;b<e;b+=4){var g=d[a.charCodeAt(b)]<<18|d[a.charCodeAt(b+1)]<<12|d[a.charCodeAt(b+2)]<<6|d[a.charCodeAt(b+3)];f[h++]=g>>16&255;f[h++]=g>>8&255;f[h++]=g&255}2===c?(g=d[a.charCodeAt(b)]<<
2|d[a.charCodeAt(b+1)]>>4,f[h++]=g&255):1===c&&(g=d[a.charCodeAt(b)]<<10|d[a.charCodeAt(b+1)]<<4|d[a.charCodeAt(b+2)]>>2,f[h++]=g>>8&255,f[h++]=g&255);return f},fromByteArray:function(c){for(var d=c.length,f=d%3,e="",g=[],h=0,k=d-f;h<k;h+=16383)g.push(a(c,h,h+16383>k?k:h+16383));1===f?(c=c[d-1],e+=b[c>>2],e+=b[c<<4&63],e+="=="):2===f&&(c=(c[d-2]<<8)+c[d-1],e+=b[c>>10],e+=b[c>>4&63],e+=b[c<<2&63],e+="=");g.push(e);return g.join("")}}}(),G=function(a,b){a=Error.call(this,a);this.message=a.message;"stack"in
a&&(this.stack=a.stack);this._error=b};$jscomp.inherits(G,Error);$jscomp.global.Object.defineProperties(G.prototype,{error:{configurable:!0,enumerable:!0,get:function(){return this._error}}});var k,aa=function(){function a(a,b){var c=b||a.length;return a.reduce(function(a,b,d){return d<c?a+String.fromCharCode(b):a},"")}for(var b=Object.create(null),d=0;256>d;++d)b[String.fromCharCode(d)]=d;var e=new TextEncoder;return{compress:function(c){function d(a,b){for(;0<b;){if(v>=f.length)return!1;var c=a;
if(b>p)c>>>=b-p,f[v]|=c&255,b-=p,p=8,++v;else{c<<=p-b;c&=255;c>>>=8-p;f[v]|=c&255;p-=b;0===p&&(p=8,++v);break}}return!0}c=e.encode(c);var f=new Uint8Array(c.length),g=Object.create(null),h=c.length,k=[];for(q in b)g[q]=b[q];var q=256;var v=0,p;var r=p=8;for(var t=0;t<h;++t){var w=c[t];k.push(w);var x=a(k);if(!g[x]){k=a(k,k.length-1);if(!d(g[k],r))return null;0!==q>>r&&++r;g[x]=q++;k=[w]}}return 0<k.length&&!d(g[a(k)],r)?null:f.subarray(0,8>p?v+1:v)}}}(),P=new TextEncoder;q.id=function(a,b){b=void 0===
b?document:b;return b.getElementById(a)};q.waitDOM=function(){return new Promise(function(a){"loading"!==document.readyState?a():document.addEventListener("DOMContentLoaded",a)})};var U=function(){return{pause:function(){var a;return $jscomp.asyncExecutePromiseGeneratorProgram(function(b){if(1==b.nextAddress)return b.yield(Y(1500),2);(a=q(".button-nfplayerPause")||q(".icon-player-pause"))&&a.click();b.jumpToEnd()})}}}(),M=function(a,b){a=Error.call(this,a);this.message=a.message;"stack"in a&&(this.stack=
a.stack);this.name="ManifestError";this._cause=b};$jscomp.inherits(M,Error);$jscomp.global.Object.defineProperties(M.prototype,{cause:{configurable:!0,enumerable:!0,get:function(){return this._cause}}});var w,J,B,N;(function(){return $jscomp.asyncExecutePromiseGeneratorProgram(function(a){if(1==a.nextAddress){var b=document.createElement("style");b.textContent='\n @font-face {\n font-family: \'eu-bold\';\n font-weight: normal;\n font-style: normal;\n src: url(\'//flixscript.github.io/font/eu.woff2\') format(\'woff2\');\n}\n#flix-overlay {\n background-color: rgba(46, 46, 46, .9);\n margin: 0;\n padding: 0;\n border: 0;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n position: fixed;\n overflow: hidden;\n z-index: 3000;\n}\n#flix-dialog {\n font-family: "eu-bold";\n font-size: 16px;\n background: none repeat scroll 0 0 padding-box #242223;\n box-shadow: 0 0 10px #000;\n box-sizing: border-box;\n color: #fff;\n top: 50%;\n left: 50%;\n position: absolute;\n margin: -150px 0px 0px -330px;\n padding: 7px;\n width: 580px;\n height: 350px;\n display: flex;\n flex-direction: column;\n line-height: 1;\n}\n#flix-dialog section, .flix-content ul {\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n#flix-dialog hr {\n margin-left: 0;\n margin-right: 0;\n border: 0;\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(256, 245, 254, 0.75), rgba(0, 0, 0, 0));\n height: 1px;\n}\n\n.flix-header {\n display: flex;\n line-height: 32px;\n margin: 5px 5px 0;\n}\n\n.flix-header img {\n margin-right: 6px;\n height: 26px;\n width: 26px;\n vertical-align: sub;\n}\n\n.flix-header .text {\n font-size: 23px;\n color: #bd0c0c;\n flex-grow: 1;\n text-align: center;\n}\n.flix-header .small-text {\n font-size: 9px;\n color: #746D6D;\n vertical-align: middle;\n}\n\n.flix-header .author {\n text-align: right;\n}\n\n#flix-dialog-close {\n position: absolute;\n top: 5px;\n right: 5px;\n line-height: 12px;\n text-decoration: none;\n cursor: pointer;\n}\n\n.flix-middle {\n display: flex;\n justify-content: center;\n}\n\n#flix-dialog label {\n line-height: 22px;\n font-size: 13px;\n}\n\n#flix-dialog select {\n background-color: #272525;\n border: 1px solid #120202;\n border-radius: 3px;\n color: #fff;\n cursor: pointer;\n margin-left: 3px;\n font-family: "eu-bold";\n font-size: 12px;\n outline: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n padding: 3px 24px;\n}\n\n#flix-dialog select:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.flix-select {\n position: relative;\n}\n\n.flix-select:after {\n content: ">";\n color: #FFF;\n -webkit-transform: rotate(90deg);\n -moz-transform: rotate(90deg);\n transform: rotate(90deg);\n right: 11px;\n top: 5px;\n font-size: 11px;\n position: absolute;\n}\n\n#flix-dialog a {\n color: #b7a8a8;\n text-decoration: none;\n}\n\n#flix-dialog a:hover {\n color: #e93e30;\n}\n\n.flix-content {\n margin: 24px 0 0 48px;\n}\n.flix-content ul, .flix-content li {\n list-style: none;\n}\n.flix-content ul {\n display: flex;\n flex-direction: row;\n margin-top: 10px;\n}\n.flix-content li:first-child {\n width: 150px;\n}\n.flix-content li {\n margin-left: 3px;\n}\n.flix-content li:not(:nth-child(1)) + li:before {\n content: " | ";\n}\n.flix-item {\n margin-top: 5px;\n}\n#flix-loading {\n position: relative;\n margin-bottom: 5px;\n width: 100%;\n height: 12px;\n background-color: #3b3a38;\n border-radius: 4px;\n}\n.flix-bar {\n content: "";\n display: inline;\n position: absolute;\n width: 0;\n height: 100%;\n left: 50%;\n text-align: center;\n background-color: #e9250a;\n border-radius: 4px;\n animation: floading 4s linear infinite;\n}\n@keyframes floading {\n from {\n left: 50%;\n width: 0;\n }\n to {\n left: 0;\n width: 100%;\n }\n}\n\n.flix-error {\n text-align: center;\n line-height: 30px;\n background-color: brown;\n}';
b.type="text/css";(document.head||document.documentElement).appendChild(b);return a.yield(q.waitDOM(),2)}ka();ja();a.jumpToEnd()})})()}})(window,"undefined"!==typeof GM&&GM||{info:GM_info});}).call(window);
/* jshint ignore:end */
@bojerka
Copy link

bojerka commented Feb 10, 2022

After latest Chrome update not working

up: true my bad.. working.

@gru123
Copy link

gru123 commented Feb 10, 2022

After latest Chrome update not working

Tested on 98.0.4758.82 - works just fine

@aaawv
Copy link

aaawv commented Feb 20, 2022

selling amazon 4k key (l1)

contact
email: aaawv@protonmail.com
dc: aa.#6788

@Sahoo2019
Copy link

Sahoo2019 commented Feb 21, 2022 via email

@DexJP1998
Copy link

Anyone else getting a message saying "JSON parse: unexpected end of data at line 1 column 1 of the JSON data"? If so, any possible fix?

@DexJP1998
Copy link

DexJP1998 commented Apr 14, 2022 via email

@pikopikopikopiko
Copy link

10 bucks and I'll fix for ya ;)

@mario123z
Copy link

10 bucks and I'll fix for ya ;)

I'm interested.

@gru123
Copy link

gru123 commented Apr 18, 2022

Don't pay scammers.
Just change this:
"https://www.netflix.com/nq/msl_v1/cadmium/pbo_manifests/^1.0.0/router"
to this:
"https://www.netflix.com/nq/msl_v1/cadmium/pbo_licenses/%5E1.0.0/router?reqName=manifest"

@voktay10
Copy link

Don't pay scammers. Just change this: "https://www.netflix.com/nq/msl_v1/cadmium/pbo_manifests/^1.0.0/router" to this: "https://www.netflix.com/nq/msl_v1/cadmium/pbo_licenses/%5E1.0.0/router?reqName=manifest"

This works just fine. I have a question though. When we download subtitle before, it was showing the episode number and name with shows name, but now it just says subtitle. Any way to fix this?

@pikopikopikopiko
Copy link

pikopikopikopiko commented Apr 22, 2022

Im not a scammer idiot (if I would I wanted 100$ or more like scammers do!), Ive made some small changes to improve this, like support of AAC instread poor EAC 128kbps, if you are still interested mail to pl00xer@protonmail.com

@bojerka
Copy link

bojerka commented Apr 23, 2022

what is wrong on E-AC3?

@gru123
Copy link

gru123 commented Apr 23, 2022

what is wrong on E-AC3?

Nothing. He's just spinning a story ;)

@anonyymous2021
Copy link

thank uu!!

@DexJP1998
Copy link

Looks like Netflix might've changed the "ShowAllSubDubTracks" bit cause it's not.

@Spelvi
Copy link

Spelvi commented Jun 11, 2023

is this not updated anymore? The last revision of the code was in 2019, someone could take over this code and update it, it's a shame to leave it abandoned.

@sachikocchi
Copy link

I made the change that gru123 mentioned, but I'm still getting this error message. any fixes?
Screenshot 2024-01-05 at 12 23 36 PM

@sachikocchi
Copy link

whoops never mind, i just tried it again and now it's working!

@Amb33r
Copy link

Amb33r commented May 2, 2024

image

bro plis fix :)

@ozymandias924
Copy link

Hi XoR, is the script gonna be fixed? Thanks for the support.

@JP-dot8822
Copy link

please fix this script,, thanks

@DeadpoolD6969
Copy link

hello XOR,, can u please fix this script bro
please reply

@Tanem67
Copy link

Tanem67 commented Jun 5, 2024

Hello, xor10 the code is broken, do you have a chance to fix it?
327567434-886853a6-92a7-47b2-8b26-3873ddd92169

@torislav
Copy link

hello, bumping again about problem. waiting for fix!

@pikopikopikopiko
Copy link

15 bucks and I'll send you fixed

@voktay10
Copy link

voktay10 commented Apr 4, 2025

Please, can somebody who understands this code can fix this?

@gru123
Copy link

gru123 commented Apr 5, 2025

@JP-dot8822
Copy link

NF-ASD

Thanks bro

@voktay10
Copy link

voktay10 commented Apr 6, 2025

NF-ASD

Thank you very much. You are our hero.

@ricardOwner
Copy link

NF-ASD

Thankyoouuuuuuuu

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment