mirror of
https://github.com/K-Dense-AI/claude-scientific-skills.git
synced 2026-03-28 07:20:27 +08:00
New skill for generating scientific infographics including: - SKILL.md with comprehensive guidelines for infographic creation - Design principles and color palette references - Scripts for AI-powered infographic generation - Support for various infographic types (statistical, process, comparison, etc.) Co-authored-by: Cursor <cursoragent@cursor.com>
235 lines
10 KiB
Python
Executable File
235 lines
10 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Generate professional infographics using Nano Banana Pro.
|
|
|
|
This script generates infographics with smart iterative refinement:
|
|
- Uses Nano Banana Pro (Gemini 3 Pro Image Preview) for generation
|
|
- Uses Gemini 3 Pro for quality review
|
|
- Only regenerates if quality is below threshold
|
|
- Supports 10 infographic types and industry style presets
|
|
|
|
Usage:
|
|
python generate_infographic.py "5 benefits of exercise" -o benefits.png --type list
|
|
python generate_infographic.py "Company history 2010-2025" -o timeline.png --type timeline --style corporate
|
|
python generate_infographic.py --list-options
|
|
"""
|
|
|
|
import argparse
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
# Available options for quick reference
|
|
INFOGRAPHIC_TYPES = [
|
|
"statistical", "timeline", "process", "comparison", "list",
|
|
"geographic", "hierarchical", "anatomical", "resume", "social"
|
|
]
|
|
|
|
STYLE_PRESETS = [
|
|
"corporate", "healthcare", "technology", "nature", "education",
|
|
"marketing", "finance", "nonprofit"
|
|
]
|
|
|
|
PALETTE_PRESETS = ["wong", "ibm", "tol"]
|
|
|
|
DOC_TYPES = [
|
|
"marketing", "report", "presentation", "social", "internal", "draft", "default"
|
|
]
|
|
|
|
|
|
def list_options():
|
|
"""Print available types, styles, and palettes."""
|
|
print("""
|
|
╔══════════════════════════════════════════════════════════════════════════════╗
|
|
║ INFOGRAPHIC GENERATION OPTIONS ║
|
|
╚══════════════════════════════════════════════════════════════════════════════╝
|
|
|
|
📊 INFOGRAPHIC TYPES (--type):
|
|
──────────────────────────────────────────────────────────────────────────────
|
|
statistical Data-driven infographic with charts, numbers, and statistics
|
|
timeline Chronological events or milestones
|
|
process Step-by-step instructions or workflow
|
|
comparison Side-by-side comparison of options
|
|
list Tips, facts, or key points in list format
|
|
geographic Map-based data visualization
|
|
hierarchical Pyramid or organizational structure
|
|
anatomical Visual metaphor explaining a system
|
|
resume Professional skills and experience visualization
|
|
social Social media optimized content
|
|
|
|
🎨 STYLE PRESETS (--style):
|
|
──────────────────────────────────────────────────────────────────────────────
|
|
corporate Navy/gold, professional business style
|
|
healthcare Blue/cyan, trust-inducing medical style
|
|
technology Blue/violet, modern tech style
|
|
nature Green/brown, environmental organic style
|
|
education Blue/coral, friendly academic style
|
|
marketing Coral/teal/yellow, bold vibrant style
|
|
finance Navy/gold, conservative professional style
|
|
nonprofit Orange/sage/sand, warm human-centered style
|
|
|
|
🎨 COLORBLIND-SAFE PALETTES (--palette):
|
|
──────────────────────────────────────────────────────────────────────────────
|
|
wong Wong's palette (7 colors) - most widely recommended
|
|
ibm IBM colorblind-safe (8 colors)
|
|
tol Tol's qualitative (12 colors)
|
|
|
|
📄 DOCUMENT TYPES (--doc-type):
|
|
──────────────────────────────────────────────────────────────────────────────
|
|
marketing 8.5/10 threshold - Marketing materials (highest quality)
|
|
report 8.0/10 threshold - Business reports
|
|
presentation 7.5/10 threshold - Slides and talks
|
|
social 7.0/10 threshold - Social media content
|
|
internal 7.0/10 threshold - Internal use
|
|
draft 6.5/10 threshold - Working drafts (lowest quality)
|
|
default 7.5/10 threshold - General purpose
|
|
|
|
──────────────────────────────────────────────────────────────────────────────
|
|
Examples:
|
|
python generate_infographic.py "5 benefits of exercise" -o benefits.png --type list
|
|
python generate_infographic.py "AI adoption 2020-2025" -o timeline.png --type timeline --style technology
|
|
python generate_infographic.py "Product comparison" -o compare.png --type comparison --palette wong
|
|
|
|
""")
|
|
|
|
|
|
def main():
|
|
"""Command-line interface."""
|
|
parser = argparse.ArgumentParser(
|
|
description="Generate infographics using Nano Banana Pro with smart iterative refinement",
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
epilog="""
|
|
How it works:
|
|
1. (Optional) Research phase - gather facts using Perplexity Sonar
|
|
2. Describe your infographic in natural language
|
|
3. Nano Banana Pro generates it automatically with:
|
|
- Smart iteration (only regenerates if quality is below threshold)
|
|
- Quality review by Gemini 3 Pro
|
|
- Document-type aware quality thresholds
|
|
- Professional-quality output
|
|
|
|
Examples:
|
|
# Simple list infographic
|
|
python generate_infographic.py "5 benefits of meditation" -o benefits.png --type list
|
|
|
|
# Corporate timeline
|
|
python generate_infographic.py "Company history 2010-2025" -o timeline.png --type timeline --style corporate
|
|
|
|
# Healthcare statistics with colorblind-safe colors
|
|
python generate_infographic.py "Heart disease statistics" -o stats.png --type statistical --style healthcare --palette wong
|
|
|
|
# Statistical infographic WITH RESEARCH for accurate data
|
|
python generate_infographic.py "Global AI market size and growth" -o ai_market.png --type statistical --research
|
|
|
|
# Social media infographic
|
|
python generate_infographic.py "Save water tips" -o water.png --type social --style marketing
|
|
|
|
# List all available options
|
|
python generate_infographic.py --list-options
|
|
|
|
Environment Variables:
|
|
OPENROUTER_API_KEY Required for AI generation
|
|
"""
|
|
)
|
|
|
|
parser.add_argument("prompt", nargs="?",
|
|
help="Description of the infographic content")
|
|
parser.add_argument("-o", "--output",
|
|
help="Output file path")
|
|
parser.add_argument("--type", "-t", choices=INFOGRAPHIC_TYPES,
|
|
help="Infographic type preset")
|
|
parser.add_argument("--style", "-s", choices=STYLE_PRESETS,
|
|
help="Industry style preset")
|
|
parser.add_argument("--palette", "-p", choices=PALETTE_PRESETS,
|
|
help="Colorblind-safe palette")
|
|
parser.add_argument("--background", "-b", default="white",
|
|
help="Background color (default: white)")
|
|
parser.add_argument("--doc-type", default="default", choices=DOC_TYPES,
|
|
help="Document type for quality threshold (default: default)")
|
|
parser.add_argument("--iterations", type=int, default=3,
|
|
help="Maximum refinement iterations (default: 3)")
|
|
parser.add_argument("--api-key",
|
|
help="OpenRouter API key (or use OPENROUTER_API_KEY env var)")
|
|
parser.add_argument("-v", "--verbose", action="store_true",
|
|
help="Verbose output")
|
|
parser.add_argument("--research", "-r", action="store_true",
|
|
help="Research the topic first using Perplexity Sonar for accurate data")
|
|
parser.add_argument("--list-options", action="store_true",
|
|
help="List all available types, styles, and palettes")
|
|
|
|
args = parser.parse_args()
|
|
|
|
# Handle --list-options
|
|
if args.list_options:
|
|
list_options()
|
|
return
|
|
|
|
# Validate required arguments
|
|
if not args.prompt:
|
|
parser.error("prompt is required unless using --list-options")
|
|
if not args.output:
|
|
parser.error("--output is required")
|
|
|
|
# Check for API key
|
|
api_key = args.api_key or os.getenv("OPENROUTER_API_KEY")
|
|
if not api_key:
|
|
print("Error: OPENROUTER_API_KEY environment variable not set")
|
|
print("\nFor AI generation, you need an OpenRouter API key.")
|
|
print("Get one at: https://openrouter.ai/keys")
|
|
print("\nSet it with:")
|
|
print(" export OPENROUTER_API_KEY='your_api_key'")
|
|
print("\nOr use --api-key flag")
|
|
sys.exit(1)
|
|
|
|
# Find AI generation script
|
|
script_dir = Path(__file__).parent
|
|
ai_script = script_dir / "generate_infographic_ai.py"
|
|
|
|
if not ai_script.exists():
|
|
print(f"Error: AI generation script not found: {ai_script}")
|
|
sys.exit(1)
|
|
|
|
# Build command
|
|
cmd = [sys.executable, str(ai_script), args.prompt, "-o", args.output]
|
|
|
|
if args.type:
|
|
cmd.extend(["--type", args.type])
|
|
|
|
if args.style:
|
|
cmd.extend(["--style", args.style])
|
|
|
|
if args.palette:
|
|
cmd.extend(["--palette", args.palette])
|
|
|
|
if args.background != "white":
|
|
cmd.extend(["--background", args.background])
|
|
|
|
if args.doc_type != "default":
|
|
cmd.extend(["--doc-type", args.doc_type])
|
|
|
|
if args.iterations != 3:
|
|
cmd.extend(["--iterations", str(args.iterations)])
|
|
|
|
if api_key:
|
|
cmd.extend(["--api-key", api_key])
|
|
|
|
if args.verbose:
|
|
cmd.append("-v")
|
|
|
|
if args.research:
|
|
cmd.append("--research")
|
|
|
|
# Execute
|
|
try:
|
|
result = subprocess.run(cmd, check=False)
|
|
sys.exit(result.returncode)
|
|
except Exception as e:
|
|
print(f"Error executing AI generation: {e}")
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|