SS-2005's picture
Initial HF Space deployment
59ec65a
Raw
History Blame Contribute Delete
23.2 kB
from openai import OpenAI
import base64
import re
from dotenv import load_dotenv
from PIL import Image
import os, json
from pydantic import BaseModel, Field
from typing import List
import logging
logger = logging.getLogger(__name__)
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
client = OpenAI(api_key=api_key) if api_key else None
class ImagePrompt(BaseModel):
"""Defines the structured output for an educational image prompt."""
visual_type: str
primary_subject: str
key_elements: List[str]
style_description: str
final_prompt: str
def generate_image_infographic_prompt(presentation_text: str) -> str:
"""
Generates a highly adaptive, context-aware image prompt from presentation text.
Intelligently determines the best visual approach based on content type.
"""
if not client:
print("Warning: No OpenAI client initialized. Image prompt generation skipped.")
return None
system_prompt = """
You are an elite educational visual designer with expertise in cognitive learning theory and visual communication. You create infographics that maximize retention, comprehension, and engagement across all domains: AI/ML, Data Science, Software Engineering, Cloud Computing, Algorithms, Mathematics, Physics, Biology, Business, Finance, and more.
Your mission: Analyze the content deeply, understand the learning objective, and create the MOST EFFECTIVE visual representation that matches how humans learn this type of information.
**STEP 1: IDENTIFY LEARNING OBJECTIVE**
First determine what the learner needs to understand:
- Structure/Organization? → Show hierarchy and relationships
- Sequence/Process? → Show order and flow
- Comparison? → Show differences and similarities
- Application? → Show real-world context
- Mechanism? → Show how something works
- Relationships? → Show connections and dependencies
**STEP 2: CONTENT ANALYSIS - Choose the RIGHT visual approach:**
1. **ARCHITECTURE/SYSTEM DESIGN** (Neural Networks, Cloud Systems, Databases, Pipelines):
→ Use: Layered architecture diagrams, component blocks, data flow arrows, system interconnections
→ Include: Clear component labels, connection lines, data flow indicators, layer representations
2. **PROCESS/WORKFLOW** (Algorithms, Pipelines, Lifecycle, Methodology):
→ Use: Step-by-step flowcharts, numbered sequence blocks, decision trees, timeline flows
→ Include: Directional arrows ONLY where process flows, numbered steps, decision points
3. **CONCEPT/THEORY** (Mathematical concepts, Principles, Theories, Definitions):
→ Use: Central concept with surrounding elements, relationship diagrams, hierarchical structures
→ Include: Key terms in circles/boxes, relationship connectors, visual metaphors, formulas visualized
4. **COMPARISON/CONTRAST** (Algorithm vs Algorithm, Tech A vs Tech B, Before/After):
→ Use: Side-by-side layouts, vs. diagrams, tables, feature matrices
→ Include: Clear dividing line, comparative icons, pros/cons indicators
5. **REAL-WORLD EXAMPLES** (Use cases, Applications, Case studies):
→ Use: Scenario illustrations, realistic icons representing actual objects/systems, contextual scenes
→ Include: Industry-specific icons (e.g., healthcare, finance, retail), user interactions, practical scenarios
6. **DATA/STATISTICS** (Performance metrics, Research findings, Benchmarks):
→ Use: Charts (bar, line, pie), graphs, data visualizations, statistical representations
→ Include: Axis labels, legends, data points, trend indicators
7. **MATHEMATICAL/FORMULA-HEAVY** (Equations, Calculations, Mathematical proofs):
→ Use: Formula breakdowns, visual equation components, geometric representations
→ Include: Mathematical symbols clearly shown, step-by-step derivations, geometric shapes
8. **CODE/PROGRAMMING** (Syntax, Code examples, Programming concepts):
→ Use: Simplified code blocks with annotations, syntax highlighting representation, code flow diagrams
→ Include: Color-coded sections, comment bubbles, execution flow arrows
9. **HIERARCHICAL/TAXONOMY** (Categories, Classifications, Organizational structures):
→ Use: Tree diagrams, organizational charts, nested boxes, category breakdowns
→ Include: Parent-child relationships, grouping containers, hierarchical levels
10. **TIMELINE/EVOLUTION** (History, Development stages, Lifecycle, Progression):
→ Use: Horizontal or vertical timelines, milestone markers, evolution sequences
→ Include: Dated markers, progression arrows, stage indicators, historical context
11. **PROBLEM-SOLUTION** (Challenges and fixes, Pain points and remedies):
→ Use: Before/after split, problem on left with solution on right, connected transformation
→ Include: Problem icons (X, warning), solution icons (checkmark, light bulb), transformation arrow
12. **MULTI-DIMENSIONAL COMPARISON** (Feature matrices, Decision frameworks, Trade-off analysis):
→ Use: Tables, matrix grids, radar charts, quadrant diagrams
→ Include: Multiple comparison criteria, scoring indicators, decision factors
**STEP 3: APPLY COGNITIVE LEARNING PRINCIPLES**
Apply these evidence-based design principles:
**Visual Hierarchy:**
- Most important element should be largest or most prominent
- Use size, color, and position to guide attention
- Create clear entry point for the eye (usually top-left or center)
**Chunking Information:**
- Group related elements together with proximity or containers
- Limit to 5-7 main chunks (cognitive load management)
- Use white space to separate distinct concepts
**Color Psychology & Accessibility:**
- Use color meaningfully (not decoratively):
* Blue/Green: Trust, stability, growth (good for processes, data)
* Orange/Yellow: Energy, attention, innovation (good for highlights, warnings)
* Purple: Creativity, luxury (good for advanced concepts)
* Red: Urgency, importance (use sparingly for critical points)
- Ensure sufficient contrast for readability (WCAG AA minimum)
- Don't rely solely on color to convey meaning
**Progressive Disclosure:**
- Start with high-level overview, then show details
- Use visual layers or numbered steps for complexity
- Don't overwhelm with everything at once
**Concrete Before Abstract:**
- Show real-world examples before theoretical concepts
- Use familiar metaphors and analogies
- Include recognizable icons and objects
**Dual Coding:**
- Combine visuals with minimal text labels
- Use icons that reinforce the concept (not random decoration)
- Ensure text and visuals work together, not compete
**STRICT OUTPUT RULES:**
1. **visual_type** → Be SPECIFIC, not generic:
- ✓ "Architecture diagram with layered neural network structure"
- ✓ "Process flowchart with decision points"
- ✓ "Comparison infographic with side-by-side analysis"
- ✗ "Technical infographic (minimal text)" ← Too generic!
2. **primary_subject** → Extract the EXACT core topic from the text
3. **key_elements** → List 5-8 SPECIFIC visual components that match the content:
- For architecture: "input layer block", "hidden layer neurons", "output connections", "activation function icons"
- For processes: "start node", "step 1 block", "decision diamond", "end node", "feedback loop arrow"
- For comparisons: "left panel: method A", "right panel: method B", "comparison table", "pros/cons icons"
- For real-world: "user icon interacting", "real device/product image", "industry setting background", "data flow from real scenario"
- For concepts: "central concept circle", "supporting theory boxes", "relationship connectors", "formula breakdown"
4. **style_description** → Adapt based on content AND audience:
- Technical/Engineering: "Clean technical diagram, engineering blueprint style, precise lines, professional CAD-like quality, monochromatic with accent colors"
- Business/Management: "Modern infographic, corporate color palette (blues, grays), balanced layout, executive presentation quality, sophisticated and professional"
- Science/Research: "Scientific illustration style, accurate representations, academic quality, clear labeling, neutral color scheme with strategic highlights"
- Education/Training: "Engaging educational style, friendly colors, approachable design, clear visual metaphors, student-friendly complexity level"
- Creative/Design: "Contemporary design, creative visual metaphors, vibrant color scheme, dynamic composition, innovative layouts"
- Data/Analytics: "Data visualization style, clean charts, precise scaling, informative legends, analytical clarity"
5. **final_prompt** → CRITICAL - Build an INTELLIGENT, DETAILED prompt:
**ENHANCED TEMPLATE STRUCTURE:**
"Create a [SPECIFIC_VISUAL_TYPE] about **{primary_subject}** designed for [TARGET_AUDIENCE: students/professionals/general audience].
LEARNING OBJECTIVE: [What should viewers understand after seeing this?]
VISUAL COMPOSITION:
[Choose based on content type and include detailed instructions:]
FOR ARCHITECTURE:
- Design a multi-layered architecture diagram with clear component hierarchy
- Use distinct, labeled blocks for each layer/component with consistent sizing
- Show data flow with directional arrows between components (indicate direction clearly)
- Use different colors/shading for different layer types
- Include input/output indicators
- Add dimension labels (e.g., input size, layer depth)
- Visual metaphor: [Suggest if applicable, e.g., 'like a assembly line' or 'like stacked building blocks']
FOR PROCESS:
- Design a {linear/branching/cyclical} flowchart showing clear progression from start to finish
- Use numbered steps (1, 2, 3...) or clear sequential indicators
- Include decision points with diamond shapes if applicable
- Show feedback loops or iterations with curved return arrows where relevant
- Use color coding to distinguish different phases/stages
- Add time/duration indicators if relevant
- Highlight the critical path or most important steps
FOR COMPARISON:
- Create a {split-screen/table/matrix/overlapping Venn} comparison layout
- Clearly divide space between items being compared with visual separator
- Use consistent visual elements for fair comparison (same icon style, size, position)
- Highlight similarities with [approach] and differences with [contrasting approach]
- Include a legend or key if using color/symbol coding
- Add quantitative indicators if applicable (better/worse, faster/slower)
- Ensure both sides get equal visual weight
FOR REAL-WORLD APPLICATION:
- Illustrate realistic scenario with contextual environment (specify: office/hospital/factory/home/outdoor)
- Include recognizable objects that represent the actual use case
- Show human interaction or user journey through the system
- Use industry-standard icons and realistic proportions
- Add environmental details that provide context (screens, devices, tools, furniture)
- Show input and output in the real context
- Include diversity in human representations if people are shown
FOR CONCEPT/THEORY:
- Place main concept at {center/top} with {size appropriate to importance}
- Arrange supporting elements in {radial/hierarchical/network} relationship
- Use visual metaphors to represent abstract ideas (specify metaphor)
- Show connections with labeled lines indicating relationship types
- Use containers or grouping to show categories
- Include brief definitions or formulas where essential
- Layer complexity: background context → main concept → supporting details
FOR DATA/STATISTICS:
- Use {bar chart/line graph/pie chart/scatter plot/heat map} based on data type
- Include clearly labeled axes with units and scale
- Add a descriptive title and legend
- Show trends with arrows or annotations
- Use color coding with a clear key
- Highlight key data points or outliers
- Include comparison baselines or benchmarks if relevant
- Ensure data is accurately represented (no misleading scales)
FOR HIERARCHICAL:
- Design a {tree/pyramid/nested boxes} structure showing clear levels
- Distinguish parent-child relationships with connecting lines or containers
- Use size or position to indicate hierarchy level
- Include clear labels for each category/level
- Show quantity or scope at each level if applicable
- Use consistent indentation or alignment
FOR TIMELINE:
- Create a {horizontal/vertical/spiral} timeline with clear chronology
- Mark key milestones with icons or markers
- Include dates or time periods clearly
- Show duration with spacing or length
- Add annotations for significant events
- Use different colors for different eras or phases
- Include 'you are here' indicator if showing current state
FOR PROBLEM-SOLUTION:
- Split design: Problem side (left/top) and Solution side (right/bottom)
- Use visual contrast (dark vs light, cluttered vs clean)
- Show transformation with prominent connecting arrow or bridge
- Include problem indicators (pain points, inefficiencies, X marks)
- Show solution benefits (improvements, checkmarks, improvements)
- Use before/after imagery if applicable
FOR MULTI-DIMENSIONAL COMPARISON:
- Create a {matrix/radar chart/quadrant diagram/feature table}
- List all comparison dimensions clearly
- Use consistent rating or scoring system
- Color code for quick scanning (green=good, red=poor, or custom)
- Include a 'winner' or 'best for' recommendation if appropriate
- Show trade-offs visually
SPECIFIC KEY ELEMENTS TO INCLUDE:
{Detailed list of 6-9 elements with descriptions, not just names}
Example: Instead of "neural network icon", say "Interconnected nodes arranged in layers with weighted connections shown as varying line thickness"
COGNITIVE DESIGN PRINCIPLES TO APPLY:
- Visual hierarchy: {specify what should be most prominent}
- Chunking: {specify how to group related elements}
- Color usage: {specify color purpose - not just palette}
- Entry point: {where should the eye start?}
- Reading path: {what order should elements be viewed?}
STYLE AND QUALITY:
{style_description}
LAYOUT SPECIFICATIONS:
- Orientation: Landscape (1536×1024)
- Margins: Generous white space around edges
- Grid: {specify if needed: 2-column, 3-section, centered, etc.}
- Alignment: {specify: center-aligned, left-aligned, grid-based}
- Typography: Sans-serif, clean, modern, maximum 2-3 font sizes
- Consistency: All icons same style, all shapes same family, unified color palette
TEXT USAGE:
- Minimal labels: 2-5 words maximum per label
- Strategic placement: Near relevant visual elements
- Hierarchy: Title (large) → Section headers (medium) → Labels (small)
- Essential only: Use text to clarify, not to explain everything
- Avoid: Paragraphs, long sentences, redundant text
ACCESSIBILITY:
- High contrast between text and background (4.5:1 minimum)
- Don't rely on color alone to convey meaning
- Icons should be recognizable and distinct
- Text should be legible at small sizes
QUALITY STANDARDS:
- High-resolution, crisp lines and shapes
- Professional, presentation-ready quality
- Print-quality graphics (300+ DPI equivalent)
- No pixelation, blur, or distortion
- Balanced composition with intentional white space
- Suitable for projection on large screens
TARGET IMPACT:
After viewing this infographic, the learner should be able to {specify learning outcome}.
The visual should reduce cognitive load by {specify how: organizing complexity, showing relationships, providing structure, etc.}."
**INTELLIGENCE RULES:**
- Analyze FIRST: What type of content? What's the learning goal? Who's the audience?
- Choose WISELY: Match visual type to content nature and learning objective
- Be SPECIFIC: Every instruction should be detailed and actionable
- NO arrows unless there's actual flow, progression, causation, or connection to show
- NO flowcharts for static concepts, comparisons, or hierarchies
- NO generic "technical infographic" - be precise about the visual approach
- YES to real-world objects when discussing applications and use cases
- YES to architecture diagrams when discussing systems, structures, and frameworks
- YES to data visualizations when discussing metrics, performance, statistics
- YES to visual metaphors that make abstract concepts concrete
- ADAPT every element based on: content type, audience level, learning objective
- THINK about cognitive load: simplify without losing accuracy
- BALANCE detail and clarity: enough detail to be useful, enough clarity to be understood
Always output as a properly structured ImagePrompt object with all fields filled thoughtfully.
"""
user_prompt = f"""
Analyze this content deeply and determine the OPTIMAL visual representation approach.
**SYSTEMATIC ANALYSIS - Think through each step:**
STEP 1 - Content Understanding:
- What is the main topic/concept?
- What are the key elements or components?
- What's the complexity level? (beginner/intermediate/advanced)
STEP 2 - Learning Objective:
- What should the viewer UNDERSTAND after seeing this?
- What's the primary cognitive task? (memorize, understand, apply, analyze, compare, evaluate)
- What's the most important insight or takeaway?
STEP 3 - Visual Strategy:
- What type of content is this? (architecture/process/concept/comparison/real-world/data/hierarchy/timeline/problem-solution/multi-comparison/math/code)
- What visual approach will maximize comprehension for THIS specific content?
- Should this show: structure, sequence, relationships, comparisons, applications, mechanisms?
STEP 4 - Specific Visual Elements:
- What 6-9 SPECIFIC visual elements are needed? (be detailed, not generic)
- Should there be arrows/flow? If yes, why? What do they show?
- What real-world objects or metaphors would help understanding?
- What visual hierarchy makes sense? (what should be largest/most prominent?)
STEP 5 - Audience Adaptation:
- Who is this for? (students learning basics, professionals needing reference, general audience)
- What's their likely prior knowledge level?
- Should this be simplified or detailed?
STEP 6 - Cognitive Design:
- How can we chunk this information into 5-7 meaningful groups?
- Where should the viewer's eye start? What's the reading path?
- What colors would support understanding (not just look pretty)?
- How do we reduce cognitive load while maintaining accuracy?
Content to visualize:
---
{presentation_text}
---
Now generate a comprehensive ImagePrompt object with:
1. **visual_type**: Be highly specific (e.g., "Three-layer neural network architecture diagram with activation functions" not just "technical infographic")
2. **primary_subject**: Extract the exact core topic
3. **key_elements**: List 6-9 DETAILED visual components with descriptions
Example quality: "Input layer represented as 784 nodes arranged in 28x28 grid" vs. just "input layer"
4. **style_description**: Choose appropriate style for content type AND audience level
Include: color palette rationale, typography style, visual tone (technical/friendly/formal/creative)
5. **final_prompt**: Create an EXCEPTIONALLY DETAILED prompt following the enhanced template structure that:
- Specifies the learning objective
- Provides detailed composition instructions for the chosen visual type
- Lists specific elements with descriptions
- Includes cognitive design principles
- Specifies layout, style, accessibility requirements
- Defines quality standards and target impact
- Is 300-500 words of clear, actionable instructions
Be intelligent. Be thorough. Be specific. Create a prompt so detailed that the image generator knows EXACTLY what to create and why each element matters for learning.
"""
try:
response = client.responses.parse(
model="gpt-4o",
input=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt},
],
text_format=ImagePrompt,
)
return response.output_parsed.final_prompt
except Exception as e:
print(f"An error occurred: {e}")
return None
def _summarize_content_for_image(presentation_text: str) -> str:
"""Summarizes presentation text preserving key technical details and context."""
if not client:
print("Warning: No OpenAI client initialized. Content summarization skipped.")
return presentation_text
try:
completion = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "system",
"content": "You are an expert at distilling technical content while preserving critical details for visualization. Identify the core concept, key components, and whether it's about architecture, process, comparison, real-world application, or theory."
},
{
"role": "user",
"content": f"""Analyze and summarize this content in 60-80 words, preserving:
- The main topic/concept
- Key technical terms or components
- Whether it describes a structure, process, comparison, or concept
- Any real-world applications or examples mentioned
- Important relationships or flows
Content:
---
{presentation_text}
---
Focus on details needed to create an accurate, helpful visual representation."""
}
],
temperature=0.3,
max_tokens=150,
)
summary = completion.choices[0].message.content
# Clean up thinking tags if present
summary = re.sub(r'<think>.*?</think>', '', summary, flags=re.DOTALL).strip()
return summary
except Exception as e:
logger.warning(f"Could not summarize content, falling back to original text. Error: {e}")
return presentation_text
def generate_infographic_img(presentation_text: str, filename: str = "infographic.png"):
"""
Generate an intelligent, context-aware infographic image based on presentation content.
Automatically adapts visual style to content type.
Returns the path to the saved image file.
Note: Image generation requires OpenAI (DALL-E) - OpenRouter doesn't support image generation.
"""
if not client:
print("Warning: OpenAI client not initialized. Image generation requires OpenAI API key.")
return None
# Summarize while preserving technical context
summarized_content = _summarize_content_for_image(presentation_text)
# Generate intelligent, adaptive prompt
detailed_prompt = generate_image_infographic_prompt(summarized_content)
if not detailed_prompt:
raise ValueError("Failed to generate image prompt.")
print("=" * 80)
print("GENERATED INTELLIGENT PROMPT:")
print("=" * 80)
print(detailed_prompt)
print("=" * 80)
result = client.images.generate(
model="gpt-image-1",
prompt=detailed_prompt,
size="1536x1024",
quality="high",
)
image_base64 = result.data[0].b64_json
image_bytes = base64.b64decode(image_base64)
with open(filename, "wb") as f:
f.write(image_bytes)
print(f"✓ High-quality infographic saved as {filename}")
return filename