Skip to content

Instantly share code, notes, and snippets.

@Inobtenio
Created June 25, 2019 19:37
Show Gist options
  • Save Inobtenio/5a5eeae64ff0461a8b0f5d6f095838a7 to your computer and use it in GitHub Desktop.
Save Inobtenio/5a5eeae64ff0461a8b0f5d6f095838a7 to your computer and use it in GitHub Desktop.
Play proper Evangelion endings on Netflix.
const mediaName = 'Neon Genesis Evangelion'; // Works for romanian/latin alphabet based languages only
var isEvangelion = false;
var epNumber;
var audio;
var video;
var audioLastPosition = 0;
var episodes = {
"1": { 'endingThemeURL': 'https://instaud.io/_/3Rdt.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"2": { 'endingThemeURL': 'https://instaud.io/_/3Rdu.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"3": { 'endingThemeURL': 'https://instaud.io/_/3Rdv.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"4": { 'endingThemeURL': 'https://instaud.io/_/3Rdw.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"5": { 'endingThemeURL': 'https://instaud.io/_/3Rdx.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"6": { 'endingThemeURL': 'https://instaud.io/_/3Rdy.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"7": { 'endingThemeURL': 'https://instaud.io/_/3Rdz.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"8": { 'endingThemeURL': 'https://instaud.io/_/3RdA.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"9": { 'endingThemeURL': 'https://instaud.io/_/3RdB.mp3', 'secondsLeftToMuteVideo': 97.0, 'secondsLeftToStartTheme': 96.7 },
"10": { 'endingThemeURL': 'https://instaud.io/_/3RdC.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"11": { 'endingThemeURL': 'https://instaud.io/_/3RdD.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"12": { 'endingThemeURL': 'https://instaud.io/_/3RdE.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"13": { 'endingThemeURL': 'https://instaud.io/_/3RdF.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"14": { 'endingThemeURL': 'https://instaud.io/_/3RdG.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"15": { 'endingThemeURL': 'https://instaud.io/_/3RdH.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"16": { 'endingThemeURL': 'https://instaud.io/_/3RdI.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"17": { 'endingThemeURL': 'https://instaud.io/_/3RdJ.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"18": { 'endingThemeURL': 'https://instaud.io/_/3RdK.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"19": { 'endingThemeURL': 'https://instaud.io/_/3RdL.mp3', 'secondsLeftToMuteVideo': 96.0, 'secondsLeftToStartTheme': 95.7 },
"20": { 'endingThemeURL': 'https://instaud.io/_/3RdM.mp3', 'secondsLeftToMuteVideo': 98.0, 'secondsLeftToStartTheme': 97.7 },
"21": { 'endingThemeURL': 'https://instaud.io/_/3RdN.mp3', 'secondsLeftToMuteVideo': 136.0, 'secondsLeftToStartTheme': 135.7 },
"22": { 'endingThemeURL': 'https://instaud.io/_/3RdO.mp3', 'secondsLeftToMuteVideo': 127.0, 'secondsLeftToStartTheme': 126.7 },
"23": { 'endingThemeURL': 'https://instaud.io/_/3RdP.mp3', 'secondsLeftToMuteVideo': 136.0, 'secondsLeftToStartTheme': 133.7 },
"24": { 'endingThemeURL': 'https://instaud.io/_/3RdQ.mp3', 'secondsLeftToMuteVideo': 135.0, 'secondsLeftToStartTheme': 132.7 },
"25": { 'endingThemeURL': 'https://instaud.io/_/3RdR.mp3', 'secondsLeftToMuteVideo': 97.0, 'secondsLeftToStartTheme': 96.5 },
"26": { 'endingThemeURL': 'https://instaud.io/_/3RdS.mp3', 'secondsLeftToMuteVideo': 81.0, 'secondsLeftToStartTheme': 79.7 },
}
var resetAudioPlayback = function() {
audio.currentTime = 0;
audio.pause();
}
var resetAudioAndVideo = function() {
audio.pause();
audio = undefined;
epNumber = undefined;
isEvangelion = false;
}
var watchingEvangelion = function() {
return document.querySelector('.ellipsize-text') && document.querySelector('.ellipsize-text').textContent.indexOf(mediaName) != -1;
}
var findEpNumber = function() {
return parseInt(document.getElementsByClassName('ellipsize-text')[0].children[1].textContent.substring(4,6));
}
function once(fn, context) {
var result;
return function() {
if (fn) {
result = fn.apply(context || this, arguments);
fn = null;
}
return result;
};
}
var playProperEndingTheme = function() {
isEvangelion = isEvangelion || watchingEvangelion();
if (isEvangelion) {
epNumber = epNumber || findEpNumber();
video = document.querySelector("video");
audio = audio || new Audio(episodes[String(epNumber)]['endingThemeURL']);
if (audio && video) {
secondsLeft = video.duration - video.currentTime;
secondsLeftToMuteVideo = episodes[String(epNumber)]['secondsLeftToMuteVideo'];
secondsLeftToStartTheme = episodes[String(epNumber)]['secondsLeftToStartTheme'];
var insideEndingTimeFrame = secondsLeft <= secondsLeftToStartTheme && secondsLeft >= secondsLeftToStartTheme - audio.duration;
var insideVideoMutingTimeFrame = secondsLeft <= secondsLeftToMuteVideo && secondsLeft >= secondsLeftToStartTheme - audio.duration;
var videoSkipped = audioLastPosition == 0 || Math.abs(audioLastPosition - audio.currentTime) == 0;
if (insideEndingTimeFrame && !video.paused) {
video.addEventListener("play", function() {
audio.play();
}, true);
video.addEventListener("pause", function() {
audio.pause();
}, true);
audio.onended = function() {
video.muted = false;
}
if (videoSkipped) {
audio.currentTime = secondsLeftToStartTheme - secondsLeft;
}
audioLastPosition = audio.currentTime;
audio.volume = video.volume;
once(audio.play());
} else {
video.muted = false;
if (insideEndingTimeFrame) {
audio.currentTime = secondsLeftToStartTheme - secondsLeft;
audio.volume = video.volume;
if (!video.paused) { audio.play(); }
}
if (insideVideoMutingTimeFrame) {
video.muted = true;
}
if (!insideEndingTimeFrame) {
resetAudioPlayback();
}
}
}
if (document.querySelector('.player-loading')) {
resetAudioAndVideo();
}
if (document.location.href.indexOf('watch') == -1) {
resetAudioAndVideo();
}
} else {
isEvangelion = watchingEvangelion();
}
}
var t=setInterval(playProperEndingTheme,100);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment