CommunityImagegithub.com

Logo Design

Take a brand from a short brief to concepts, image prompts, an editable SVG mark, and a small motion pass.

What is Logo Design?

A logo workflow that records the brand context, picks a mark type, writes prompts for image models, draws an SVG, traces a raster when needed, and animates the mark with a few motion principles. It also covers fonts, a short brand sheet, and a trademark sanity check before anything is delivered.

Works with~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Verstige/verstige-skills/tree/HEAD/plugins/logo-design/skills/logo-design

Installed? Explore more Image skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Preview

From the skill README

alt

Documentation

Logo Design Skill — Ultimate Edition

Comprehensive logo and visual brand identity design. Covers: brand context capture, visual identity strategy, AI image generation, direct SVG creation, raster-to-vector conversion, logo animation, brand system documentation, font selection, and brand consistency delivery.


Vision Tool — Fix and Verify

When the user sends a logo/image for reference and asks to combine ideas: vision_analyze must work. If it returns "I don't see an image" instead of an analysis, MiniMax-M2.7 lacks native vision and the auxiliary config needs fixing.

The correct fix (run both commands, verified Jul 2026):

hermes config set auxiliary.vision.provider minimax
hermes config set auxiliary.vision.model MiniMax-Image-01

Check the config after running — it should appear under a top-level vision: section (line ~559 in ~/.hermes/config.yaml), separate from the nested auxiliary.vision: section. If vision_analyze still fails, the image URL may be inaccessible — try re-downloading or use a different path. This fix persists across sessions.

Fallback if vision still fails: Use PIL/Pillow to sample pixel colors from the image and describe it analytically. Read the file, sample key regions (top-center, center, bottom, corners), and report dominant colors, brightness distribution, and basic shapes. This worked as a fallback when vision_analyze was broken — the image was confirmed as flat black wings on light gray with a teardrop anchor.

Gradient Confirmation Protocol (critical — required before writing any SVG)

Users refine gradients by describing them in natural language, which is ambiguous until it's visual. Always confirm the sequence verbally using their exact color names before writing the SVG. This prevents 3-iteration re-dos.

The precoding step (mandatory):

User says: "gold emerald cyan emerald gold"
→ RIGHT: Say "Got it — Gold → Emerald → Cyan → Emerald → Gold, both ends gold, cyan at the absolute center." Then write the SVG.
→ WRONG: Assume you know what they mean. Write the SVG.

User says: "cyan blue to gold with emerald in the middle"
→ RIGHT: Say "So Gold → Emerald → Cyan → Emerald → Gold? Or Gold → Cyan → Emerald → Cyan → Gold? Walk me through it from left to right."
→ WRONG: Pick one interpretation and write it.

Key lessons from real iterations (Jul 2026 — the org):

  • "cyan blue to gold with emerald in the middle, gold on both ends" → Gold outer ends confirmed by user. Emerald and cyan are in the middle.

  • "cyan in the middle" → cyan is at the 50% offset, emerald/others flank it.

  • When in doubt: give the user the exact left-to-right sequence using their own color names and ask "is this right?"

  • The gradient dot's color should be explicitly confirmed — it's a separate element from the gradient line.

  • Gradient border with gold at cardinal points (3/6/9/12 o'clock): use CSS conic-gradient() via foreignObject or border-image — SVG 1.1 does NOT support <conicGradient>. Attempting it silently fails.

  • Telegram-style rounded icon: black circle base + gradient border stroke + inner fill covers center. fill="none" stroke="url(#grad)" on a circle for the border. Make the SVG circle r match the background r so there's no gap.

  • After confirmation: write SVG → render to PNG via Playwright → send as MEDIA:/path/to/file.png on its own line.

Optical centering for V-dip marks (critical lesson from the org iterations): Geometric center (50% y) looks too high when the mark has a V-dip extending downward — the visual weight is below center. For a 512×512 canvas with V-dip vertex at local y≈28 within the mark group, translate(256, 290) gave correct optical balance for a tall combined mark (wings + V-dip). Iterate visually — start at +20px and increase until it looks right.

Telegram/social icon border constraint: Black circle base r must equal the border stroke's inner radius exactly — no gaps. If border stroke is 8px centered on r=252, inner edge is r=248. Black circle must also be r=248. Any mismatch = visible gap or overlap.

Telegram icon composition lessons (Jul 2026 — the org iterations):

  • "No border, just the icon" → User wants NO border ring, just the mark on black. Remove the <circle> border elements, keep only the black <rect> background and the mark group.
  • "Shift it down so I can see the whole logo" → With tall marks (wings + V-dip), geometric center (50% y) clips the top. Shift translate y to ~290 on a 512 canvas. Iterate visually from +20px and increase until the top has breathing room and the bottom doesn't feel cramped.
  • "Make the logo larger" → Increase the mark path coordinates and stroke widths proportionally. For the oscilloscope mark, extending arms from ±196 to ±234 made it fill the space. Gold accent dots at arm endpoints should sit just inside the circle edge (~20px from edge on a 512 canvas).
  • "Combine the wings with the oscilloscope V-dip" → The V-dip vertex becomes the organic "teardrop anchor" convergence point. Wings sweep upward from the signal arm endpoints. The cyan dot stays at the signal origin (bottom of V-dip). Keep the signal arms as the structural base — they ground the organic wing forms.
  • "Centered" → Geometric centering (translate to canvas center) works for marks with balanced visual weight. For marks with downward V-extensions, optical centering requires shifting down 40–60px from geometric center. Start at +20px and adjust.

Combining two logos into one (design synthesis):

  • When user says "combine X with Y", identify the semantic CORE of each: X = organic wing symmetry + teardrop anchor (black silhouette), Y = oscilloscope V-dip + gradient signal + cyan dot
  • The synthesis: keep the oscilloscope signal as the structural base, add organic wing forms as secondary blades flowing from the signal arms
  • The gradient and cyan dot are brand identity elements that should persist across synthesis
  • Do NOT blend styles randomly — pick the strongest structural element from each and compose them intentionally

Mark types that misread at first iteration

Signal-pulse marks (heartbeat / scope / EKG). When the brief calls for a "signal" or "pulse" mark and you draw it as \_/\\_ (flat baseline, peak, smaller peak, flat baseline), the FIRST iteration will likely read as a person with arms outstretched, a wave, or terrain humps because the human eye pattern-matches to body shapes first. Two specific fixes:

  1. Keep the flat baseline segments short, close to the peak. Long baseline segments far from the peak are what read as "arms." Bring them tight against the rise/descent of the peak.
  2. Make sure the upslope and downslope are clear. A symmetric peak with flat segments far from the center reads as a body (arms + head). A clearly asymmetric descent (sharp rise from baseline, peak, then a smaller secondary bump on the descent) reads as data with activity — that's signal, not body.
  3. Add at least one secondary feature beyond the dominant peak. Even a single small tick on the descent changes the read from "shape" to "data." Without it, signal marks default to a body silhouette.

Hex / diamond / square outlines. When the brief is "modern tech" and the mark is a hexagon or diamond, check that the edges don't accidentally form letters (an "X" inside a hex spells something, or the diamond's angles read as a "V" pointing the wrong direction). Adjust vertex angles by 5° if it's ambiguous.

