Claude-skill-registry brand-asset-generator

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/brand-asset-generator" ~/.claude/skills/majiayu000-claude-skill-registry-brand-asset-generator && rm -rf "$T"
manifest: skills/data/brand-asset-generator/SKILL.md
source content

Brand Asset Generator

Purpose

Generate consistent brand assets for social media, print, and digital use from a single brand configuration. Produces properly sized assets for all major platforms with consistent styling.

Problem Space:

  • Manual asset creation is time-consuming
  • Platform size requirements constantly change
  • Maintaining consistency across assets is difficult
  • Design tools have steep learning curves

Solution Approach:

  • Template-based generation from brand config
  • Pre-configured platform size presets
  • Automated export to multiple formats
  • Consistent typography and color application

When to Use

  • Setting up new brand presence
  • Creating social media kits
  • Generating marketing collateral
  • Producing email signatures
  • Creating presentation templates
  • Exporting assets for different platforms

When NOT to Use

  • Complex custom illustrations
  • Photography editing
  • Full brand identity design (use design professionals)
  • Highly custom one-off designs

Core Instructions

Platform Size Reference

social_media_sizes:
  instagram:
    post_square: [1080, 1080]
    post_portrait: [1080, 1350]
    post_landscape: [1080, 566]
    story: [1080, 1920]
    profile: [320, 320]

  twitter_x:
    post: [1200, 675]
    header: [1500, 500]
    profile: [400, 400]

  linkedin:
    post: [1200, 1200]
    article_cover: [1200, 628]
    company_cover: [1128, 191]
    profile: [400, 400]

  facebook:
    post: [1200, 630]
    cover: [820, 312]
    profile: [170, 170]
    event_cover: [1920, 1005]

  youtube:
    thumbnail: [1280, 720]
    channel_art: [2560, 1440]

print_sizes:
  business_card:
    us: [3.5, 2, 300]  # inches, dpi
    eu: [85, 55, 300]  # mm, dpi

  letterhead:
    us: [8.5, 11, 300]
    a4: [210, 297, 300]

  flyer:
    half_letter: [5.5, 8.5, 300]
    a5: [148, 210, 300]

digital_sizes:
  email_signature: [600, 200]
  favicon: [32, 32]
  app_icon: [1024, 1024]
  og_image: [1200, 630]

Standard Procedures

1. Load Brand Configuration

import yaml
from PIL import Image, ImageDraw, ImageFont
from pathlib import Path

class BrandAssetGenerator:
    def __init__(self, brand_config_path: str):
        with open(brand_config_path) as f:
            self.config = yaml.safe_load(f)

        self.colors = self.config['colors']
        self.typography = self.config['typography']
        self.assets = self.config.get('assets', {})

    def hex_to_rgb(self, hex_color: str) -> tuple:
        """Convert hex color to RGB tuple."""
        hex_color = hex_color.lstrip('#')
        return tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))

2. Generate Social Media Assets

def generate_social_kit(self, output_dir: str, platforms: list = None):
    """
    Generate complete social media asset kit.

    Args:
        output_dir: Directory to save assets
        platforms: List of platforms (default: all)
    """
    output_path = Path(output_dir)
    output_path.mkdir(parents=True, exist_ok=True)

    platforms = platforms or ['instagram', 'twitter_x', 'linkedin', 'facebook']

    for platform in platforms:
        platform_path = output_path / platform
        platform_path.mkdir(exist_ok=True)

        if platform == 'instagram':
            self._generate_instagram_assets(platform_path)
        elif platform == 'twitter_x':
            self._generate_twitter_assets(platform_path)
        # ... other platforms

def _generate_instagram_assets(self, output_path: Path):
    """Generate Instagram asset variants."""
    sizes = {
        'post_square': (1080, 1080),
        'post_portrait': (1080, 1350),
        'story': (1080, 1920),
        'profile': (320, 320),
    }

    for name, size in sizes.items():
        # Create base image with brand background
        img = self._create_branded_background(size)

        # Add logo centered
        img = self._add_centered_logo(img)

        # Save
        img.save(output_path / f'{name}.png', 'PNG')

        # Also save as template (with guides)
        template = self._add_safe_zone_guides(img.copy())
        template.save(output_path / f'{name}_template.png', 'PNG')

