Add documentation and utility modules
- Add API specification documentation - Add system specification document - Add UI mockups and documentation - Add utility modules (wifi)
This commit is contained in:
155
docs/mockups/generate_images.py
Executable file
155
docs/mockups/generate_images.py
Executable file
@@ -0,0 +1,155 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Generate images from HTML mockup files
|
||||
Uses Playwright to render HTML and take screenshots
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
try:
|
||||
from playwright.sync_api import sync_playwright
|
||||
PLAYWRIGHT_AVAILABLE = True
|
||||
except ImportError:
|
||||
PLAYWRIGHT_AVAILABLE = False
|
||||
|
||||
try:
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.chrome.options import Options
|
||||
from selenium.webdriver.chrome.service import Service
|
||||
SELENIUM_AVAILABLE = True
|
||||
except ImportError:
|
||||
SELENIUM_AVAILABLE = False
|
||||
|
||||
try:
|
||||
from html2image import Html2Image
|
||||
HTML2IMAGE_AVAILABLE = True
|
||||
except ImportError:
|
||||
HTML2IMAGE_AVAILABLE = False
|
||||
|
||||
|
||||
def generate_with_playwright(html_file, output_file, width=1920, height=1080):
|
||||
"""Generate image using Playwright"""
|
||||
with sync_playwright() as p:
|
||||
browser = p.chromium.launch(headless=True)
|
||||
page = browser.new_page(viewport={'width': width, 'height': height})
|
||||
page.goto(f'file://{html_file.absolute()}')
|
||||
# Wait for page to load
|
||||
page.wait_for_timeout(1000)
|
||||
page.screenshot(path=str(output_file), full_page=True)
|
||||
browser.close()
|
||||
print(f"✓ Generated {output_file.name} using Playwright")
|
||||
|
||||
|
||||
def generate_with_selenium(html_file, output_file, width=1920, height=1080):
|
||||
"""Generate image using Selenium"""
|
||||
chrome_options = Options()
|
||||
chrome_options.add_argument('--headless')
|
||||
chrome_options.add_argument('--no-sandbox')
|
||||
chrome_options.add_argument('--disable-dev-shm-usage')
|
||||
chrome_options.add_argument(f'--window-size={width},{height}')
|
||||
|
||||
driver = webdriver.Chrome(options=chrome_options)
|
||||
try:
|
||||
driver.get(f'file://{html_file.absolute()}')
|
||||
# Wait for page to load
|
||||
import time
|
||||
time.sleep(2)
|
||||
driver.save_screenshot(str(output_file))
|
||||
print(f"✓ Generated {output_file.name} using Selenium")
|
||||
finally:
|
||||
driver.quit()
|
||||
|
||||
|
||||
def generate_with_html2image(html_file, output_file, width=1920, height=1080):
|
||||
"""Generate image using html2image"""
|
||||
hti = Html2Image(size=(width, height))
|
||||
hti.screenshot(
|
||||
html_file=str(html_file),
|
||||
save_as=output_file.name,
|
||||
size=(width, height)
|
||||
)
|
||||
print(f"✓ Generated {output_file.name} using html2image")
|
||||
|
||||
|
||||
def generate_image(html_file, output_dir, width=1920, height=1080):
|
||||
"""Generate image from HTML file using available method"""
|
||||
html_path = Path(html_file)
|
||||
output_path = output_dir / f"{html_path.stem}.png"
|
||||
|
||||
if PLAYWRIGHT_AVAILABLE:
|
||||
try:
|
||||
generate_with_playwright(html_path, output_path, width, height)
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Playwright failed: {e}, trying alternatives...")
|
||||
|
||||
if SELENIUM_AVAILABLE:
|
||||
try:
|
||||
generate_with_selenium(html_path, output_path, width, height)
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Selenium failed: {e}, trying alternatives...")
|
||||
|
||||
if HTML2IMAGE_AVAILABLE:
|
||||
try:
|
||||
generate_with_html2image(html_path, output_path, width, height)
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"html2image failed: {e}")
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def main():
|
||||
"""Main function to generate images from all HTML files"""
|
||||
script_dir = Path(__file__).parent
|
||||
output_dir = script_dir / "images"
|
||||
output_dir.mkdir(exist_ok=True)
|
||||
|
||||
html_files = list(script_dir.glob("*.html"))
|
||||
|
||||
if not html_files:
|
||||
print("No HTML files found in mockups directory")
|
||||
return
|
||||
|
||||
print(f"Found {len(html_files)} HTML file(s)")
|
||||
print(f"Output directory: {output_dir}")
|
||||
print()
|
||||
|
||||
# Check available libraries
|
||||
if not any([PLAYWRIGHT_AVAILABLE, SELENIUM_AVAILABLE, HTML2IMAGE_AVAILABLE]):
|
||||
print("ERROR: No screenshot library available!")
|
||||
print("\nPlease install one of the following:")
|
||||
print(" pip install playwright && playwright install chromium")
|
||||
print(" pip install selenium")
|
||||
print(" pip install html2image")
|
||||
sys.exit(1)
|
||||
|
||||
print("Available screenshot libraries:")
|
||||
if PLAYWRIGHT_AVAILABLE:
|
||||
print(" ✓ Playwright")
|
||||
if SELENIUM_AVAILABLE:
|
||||
print(" ✓ Selenium")
|
||||
if HTML2IMAGE_AVAILABLE:
|
||||
print(" ✓ html2image")
|
||||
print()
|
||||
|
||||
# Generate images
|
||||
success_count = 0
|
||||
for html_file in html_files:
|
||||
print(f"Generating image from {html_file.name}...")
|
||||
if generate_image(html_file, output_dir):
|
||||
success_count += 1
|
||||
else:
|
||||
print(f"✗ Failed to generate image from {html_file.name}")
|
||||
print()
|
||||
|
||||
print(f"Successfully generated {success_count}/{len(html_files)} images")
|
||||
print(f"Images saved to: {output_dir}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user