These pictures were generated by a variant of the Python code provided at Medium – I Ignited Explosive Creativity with AI Automation by Jordan Gibbs, and points to the value of generating prompts dynamically, that could also be used for e.g. generating stories. Due to all requests the code takes some time to process.
You need to create two files as input to the script, where each line will be chosen randomly:
- style.txt: A list of art styles
- subject.txt: A list of subject or topics
Note that there needs to be no empty lines, not even at the end.
Pictures
Code
from openai import OpenAI
import random
import requests
import os
client = OpenAI()
def extract_url(input_text):
images_response = input_text
url = images_response.data[0].url
return url
def download_image(style, subject, image_url):
directory = "IMAGES"
dir_path = os.path.join(directory)
if not os.path.exists(dir_path):
os.makedirs(dir_path)
path_to_save_image = os.path.join(dir_path, f"{style} - {subject}.png")
response = requests.get(image_url)
# Check if the request was successful
if response.status_code == 200:
# Open the file in binary write mode and save the image content
with open(path_to_save_image, 'wb') as f:
f.write(response.content)
print(f"Image saved at {path_to_save_image}")
else:
print(f"Failed to download image. Status code: {response.status_code}")
def dalle(prompt):
response = client.images.generate(
model="dall-e-3",
prompt=f"{prompt}",
n=1,
quality='hd',
style='vivid',
size="1792x1024"
)
url = extract_url(response)
return url
def get_random_word(topic, amount):
if (amount > 0):
with open(topic + '.txt', 'r') as wordy:
words = wordy.read().split('\n')
counter = 0
word_list = []
while counter < amount:
random_word = random.choice(words)
if random_word not in word_list:
word_list.append(random_word)
counter += 1
return " and ".join(word_list)
def style_writer(word):
response = client.chat.completions.create(
model="gpt-4",
temperature=0.9,
messages=[
{"role": "system", "content": f"You output a highly specific art style or art medium based on the "
f"User's input word. Please think outside the box, and output an art "
f"style or medium that fits the user's input. Be ultra concise, and "
f"don't reference the user's input directly in your output."},
{"role": "user", "content": f"{word}"}
],
)
style = response.choices[0].message.content
print(style)
return style
def subject_generator(word):
response = client.chat.completions.create(
model="gpt-4",
temperature=0.9,
messages=[
{"role": "system", "content": f"You output an interesting or creative scenario, noun, or concept "
f"based on a user input. Please think "
f"outside the box, and be very concise. Only output your idea."},
{"role": "user", "content": f"{word}"}
],
)
subject = response.choices[0].message.content
print(subject)
return subject
def prompt_generator(style, idea):
response = client.chat.completions.create(
model="gpt-4",
temperature=0.9,
messages=[
{"role": "system", "content": f"You will output a highly evocative and concise paragraph "
f"describing a theoretical art piece. This description will be "
f"extremely compelling and interesting. You will be creative and base "
f"this off of the user's inputs. You will only output one short "
f"paragraph, and nothing else, please be very direct in describing the "
f"style given by the user. Please focus very highly on the main subject "
f" of the piece."},
{"role": "user", "content": f"{idea} in the style of {style}. "}
],
)
prompt = response.choices[0].message.content
prompt = f"{prompt} No text on the image."
print(prompt)
return prompt
for i in range(1, 6):
word_style = get_random_word("style", 2)
style = style_writer(word_style)
word_subject = get_random_word("subject", 4)
subject = subject_generator(word_subject)
prompt = prompt_generator(style, subject)
url = dalle(prompt)
download_image(word_style, word_subject, url)





