Для этого:
- Создайте аккаунт на imgbb.com;
- Получите API-ключ на api.imgbb.com;
- Добавьте его в юзерскрипт.
В результате у вас появится загрузчик изображений в редакторах (старом и в новом), а также возможность самостоятельно удалять изображения через свой аккаунт.
Обратите внимание, что в шики (dere \ nyaa) изображение сохраняется даже после удаления комментария.
Еще вместо того чтобы использовать мой pirateimg.vercel.app/ вы сможете загружать изображения в отличном качестве сразу через шики а также через аккаунт удалять, если захотите.
Пример работы:

// ==UserScript==
// @name imgbb uploader
// @namespace http://shikimori.me/
// @version 1.0
// @description Загрузчик изображений
// @author pirate~
// @match *://shikimori.one/*
// @match *://shikimori.me/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
let APIKEY = 'СЮДА ВАШ КЛЮЧ';
function insertBBCodeForEditor(editorContainer, imageUrl) {
var bbcode = '[img]' + imageUrl + '[/img]';
var field = editorContainer.querySelector('textarea[name="comment[body]"]') || editorContainer.querySelector('input[name="comment[body]"]');
if (field) {
if (field.tagName.toLowerCase() === 'textarea') {
var start = field.selectionStart, end = field.selectionEnd;
field.value = field.value.slice(0, start) + bbcode + field.value.slice(end);
field.selectionStart = field.selectionEnd = start + bbcode.length;
field.focus();
} else {
field.value += bbcode;
field.dispatchEvent(new Event('input', { bubbles: true }));
}
return;
}
var proseMirror = editorContainer.querySelector('.ProseMirror');
if (proseMirror) {
proseMirror.focus();
document.execCommand('insertText', false, bbcode);
var hiddenInput = editorContainer.querySelector('input[name="comment[body]"]');
if (hiddenInput) {
hiddenInput.value += bbcode;
hiddenInput.dispatchEvent(new Event('input', { bubbles: true }));
}
}
}
function createUploadButton(editorContainer, parentElement) {
var btn = document.createElement('span');
btn.classList.add('imgbb');
btn.style.cursor = 'pointer';
btn.style.marginLeft = '10px';
btn.style.color = '#444';
btn.textContent = '🖼';
btn.addEventListener('click', function() {
var fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = 'image/*';
fileInput.style.display = 'none';
document.body.appendChild(fileInput);
fileInput.addEventListener('change', function() {
if (fileInput.files && fileInput.files[0]) {
var file = fileInput.files[0];
var reader = new FileReader();
reader.onload = function(e) {
var dataUrl = e.target.result;
var base64Index = dataUrl.indexOf('base64,') + 7;
var base64Data = dataUrl.substring(base64Index);
var formData = new FormData();
formData.append('key', APIKEY);
formData.append('image', base64Data);
formData.append('name', file.name);
fetch('https://api.imgbb.com/1/upload', { method: 'POST', body: formData })
.then(response => response.json())
.then(data => {
if (data.success) {
insertBBCodeForEditor(editorContainer, data.data.url);
} else {
alert('ошибка загрузки: ' + (data.error.message || 'неизвестная ошибка'));
}
})
.catch(error => {
console.error('ошибка запроса:', error);
alert('ошибка загрузки изображения');
})
.finally(() => { fileInput.remove(); });
};
reader.readAsDataURL(file);
}
});
fileInput.click();
});
parentElement.appendChild(btn);
}
function addButtonToEditors() {
var classicEditors = document.querySelectorAll('.b-shiki_editor:not(.b-shiki_editor-v2)');
classicEditors.forEach(editor => {
var controls = editor.querySelector('.editor-controls');
if (controls && !controls.querySelector('.imgbb')) {
createUploadButton(editor, controls);
}
});
var v2Editors = document.querySelectorAll('.vue-node');
v2Editors.forEach(editor => {
var menubar = editor.querySelector('.menubar .menu_group-block');
if (menubar && !menubar.querySelector('.imgbb')) {
createUploadButton(editor, menubar);
}
});
}
document.addEventListener('DOMContentLoaded', addButtonToEditors);
setInterval(addButtonToEditors, 100);
})();
Не забудьте в коде ввести тут апи ключ:
let APIKEY = 'СЮДА ВАШ КЛЮЧ';
@S John, github.com/infinitered/nsfwjs@S John,@Librake@cgi-bin, спасибо. Получается, что такой пакет все равно требует человеческого вмешательства (пакет по твоей ссылке базируется на nsfw_model).Источник: hal.science
@cgi-binЧто самое ироничное использовал этот же самый инструмент:
Ну что сказать...
p.s. Ржу, что нейронка отправила мем с Билли Херрингтона в категорию порно. Как бы да, но
@S John@S John, да ну, человеки не нужны, точность распознавания - 93%, технологическая сингулярность уже буквально у нас под носом.@chugou,@S John@cgi-bin, доктор, откуда у вас такие картинки?@pirate~@S John, Твой источник с 2023 года — за два года нейронки значительно эволюционировали. А твои 72% — цифры из воздуха.Моя штучка отлично справляется с фильтрацией пикчей, а скоро будет фильтровать и гифки.
P.S | Будь это мой сайт, боты выполняли бы всю работу. Я бы не вводил баны, а просто добавил бота, который читает комментарии и удаляет те, что нарушают правила сайта. Как я и говорил - нейронки значительно эволюционировали.
@S John@pirate~, может быть.@pirate~, спасибо.@pirate~@Auditor-sama, это фигня, я знаю историю на много страшнее этого.а так, да, есть такие *** которые занимаются такими вещами.
@pirate~@Конcтантинович,меня простили.
@Kapitan Darwin, а где вы такую статистику узнали? Просто интересно@S John@mahentoh, wikireality.ru/wiki/В_интернетах_девушек_нет