blog-banner-creation — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited blog-banner-creation (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Create branded blog header images that follow strict layout and branding rules to ensure consistency and mobile-safe rendering across all platforms.
ALL important content MUST be within the center 75% of the image.
+--------------------------------------------------+
| 12.5% margin |
| +--------------------------------------------+ |
| | | |
| | 75% SAFE ZONE | |
| | (All logos, text, important content) | |
| | | |
| +--------------------------------------------+ |
| 12.5% margin |
+--------------------------------------------------+Within the 75% safe zone, content is arranged:
TOP-LEFT: [Brand Icon] Brand Logo (WITH SHADOW)
(positioned LEFT or RIGHT, NOT centered)
(shadow behind text for "lift" effect)
MIDDLE: ARTICLE TITLE
(LARGE font, main focus, CENTERED, word-wrapped if needed)
(subtle shadow for readability)
BOTTOM: (NOTHING - no tagline, title is the main content)Key Points:
For a 1920x1080 image:
Scale proportionally for other image sizes.
from PIL import Image, ImageDraw, ImageFont
from pathlib import Path
def create_blog_header(
article_title: str,
brand_name: str = "YourBrand",
bg_color: str = "#080a12",
accent_color: str = "#2a93c1",
cta_color: str = "#f1420b",
width: int = 1920,
height: int = 1080,
output_path: str = "blog-header.png"
) -> Path:
"""Create blog header with correct branding.
Args:
article_title: The main title to display (will word-wrap if needed)
brand_name: Your brand name for the logo area
bg_color: Background color hex
accent_color: Accent/secondary color hex
cta_color: CTA/highlight color hex
width: Image width in pixels
height: Image height in pixels
output_path: Where to save the output
Returns:
Path to the generated image
"""
img = Image.new('RGB', (width, height), color=bg_color)
draw = ImageDraw.Draw(img)
# Calculate safe zone
margin_x = int(width * 0.125)
margin_y = int(height * 0.125)
safe_left = margin_x
safe_right = width - margin_x
safe_top = margin_y
safe_bottom = height - margin_y
# Draw brand name in top-left of safe zone
try:
font_logo = ImageFont.truetype("Inter-Bold.ttf", 36)
font_title = ImageFont.truetype("Inter-Bold.ttf", 72)
except OSError:
font_logo = ImageFont.load_default()
font_title = ImageFont.load_default()
# Logo with shadow
draw.text((safe_left + 2, safe_top + 2), brand_name, fill='#333333', font=font_logo)
draw.text((safe_left, safe_top), brand_name, fill=accent_color, font=font_logo)
# Title centered in safe zone with word wrap
title_y = safe_top + (safe_bottom - safe_top) // 3
# Word wrap and center the title text
max_width = safe_right - safe_left
words = article_title.split()
lines = []
current_line = []
for word in words:
test_line = ' '.join(current_line + [word])
bbox = draw.textbbox((0, 0), test_line, font=font_title)
if bbox[2] - bbox[0] <= max_width:
current_line.append(word)
else:
if current_line:
lines.append(' '.join(current_line))
current_line = [word]
if current_line:
lines.append(' '.join(current_line))
for i, line in enumerate(lines):
bbox = draw.textbbox((0, 0), line, font=font_title)
line_width = bbox[2] - bbox[0]
x = (width - line_width) // 2
y = title_y + i * 90
# Shadow
draw.text((x + 3, y + 3), line, fill='#333333', font=font_title)
# Text
draw.text((x, y), line, fill='white', font=font_title)
img.save(output_path)
return Path(output_path)Before marking a blog banner complete:
| Platform | Recommended Size | Ratio |
|---|---|---|
| Blog header | 1920x1080 | 16:9 |
| 1200x627 | 1.91:1 | |
| Twitter/X | 1200x675 | 16:9 |
| 1200x630 | 1.91:1 | |
| Open Graph | 1200x630 | 1.91:1 |
Built by PureBrain -- AI-powered marketing operations.
Want the full suite of 183+ production-tested skills? Start your trial ->
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.