Round-cornered squares as app icons. Verify the corner radius matches the platform. iOS uses a "squircle" (continuous corners, mathematically different from a simple border-radius). A simple border-radius: 36px on a 200×200 square reads as "Android Material" not "iOS." If platform matters, use a dedicated iOS-style squircle generator. SVG 1.1 has NO native conic gradient element. <conicGradient> is not valid. Workarounds:

  1. CSS conic-gradient() inside a foreignObject div — works in browsers, renders via Playwright
  2. border-image: conic-gradient(...) 1 on a <div> inside foreignObject
  3. Fall back to a circular stroke with a multi-stop linearGradient rotated 45° — gives 4-color with gold at 4 points but not perfectly at 3/6/9/12 simultaneously

Common misread patterns:

  • "Cyan to gold" + "emerald in the middle" = Gold → Emerald → Cyan → Emerald → Gold (not Gold → Cyan → Emerald → Cyan → Gold)
  • "Both ends gold" = outer stops are gold, not cyan
  • "Cyan at the center" = cyan is at 50% offset, emerald/others flank it

Always render to PNG and show visually before asking for color feedback. Color descriptions in text are unreliable — the visual is the source of truth.

Environment Notes

Image generation (FAL.ai FLUX.2) is NOT available in this Hermes environment — FAL_KEY is not set. Do NOT attempt to use ImageGenerate for logo work. SVG-first is superior regardless: produces actual vector files, not rasters.

SVG rendering via Playwright (confirmed working Jul 2026):

import asyncio
from playwright.async_api import async_playwright
async def render(svg_path, png_path, width=900):
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page(viewport={'width': width, 'height': int(width*0.9)})
        await page.goto(f'file://{svg_path}')
        await asyncio.sleep(0.8)
        await page.screenshot(path=png_path, full_page=False)
        await browser.close()
asyncio.run(render('/path/to/logo.svg', '/path/to/preview.png'))

Delivery on Telegram: Images must be sent as MEDIA:/absolute/file.png on their own line. Markdown image syntax ![alt](path) does NOT render on Telegram — it silently fails. Never embed image links in markdown text blocks.


The Golden Rules

  1. SVG-first for logos. Generate direct SVG vectors — not AI image generation. SVGs are infinitely scalable, editable, animatable, and render instantly via Playwright. Only reach for ImageGenerate when the concept needs photorealistic reference or complex texture that SVG cannot achieve. Confirmed working workflow (Jul 2026): write SVG → render to PNG via Playwright headless → send as MEDIA:/path/to/file.png to Telegram.
  2. Iterate visually. Go concept → PNG preview → refine. Users refine better when they see the mark, not a description. Generate 2-4 variations exploring different dimensions (remove arrow, icon-only, color shift) before locking a concept.
  3. Be specific in every dimension. "Modern" means nothing. "Geometric, tight tracking, navy + gold" means something.
  4. Enforce the AVOID list. Most bad AI logos come from not telling the model what to reject.
  5. Scalability is non-negotiable. The logo must read clearly at 16×16.
  6. Minimal smooth geometry IS animatable geometry. Complex traced paths with 400 points cannot be choreographed.

