您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Download Janitor AI characters as Tavern JSON files (compatible with SillyTavern)
// ==UserScript== // @name Janitor Ripper // @namespace Violentmonkey Scripts // @match https://janitorai.com/* // @grant none // @version 1.6 // @author - // @description Download Janitor AI characters as Tavern JSON files (compatible with SillyTavern) // @license MIT // ==/UserScript== const delay = (ms) => new Promise((res) => setTimeout(res, ms)); function docReady(fn) { // see if DOM is already available if (document.readyState === "complete" || document.readyState === "interactive") { // call on next available tick setInterval(fn, 100); } else { document.addEventListener("DOMContentLoaded", fn); } } async function addDownloadButton() { let dropdown; while (!dropdown) { dropdown = document.querySelector('.css-3f016y'); // Not yet ready if (!dropdown) { await delay(100); } } const existing = document.getElementById('downloadTavernButton'); if (existing) { return; } const li = document.createElement('button'); li.setAttribute('class', 'chakra-menu__menuitem css-18esm8n'); li.setAttribute('role', 'menuitem'); li.setAttribute('type', 'button'); li.setAttribute('tabindex', '-1'); li.innerText = 'Download Tavern JSON'; li.setAttribute('id', 'downloadTavernButton'); li.addEventListener('click', onDownloadClick); dropdown.prepend(li); } function getAccessToken(){ for (let i = 0; i < localStorage.length; i++) { const item = localStorage.key(i); if (item.endsWith('auth-token')) { const token = JSON.parse(localStorage.getItem(item)); return token['access_token']; } } } function download(content, fileName, contentType) { const a = document.createElement("a"); const file = new Blob([content], { type: contentType }); a.href = URL.createObjectURL(file); a.download = fileName; a.click(); } async function onDownloadClick() { const fetchUrl = location.href.replace('janitorai.com', 'kim.janitorai.com'); const characterIndex = fetchUrl.indexOf('_character'); var newUrl = ""; if (characterIndex !== -1) { newUrl = fetchUrl.substring(0, characterIndex); // 10 is the length of "_character" } const result = await fetch(newUrl, { headers: { 'Authorization': `Bearer ${getAccessToken()}`}}); if (!result.ok) { alert('Could not download JSON'); return; } console.log(newUrl); const data = await result.json(); const tavernJson = JSON.stringify({ 'name': data['name'], 'description': data['description'], // Most of them have description/personality fields reversed (blame Zoltan editor for it) 'scenario': data['scenario'], 'first_mes': data['first_message'], 'personality': data['personality'], 'mes_example': data['example_dialogs'], }); download(tavernJson, `${data['name']}.json`, 'application/json'); } docReady(addDownloadButton);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址