Fitur Detect Anime
by BiyuOffc
case 'animefind': case 'apaitu': {
try {
const quoted = m.quoted ? m.quoted : m
const mime = (quoted.msg || quoted).mimetype || ''
if (!/image/.test(mime)) return m.reply("Harap reply ke gambar yang mau dicari")
const media = await quoted.download()
const detect = async (buffer) => {
const axios = require('axios')
const BodyForm = require('form-data')
const { fromBuffer } = require('file-type')
return new Promise(async (resolve, reject) => {
try {
const BASE_URL = "https://smilingwolf-wd-tagger.hf.space/gradio_api"
const session_hash = Math.random().toString(36).substring(2)
const file_name = Math.random().toString(36).substring(2)
const hr = {
origin: "https://smilingwolf-wd-tagger.hf.space",
referer: "https://smilingwolf-wd-tagger.hf.space/",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
"content-type": "application/json",
}
const { ext, mime } = (await fromBuffer(buffer)) || {}
const form = new BodyForm()
form.append("files", buffer, {
filename: file_name + "." + ext,
contentType: mime
})
const files = await axios.post(BASE_URL + "/upload?" + new URLSearchParams({
upload_id: session_hash
}), form, {
headers: { ...hr, ...form.getHeaders() }
}).then(i => i.data)
const file_res = {
path: files[0],
mime_type: mime,
orig_name: file_name + "." + ext,
meta: { _type: "gradio.FileData" },
size: buffer.length,
url: BASE_URL + "/file=" + files[0],
}
await axios.post(BASE_URL + "/queue/join?", {
data: [
file_res,
"SmilingWolf/wd-swinv2-tagger-v3",
0.35,
true,
0.85,
true
],
event_data: null,
fn_index: 2,
session_hash,
trigger_id: 18,
})
const stream = await axios.get(BASE_URL + "/queue/data?" + new URLSearchParams({
session_hash
}), {
headers: { ...hr, "content-type": "text/event-stream" },
responseType: "stream"
})
let result = ''
stream.data.on('data', (chunk) => {
result += chunk.toString()
const lines = result.split('\n')
result = lines.pop()
for (const line of lines) {
if (line.startsWith('data: ')) {
try {
const data = JSON.parse(line.substring(6))
if (data.msg !== "process_completed") continue
if (!data.success) return resolve({ status: false, data })
const dt = data.output.data
const is_char = typeof dt[2]?.label === 'string'
const res = {
prompt: dt[0],
rating: dt[1].confidences,
character: {
name: dt[2]?.label,
list: dt[2]?.confidences
},
tags: {
name: dt[3].label,
list: dt[3].confidences
}
}
return resolve({
status: true,
data: res,
is_char
})
} catch (err) {
console.error('Error parsing JSON:', err)
resolve({ status: false, msg: err.message })
}
}
}
})
} catch (e) {
reject(e)
}
})
}
const res = await detect(media)
const fixed = num => (num * 100).toFixed(2)
if (!res.is_char) return m.reply("Tidak terdeteksi karakter di gambar tersebut")
const teks = `
*⎣⧉⎤ Karakter yang terdeteksi adalah*
> *Nama:* ${res.data.character.name}
> *Persentase:* ${fixed(res.data.character.list[0].confidence || 0)}%
${res.data.character.list.length >= 2 ? `\n*⎣⧉⎤ Karakter lain yang terdeteksi*\n${res.data.character.list.map((it) => `> *Nama:* ${it.label}\n> *Persentase:* ${fixed(it.confidence || 0)}%`).join('\n\n')}\n` : ''}
*⎣⧉⎤ Prompt*
${res.data.prompt}
*⎣⧉⎤ Rating*
${res.data.rating.map(it => `> *${it.label}:* ${fixed(it.confidence || 0)}%`).join('\n')}
*⎣⧉⎤ Tag*
${res.data.tags.list.map(it => `> *${it.label}:* ${fixed(it.confidence || 0)}%`).join('\n')}
`.trim()
m.reply(teks)
} catch (e) {
console.error(e)
m.reply(`Terjadi kesalahan saat mendeteksi karakter!\n\n${e.message}`)
}
}
break