Komal-patra commited on
Commit
2e11734
1 Parent(s): dff1b5b

update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -140
app.py CHANGED
@@ -1,146 +1,85 @@
1
  import gradio as gr
2
- import numpy as np
3
- import random
4
- from diffusers import DiffusionPipeline
5
- import torch
6
-
7
- device = "cuda" if torch.cuda.is_available() else "cpu"
8
-
9
- if torch.cuda.is_available():
10
- torch.cuda.max_memory_allocated(device=device)
11
- pipe = DiffusionPipeline.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float16, variant="fp16", use_safetensors=True)
12
- pipe.enable_xformers_memory_efficient_attention()
13
- pipe = pipe.to(device)
14
- else:
15
- pipe = DiffusionPipeline.from_pretrained("stabilityai/sdxl-turbo", use_safetensors=True)
16
- pipe = pipe.to(device)
17
-
18
- MAX_SEED = np.iinfo(np.int32).max
19
- MAX_IMAGE_SIZE = 1024
20
-
21
- def infer(prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps):
22
-
23
- if randomize_seed:
24
- seed = random.randint(0, MAX_SEED)
25
-
26
- generator = torch.Generator().manual_seed(seed)
27
-
28
- image = pipe(
29
- prompt = prompt,
30
- negative_prompt = negative_prompt,
31
- guidance_scale = guidance_scale,
32
- num_inference_steps = num_inference_steps,
33
- width = width,
34
- height = height,
35
- generator = generator
36
- ).images[0]
37
-
38
- return image
39
-
40
- examples = [
41
- "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k",
42
- "An astronaut riding a green horse",
43
- "A delicious ceviche cheesecake slice",
44
- ]
45
-
46
- css="""
47
- #col-container {
48
- margin: 0 auto;
49
- max-width: 520px;
50
- }
51
  """
52
 
53
- if torch.cuda.is_available():
54
- power_device = "GPU"
55
- else:
56
- power_device = "CPU"
57
-
58
- with gr.Blocks(css=css) as demo:
59
-
60
- with gr.Column(elem_id="col-container"):
61
- gr.Markdown(f"""
62
- # Text-to-Image Gradio Template
63
- Currently running on {power_device}.
64
- """)
65
-
66
- with gr.Row():
67
-
68
- prompt = gr.Text(
69
- label="Prompt",
70
- show_label=False,
71
- max_lines=1,
72
- placeholder="Enter your prompt",
73
- container=False,
74
- )
75
-
76
- run_button = gr.Button("Run", scale=0)
77
-
78
- result = gr.Image(label="Result", show_label=False)
79
-
80
- with gr.Accordion("Advanced Settings", open=False):
81
-
82
- negative_prompt = gr.Text(
83
- label="Negative prompt",
84
- max_lines=1,
85
- placeholder="Enter a negative prompt",
86
- visible=False,
87
- )
88
-
89
- seed = gr.Slider(
90
- label="Seed",
91
- minimum=0,
92
- maximum=MAX_SEED,
93
- step=1,
94
- value=0,
95
- )
96
-
97
- randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
98
-
99
- with gr.Row():
100
-
101
- width = gr.Slider(
102
- label="Width",
103
- minimum=256,
104
- maximum=MAX_IMAGE_SIZE,
105
- step=32,
106
- value=512,
107
- )
108
-
109
- height = gr.Slider(
110
- label="Height",
111
- minimum=256,
112
- maximum=MAX_IMAGE_SIZE,
113
- step=32,
114
- value=512,
115
- )
116
-
117
- with gr.Row():
118
-
119
- guidance_scale = gr.Slider(
120
- label="Guidance scale",
121
- minimum=0.0,
122
- maximum=10.0,
123
- step=0.1,
124
- value=0.0,
125
- )
126
-
127
- num_inference_steps = gr.Slider(
128
- label="Number of inference steps",
129
- minimum=1,
130
- maximum=12,
131
- step=1,
132
- value=2,
133
- )
134
-
135
- gr.Examples(
136
- examples = examples,
137
- inputs = [prompt]
138
  )
139
 
