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)