image / tools /analyze.py
Muthuraja18's picture
Update tools/analyze.py (#30)
98431ca
Raw
History Blame Contribute Delete
4.1 kB
import os
import json
import base64
import requests
OPENROUTER_API_KEY = "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"
MODEL = "google/gemini-2.5-flash"
API_URL = "https://openrouter.ai/api/v1/chat/completions"
def analyze_image(image_path: str):
if not image_path:
return {
"success": False,
"description": "No image provided."
}
if not os.path.exists(image_path):
return {
"success": False,
"description": f"Image not found: {image_path}"
}
with open(image_path, "rb") as f:
image = base64.b64encode(f.read()).decode("utf-8")
headers = {
"Authorization": f"Bearer {OPENROUTER_API_KEY}",
"Content-Type": "application/json",
"HTTP-Referer": "http://localhost",
"X-Title": "AI Image Studio"
}
prompt = """
You are an expert computer vision assistant.
Analyze this image.
Return ONLY valid JSON.
{
"description":"",
"objects":[],
"people":"",
"style":"",
"lighting":"",
"colors":[],
"background":"",
"camera_angle":"",
"quality":"",
"editing_prompt":"",
"suggestions":[]
}
Rules:
Return JSON only.
Do not write markdown.
Do not use ```.
editing_prompt should preserve every important detail so future editing keeps the same image.
suggestions should contain 6 editing ideas.
"""
payload = {
"model": MODEL,
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{image}"
}
}
]
}
],
"temperature": 0.2,
"max_tokens": 1500
}
try:
response = requests.post(
API_URL,
headers=headers,
json=payload,
timeout=180
)
print("Status:", response.status_code)
result = response.json()
print(result)
if response.status_code != 200:
return {
"success": False,
"description": result.get(
"error",
{}
).get(
"message",
"Unknown OpenRouter error."
)
}
if "choices" not in result:
return {
"success": False,
"description": "No choices returned.",
"raw": result
}
content = result["choices"][0]["message"]["content"]
content = content.replace("```json", "")
content = content.replace("```", "")
content = content.strip()
try:
analysis = json.loads(content)
analysis["success"] = True
return analysis
except Exception:
return {
"success": True,
"description": content,
"objects": [],
"people": "",
"style": "",
"lighting": "",
"colors": [],
"background": "",
"camera_angle": "",
"quality": "",
"editing_prompt": content,
"suggestions": [
"Make it Anime",
"Pixar Style",
"Remove Background",
"Replace Background",
"Enhance Quality",
"Change Colors"
]
}
except Exception as e:
return {
"success": False,
"description": str(e)
}