image-generation — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited image-generation (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.
Purpose: Generate images using AI image generation APIs (Google Gemini, FLUX.2 via Replicate, DALL-E, or similar).
| Platform | Aspect Ratio | Max Size | Format | Resolution |
|---|---|---|---|---|
| Blog header | 16:9 | No limit | PNG | 2K |
| Bluesky | 1:1 SQUARE | <976KB | JPEG | 1K |
| 16:9 | ~5MB | PNG/JPEG | 2K | |
| 16:9 or 1:1 | No limit | PNG | 2K |
Bluesky REJECTS images >976KB. Always compress:
from PIL import Image
def compress_for_bluesky(input_path: str, output_path: str):
"""Compress image for Bluesky (<976KB requirement)."""
img = Image.open(input_path)
if img.mode in ('RGBA', 'P'):
img = img.convert('RGB')
img.save(output_path, "JPEG", quality=85, optimize=True)
print(f"Compressed: {output_path}")from google import genai
from google.genai import types
import os
client = genai.Client(api_key=os.environ['GOOGLE_API_KEY'])
# Generate image
response = client.models.generate_content(
model="gemini-3-pro-image-preview",
contents="A digital art piece showing interconnected nodes in a constellation pattern",
config=types.GenerateContentConfig(
response_modalities=['IMAGE'],
image_config=types.ImageConfig(
aspect_ratio="16:9",
image_size="2K"
),
)
)
# Save image
for part in response.parts:
if part.inline_data is not None:
image = part.as_image()
image.save("output.png")
print("Image saved!")| Ratio | Best For |
|---|---|
1:1 | Social media profile pics, square posts |
16:9 | Blog headers, YouTube thumbnails |
9:16 | Mobile/Stories content |
4:3 | Classic photos |
3:4 | Portrait orientation |
4:5 | LinkedIn portrait posts (max feed space) |
21:9 | Ultrawide banners |
| Size | Resolution | Best For |
|---|---|---|
1K | 1024px | Social media, quick iterations |
2K | 2048px | Blog headers, general use (recommended) |
4K | 4096px | Print, high-quality needs |
Modern AI image generators (especially Gemini) excel at text rendering. Use this capability.
prompt = """Quote card with the text "Memory is our moat" in bold white typography.
Dark blue gradient background.
Text should be LARGE and CENTERED.
Professional design, clean composition."""Be explicit: "Write 'HELLO' in bold serif font" creates clearer results than vague requests.
import os
from pathlib import Path
from google import genai
from google.genai import types
def generate_image(
prompt: str,
output_path: str = "output.png",
aspect_ratio: str = "16:9",
image_size: str = "2K"
):
"""
Generate an image using an AI image generation API.
Args:
prompt: Text description of the image to generate
output_path: Where to save the image
aspect_ratio: 1:1, 16:9, 9:16, 4:3, 3:4, 21:9
image_size: "1K", "2K", or "4K"
Returns:
Saved file path, or None if generation failed
"""
client = genai.Client(api_key=os.environ['GOOGLE_API_KEY'])
response = client.models.generate_content(
model="gemini-3-pro-image-preview",
contents=prompt,
config=types.GenerateContentConfig(
response_modalities=['IMAGE'],
image_config=types.ImageConfig(
aspect_ratio=aspect_ratio,
image_size=image_size
),
)
)
for part in response.parts:
if part.inline_data is not None:
image = part.as_image()
image.save(output_path)
print(f"Saved to: {output_path}")
return output_path
print("No image generated")
return Nonegenerate_image(
prompt="Blog header for article about AI and marketing. Abstract neural network with glowing nodes. Modern tech aesthetic. Include title 'The Future of Marketing' in bold white.",
output_path="blog-header.png",
aspect_ratio="16:9",
image_size="2K"
)generate_image(
prompt="Square social media graphic showing AI collaboration. Abstract, modern, professional.",
output_path="social-image.png",
aspect_ratio="1:1",
image_size="1K"
)generate_image(
prompt='Quote card with text "Data without insight is just noise" in elegant typography. Dark background, golden text, professional design.',
output_path="quote-card.png",
aspect_ratio="1:1",
image_size="2K"
)| Problem | Solution |
|---|---|
| "Model not found" | Verify model ID and API key access |
| Image not saving | Check that you iterate through response.parts correctly |
| Bluesky rejection (>976KB) | Always compress with compress_for_bluesky() before posting |
| Low quality output | Use image_size="2K" or "4K" and add quality modifiers to prompt |
| Bad text rendering | Be very explicit about text content, font style, and placement |
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.