File size: 2,163 Bytes
69f0ed1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b7db66e
69f0ed1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2a3915b
 
 
69f0ed1
2a3915b
 
69f0ed1
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import asyncio
import os

import discord
from gradio_client import Client
from gradio_client.utils import QueueError

BOT_USER_ID = 1102236653545861151  # real
MUSIC_CHANNEL_ID = 1143183148881035365  # real


HF_TOKEN = os.getenv("HF_TOKEN")
audioldm2 = Client("huggingface-projects/audioldm2-text2audio-text2music", HF_TOKEN)


def audioldm2_create_job(prompt):
    """Generates a sound or music based on a given prompt"""
    try:
        job = audioldm2.submit(prompt, api_name="/text2audio")
        while not job.done():
            pass
        return job

    except Exception as e:
        print(f"audioldm2_create_job Error: {e}")


async def audioldm2_create(ctx, prompt):
    """Runs audioldm2_create_job in executor"""
    try:
        if ctx.author.id != BOT_USER_ID:
            if ctx.channel.id == MUSIC_CHANNEL_ID:
                if os.environ.get("TEST_ENV") == "True":
                    print("Safetychecks passed for audioldm2_create")

                message = await ctx.send(f"**{prompt}** - {ctx.author.mention}")
                if len(prompt) > 99:
                    small_prompt = prompt[:99]
                else:
                    small_prompt = prompt
                thread = await message.create_thread(name=small_prompt, auto_archive_duration=60)

                if os.environ.get("TEST_ENV") == "True":
                    print("Running audioldm2_create_job...")

                loop = asyncio.get_running_loop()
                job = await loop.run_in_executor(None, audioldm2_create_job, prompt)

                try:
                    job.result()
                    video = job.outputs()[0]
                except QueueError:
                    await thread.send("The gradio space powering this bot is really busy! Please try again later!")

                short_filename = prompt[:20]
                video_filename = f"{short_filename}.mp4"

                with open(video, "rb") as file:
                    discord_video_file = discord.File(file, filename=video_filename)
                await thread.send(file=discord_video_file)

    except Exception as e:
        print(f"audioldm2_create Error: {e}")