def _create_branded_background(self, size: tuple, style: str = 'gradient') -> Image:
    """Create branded background image."""
    width, height = size

    if style == 'solid':
        img = Image.new('RGB', size, self.hex_to_rgb(self.colors['primary']))
    elif style == 'gradient':
        img = self._create_gradient(size,
            self.hex_to_rgb(self.colors['primary']),
            self.hex_to_rgb(self.colors['primary_dark']))
    elif style == 'secondary':
        img = Image.new('RGB', size, self.hex_to_rgb(self.colors['secondary']))

    return img

def _create_gradient(self, size: tuple, color1: tuple, color2: tuple) -> Image:
    """Create vertical gradient image."""
    width, height = size
    img = Image.new('RGB', size)

    for y in range(height):
        ratio = y / height
        r = int(color1[0] * (1 - ratio) + color2[0] * ratio)
        g = int(color1[1] * (1 - ratio) + color2[1] * ratio)
        b = int(color1[2] * (1 - ratio) + color2[2] * ratio)

        for x in range(width):
            img.putpixel((x, y), (r, g, b))

    return img

3. Generate Logo Variations

def generate_logo_variations(self, output_dir: str):
    """
    Generate logo in multiple formats and color variations.
    """
    output_path = Path(output_dir)
    output_path.mkdir(parents=True, exist_ok=True)

    variations = [
        ('primary', self.colors['primary'], '#FFFFFF'),
        ('white', '#FFFFFF', self.colors['secondary']),
        ('dark', self.colors['secondary'], '#FFFFFF'),
        ('monochrome', '#000000', '#FFFFFF'),
    ]

    sizes = [
        ('small', 100),
        ('medium', 250),
        ('large', 500),
        ('xlarge', 1000),
    ]

    for var_name, fg_color, bg_color in variations:
        var_path = output_path / var_name
        var_path.mkdir(exist_ok=True)

        for size_name, size in sizes:
            # Generate PNG with background
            img = self._generate_logo_image(size, fg_color, bg_color)
            img.save(var_path / f'logo_{size_name}.png', 'PNG')

            # Generate PNG with transparency
            img_transparent = self._generate_logo_image(size, fg_color, None)
            img_transparent.save(var_path / f'logo_{size_name}_transparent.png', 'PNG')

4. Generate Print Assets

def generate_business_card(self, output_dir: str,
                          name: str, title: str,
                          email: str, phone: str = None):
    """
    Generate business card design.
    """
    # US standard size at 300 DPI
    width = int(3.5 * 300)  # 1050px
    height = int(2 * 300)   # 600px

    # Create front
    front = Image.new('RGB', (width, height),
                     self.hex_to_rgb(self.colors['surface_primary']))
    draw = ImageDraw.Draw(front)

    # Add logo (top left)
    logo_size = 150
    # ... add logo

    # Add contact info
    font_name = ImageFont.truetype('fonts/Inter-SemiBold.ttf', 48)
    font_title = ImageFont.truetype('fonts/Inter-Regular.ttf', 36)
    font_contact = ImageFont.truetype('fonts/Inter-Regular.ttf', 30)

    y_offset = 200
    draw.text((100, y_offset), name,
             fill=self.hex_to_rgb(self.colors['text_primary']),
             font=font_name)

    y_offset += 60
    draw.text((100, y_offset), title,
             fill=self.hex_to_rgb(self.colors['text_secondary']),
             font=font_title)

    y_offset += 80
    draw.text((100, y_offset), email,
             fill=self.hex_to_rgb(self.colors['text_secondary']),
             font=font_contact)

    if phone:
        y_offset += 45
        draw.text((100, y_offset), phone,
                 fill=self.hex_to_rgb(self.colors['text_secondary']),
                 font=font_contact)

    # Add brand accent line
    draw.rectangle([0, height - 20, width, height],
                  fill=self.hex_to_rgb(self.colors['primary']))

    # Save with bleed
    front.save(Path(output_dir) / 'business_card_front.png', 'PNG')

    # Create back (simple brand design)
    back = Image.new('RGB', (width, height),
                    self.hex_to_rgb(self.colors['secondary']))
    # ... add centered logo
    back.save(Path(output_dir) / 'business_card_back.png', 'PNG')

