wuerstchen-bot / app.py
lunarflu's picture
lunarflu HF Staff
Update app.py
1fa41d3
import asyncio
import glob
import os
import random
import threading
from discord.ext import commands
import discord
import gradio as gr
from gradio_client import Client
HF_TOKEN = os.getenv("HF_TOKEN")
wuerstchen_client = Client("huggingface-projects/Wuerstchen-duplicate", HF_TOKEN)
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
intents = discord.Intents.all()
bot = commands.Bot(command_prefix="/", intents=intents)
@bot.event
async def on_ready():
print(f"Logged in as {bot.user} (ID: {bot.user.id})")
synced = await bot.tree.sync()
print(f"Synced commands: {', '.join([s.name for s in synced])}.")
print("------")
@bot.hybrid_command(
name="wuerstchen",
description="Enter a prompt to generate art!",
)
async def wuerstchen_command(ctx, prompt: str):
"""Wuerstchen generation"""
try:
await run_wuerstchen(ctx, prompt)
except Exception as e:
print(f"Error wuerstchen: (app.py){e}")
def wuerstchen_inference(prompt):
"""Inference for Wuerstchen"""
negative_prompt = ""
seed = random.randint(0, 1000)
width = 1024
height = 1024
prior_num_inference_steps = 60
prior_guidance_scale = 4
decoder_num_inference_steps = 12
decoder_guidance_scale = 0
num_images_per_prompt = 1
result_path = wuerstchen_client.predict(
prompt,
negative_prompt,
seed,
width,
height,
prior_num_inference_steps,
prior_guidance_scale,
decoder_num_inference_steps,
decoder_guidance_scale,
num_images_per_prompt,
api_name="/run",
)
png_file = list(glob.glob(f"{result_path}/**/*.png"))
return png_file[0]
async def run_wuerstchen(ctx, prompt):
"""Responds to /Wuerstchen command"""
try:
if ctx.guild.id == 879548962464493619:
if ctx.channel.id != 1151792944676864041:
return
message = await ctx.send(f"**{prompt}** - {ctx.author.mention} (generating...)")
loop = asyncio.get_running_loop()
result_path = await loop.run_in_executor(None, wuerstchen_inference, prompt)
await message.delete()
with open(result_path, "rb") as f:
await ctx.channel.send(f"**{prompt}** - {ctx.author.mention}", file=discord.File(f, "wuerstchen.png"))
except Exception as e:
print(f"Error: {e}")
def run_bot():
bot.run(DISCORD_TOKEN)
threading.Thread(target=run_bot).start()
"""This allows us to run the Discord bot in a Python thread"""
welcome_message = """
## Add this bot to your server by clicking this link:
https://discord.com/api/oauth2/authorize?client_id=1155489509518098565&permissions=51200&scope=bot
## How to use it?
The bot can be triggered via `/wuerstchen` followed by your text prompt.
This will generate an image based on your prompt, which is then posted in the channel!
⚠️ Note ⚠️: Please make sure this bot's command does have the same name as another command in your server.
⚠️ Note ⚠️: Bot commands do not work in DMs with the bot as of now.
"""
with gr.Blocks() as demo:
gr.Markdown(f"""
# Discord bot of https://huggingface.co/spaces/warp-ai/Wuerstchen
{welcome_message}
""")
demo.queue(concurrency_count=100)
demo.queue(max_size=100)
demo.launch()