2/1/2026, 9:08:47 PM
// ==UserScript==
// @name SauceNao DirectLinks
// @namespace Violentmonkey Scripts
// @match https://saucenao.com/search.php*
// @grant none
// @version 1.0
// @author me :3
// @license MIT
// @description 2/1/2026, 9:08:47 PM
// ==/UserScript==
const sitePatterns = [
{
name: 'nhentai',
regex: /(?<=nhentai\/)\d+/
},
{
name:'ehentai',
regex:/ehentai\/.*?([a-f0-9]{40})/
},
{
name:'kemono',
regex:/\/kp\/.*?([a-f0-9]{64})/
}]
const SiteLinks = {kemono:"https://kemono.cr/search_hash?hash=",ehentai:"https://exhentai.org/?f_shash=",nhentai:"https://nhentai.net/g/"}
const ResultNum = document.getElementsByClassName("resultimage");
function AddIcon(Data,targdiv){
const a = document.createElement("a");
const img = document.createElement("img");
img.width = 16;
img.height = 16;
img.border = 0;
img.alt = "";
const br = document.createElement("br");
br.style.lineHeight = "2px";
if(Data.name === "nhentai"){
img.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADc0lEQVRYR+1WWUhUYRT+7iz3zoyCpG22IIkhRUSSD23QagnaAplRVkZGkEKLJEFMlg+lBDH1YjTZQ1BYQUgEpRFFGaYUUqKWJS22qGmmjrPdWW7n3hybaRanmYl68MC83P/cc77/O9937jCJqWkC/lEIYIzMGIC/wYCGRppiVyBRkCPOyUAOBkZGwGuZA61yB7oYpzT0iI9gETXNsLNY6FAgWmB8KquFQFQpedQq7eiDEBkNiA3zrBzmOhV+5fxO5oSOM6Nebh/JCZuBGLrlPl6FDBsLWQAnNcrs0KrN6B2m3pUaFoAUuu0xiwpTnPKAJn5JN85XmSQN/B4hA2BJVOUmTUDKxWYD1HS3xogPjMMnyJABiNVEpZdYorCUhOcvdJwFlUqr3/OwAIhVOWLinCkKc3yMoZNEt0ltAO/bDJGz4WyHHBXmKCgIjHtUsFboWUtAfYTNgKt6qUWDlXalR7OdmiG0kucDRcQAZJINi63qkV5DtONWRQ/i577zHxEDsJiEqCNBuuK9TEC2ZnCU9hFcxRt5Fof5Xwy8I+o30whGC4mBIyd00ob40tWDR0+eSu8kJ81A+oolmD41HhzLYmDQgGfPm3H3YR1MJrNHXVF65eZozCcxusJA/k+LCnIEAoX44v3aBhQdP4XiogKsW7McDOPtn+6eXhzUlqGhsWmkWY6Nw36ryuuyucTAy2BE6ALQ1NoGtUqFmYkJ4HkbWtre4GtvH1ilEgtS59EZJzXpJzZWb8rD975+bOE5FNDvdwuKeRfJhueDsaELgOsKVbfvofSsHt+ogSumxU9Cpf40pkyeKD2qK9UDV6qR7Ea7+NxGvzf0ve8nF6jpQ3VIY4IhgBckDbgDuFl9H4VHy3xqJ3t9Okq1hdIZf6cOhkKdR95jhR1naPV2+Nn7vop6AVi2IRcfP3f6BJA0IwE11y9IZ7aGZgzuLBnJu6W04SRnQuC1413WA4DNZsesxRkY1qRX9oS4WNRXX5WeG1rfoiurCLGCDC/kThSoh8AT7X8aHgA6u3uwJDPHb43xsePQUHNNOm951Y6t2wqgpe13mb52zTT3UMIDwNsPn5CWtStoAOu250v/gkZbt4GAhQ0glFu7vzMGYIyB/4MBw5BRclLHp05h7Y69vD9lx46LYR7cuMSK523t74XsPQf85gbrDlpdxh8egOgJOdosqgAAAABJRU5ErkJggg==" ;
a.href = Data.link;
a.appendChild(img);
targdiv.appendChild(a);
targdiv.appendChild(br);
}
if(Data.name === "ehentai"){
img.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAVElEQVQ4T2NkoBAwUqifAWxAGpvgf3SDZv16DzccJg8TQ+ZT1wBkW5FdRLQLBt4AmLNBLkF2NrZABqkFqcMaiGQbMPBhQLELkOOevimRkgxFcW4EAHGHkBEVa0F8AAAAAElFTkSuQmCC";
a.href = Data.link;
a.appendChild(img);
targdiv.appendChild(a);
targdiv.appendChild(br);
}
if(Data.name === "kemono"){
const targetLink = targdiv.querySelector('a[href*="kemono.party"]');
targetLink.href = Data.link;
}
}
function ProcessLinks(link,ParentDiv)
{
for (const rule of sitePatterns) {
const found = link.match(rule.regex);
const IconDiv = ParentDiv.querySelector(".resultmiscinfo");
if(found && rule.name === "nhentai"){let Data = {name:rule.name,link:SiteLinks.nhentai+found[0]};
AddIcon(Data,IconDiv);break;}
if(found && rule.name === "ehentai"){let Data = {name:rule.name,link:SiteLinks.ehentai+found[1]};
AddIcon(Data,IconDiv); break;}
if(found && rule.name === "kemono"){let Data = {name:rule.name,link:SiteLinks.kemono+found[1]};
AddIcon(Data,IconDiv); break;}
}
}
for (let i = 0; i < ResultNum.length; i++) {
const imgDiv = document.getElementById("resImage" + i);
if (!imgDiv) continue;
const link = imgDiv.getAttribute('data-src') || imgDiv.getAttribute('src');
if (!link) continue;
const tr = imgDiv.closest("tr");
ProcessLinks(link,tr);
}