NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Netflix - Open Largest Images // @namespace Netflix // @version 1.1 // @description Get the largest Netflix images of each type // @author gazza911 // @match https://www.netflix.com/browse* // @match https://www.netflix.com/title* // @match https://www.netflix.com/search* // @match https://www.netflix.com/watch* // @icon https://www.google.com/s2/favicons?domain=netflix.com // @grant GM.openInTab // @run-at context-menu // @updateURL https://openuserjs.org/meta/gazza911/Netflix_-_Open_Largest_Images.meta.js // @require https://code.jquery.com/jquery-3.6.0.min.js // @license MIT // ==/UserScript== (function() { var apiUrl = netflix.reactContext.models.playerModel.data.config.ui.initParams.apiUrl; if (apiUrl) { var trackId; var episodeId; if ($(':focus').length > 0) { if ($(':focus').hasClass('previewModal--container')) { trackId = $(':focus').children(':first').children(':first').children(':first').attr("id"); if (!/^\d+$/.test(trackId)) { trackId = null; } } else { var href = $(':focus').attr('href'); href = href ?? $(':focus').closest('.slider-refocus').attr("href"); trackId = href ? getTrackId(href) : null; if (!trackId) { href = $(':focus').closest('.slider-refocus').attr("href"); trackId = href ? getTrackId(href) : null; } var ptrackData = $(':focus').find('.ptrack-content').data('ui-tracking-context'); if (ptrackData) { var startVideoIndex = ptrackData.indexOf('%22video_id%22:'); var endVideoIndex = ptrackData.indexOf(',', startVideoIndex); trackId = ptrackData.substr(startVideoIndex + 15, endVideoIndex - startVideoIndex - 15); episodeId = parseInt(trackId); } if (!trackId) { trackId = getTrackId(window.location.pathname); } } if (trackId) { $.get(apiUrl + '/metadata?movieid=' + trackId, function (data) { var images = {}; if (episodeId) { for (var season of data.video.seasons) { for (var episode of season.episodes) { if (episodeId === episode.episodeId) { images.episode = getHighestImages(episode.stills, 'w'); } } } } else { images.artwork = getHighestImages(data.video.artwork, 'w'); images.stills = getHighestImages(data.video.stills, 'w'); images.storyart = getHighestImages(data.video.storyart, 'w'); images.boxart = getHighestImages(data.video.boxart, 'h'); window.open(apiUrl + '/metadata?movieid=' + trackId); } for (var type in images) { for (var i = 0; i < images[type].length; i++) { GM.openInTab(images[type][i]); } } }); } } } else { console.log('Unable to get shakti build'); } })(); function getHighestImages(path, dimension) { var highestDimension = 0; var images = []; if (path) { for (var i = 0; i < path.length; i++) { if (path[i][dimension] > highestDimension) { images = [path[i].url]; highestDimension = path[i].h; } else if (path[i][dimension] === highestDimension) { if (images.indexOf(path[i].url) === -1) { images.push(path[i].url); } } } } return images; } function getTrackId(href) { if (href.indexOf('/watch/') === 0 || href.indexOf('/title/') === 0) { var end = href.indexOf('?'); if (end > 0) { return href.substr(7, end - 7); } else { return href.substr(7); } } }