Decision Framework

Asset Format Selection:

Use CaseFormatWhy
Web graphicsPNGLossless, transparency
PhotosJPEGSmaller file size
Scalable logosSVGResolution independent
PrintPDF/TIFFHigh quality, CMYK
IconsICO/PNGPlatform requirements

Color Space:

  • Digital: RGB/sRGB
  • Print: CMYK
  • Web: Hex colors

Templates

Brand Asset Manifest

# brand-assets.yaml
brand:
  name: "Company Name"
  tagline: "Your tagline"

assets:
  social_media:
    instagram:
      - post_square
      - post_portrait
      - story
      - profile
    twitter:
      - post
      - header
      - profile
    linkedin:
      - post
      - cover
      - profile

  logo_variations:
    colors:
      - primary
      - white
      - dark
      - monochrome
    sizes:
      - small: 100
      - medium: 250
      - large: 500

  print:
    - business_card
    - letterhead

  digital:
    - email_signature
    - favicon
    - og_image

output:
  directory: "./brand-assets"
  formats:
    images: ["png", "jpg"]
    vectors: ["svg"]

Export Script

#!/usr/bin/env python3
"""
Brand Asset Export Script

Usage:
    python export_assets.py --config brand-config.yaml --output ./assets
"""

import argparse
from brand_asset_generator import BrandAssetGenerator

def main():
    parser = argparse.ArgumentParser(description='Export brand assets')
    parser.add_argument('--config', required=True, help='Brand config YAML')
    parser.add_argument('--output', required=True, help='Output directory')
    parser.add_argument('--platforms', nargs='+', help='Specific platforms')
    args = parser.parse_args()

    generator = BrandAssetGenerator(args.config)

    # Generate all assets
    print("Generating social media kit...")
    generator.generate_social_kit(
        f"{args.output}/social",
        platforms=args.platforms
    )

    print("Generating logo variations...")
    generator.generate_logo_variations(f"{args.output}/logos")

    print("Generating favicons...")
    generator.generate_favicon_set(f"{args.output}/favicons")

    print(f"Assets exported to {args.output}")

if __name__ == "__main__":
    main()

Examples

Example 1: Social Media Launch Kit

Input: "Create all social media assets for our brand launch"

Output:

brand-assets/
├── instagram/
│   ├── post_square.png
│   ├── post_square_template.png
│   ├── story.png
│   └── profile.png
├── twitter/
│   ├── post.png
│   ├── header.png
│   └── profile.png
├── linkedin/
│   ├── post.png
│   ├── cover.png
│   └── profile.png
└── facebook/
    ├── post.png
    ├── cover.png
    └── profile.png

Example 2: Business Card Generation

Input: "Generate business cards for John Smith, CTO"

Output: Front and back PNG files with:

  • Logo placement
  • Contact information
  • Brand colors
  • Print-ready resolution (300 DPI)

Validation Checklist

Before exporting assets:

  • Brand config file validated
  • Logo files accessible
  • Fonts available (or fallbacks specified)
  • Output directory writable
  • Color values valid hex
  • Sizes correct for intended platforms
  • Transparency preserved where needed
  • Resolution appropriate for use case

Related Resources

  • Skill:
    branded-document-suite
    - Document generation
  • Skill:
    technical-documentation-generator
    - Style consistency
  • Platform guidelines: Each platform's official size specs
  • Color tools: Coolors, Adobe Color

Changelog

1.0.0 (January 2026)

  • Initial release
  • Social media asset generation
  • Logo variation export
  • Business card templates
  • Favicon generation