fixed for custom prefixes and region
// @name VRCPirate for booth.pm
// @namespace Violentmonkey Scripts
// @match https://*.booth.pm/*/items/*
// @match https://*.booth.pm/items/*
// @require https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js
// @grant GM_xmlhttpRequest
// @version 1.1
// @author doclan
// @description 2026/8/10 14:22:14
// ==/UserScript==
$(document).ready(() => {
// Splits by 'items/' and extracts the ID, cleaning up any trailing slashes or queries
const pathParts = window.location.pathname.split('items/');
const bid = pathParts[1] ? pathParts[1].split(/[/?]/)[0] : null;
if (!bid) return console.log("[VRCPirate] SOMETHING WENT WRONG (Could not parse Booth ID)");
const downloadBox = $('<div></div>');
const mainText = $('<p></p>');
downloadBox.append(mainText);
$($('#variations').parent()).before(downloadBox);
GM_xmlhttpRequest({
method: "GET",
url: `https://api-v2.vrcpirate.com/assets?page=1&search=${bid}`,
onload: function(response) {
try {
const data = JSON.parse(response.responseText);
if (data && data.meta && data.meta.totalItems > 0) {
mainText.html(`[🟢] <a href="https://vrcpirate.com/iviewer/${data.data[0].id}" target="__blank">Click Here</a>`);
}
} catch (e) {
console.error("[VRCPirate] Failed to parse API response", e);
}
}
});
console.log("[VRCPirate] UserScript Loaded!");
});