import random
from faker import Faker
from PIL import Image, ImageDraw, ImageFont
import os
import openai
# === CONFIG ===
OUTPUT_FOLDER = "covers"
os.makedirs(OUTPUT_FOLDER, exist_ok=True)
fake = Faker()
# Optional: Set your OpenAI API Key
openai.api_key = "YOUR_API_KEY" # Replace with your key
# === 1. Generate Book Title ===
def generate_book_title(prompt=None):
if prompt:
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
max_tokens=30
)
return response['choices'][0]['message']['content'].strip()
else:
adjectives = ["Lost", "Silent", "Hidden", "Broken", "Eternal"]
nouns = ["Dream", "Kingdom", "Secret", "Shadow", "Memory"]
return f"The {random.choice(adjectives)} {random.choice(nouns)}"
# === 2. Generate Author Name ===
def generate_author_name():
return fake.name()
# === 3. Generate Cover Image ===
def generate_cover_image(title, author, background="background.jpg"):
WIDTH, HEIGHT = 600, 900
cover = Image.new("RGB", (WIDTH, HEIGHT), "white")
try:
bg = Image.open(background).resize((WIDTH, HEIGHT))
cover.paste(bg)
except:
print("⚠️ No background image found. Using plain white.")
draw = ImageDraw.Draw(cover)
try:
title_font = ImageFont.truetype("arial.ttf", 40)
author_font = ImageFont.truetype("arial.ttf", 30)
except:
title_font = ImageFont.load_default()
author_font = ImageFont.load_default()
# Draw title
draw.text((40, HEIGHT // 3), title, font=title_font, fill="black", spacing=2)
# Draw author
draw.text((40, HEIGHT // 3 + 100), f"by {author}", font=author_font, fill="darkgray")
filename = os.path.join(OUTPUT_FOLDER, f"{title[:20].replace(' ', '_')}.png")
cover.save(filename)
print(f"✅ Cover saved to: {filename}")
# === MAIN ===
if __name__ == "__main__":
print("📚 Generating random book cover...")
# title = generate_book_title("Suggest a fantasy book title")
title = generate_book_title()
author = generate_author_name()
print(f"Title: {title}")
print(f"Author: {author}")
generate_cover_image(title, author)
No comments:
Post a Comment