140
- run_button.click(
141
- fn = infer,
142
- inputs = [prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps],
143
- outputs = [result]
144
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
 
146
- demo.queue().launch()
 
 
1
  import gradio as gr
2
+ from langchain.chat_models import ChatOpenAI
3
+ from langchain.prompts import PromptTemplate
4
+ from langchain.chains.llm import LLMChain
5
+ from openai import OpenAI
6
+ import os
7
+ import requests
8
+ from PIL import Image as PILImage
9
+ from io import BytesIO
10
+
11
+ # Initialize the OpenAI API key
12
+ openai_api_key = os.environ['OPENAI_API_KEY']
13
+
14
+ # Initialize the OpenAI client
15
+ client = OpenAI(api_key=openai_api_key)
16
+
17
+ # Initialize the ChatOpenAI model
18
+ openai_llm = ChatOpenAI()
19
+
20
+ # Define the prompt template
21
+ prompt_template = PromptTemplate.from_template(
22
+ """Imagine '{genre}' Album Cover and provide the detailed prompt for the Following album/song/lyrics: '{lyrics}' to create the realistic imaginery graphic for the album/music chorus by understanding and mimicing the emotional depth with the emotional tone of '{emotion}' .
23
+
24
+ Please ensure that the genre of the lyrics matches the provided genre parameter: 'Rock' for powerful guitar riffs, rebellious energy, and raw emotion; 'Pop' for catchy hooks, vibrant colors, and trendy aesthetics; 'Metal' for dark, intense imagery with heavy and aggressive tones; 'Folk' for earthy, acoustic elements with natural and rustic visuals; '80s' for retro-futuristic vibes, neon colors, and nostalgic references; 'Jazz' for smooth, elegant, and sophisticated visuals with a touch of improvisation; 'K-pop' for sleek, modern, and colorful designs with a polished, high-energy look; and 'Country' for rustic, heartfelt, and down-to-earth imagery often set in rural or natural environments.
25
+
26
+ For emotions, match the tone: 'Heartbreak' for visuals that convey loss, sadness, or longing; 'Fantasy' for dreamy, otherworldly, or surreal visuals; and 'Dark' for ominous, mysterious, or haunting imagery.
27
+
28
+ Consider the age and gender of the subject(s) in the lyrics to ensure the visuals align with their emotional experience, whether depicting a young woman in the throes of first love, an older man reflecting on past sorrows, or a child lost in a fantasy world.
29
+
30
+ The visual style should be photo-realistic, 8K resolution, hyper-detailed, and cinematic. Include elements such as high-contrast lighting, intricate detail, and realistic textures. Depending on the emotion, use glamour photography for 'Fantasy', stark contrasts for 'Dark', and soft, muted tones for 'Heartbreak'. The image should also reflect a high-fashion or art-inspired aesthetic, with influences from award-winning photography styles, cinematic lighting, and advanced rendering techniques to create a masterpiece that is both visually stunning and emotionally evocative.
31
+
32
+ If there is a person, do not show their faces.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  """
34
 
35
+ )
36
+
37
+ # Define the lyrics response chain
38
+ lyrics_response_chain = LLMChain(llm=openai_llm, prompt=prompt_template, verbose=True)
39
+
40
+ # Create a directory for saving images if it doesn't exist
41
+ os.makedirs("generated_images", exist_ok=True)
42
+
43
+ # Function to generate and save image based on lyrics, genre, and emotion
44
+ def generate_image(lyrics, genre, emotion):
45
+ try:
46
+ formatted_prompt = prompt_template.format(lyrics=lyrics, genre=genre, emotion=emotion)
47
+ response = lyrics_response_chain.run({'lyrics': lyrics, 'genre': genre, 'emotion': emotion})
48
+
49
+ # Generate the image using DALL-E 3
50
+ image_response = client.images.generate(
51
+ model="dall-e-3",
52
+ prompt=response,
53
+ size="1024x1024",
54
+ quality="hd",
55
+ n=1,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  )
57
 
58
+ image_url = image_response.data[0].url
59
+
60
+ # Save the image locally
61
+ response = requests.get(image_url)
62
+ image = PILImage.open(BytesIO(response.content))
63
+ file_path = os.path.join("generated_images", "album_cover.png")
64
+ image.save(file_path)
65
+
66
+ return image_url
67
+
68
+ except Exception as e:
69
+ print(f"An error occurred: {e}")
70
+ return None
71
+
72
+ # Create Gradio interface
73
+ def gradio_interface():
74
+ lyrics_input = gr.Textbox(label="Lyrics", placeholder="Enter the song lyrics here...")
75
+ genre_input = gr.Dropdown(label="Genre", choices=['Rock', 'Pop', 'Metal', 'Folk', '80s', 'Jazz', 'K-pop', 'Country'])
76
+ emotion_input = gr.Dropdown(label="Emotion", choices=['Heartbreak', 'Fantasy', 'Dark'])
77
+ output_image = gr.Image(label="Generated Album Cover")
78
+
79
+ gr.Interface(fn=generate_image,
80
+ inputs=[lyrics_input, genre_input, emotion_input],
81
+ outputs=output_image,
82
+ title="Lyrics Canvas").launch()
83
 
84
+ # Run the Gradio interface
85
+ gradio_interface()