Final changes and update
This commit is contained in:
@@ -2,11 +2,13 @@ import os
|
||||
import json
|
||||
import shutil
|
||||
import textwrap
|
||||
import subprocess
|
||||
import requests
|
||||
import google.generativeai as genai
|
||||
from . import utils
|
||||
import config
|
||||
from modules import ai
|
||||
from rich.prompt import Confirm
|
||||
|
||||
try:
|
||||
from PIL import Image, ImageDraw, ImageFont, ImageStat
|
||||
@@ -99,7 +101,7 @@ def generate_blurb(bp, folder):
|
||||
except:
|
||||
utils.log("MARKETING", "Failed to generate blurb.")
|
||||
|
||||
def generate_cover(bp, folder, tracking=None, feedback=None):
|
||||
def generate_cover(bp, folder, tracking=None, feedback=None, interactive=False):
|
||||
if not HAS_PIL:
|
||||
utils.log("MARKETING", "Pillow not installed. Skipping image cover.")
|
||||
return
|
||||
@@ -125,6 +127,10 @@ def generate_cover(bp, folder, tracking=None, feedback=None):
|
||||
regenerate_image = True
|
||||
design_instruction = ""
|
||||
|
||||
# If existing art exists and no feedback provided, preserve it (Keep Cover feature)
|
||||
if os.path.exists(os.path.join(folder, "cover_art.png")) and not feedback:
|
||||
regenerate_image = False
|
||||
|
||||
if feedback and feedback.strip():
|
||||
utils.log("MARKETING", f"Analyzing feedback: '{feedback}'...")
|
||||
analysis_prompt = f"""
|
||||
@@ -150,7 +156,7 @@ def generate_cover(bp, folder, tracking=None, feedback=None):
|
||||
Act as an Art Director. Design the cover for this book.
|
||||
TITLE: {meta.get('title')}
|
||||
GENRE: {meta.get('genre')}
|
||||
TONE: {meta.get('style', {}).get('tone')}
|
||||
TONE: {meta.get('style', {}).get('tone', 'Balanced')}
|
||||
|
||||
CRITICAL INSTRUCTIONS:
|
||||
1. CHARACTER APPEARANCE: Strictly adhere to the provided character descriptions (hair, eyes, race, age, clothing) in the Visual Context.
|
||||
@@ -214,6 +220,21 @@ def generate_cover(bp, folder, tracking=None, feedback=None):
|
||||
utils.log("MARKETING", f" -> Image Score: {score}/10. Critique: {critique}")
|
||||
utils.log_image_attempt(folder, "cover", art_prompt, f"cover_art_{i}.png", status, score=score, critique=critique)
|
||||
|
||||
if interactive:
|
||||
# Open image for review
|
||||
try:
|
||||
if os.name == 'nt': os.startfile(attempt_path)
|
||||
elif sys.platform == 'darwin': subprocess.call(('open', attempt_path))
|
||||
else: subprocess.call(('xdg-open', attempt_path))
|
||||
except: pass
|
||||
|
||||
if Confirm.ask(f"Accept cover attempt {i} (Score: {score})?", default=True):
|
||||
best_img_path = attempt_path
|
||||
break
|
||||
else:
|
||||
utils.log("MARKETING", "User rejected cover. Retrying...")
|
||||
continue
|
||||
|
||||
if score > best_img_score:
|
||||
best_img_score = score
|
||||
best_img_path = attempt_path
|
||||
@@ -345,6 +366,6 @@ def generate_cover(bp, folder, tracking=None, feedback=None):
|
||||
except Exception as e:
|
||||
utils.log("MARKETING", f"Cover generation failed: {e}")
|
||||
|
||||
def create_marketing_assets(bp, folder, tracking=None):
|
||||
def create_marketing_assets(bp, folder, tracking=None, interactive=False):
|
||||
generate_blurb(bp, folder)
|
||||
generate_cover(bp, folder, tracking)
|
||||
generate_cover(bp, folder, tracking, interactive=interactive)
|
||||
Reference in New Issue
Block a user