1 line
4.3 KiB
JSON
1 line
4.3 KiB
JSON
{"repo": "boobesh2912/kadhai", "files": {"app.py": {"079300f172518251e63403b48698605c37bf8440": {"t": 1785674370.6386948, "n": 3956, "h": "75509b05e157eb9d", "c": "import requests\nimport json\nfrom flask import Flask, request, jsonify, send_from_directory\nfrom flask_cors import CORS\nimport os\nimport time\nfrom gtts import gTTS\nimport glob\nfrom urllib.parse import quote\n\napp = Flask(__name__)\nCORS(app)\n\r\n# Create static folder if it doesn't exist\r\nif not os.path.exists('static'):\r\n os.makedirs('static')\r\n\r\nOPENROUTER_API_KEY = os.getenv(\"OPENROUTER_API_KEY\")\n\r\ndef generate_story(title, story_type, length, tone):\n try:\n if not OPENROUTER_API_KEY:\n print(\"OPENROUTER_API_KEY is not set.\")\n return None\n prompt = f\"Create a {length} {story_type} story with a {tone} tone. The title is '{title}'.\"\n response = requests.post(\n url=\"https://openrouter.ai/api/v1/chat/completions\",\n headers={\n \"Authorization\": f\"Bearer {OPENROUTER_API_KEY}\",\n \"Content-Type\": \"application/json\",\n },\n data=json.dumps({\n \"model\": \"deepseek/deepseek-r1-0528:free\",\n \"messages\": [{\"role\": \"user\", \"content\": prompt}]\n }),\n timeout=60,\n )\n if response.status_code == 200:\n return response.json()['choices'][0]['message']['content']\n return None\n except Exception as e:\r\n print(f\"Error generating story: {e}\")\r\n return None\r\n\r\ndef generate_image_pollinations(prompt, width=512, height=512):\n try:\n print(f\"Generating image for: '{prompt}'\")\n clean_prompt = quote(prompt, safe=\"\")\n url = f\"https://image.pollinations.ai/prompt/{clean_prompt}?width={width}&height={height}&nologo=true\"\n headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'}\n response = requests.get(url, headers=headers, timeout=60)\n if response.status_code == 200:\r\n timestamp = int(time.time())\r\n filename = f\"static/ai_image_{timestamp}.png\"\r\n with open(filename, 'wb') as f:\r\n f.write(response.content)\r\n return filename\r\n return None\r\n except Exception as e:\r\n print(f\"Error generating image: {e}\")\r\n return None\r\n\r\ndef generate_audio(text):\r\n try:\r\n tts = gTTS(text=text, lang='en')\r\n timestamp = int(time.time())\r\n filename = f\"static/audio_{timestamp}.mp3\"\r\n tts.save(filename)\r\n return filename\r\n except Exception as e:\r\n print(f\"Error generating audio: {e}\")\r\n return None\r\n\r\ndef cleanup_files():\r\n for file in glob.glob(\"static/*\"):\r\n if os.path.isfile(file):\r\n os.remove(file)\r\n print(f\"Deleted file: {file}\")\r\n\r\n@app.route('/create-story', methods=['POST'])\r\ndef create_story():\n data = request.get_json()\n if not data:\n return jsonify({\"error\": \"Invalid or missing JSON body\"}), 400\n\n title = (data.get('title') or \"\").strip()\n story_type = data.get('storyType', 'adventure')\n length = data.get('length', 'short')\n tone = data.get('tone', 'fun')\n\n if not title:\n return jsonify({\"error\": \"Title is required\"}), 400\n \n story_text = generate_story(title, story_type, length, tone)\n if not story_text:\n return jsonify({\"error\": \"Failed to create story. Check API key and provider availability.\"}), 500\n \r\n image_filename = generate_image_pollinations(title)\r\n audio_filename = generate_audio(story_text)\r\n \r\n return jsonify({\r\n \"text\": story_text,\r\n \"image\": image_filename if image_filename else None,\r\n \"audio\": audio_filename if audio_filename else None\r\n }), 200\r\n\r\n@app.route('/static/<path:filename>')\r\ndef serve_static(filename):\r\n return send_from_directory('static', filename)\r\n\r\n@app.route('/')\r\ndef index():\r\n # Clean up files on page load/refresh\r\n cleanup_files()\r\n return send_from_directory('.', 'index.html')\r\n\r\nif __name__ == \"__main__\":\r\n app.run(debug=True, port=5000)\n"}}}} |