Initial: pi-skill — 68 skills, 43 extensions, 11 themes for Pi
This commit is contained in:
124
skills/scripts/image_integration.py
Normal file
124
skills/scripts/image_integration.py
Normal file
@@ -0,0 +1,124 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Image Integration Module
|
||||
|
||||
Handles product vs non-product image workflows.
|
||||
Since image-generation and image-edit skills are removed, this module
|
||||
provides utilities to find existing images and ask user to provide new ones.
|
||||
"""
|
||||
|
||||
import os
|
||||
import glob
|
||||
import argparse
|
||||
from typing import Optional, List
|
||||
|
||||
|
||||
class ImageIntegration:
|
||||
def __init__(self, skills_base_path: str = ""):
|
||||
pass
|
||||
|
||||
def find_product_images(self, product_name: str, website_repo: str) -> List[str]:
|
||||
"""
|
||||
Find existing product images in website repo
|
||||
|
||||
Args:
|
||||
product_name: Product name to search for
|
||||
website_repo: Path to website repository
|
||||
|
||||
Returns:
|
||||
List of image paths
|
||||
"""
|
||||
if not website_repo or not os.path.exists(website_repo):
|
||||
return []
|
||||
|
||||
extensions = [".jpg", ".jpeg", ".png", ".webp"]
|
||||
found_images = []
|
||||
|
||||
patterns = [
|
||||
f"**/*{product_name}*{{ext}}",
|
||||
f"public/images/**/*{{ext}}",
|
||||
f"src/assets/**/*{{ext}}",
|
||||
]
|
||||
|
||||
for pattern in patterns:
|
||||
for ext in extensions:
|
||||
search_pattern = pattern.format(ext=ext)
|
||||
matches = glob.glob(
|
||||
os.path.join(website_repo, search_pattern), recursive=True
|
||||
)
|
||||
found_images.extend(matches[:5])
|
||||
|
||||
return list(set(found_images))[:10]
|
||||
|
||||
def handle_product_content(
|
||||
self, product_name: str, website_repo: str
|
||||
) -> Optional[List[str]]:
|
||||
"""Handle image for product content - returns found images for user to select"""
|
||||
print(f"\n🔍 Looking for product images: {product_name}")
|
||||
|
||||
images = self.find_product_images(product_name, website_repo)
|
||||
|
||||
if images:
|
||||
print(f" ✓ Found {len(images)} image(s):")
|
||||
for i, img in enumerate(images[:5], 1):
|
||||
print(f" {i}. {img}")
|
||||
return images
|
||||
else:
|
||||
print(f" ✗ No product images found in repo")
|
||||
return None
|
||||
|
||||
def suggest_non_product_image(self, content_type: str, topic: str) -> str:
|
||||
"""
|
||||
Suggest image for non-product content
|
||||
|
||||
Args:
|
||||
content_type: Type (service, stats, knowledge)
|
||||
topic: Topic name
|
||||
|
||||
Returns:
|
||||
Suggestion message
|
||||
"""
|
||||
suggestions = {
|
||||
"service": f"Please provide a professional service illustration for: {topic}",
|
||||
"stats": f"Please provide a data visualization/infographic image for: {topic}",
|
||||
"knowledge": f"Please provide an educational illustration for: {topic}",
|
||||
"default": f"Please provide an image for: {topic}",
|
||||
}
|
||||
|
||||
return suggestions.get(content_type, suggestions["default"])
|
||||
|
||||
|
||||
def main():
|
||||
"""Test image integration"""
|
||||
parser = argparse.ArgumentParser(description="Test Image Integration")
|
||||
parser.add_argument("--action", choices=["find", "suggest"], required=True)
|
||||
parser.add_argument("--topic", help="Topic name")
|
||||
parser.add_argument("--product-name", help="Product name (for find action)")
|
||||
parser.add_argument("--website-repo", help="Website repo path (for find action)")
|
||||
parser.add_argument(
|
||||
"--content-type", default="default", help="Content type (for suggest action)"
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
integration = ImageIntegration()
|
||||
|
||||
if args.action == "find":
|
||||
if not args.product_name or not args.website_repo:
|
||||
print("Error: --product-name and --website-repo required for find")
|
||||
return
|
||||
|
||||
images = integration.find_product_images(args.product_name, args.website_repo)
|
||||
print(f"\nFound {len(images)} images:")
|
||||
for img in images:
|
||||
print(f" - {img}")
|
||||
|
||||
elif args.action == "suggest":
|
||||
suggestion = integration.suggest_non_product_image(
|
||||
args.content_type, args.topic or "your topic"
|
||||
)
|
||||
print(f"\n{suggestion}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user