Phase 1: Brand Context Capture

Read existing context first

Check if .agents/brand-context.md exists. If it does, read it — don't ask for information already captured.

Established-brand shortcut: If the brand has a public website, navigate to it and extract brand context visually before asking any questions. Read the hero copy, tagline, key messaging, product names, and colors. Check public/logo.png or public/favicon.ico in the project repo to see the current logo. Store findings in references/<brand-name>.md under this skill.

If no context exists — gather it fast

Ask no more than 3 questions:

  1. "What's the brand name and what does it do?" (one sentence)
  2. "3 words that describe the personality?" (e.g., bold, technical, premium)
  3. "Any colors you're drawn to — or any to avoid?" (or say "surprise me")

From these three answers, infer everything else.

Store brand context

Save to .agents/brand-context.md:

# Brand Context

## Brand
- **Name**: [name]
- **Category**: [industry/niche]
- **Description**: [one-liner]
- **Stage**: [pre-launch / early / growth / established]

## Brand Personality
- **Personality Words**: [word, word, word]
- **Tone**: [formal/casual] · [serious/playful]
- **Competitors Admired**: [optional]

## Color
- **Drawn To**: [colors or "surprise me"]
- **Avoid**: [colors if specified]

## Goals
- **Primary Use**: [app icon / website / social / print / packaging / all]
- **Key Requirement**: [must work in one color / geometric / etc.]
- **Motion**: [does the brand need animated logo / reveal / splash screen?]

Phase 2: Visual Identity Strategy

Define the design direction BEFORE generating anything.

The 8 Dimensions

DimensionQuestionExample
NameWhat needs to appear?"the target platform"
IndustryWhat sector?Fintech / trading
Core ValueOne-word brand essencePrecision
PersonalityBrand character?Bold, technical, premium
Color EmotionWhat do colors communicate?Gold = wealth/premium
Competitor GapWhat do others look like?"Bloomberg is busy; we want minimal"
Logo TypeWhat fits best?Combination / lettermark / abstract
Use ContextWhere will it live?App icon, website, dark terminal

Logo Type Selection Guide

TypeBest forExample
WordmarkNew brands, memorable namesGoogle, Coca-Cola
LettermarkLong names, abbreviationsIBM, HBO
CombinationMost versatileSlack, Spotify
Abstract MarkTech, AI, global brandsNike, Apple
EmblemRestaurants, sports, officialStarbucks
MascotConsumer apps, food brandsMailchimp
MonogramPersonal brands, agenciesVogue

Color Palette Framework

Primary brand color — one dominant emotion:

