import os import base64 # --- Configuration --- WIDTH = 1200 # Image width HEIGHT = 675 # Image height BG_COLOR = "#282a36" # Aider code background color PRIMARY_COLOR = "#14b014" # Aider terminal green TEXT_COLOR = "#FFFFFF" # White for contrast FONT_SIZE_LARGE = 110 FONT_SIZE_MEDIUM = 55 FONT_SIZE_SMALL = 30 OUTPUT_FILENAME = "aider_30k_stars_celebration.svg" # Font families - SVG will try these in order. Ensure viewers have suitable fonts. FONT_FAMILY_BOLD = "'DejaVu Sans Bold', 'Arial Bold', 'Helvetica Bold', sans-serif-bold, sans-serif" FONT_FAMILY_REGULAR = "'DejaVu Sans', 'Arial', 'Helvetica', sans-serif" # --- Paths (Adjust if needed) --- # Assumes the script is run from the root of the aider repo LOGO_PATH = "aider/website/assets/logo.svg" # --- Text Content --- line1 = "Thank You!" line2 = "30,000" line3 = "GitHub Stars" line4 = "github.com/Aider-AI/aider" # --- Load and Encode Logo --- logo_data_uri = None logo_width = 200 # Default width from logo.svg logo_height = 60 # Default height from logo.svg try: if os.path.exists(LOGO_PATH): with open(LOGO_PATH, "rb") as f: logo_content = f.read() encoded_logo = base64.b64encode(logo_content).decode("utf-8") logo_data_uri = f"data:image/svg+xml;base64,{encoded_logo}" print(f"Logo loaded and encoded from {LOGO_PATH}") # Optional: Could parse SVG to get width/height, but using defaults is simpler else: print(f"Warning: Logo not found at {LOGO_PATH}, skipping logo.") except Exception as e: print(f"Warning: Could not load or encode logo: {e}") # --- Calculate Positions --- center_x = WIDTH / 2 logo_y_pos = HEIGHT * 0.15 logo_x_pos = center_x - (logo_width / 2) # Adjust text start based on whether logo is present text_start_y = logo_y_pos + logo_height + 40 if logo_data_uri else HEIGHT * 0.2 current_y = text_start_y # Calculate Y positions for each line (using dominant-baseline="middle" for vertical centering) line1_y = current_y + FONT_SIZE_MEDIUM / 2 current_y += FONT_SIZE_MEDIUM + 30 line2_y = current_y + FONT_SIZE_LARGE / 2 current_y += FONT_SIZE_LARGE + 15 line3_y = current_y + FONT_SIZE_MEDIUM / 2 current_y += FONT_SIZE_MEDIUM + 60 line4_y = HEIGHT - FONT_SIZE_SMALL - 30 + FONT_SIZE_SMALL / 2 # Position near bottom # --- Generate SVG Content --- svg_elements = [] # Background svg_elements.append(f'') # Logo if logo_data_uri: svg_elements.append( f'' ) # Text Lines svg_elements.append( f'{line1}' ) svg_elements.append( f'{line2}' ) svg_elements.append( f'{line3}' ) svg_elements.append( f'{line4}' ) # Combine into final SVG svg_content = f"""\ {''.join(svg_elements)} """ # --- Save SVG Image --- try: with open(OUTPUT_FILENAME, "w", encoding="utf-8") as f: f.write(svg_content) print(f"Celebration SVG image saved as '{OUTPUT_FILENAME}'") except Exception as e: print(f"Error saving SVG image: {e}") # --- Define Font Families Used in Text Elements --- # These need to match the font-family attributes used in the tags FONT_FAMILY_MEDIUM = FONT_FAMILY_BOLD # Using Bold for Medium as per original Pillow logic attempt