|
import discord |
|
import os |
|
import threading |
|
import gradio as gr |
|
import requests |
|
import json |
|
import random |
|
import time |
|
import re |
|
from discord import Embed, Color |
|
from discord.ext import commands |
|
|
|
from gradio_client import Client |
|
from PIL import Image |
|
|
|
|
|
from datetime import datetime |
|
from pytz import timezone |
|
|
|
import asyncio |
|
|
|
import shutil |
|
|
|
|
|
|
|
DFIF_TOKEN = os.getenv('HF_TOKEN') |
|
DISCORD_TOKEN = os.environ.get("GRADIOTEST_TOKEN", None) |
|
|
|
df = Client("huggingface-projects/IF", DFIF_TOKEN) |
|
jojogan = Client("akhaliq/JoJoGAN", DFIF_TOKEN) |
|
|
|
|
|
intents = discord.Intents.default() |
|
intents.message_content = True |
|
|
|
bot = commands.Bot(command_prefix='!', intents=intents) |
|
|
|
|
|
|
|
|
|
@bot.event |
|
async def on_ready(): |
|
print('Logged on as', bot.user) |
|
bot.log_channel = bot.get_channel(1100458786826747945) |
|
|
|
|
|
|
|
@bot.command |
|
async def jojo(ctx): |
|
|
|
await ctx.message.add_reaction('π') |
|
thread = await ctx.message.create_thread(name=f'{ctx.author} Jojo Thread ') |
|
|
|
style = None |
|
style = 'JoJo' |
|
|
|
await thread.send(f'{ctx.author.mention}Generating JoJo image in thread, yare yare daze...') |
|
|
|
if style: |
|
if ctx.message.attachments: |
|
attachment = ctx.message.attachments[0] |
|
im = jojogan.predict(attachment.url, style) |
|
await ctx.message.reply(f'Here is the {style} version of it', file=discord.File(im)) |
|
else: |
|
await ctx.message.channel.send("No attachments to be found...Can't animify dat! Try sending me an image π") |
|
|
|
|
|
@bot.command() |
|
async def deepfloydif(ctx, *, prompt: str): |
|
try: |
|
try: |
|
await ctx.message.add_reaction('π') |
|
thread = await ctx.message.create_thread(name=f'{ctx.author} Image Upscaling Thread ') |
|
|
|
|
|
|
|
|
|
|
|
negative_prompt = '' |
|
seed = random.randint(0, 1000) |
|
|
|
number_of_images = 4 |
|
guidance_scale = 7 |
|
custom_timesteps_1 = 'smart50' |
|
number_of_inference_steps = 50 |
|
|
|
await thread.send(f'{ctx.author.mention}Generating images in thread, can take ~1 minute...') |
|
|
|
except Exception as e: |
|
print(f"Error: {e}") |
|
await ctx.reply('stage 1 error -> pre generation') |
|
await ctx.message.add_reaction('β') |
|
|
|
|
|
try: |
|
stage_1_results, stage_1_param_path, stage_1_result_path = df.predict( |
|
prompt, negative_prompt, seed, number_of_images, guidance_scale, custom_timesteps_1, number_of_inference_steps, api_name='/generate64') |
|
|
|
partialpath = stage_1_result_path[5:] |
|
except Exception as e: |
|
print(f"Error: {e}") |
|
await ctx.reply('stage 1 error -> during generation') |
|
await ctx.message.add_reaction('β') |
|
|
|
try: |
|
|
|
|
|
png_files = [f for f in os.listdir(stage_1_results) if f.endswith('.png')] |
|
|
|
if png_files: |
|
for i, png_file in enumerate(png_files): |
|
png_file_path = os.path.join(stage_1_results, png_file) |
|
img = Image.open(png_file_path) |
|
image_path = os.path.join(stage_1_results, f'{i+1}{partialpath}.png') |
|
img.save(image_path) |
|
with open(image_path, 'rb') as f: |
|
await thread.send(f'{ctx.author.mention}Image {i+1}', file=discord.File(f, f'{i+1}{partialpath}.png')) |
|
await asyncio.sleep(1) |
|
|
|
await thread.send(f'{ctx.author.mention}React with π to the image you want to upscale!') |
|
except Exception as e: |
|
print(f"Error: {e}") |
|
await ctx.reply('stage 1 error -> posting images in thread') |
|
await ctx.message.add_reaction('β') |
|
|
|
|
|
|
|
|
|
except Exception as e: |
|
print(f"Error: {e}") |
|
await ctx.reply('An error occurred in stage 1') |
|
await ctx.message.add_reaction('β') |
|
|
|
|
|
|
|
async def dfif2(index: int, stage_1_result_path, thread): |
|
try: |
|
selected_index_for_stage_2 = index |
|
seed_2 = 0 |
|
guidance_scale_2 = 4 |
|
custom_timesteps_2 = 'smart50' |
|
number_of_inference_steps_2 = 50 |
|
result_path = df.predict(stage_1_result_path, selected_index_for_stage_2, seed_2, |
|
guidance_scale_2, custom_timesteps_2, number_of_inference_steps_2, api_name='/upscale256') |
|
|
|
|
|
with open(result_path, 'rb') as f: |
|
await thread.send(f'Here is the upscaled image! :) ', file=discord.File(f, 'result.png')) |
|
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e: |
|
print(f"Error: {e}") |
|
|
|
|
|
|
|
|
|
@bot.event |
|
async def on_reaction_add(reaction, user): |
|
|
|
if user.bot: |
|
return |
|
|
|
|
|
guild = reaction.message.guild |
|
|
|
|
|
required_role_id = 897376942817419265 |
|
required_role = guild.get_role(required_role_id) |
|
|
|
if required_role not in user.roles: |
|
return |
|
|
|
emoji = reaction.emoji |
|
|
|
thread = reaction.message.channel |
|
tbd = reaction.message.content |
|
|
|
|
|
|
|
|
|
attachment = reaction.message.attachments[0] |
|
image_name = attachment.filename |
|
|
|
|
|
indexpartialpath = image_name[:-4] |
|
|
|
index = int(indexpartialpath[0]) - 1 |
|
|
|
partialpath = indexpartialpath[1:] |
|
|
|
fullpath = "/tmp/" + partialpath |
|
|
|
if emoji == 'π': |
|
if reaction.message.attachments: |
|
if user.id == reaction.message.mentions[0].id: |
|
stage_1_result_path = fullpath |
|
index = index |
|
await dfif2(index, stage_1_result_path, thread) |
|
|
|
|
|
|
|
def run_bot(): |
|
bot.run(DISCORD_TOKEN) |
|
|
|
threading.Thread(target=run_bot).start() |
|
|
|
def greet(name): |
|
return "Hello " + name + "!" |
|
|
|
demo = gr.Interface(fn=greet, inputs="text", outputs="text") |
|
demo.launch() |