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()viaforeignObjectorborder-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.pngon 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:
- 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.
- 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.
- 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:
- CSS
conic-gradient()inside aforeignObjectdiv — works in browsers, renders via Playwright border-image: conic-gradient(...) 1on a<div>insideforeignObject- Fall back to a circular
strokewith a multi-stoplinearGradientrotated 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  does NOT render on Telegram — it silently fails. Never embed image links in markdown text blocks.
The Golden Rules
- 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.pngto Telegram. - 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.
- Be specific in every dimension. "Modern" means nothing. "Geometric, tight tracking, navy + gold" means something.
- Enforce the AVOID list. Most bad AI logos come from not telling the model what to reject.
- Scalability is non-negotiable. The logo must read clearly at 16×16.
- 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:
- "What's the brand name and what does it do?" (one sentence)
- "3 words that describe the personality?" (e.g., bold, technical, premium)
- "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
| Dimension | Question | Example |
|---|---|---|
| Name | What needs to appear? | "the target platform" |
| Industry | What sector? | Fintech / trading |
| Core Value | One-word brand essence | Precision |
| Personality | Brand character? | Bold, technical, premium |
| Color Emotion | What do colors communicate? | Gold = wealth/premium |
| Competitor Gap | What do others look like? | "Bloomberg is busy; we want minimal" |
| Logo Type | What fits best? | Combination / lettermark / abstract |
| Use Context | Where will it live? | App icon, website, dark terminal |
Logo Type Selection Guide
| Type | Best for | Example |
|---|---|---|
| Wordmark | New brands, memorable names | Google, Coca-Cola |
| Lettermark | Long names, abbreviations | IBM, HBO |
| Combination | Most versatile | Slack, Spotify |
| Abstract Mark | Tech, AI, global brands | Nike, Apple |
| Emblem | Restaurants, sports, official | Starbucks |
| Mascot | Consumer apps, food brands | Mailchimp |
| Monogram | Personal brands, agencies | Vogue |
Color Palette Framework
Primary brand color — one dominant emotion:
| Color | Emotion | Best for |
|---|---|---|
| Navy (#0A1628) | Trust, stability, professionalism | Finance, legal, enterprise |
| Electric Blue (#00D4FF) | Innovation, energy, technology | Tech, SaaS, AI |
| Gold (#D4AF37) | Wealth, premium, success | Trading, luxury, finance |
| Emerald (#10B981) | Growth, money, stability | Fintech, investment |
| Coral (#FF6B4A) | Energy, action, urgency | Trading signals, alerts |
| Black (#1A1A1A) | Power, sophistication, minimal | Premium, luxury |
| Purple (#6B46C1) | Creativity, premium, innovation | Creative, AI |
| Orange (#F97316) | Friendly, energetic, approachable | Consumer, 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:
- Lead with 1-gesture solid silhouettes (soft-shoulder V → sharp apex, or pure two-stroke precision V).
- Prefer white on
#0D0D0Fand inverse black on white — no gradients in the first pass. - Do not lead with multi-element concepts (grid + V, baseline + V, wings + V) unless he asks to combine stories.
- 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):
| Role | Mark | Use |
|---|---|---|
| Primary | Soft solid V — white on #0D0D0F / black on white | Public face, app icon |
| Secondary | Oscilloscope Gold→Emerald→Cyan→Emerald→Gold + cyan origin | Product 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):
| # | Structure | One-breath description |
|---|---|---|
| 1 | Negative circle | V punched from a white disc |
| 2 | Pulse / signal | Baseline + single V-dip |
| 3 | Split blades | Two strokes with gap at apex |
| 4 | Diamond node | OS/system diamond + core |
| 5 | Nested V | Outer + lighter inner layer |
| 6 | Monolith chevron | Solid filled chevron |
| 7 | Arc / single stroke | One continuous Nike-energy curve |
| 8 | Stamp | Rounded-square app frame + V |
| 9 | Horizon bars | 3 bars tapering (abstract V) |
| 10 | Hex node | Tech 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):
- v1: Single symmetric peak pulse (D-Signal) — approved by me after my bet, pushed live
- User reply: "Im not liking that logo send me 5 mockup designs here"
- 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
- Iterated Constellation → favicon scaled, tick ring tuned, satellite dots curated → final lockup
- 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
| Model | Strength for logos | Weakness |
|---|---|---|
| FLUX.2 (FAL.ai) | Sharp geometry, clean lines | Can add texture — use "flat vector" |
| DALL-E 3 | Best text rendering | Over-decorates — strong AVOID list needed |
| Midjourney | Cinematic, premium feel | Needs strong negative prompting to stay minimal |
| Ideogram | Best text/logo wordmark rendering | Can be literal — specify "no text" if icon only |
Prompt Variations — generate 2-3 per concept
Adjust one dimension at a time:
- Style shift: "more minimalist" vs "more bold geometric"
- Color emphasis: "heavier on the gold accent" vs "navy dominant"
- Composition: "icon left, wordmark right" vs "centered icon above wordmark"
- 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 isstroke-dasharray: 1; stroke-dashoffset: 1 → 0regardless 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
- logo.svg — Primary, light background
- logo-dark.svg — Adjusted for dark backgrounds
- 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)
- Primitives: circles, ellipses, rects, lines, simple arcs, transforms
- Primitive composites: boolean-like combinations of a few primitives or masks
- Few-curve analytic paths: small number of cubic segments for smooth ribbons, swooshes, C-marks, leaves, waves, shields
- Smoothed outline paths: more knots only where the source has real shape changes; preserve G1 tangent continuity
- 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)
| Personality | Duration | Easing | Squash | Anticipation |
|---|---|---|---|---|
| Playful/Joyful | 900ms | cubic-bezier(0.34, 1.56, 0.64, 1) | 18% | short |
| Elegant/Premium | 1600ms | cubic-bezier(0.4, 0, 0.6, 1) | 0% | long, slow |
| Trustworthy/Professional | 700ms | cubic-bezier(0, 0, 0.2, 1) | 0% | medium |
| Bold/Energetic | 500ms | cubic-bezier(0.68, -0.6, 0.32, 1.6) | 25% | sharp |
The 12 Principles Applied to Logos
- Squash & Stretch — personality-gated: playful 10–25%, professional 0%
- Anticipation — 20–30% of action duration; the wind-up before the main move
- Staging — one clear focus at a time; reading order matters
- Pose to Pose — define key poses first, then ease between them
- Follow Through & Overlapping — root lands first, then parts cascade with 35–70ms stagger
- Slow In / Slow Out — easing is mandatory; linear = mechanical at every duration
- Arcs — natural motion curves; dots don't fly in straight lines
- Secondary Action — soft glow, underline draw, shadow tighten; never competing
- Timing — duration is the message; hover=150–300ms, header=300–800ms, splash=1200–2000ms
- Exaggeration — personality-gated; bold brands 25–50%, minimal brands 0%
- Solid Drawing — volume, weight, silhouette; the static SVG must be structurally sound
- 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 Personality | Font Category | Examples |
|---|---|---|
| Bold / Technical / Trading | Geometric sans | Montserrat, Oswald, Raleway |
| Premium / Luxury | Refined serif or geometric | Playfair Display, Cormorant Garamond |
| Friendly / Consumer | Humanist sans | Nunito, Quicksand, Fredoka |
| Trustworthy / Professional | Linear sans | Inter, DM Sans, Work Sans |
| Creative / Agency | Distinctive display | Bebas Neue, Poppins, Archivo Black |
| Minimal / Modern | Grotesque sans | Space Grotesk, Hanken Grotesk |
Font Sourcing Hierarchy
- Google Fonts (free, always) — first choice for web use
- Adobe Fonts (subscription) — for professional print and web
- Font Squirrel (free, commercial-safe) — for desktop font files
- Creative Market / Envato (paid) — for distinctive display fonts
- 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:
| # | File | Purpose |
|---|---|---|
| 1 | Dark mark | Primary on dark backgrounds |
| 2 | Light mark | Primary on light/white backgrounds |
| 3 | Transparent mark | Overlays on images, photos, colored surfaces |
| 4 | Horizontal lockup | Wordmark beside the mark — for headers, wide layouts |
| 5 | Stacked lockup | Mark above wordmark — for vertical spaces, app splash |
| 6 | Gold monochrome | Single-color for embossing, engraving, single-ink print |
| 7 | Favicon | 32×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
- Visual similarity to famous marks — search TESS (USPTO) for similar marks in your category
- Logos that are just text in a common font — not trademarkable without distinctive stylization
- Common symbols in your industry — diamonds and arrows in trading, leaves in eco, etc. are generic
- 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.