Compare commits

...

3 commits

Author SHA1 Message Date
c752eebd9a AI category 2022-10-17 21:30:38 +02:00
24391ec40c Rename to txt2img 2022-10-17 21:30:29 +02:00
900a633f0d img2img (Need to improve the arg in messages) 2022-10-17 21:30:19 +02:00
3 changed files with 79 additions and 2 deletions

76
commands/AI/img2img.js Normal file
View file

@ -0,0 +1,76 @@
import { SlashCommandBuilder, EmbedBuilder } from 'discord.js';
import fetch from 'node-fetch';
import fs from 'node:fs';
import os from 'node:os';
const { stableHordeApi, stableHordeID } = process.env;
export default {
data: new SlashCommandBuilder()
.setName('img2img')
.setDescription('AI generated image with stable diffusion (If credit are low it may be slow)')
.addAttachmentOption(option =>
option.setName('image')
.setDescription('Image you want to modify')
.setRequired(true))
.addStringOption(option =>
option.setName('prompt')
.setDescription('What do you want the AI to generate?')
.setRequired(true)),
category: 'AI',
async execute(interaction, args, client) {
await interaction.deferReply();
fetch(args.image.url)
.then((res) => {
const dest = fs.createWriteStream(`${os.tmpdir()}/${args.image.name}`);
res.body.pipe(dest);
dest.on('finish', () => {
const b64Image = fs.readFileSync(`${os.tmpdir()}/${args.image.name}`, { encoding: 'base64' });
generate(interaction, args.prompt, b64Image, client);
});
});
},
};
async function generate(i, prompt, b64Img) {
const body = {
prompt: prompt,
params: {
n: 1,
width: 512,
height: 512,
},
cfg_scale: 5,
use_gfpgan: true,
use_real_esrgan: true,
use_ldsr: true,
use_upscaling: true,
steps: 50,
nsfw: i.channel.nsfw ? true : false,
censor_nsfw: i.channel.nsfw ? true : false,
source_image: b64Img,
};
const fetchParameters = {
method: 'post',
body: JSON.stringify(body),
headers: { 'Content-Type': 'application/json', 'apikey': stableHordeApi },
};
let response = await fetch('https://stablehorde.net/api/v2/generate/sync', fetchParameters);
response = await response.json();
let creditResponse = await fetch(`https://stablehorde.net/api/v2/users/${stableHordeID}`);
creditResponse = await creditResponse.json();
const stableEmbed = new EmbedBuilder()
.setColor(i.member ? i.member.displayHexColor : 'Navy')
.setTitle(prompt)
.setURL('https://aqualxx.github.io/stable-ui/')
.setFooter({ text: `**Credit left: ${creditResponse.kudos}** Seed: ${response.generations[0].seed} worker ID: ${response.generations[0].worker_id} worker name: ${response.generations[0].worker_name}` });
fs.writeFileSync(`${os.tmpdir()}/${i.id}.png`, response.generations[0].img, 'base64');
await i.editReply({ embeds: [stableEmbed], files: [`${os.tmpdir()}/${i.id}.png`] });
}

View file

@ -7,13 +7,13 @@ const { stableHordeApi, stableHordeID } = process.env;
export default { export default {
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName('stablediffusion') .setName('txt2img')
.setDescription('AI generated image with stable diffusion (If credit are low it may be slow)') .setDescription('AI generated image with stable diffusion (If credit are low it may be slow)')
.addStringOption(option => .addStringOption(option =>
option.setName('prompt') option.setName('prompt')
.setDescription('What do you want the AI to generate?') .setDescription('What do you want the AI to generate?')
.setRequired(true)), .setRequired(true)),
category: 'fun', category: 'AI',
async execute(interaction, args, client) { async execute(interaction, args, client) {
await interaction.deferReply(); await interaction.deferReply();
generate(interaction, args.prompt, client); generate(interaction, args.prompt, client);

View file

@ -145,6 +145,7 @@ export default {
admin: '⚡\u2000Admin', admin: '⚡\u2000Admin',
owner: '🛠️\u2000Owner', owner: '🛠️\u2000Owner',
voice: '🗣️\u2000Voice', voice: '🗣️\u2000Voice',
AI: '🦾\u2000AI',
}[category]; }[category];
embed.addFields({ name: title, value: `\`${object[category].join('` `')}\`` }); embed.addFields({ name: title, value: `\`${object[category].join('` `')}\`` });