Loading...
Loading...
Brand DNA extractor for paid advertising. Scans a website URL to extract visual identity, tone of voice, color palette, typography, and imagery style. Outputs brand-profile.json to the current directory. Run before /ads create or /ads generate for brand-consistent creative. Triggers on: "brand DNA", "brand profile", "extract brand", "brand identity", "brand colors", "what is the brand voice", "analyze brand", "brand style guide".
npx skill4agent add agricidaniel/claude-ads ads-dnabrand-profile.json/ads create/ads generate/ads photoshoot| Command | What it does |
|---|---|
| Full brand extraction → |
| Fast extraction (homepage only) |
"What website URL should I analyze for brand DNA? (e.g. https://yoursite.com)"
"Return all visible text content, the full contents of anyblocks, inline<style>attributes,style=tags, Google Fonts<meta>URLs, and any@importvalues found on this page."og:image
<url><url>/about<url>/about-us<url>/our-story<url>/product<url>/products<url>/services--quick/ads generatepython ~/.claude/skills/ads/scripts/capture_screenshot.py [url]./brand-screenshots/[domain]_desktop.pngpython ~/.claude/skills/ads/scripts/capture_screenshot.py [url]/pricing--quick"Screenshot capture skipped — run: python3 -m playwright install chromium"screenshotsog:imagebackground-colorbodyheader.hero.btn-primarycolorh1h2.btnborder-colorbackground.cta.button@import url(https://fonts.googleapis.com/...)font-familyh1h2body.headlinefamily=Inter:wght@...| Signal | Score direction |
|---|---|
| Uses "you/your" frequently | formal_casual → casual (+2) |
| Uses technical jargon | expert_accessible → expert (-2) |
| Short punchy sentences (≤8 words) | bold_subtle → bold (+2) |
| Data/stats in hero | rational_emotional → rational (-2) |
| "Transform", "revolutionize", "disrupt" | traditional_innovative → innovative (+2) |
| Customer testimonials lead | rational_emotional → emotional (+2) |
| Industry awards, "trusted by X" | traditional_innovative → traditional (-1) |
~/.claude/skills/ads/references/brand-dna-template.mdnull"typography": {
"heading_font": null,
"body_font": "system-ui",
"pairing_descriptor": "system default (Google Fonts not detected)"
}./brand-profile.jsonscreenshots"screenshots": {
"homepage": "./brand-screenshots/[domain]_desktop.png",
"secondary": ["./brand-screenshots/[domain]_pricing_desktop.png"]
}screenshots✓ brand-profile.json saved to ./brand-profile.json
Brand DNA Summary:
Brand: [brand_name]
Voice: [descriptor 1], [descriptor 2], [descriptor 3]
Primary Color: [hex]
Typography: [heading_font] / [body_font]
Target: [age_range] [profession]
Screenshots: [N captured → ./brand-screenshots/] OR [skipped]
Run `/ads create` to generate campaign concepts from this profile.{
"schema_version": "1.0",
"brand_name": "string",
"website_url": "string",
"extracted_at": "ISO-8601",
"voice": {
"formal_casual": 1-10,
"rational_emotional": 1-10,
"playful_serious": 1-10,
"bold_subtle": 1-10,
"traditional_innovative": 1-10,
"expert_accessible": 1-10,
"descriptors": ["adjective1", "adjective2", "adjective3"]
},
"colors": {
"primary": "#hexcode or null",
"secondary": ["#hex1", "#hex2"],
"forbidden": ["#hex or color name"],
"background": "#hexcode",
"text": "#hexcode"
},
"typography": {
"heading_font": "Font Name or null",
"body_font": "Font Name or system-ui",
"pairing_descriptor": "brief description"
},
"imagery": {
"style": "professional photography | illustration | flat design | mixed",
"subjects": ["subject1", "subject2"],
"composition": "brief description",
"forbidden": ["element1", "element2"]
},
"aesthetic": {
"mood_keywords": ["keyword1", "keyword2", "keyword3"],
"texture": "minimal | textured | mixed",
"negative_space": "generous | moderate | dense"
},
"brand_values": ["value1", "value2", "value3"],
"target_audience": {
"age_range": "e.g. 25-45",
"profession": "brief description",
"pain_points": ["pain1", "pain2"],
"aspirations": ["aspiration1", "aspiration2"]
}
}