Group-manga_generate/backend/app.py
2026-01-08 20:51:26 +08:00

71 lines
2.3 KiB
Python

from flask import Flask, jsonify, request
from utils import split_text_into_paragraphs, generate_prompts, generate_image_from_prompt, save_to_history, load_history
import os
from dotenv import load_dotenv
load_dotenv()
app = Flask(__name__)
@app.route('/health', methods=['GET'])
def health_check():
return jsonify({"status": "healthy", "service": "novel-to-manga-backend"})
@app.route('/process_text', methods=['POST'])
def process_text():
data = request.json
text = data.get('text')
api_key = data.get('api_key') or os.getenv("OPENAI_API_KEY")
base_url = data.get('base_url')
model = data.get('model') or "gpt-4o"
if not text:
return jsonify({"error": "No text provided"}), 400
try:
paragraphs = split_text_into_paragraphs(text)
prompts = generate_prompts(paragraphs, api_key, base_url, model)
return jsonify({"prompts": prompts})
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route('/generate_image', methods=['POST'])
def generate_image():
data = request.json
prompt = data.get('prompt')
# Try Image Gen specific key first, then fallback to general OpenAI key
api_key = data.get('api_key') or os.getenv("IMAGE_GEN_API_KEY") or os.getenv("OPENAI_API_KEY")
base_url = data.get('base_url')
model = data.get('model') or "dall-e-3"
if not prompt:
return jsonify({"error": "No prompt provided"}), 400
try:
image_url = generate_image_from_prompt(prompt, api_key, base_url, model)
if image_url:
# Save to history
save_to_history({
"prompt": prompt,
"image_url": image_url,
"novel_text": data.get('novel_text', '') # Optional
})
return jsonify({"image_url": image_url})
else:
return jsonify({"error": "Failed to generate image"}), 500
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route('/history', methods=['GET'])
def get_history():
try:
history = load_history()
# Sort by timestamp desc
history.sort(key=lambda x: x.get('timestamp', 0), reverse=True)
return jsonify({"history": history})
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run(debug=True, port=5001)