Files
opencode-skill/skills/seo-multi-channel/scripts/image_integration.py
2026-03-22 13:08:30 +07:00

125 lines
3.9 KiB
Python

#!/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()