ColorEmotionBest for
Navy (#0A1628)Trust, stability, professionalismFinance, legal, enterprise
Electric Blue (#00D4FF)Innovation, energy, technologyTech, SaaS, AI
Gold (#D4AF37)Wealth, premium, successTrading, luxury, finance
Emerald (#10B981)Growth, money, stabilityFintech, investment
Coral (#FF6B4A)Energy, action, urgencyTrading signals, alerts
Black (#1A1A1A)Power, sophistication, minimalPremium, luxury
Purple (#6B46C1)Creativity, premium, innovationCreative, AI
Orange (#F97316)Friendly, energetic, approachableConsumer, food

Palette formulas by industry:

Fintech/Trading:   #0A1628 (navy) + #00D4FF (cyan) + #FFD700 (gold) + #FFFFFF
Premium/Luxury:   #1A1A1A (black) + #D4AF37 (gold) + #F5F5F5 (off-white)
SaaS/Tech:        #6366F1 (indigo) + #EC4899 (pink) + #0F172A (dark)
Trading Platform: #1E3A5F (deep blue) + #10B981 (emerald) + #F59E0B (amber)
AI/Automation:     #0A0A0A (black) + #7C3AED (violet) + #06B6D4 (cyan)
Minimal/Modern:   #000000 (black) + #FFFFFF (white) + #6B7280 (gray)

Phase 3: Concept Proposals

TIER 1 WARNING — applies to every logo brief:

Before generating ANY concepts, read references/premium-mark-design.md. The difference between a "good logo" and an "iconic mark" (Nike, Apple, SpaceX) is not execution quality — it is concept reduction. Iconic marks feel INEVITABLE. Reduced to the minimum gesture that captures the idea.

The one-breath test: "It's a [shape] doing [one thing]." If you can't say it that simply, the concept needs to be stripped further. Any concept requiring more than one sentence to describe is not reduced enough.

the maintainer default (critical — Jul 2026)

When the maintainer asks for a logo without specifying a decorative style, default to Tier-1 iconic reduction, not a decorated fintech oscilloscope set.

Explicit rejection (the org): After solid monochrome concepts that still felt "designed" (grid, baseline, bold decorated V, monoliths), he asked for marks like Nike, Apple, and high-development tech companies. Mid-tier geometric sets fail that bar even when craft is clean.

When he asks for solid / materialistic / black-on-white / all-black / all-white:

  1. Lead with 1-gesture solid silhouettes (soft-shoulder V → sharp apex, or pure two-stroke precision V).
  2. Prefer white on #0D0D0F and inverse black on white — no gradients in the first pass.
  3. Do not lead with multi-element concepts (grid + V, baseline + V, wings + V) unless he asks to combine stories.
  4. Keep color/gradient signal marks as secondary system after the primary solid mark is locked.

User-provided solid mark: Soft white V on black (dual rounded shoulders, continuous walls, sharp bottom tip). Critique short: strong primary candidate; chevron-category risk + TM check; needs inverse + wordmark system; oscilloscope becomes secondary. When asked "what would you create?", answer in plain language first, then show 4–6 reduced SVGs.

Critique length: If he replies "What?", the previous logo critique was too dense — reply in 4–6 short lines max.

Dual-mark system (the org — Jul 2026):

RoleMarkUse
PrimarySoft solid V — white on #0D0D0F / black on whitePublic face, app icon
SecondaryOscilloscope Gold→Emerald→Cyan→Emerald→Gold + cyan originProduct UI / signal story

Never lead a “high-level company logo” brief with the gradient oscilloscope.

When he says "show me some different designs" (not "refine this one"): Do not ship six near-identical V stroke variations. Change structure, not just thickness. Default exploration set (monochrome white on #0D0D0F unless he asks for color):

#StructureOne-breath description
1Negative circleV punched from a white disc
2Pulse / signalBaseline + single V-dip
3Split bladesTwo strokes with gap at apex
4Diamond nodeOS/system diamond + core
5Nested VOuter + lighter inner layer
6Monolith chevronSolid filled chevron
7Arc / single strokeOne continuous Nike-energy curve
8StampRounded-square app frame + V
9Horizon bars3 bars tapering (abstract V)
10Hex nodeTech hex + V inside

Lead with 8–10 PNGs via Playwright + MEDIA:. Ask him to pick numbers or mix ("2 + 7"), then refine only the chosen family. Details: references/premium-mark-design.md § Structural Diversity.

User-sent logo for feedback: Critique first (short), don't immediately redesign unless asked. Template: works / risk / verdict / offer next step.

Round-rejection → "5 mockup designs" → re-pick pattern (Jul 14, 2026, Munro session):

When the user has rejected an approved/round-1 logo and explicitly says "show me some different designs" or "send me 5 mockup designs" or "I don't like [X], try again":

  • Treat as an explicit green light for a fresh multi-direction exploration, not a tweak of the rejected mark. Do not patch-iterate on what was rejected; do not ship variations of the rejected direction.
  • Default to 5 directions, each in a different structural register. Never show 5 stroke-thickness variations of the same shape — that's the anti-pattern this skill is designed to prevent. The five directions should be classifiable as five different shape categories so the user is comparing concepts, not tweaks.
  • Practical rule of thumb for selecting the 5: pull from the structural diversity table above and any neighboring registers the table doesn't cover (e.g., two-bars / asymmetric, constellation / dot, wordmark-only display serif, stacked-block pixel, refinement of an earlier geometry). Pick five registers that have the strongest chance of hitting the brief, where "strongest" = the brand's personality words multiply well.
  • Each direction gets: the SVG, a PNG render, and a one-sentence read of why it fits the brand specifically. Don't oversell. Don't pad with rationales that apply to all five.
  • Always include at least one direction that is structurally OFF from the rejected one. If the rejected logo was geometric/symbolic, include a wordmark-only or display-serif option. If it was a monogram, include an asymmetric / structural / constellation option. This is the entire reason the user is asking — to see what's not in the rejected direction.
  • When rendering the 5-up exploration board, render the same SVG with each of the 5 mark variants on the same canvas so the comparison is visual (not 5 separate files the user has to flip between). Then provide individual SVGs once a pick is made.
  • The user picking a different concept in round 2 (vs tweaks of round 1) is the common happy path. Don't treat re-pick as "back to square one" — treat it as shipped, drop the rejected direction, move on.

When the user picks a direction, iterate inside it before exporting: the lockup (mark + wordmark), the icon-only, the wordmark-only, the light/dark variants, the favicon, the PWA manifest — all the variants in the brand kit. Each one is a different decision (size = what level of detail to keep; context = which variant). Don't leave this to the user.

Real session (Munro Jul 14, 2026):

  1. v1: Single symmetric peak pulse (D-Signal) — approved by me after my bet, pushed live
  2. User reply: "Im not liking that logo send me 5 mockup designs here"
  3. Round 2: Shipped 5 structurally-distinct directions (refined monogram M, asymmetric two-bars, constellation dot, stacked-block M, wordmark-only display serif) — user picked Constellation Dot
  4. Iterated Constellation → favicon scaled, tick ring tuned, satellite dots curated → final lockup
  5. Shipped to live site, favicon chain wired, PWA manifest added

Present 2-3 distinct text descriptions (or jump to SVG previews when he wants visual). Each includes:

### Concept [N]: [Name]

**Style:** geometric / organic / typographic / abstract / minimal / bold
**Type:** wordmark / lettermark / combination / abstract mark / emblem
**Composition:** what shapes, how arranged, why it works
**Colors:** hex codes for each element
**Rationale:** why this works for this brand specifically
**Scalability:** how it holds up at 16×16
**Motion personality:** [if animation is needed — see Phase 6 motion personality guide]
**What it avoids:** what this concept does NOT do

User picks one or requests a hybrid.


Phase 4: AI Image Generation

The Prompt Formula (use this exact structure)

Create a [STYLE] logo concept for [BRAND NAME], a [INDUSTRY/CATEGORY] [BRAND TYPE].

CONCEPT & VALUES
The logo should evoke [EMOTION 1] and [EMOTION 2]. [VISUAL CONCEPT DESCRIPTION — what the mark IS and what it REPRESENTS].

VISUAL ELEMENTS
[DETAILED DESCRIPTION OF SHAPES, SYMBOLISM, COMPOSITION — be specific about every element].

STYLE
[STYLE DESCRIPTORS: minimalist, geometric, flat vector-like, premium, modern, etc.].

COLOR PALETTE
[COLOR NAME] (#HEX), [COLOR NAME] (#HEX), [COLOR NAME] (#HEX). [RATIONALE FOR PALETTE].

COMPOSITION
[CENTERED / ICON-LEFT / etc.]. Isolated on [white/dark] background. High contrast.

TECHNICAL REQUIREMENTS
- Flat 2D vector style with crisp edges
- Single icon, no mockups, no business card layouts
- Scalable and reproducible in a single color
- High resolution suitable as brand identity asset

AVOID
- no mockup, no 3D render, no realistic shadows
- no complex gradients, no drop shadows
- no tiny details, no thin lines that disappear at small size
- no fake typography, no unreadable letters
- no background texture, no watermark
- no copied brand style, no trademarked symbols
- no stock-icon aesthetics

Negative Prompts (append to every image generation)

For flat/vector logos:

no mockup, no 3D render, no realistic shadow, no gradient, no texture,
no business card, no wall sign, no watermark, no tiny details, no thin lines

For dark background variants:

light/white marks adjusted for dark background use, not just inverted colors

Model-Specific Notes

ModelStrength for logosWeakness
FLUX.2 (FAL.ai)Sharp geometry, clean linesCan add texture — use "flat vector"
DALL-E 3Best text renderingOver-decorates — strong AVOID list needed
MidjourneyCinematic, premium feelNeeds strong negative prompting to stay minimal
IdeogramBest text/logo wordmark renderingCan be literal — specify "no text" if icon only

Prompt Variations — generate 2-3 per concept

Adjust one dimension at a time:

  1. Style shift: "more minimalist" vs "more bold geometric"
  2. Color emphasis: "heavier on the gold accent" vs "navy dominant"
  3. Composition: "icon left, wordmark right" vs "centered icon above wordmark"
  4. Mark vs wordmark focus: "icon only, no text" vs "wordmark dominant with small icon"

Phase 5: Direct SVG Creation

For geometric/simple logos — write SVG directly. Faster, cleaner, no model needed.

SVG Rules (non-negotiable)

ViewBox:       0 0 512 512 (square, scalable base)
Min stroke:    2px at native scale
No:            <image>, <use> external, <feGaussianBlur>, <feDropShadow>
No:            currentColor, CSS variables, web fonts in <text>
Yes:           <defs> for gradients/patterns, <path>, <rect>, <circle>, <polygon>
All colors:    hex only — #0066CC

Motion-Ready SVG Structure (critical for Phase 6)

The SVG is a cast of actors, not just a picture. Each semantic part gets its own element with a stable id:

<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
  <g id="mark">         <!-- main icon/mark — animates independently -->
    <circle cx="256" cy="200" r="80" fill="#D4AF37"/>
    <!-- ... -->
  </g>
  <g id="wordmark">     <!-- text/letterforms — staggered animation -->
    <text id="letter-v" x="80" y="380" ...>V</text>
    <text id="letter-e" x="140" y="380" ...>E</text>
    <!-- ... -->
  </g>
  <circle id="dot" cx="480" cy="40" r="16" fill="#00D4FF"/>
</svg>

Rules for motion-ready SVGs:

  • One element per semantic part with stable ids: #mark, #wordmark, #letter-a, #dot, #swoosh
  • Draw-on readiness: paths that will animate stroke-reveal get pathLength="1" so dash animation is stroke-dasharray: 1; stroke-dashoffset: 1 → 0 regardless of true path length
  • Transform origins: parts that scale/rotate get transform-box: fill-box; transform-origin: center
  • No baked transforms that fight choreography: keep part-local coordinates simple

Common Geometric Primitives

<!-- Diamond -->
<polygon points="256,32 480,256 256,480 32,256" fill="#FFD700"/>

<!-- Hexagon -->
<polygon points="256,48 432,152 432,360 256,464 80,360 80,152" fill="#0A1628"/>

<!-- Rounded square / app icon shape -->
<rect x="64" y="64" width="384" height="384" rx="80" ry="80" fill="#1A1A2E"/>

<!-- Circular mark with cut -->
<circle cx="256" cy="256" r="200" fill="none" stroke="#00D4FF" stroke-width="24"/>

Generate 3 SVG Variants

  1. logo.svg — Primary, light background
  2. logo-dark.svg — Adjusted for dark backgrounds
  3. logo-mono.svg — Single color #000000, for stamps/watermarks/embroidery

Learning New Logo/Design Repos

When researching a new tool, repo, or technique:

# Use opensrc — it caches source and works reliably
opensrc fetch <npm-package>
opensrc path <npm-package>

# Then read from the cached path
cat ~/.opensrc/<pkg>/<file>

IMPORTANT: Do NOT use curl raw.githubusercontent.com to fetch repo files — it is frequently rate-limited and returns empty. Use browser navigation (browser_navigate) to raw.githubusercontent.com/<owner>/<repo>/<branch>/<path> instead.

Phase 6: Raster-to-Vector (Pixel2Motion Workflow)

Use this when the user has a raster logo (PNG/JPG/WebP/screenshot) that needs to become a clean SVG, with or without animation. The Pixel2Motion skill is at ~/.hermes/skills/pixel2motion/.

Toolchain: Python 3.10+, Pillow, numpy, Playwright (Chromium)

Setup (run once)

# Python 3.14 requires --break-system-packages
pip3 install pillow numpy playwright --break-system-packages

# Install Chromium for Playwright
python3 -m playwright install chromium

# Set Chrome path for headless rendering (macOS)
export CHROME_BIN="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"

Complexity Ladder (try simplest first)

  1. Primitives: circles, ellipses, rects, lines, simple arcs, transforms
  2. Primitive composites: boolean-like combinations of a few primitives or masks
  3. Few-curve analytic paths: small number of cubic segments for smooth ribbons, swooshes, C-marks, leaves, waves, shields
  4. Smoothed outline paths: more knots only where the source has real shape changes; preserve G1 tangent continuity
  5. Trace-derived paths: only for irregular silhouettes where simpler geometry fails — trace output is a measurement aid, never final art

The Smoothness Gate (hard requirement — never skip)

A smooth logo source must ship as smooth vector geometry. The SVG fails if:

  • Any intended smooth edge visibly stair-steps at 200–400% zoom
  • Contains pixel-grid orthogonal runs or noisy trace knots
  • Looks like a bitmap mask even when IoU is numerically high

Geometry QA (required every iteration)

# Generate overlay evidence
python3 scripts/render_overlay.py logo.svg source.png \
  --out outputs/fit_iterations/01_overlay.png \
  --render-out outputs/final_render.png \
  --report outputs/fit_metrics.json

# Audit complex curves for smoothness
python3 scripts/svg_path_audit.py logo.svg \
  --out-svg outputs/bezier_segments.svg \
  --report outputs/bezier_audit.json

Iteration Budget

10 geometry iterations per run. Stop when:

  • Accepted fit (smoothness + structural + visual checks pass), OR
  • 10 iterations exhausted

Ranking when budget is exhausted: (1) smoothness gate pass, (2) no structural mismatch, (3) IoU, (4) fewest audit kinks, (5) visual overlay verdict, (6) lowest editable complexity.


Phase 7: Logo Animation (Disney 12 Principles)

Use this when the brand needs an animated logo, logo reveal, splash screen, or loading animation. Requires: a motion-ready SVG from Phase 5 or Phase 6.

The Golden Ratio for Timeline

Anticipation : Action : Follow-through  =  20% : 50% : 30%

Motion Personality (derive from brand identity)

PersonalityDurationEasingSquashAnticipation
Playful/Joyful900mscubic-bezier(0.34, 1.56, 0.64, 1)18%short
Elegant/Premium1600mscubic-bezier(0.4, 0, 0.6, 1)0%long, slow
Trustworthy/Professional700mscubic-bezier(0, 0, 0.2, 1)0%medium
Bold/Energetic500mscubic-bezier(0.68, -0.6, 0.32, 1.6)25%sharp

The 12 Principles Applied to Logos

  1. Squash & Stretch — personality-gated: playful 10–25%, professional 0%
  2. Anticipation — 20–30% of action duration; the wind-up before the main move
  3. Staging — one clear focus at a time; reading order matters
  4. Pose to Pose — define key poses first, then ease between them
  5. Follow Through & Overlapping — root lands first, then parts cascade with 35–70ms stagger
  6. Slow In / Slow Out — easing is mandatory; linear = mechanical at every duration
  7. Arcs — natural motion curves; dots don't fly in straight lines
  8. Secondary Action — soft glow, underline draw, shadow tighten; never competing
  9. Timing — duration is the message; hover=150–300ms, header=300–800ms, splash=1200–2000ms
  10. Exaggeration — personality-gated; bold brands 25–50%, minimal brands 0%
  11. Solid Drawing — volume, weight, silhouette; the static SVG must be structurally sound
  12. Appeal — the logo must be likeable in motion, not just correct

Reveal Patterns

Draw-On (stroke reveal) — for marks with a clear stroke skeleton (monograms, line icons, C-marks):

#mark path {
  stroke-dasharray: 1;
  stroke-dashoffset: 1;
  animation: p2m-draw calc(var(--p2m-duration) * 0.7) var(--p2m-ease-natural) calc(var(--p2m-duration) * 0.1) forwards;
}
@keyframes p2m-draw { to { stroke-dashoffset: 0; } }

Staggered Assembly — for multi-part logos (mark + wordmark):

#mark      { animation: p2m-arrive var(--dur) var(--ease) 0ms both; }
#letter-1  { animation: p2m-arrive var(--dur) var(--ease) 60ms both; }
#letter-2  { animation: p2m-arrive var(--dur) var(--ease) 120ms both; }
#dot       { animation: p2m-arrive-bounce var(--dur) var(--ease-settle) 220ms both; }

Scale-Pop with Overshoot — for minimal/abstract marks:

#mark {
  animation: p2m-pop var(--dur) var(--ease-enter) both;
}
@keyframes p2m-pop {
  0%   { transform: scale(0.6); opacity: 0; }
  60%  { transform: scale(1.06); opacity: 1; }
  80%  { transform: scale(0.97); }
  100% { transform: scale(1); }
}

Deliverables

logo.svg                    — static vector (motion-ready structure)
logo_motion.html            — standalone showcase HTML with animation
motion.css                  — authored choreography
motion_spec.md              — personality, principles applied, timeline, easing tokens
outputs/fit_iterations/*.png   — geometry QA evidence
outputs/motion_frames/*.png    — motion QA evidence
outputs/motion_strip.png       — deterministic motion strip

Phase 8: Font Selection & Sourcing

Font Selection Framework

Match font personality to brand personality:

Brand PersonalityFont CategoryExamples
Bold / Technical / TradingGeometric sansMontserrat, Oswald, Raleway
Premium / LuxuryRefined serif or geometricPlayfair Display, Cormorant Garamond
Friendly / ConsumerHumanist sansNunito, Quicksand, Fredoka
Trustworthy / ProfessionalLinear sansInter, DM Sans, Work Sans
Creative / AgencyDistinctive displayBebas Neue, Poppins, Archivo Black
Minimal / ModernGrotesque sansSpace Grotesk, Hanken Grotesk

Font Sourcing Hierarchy

  1. Google Fonts (free, always) — first choice for web use
  2. Adobe Fonts (subscription) — for professional print and web
  3. Font Squirrel (free, commercial-safe) — for desktop font files
  4. Creative Market / Envato (paid) — for distinctive display fonts
  5. Custom lettering — for wordmarks requiring unique letterforms (see below)

Custom Lettering (when standard fonts aren't enough)

For wordmarks needing custom letterforms, generate reference images:

Use ImageGenerate to create reference letterforms:
"Custom lettering for [BRAND NAME] wordmark, [STYLE: geometric sans serif / 
elegant serif / modern display], [COLOR: #HEX], [KEY LETTERS: first 3 letters 
showing full character range], clean vector style, no background"

Then manually refine or send to a letterer. We can describe what we want precisely — we cannot generate a production-ready font file.

Pairing Rules

Primary (headlines):  Bold weight, high x-height
Secondary (body):     Regular weight, good readability at 16px+
Accent (labels/UI):  Light or medium weight, condensed if needed
Never pair:           Two display fonts together
                      Two fonts from the same super-family (too subtle a difference)

Phase 9: Brand System & Consistency Standards

When a logo is approved, build a brand system that ensures consistent application.

Brand System Document

Deliver a BRAND.md file alongside the logo files. A complete brand kit includes at minimum 7 variants:

#FilePurpose
1Dark markPrimary on dark backgrounds
2Light markPrimary on light/white backgrounds
3Transparent markOverlays on images, photos, colored surfaces
4Horizontal lockupWordmark beside the mark — for headers, wide layouts
5Stacked lockupMark above wordmark — for vertical spaces, app splash
6Gold monochromeSingle-color for embossing, engraving, single-ink print
7Favicon32×32 (or 16×16) for browser tabs, app icons

Additional common variants:

  • Telegram/social icon — circular, with gradient border, mark scaled to fill
  • Watermark — ultra-light version for photo/video overlays

File format priority: SVG first (source of truth), then PNG at 512×512 for each variant. Telegram delivery: Send files as MEDIA:/absolute/path.png on their own line. Markdown image syntax silently fails on Telegram.

# [Brand Name] Brand Standards

## Logo

### Primary Logo
[description + file: logo.svg]

### Dark Background Variant
[description + file: logo-dark.svg]

### Monochrome / Single Color
[description + file: logo-mono.svg]

## Color Palette

| Name | Hex | RGB | Usage |
|------|-----|-----|-------|
| Primary | #HEX | R, G, B | [usage] |
| Secondary | #HEX | R, G, B | [usage] |
| Accent | #HEX | R, G, B | [usage] |
| Background | #HEX | R, G, B | [usage] |
| Text | #HEX | R, G, B | [usage] |

## Typography

**Primary Font:** [Font Name] — [Google Fonts link]
- Headlines: [weight, size range]
- Body: [weight, size range]

**Secondary Font:** [Font Name] — [Google Fonts link]
- Captions: [weight, size range]
- Labels: [weight, size range]

## Logo Usage Rules

### DO
- Maintain minimum clear space: [X] × logo height on all sides
- Use approved color variants for their specific backgrounds
- Scale proportionally; never stretch or compress

### DON'T
- Don't alter the logo colors outside approved variants
- Don't add effects (shadows, glows, gradients) to the logo
- Don't place the logo on busy backgrounds without sufficient contrast
- Don't recreate the logo in other software

### Minimum Size
- Print: [X]mm wide
- Digital: [X]px wide

## Motion (if applicable)

**Logo animation:** [describe the reveal]
**Duration:** [X]ms
**Easing:** [specific cubic-bezier]
**Usage:** [splash screen / header / loading / etc.]
**File:** logo_motion.html

## Social Media Avatar

- Use [icon-only / abbreviated version] for profile images
- Square crop, [X]px minimum
- Test at small sizes (32×32) before publishing

Consistency Checklist

Before any design is published or sent:

  • Logo is an approved variant for that background color
  • Brand colors are from the palette, not approximated
  • Typography uses the specified font stack
  • Minimum size respected
  • Clear space maintained
  • No unauthorized logo modifications
  • Motion follows the approved animation spec (if applicable)

Phase 10: Trademark Awareness

This is not legal advice — flag for professional review when needed.

What to Check Before Delivery

  1. Visual similarity to famous marks — search TESS (USPTO) for similar marks in your category
  2. Logos that are just text in a common font — not trademarkable without distinctive stylization
  3. Common symbols in your industry — diamonds and arrows in trading, leaves in eco, etc. are generic
  4. Colors that are already trademarked — Tiffany Blue, Coca-Cola red have secondary meaning

Red Flags (escalate to user)

⚠️ Logo is visually nearly identical to an existing famous mark
⚠️ Logo is just the wordmark in Arial, Helvetica, or Inter
⚠️ Logo uses a generic symbol with no distinctive modification
⚠️ User plans to register but hasn't done a clearance search

What We Can Do

  • Describe the trademark risk level based on visual similarity
  • Recommend a formal clearance search before the brand launches
  • Flag when a design is too close to an existing mark and needs a new direction
  • NOT: perform legal searches, file trademarks, or give legal opinions

Reference: Logo Quality Checklist

Before accepting any concept, verify:

  • Works in black and white?
  • Reads clearly at 16×16 (favicon size)?
  • Silhouette is recognizable?
  • Symbol is not generic (not just "circle with star inside")?
  • No similarity to a famous existing brand? (see Phase 10)
  • Typography is usable (or icon-only if text is weak)?
  • Can become a clean SVG vector file?
  • Works on both light and dark backgrounds?
  • Not dependent on gradient or texture?
  • Simple enough to be drawn from memory?

Reject anything that fails 2+ of these checks.


Reference: The AVOID List (copy-paste into every prompt)

AVOID
- photo-realistic rendering, drop shadows, complex gradients
- watermarks, signature artifacts, fake text rendering errors
- generic stock-icon aesthetics, trademarked symbols
- 3D rendering, glossy plastic look, busy backgrounds
- thin lines (< 2px at scale), tiny details
- mockup layouts (business cards, walls, signage)
- complex texture, photographic scenes
- copied brand styles (Apple/Nike/Starbucks lookalikes)

Reference: Industry-Specific Direction

Fintech/Trading:

  • Minimal, geometric precision, data-terminal aesthetic
  • Navy + gold or navy + cyan palettes
  • Diamond/crystal/chart motifs
  • Typography: clean geometric sans (Montserrat, Inter)
  • Dark backgrounds common — design dark variant alongside primary

SaaS/Tech:

  • Flat design, bold accents, high contrast
  • Vibrant primary + dark neutral
  • Typography: bold geometric sans (Oswald, Raleway)

Premium/Luxury:

  • Restrained, timeless, serif or elegant geometric sans
  • Black + gold or deep color + metallic
  • Typography: refined custom letterforms or Playfair Display

AI/Automation:

  • Abstract geometric, node/connection motifs
  • Black + violet + cyan
  • Clean, technical, minimal ornament

Consumer Apps:

  • Rounded corners, friendly shapes
  • Vibrant palette, high energy
  • Typography: humanist sans (Nunito, Quicksand)

Reference: Session Reference Files

  • references/premium-mark-design.md — Nike/Apple tier reduction; monochrome rejection lessons; soft solid-V primary direction
  • [removed: internal file] — brand DNA, palette, story
  • [removed: internal file] — Telegram/app icon composition
  • [removed: internal file] — current approved brand kit (Constellation mark). Read this when working on the Munro brand — it has the live geometry, the deployed files list, and the iteration history so the next session knows which direction is locked
  • [removed: internal file] — Color signal mark (Gold → Emerald → Cyan → Emerald → Gold + cyan origin) — secondary/system, not default for "high-level company" briefs

Brand assets → GitHub (pitfall)

Logo work often lands in /tmp/verstige-logos/ and ~/Projects/the target platform/public/brand/ without a commit. After any kit the maintainer likes: copy finals into public/, git status, offer push to the org/the target platform-Official. Local beauty + dirty tree = “not backed up” on the next audit.

After disk Phase-1 purge

node_modules / .next under Projects may be gone. Prefer rendering SVGs from /tmp with system Playwright; if a project needs local deps for a build, run npm install first. See skill local-disk-and-repo-hygiene.

Related Skills