복고풍 픽셀 스타일의 세 장면 영상을 Hyperframes용 HTML로 만듭니다. 제목과 색상을 바꾸고 장면 전환과 움직임을 갖춘 구성으로 완성합니다.
- 픽셀 스타일의 소개 영상을 만들 때
- 세 장면 영상의 내용을 교체할 때
- HTML에서 장면 전환을 확인할 때
공개 사이트의 색상, 글꼴, 로고, 이미지, 문체를 실측해 정리합니다. 브랜드 가이드와 미리보기가 있는 재사용 가능한 디자인 시스템으로 만듭니다.
Extract a complete Brand Kit from a live website by driving the in-app browser. Use when a brand-extraction project opens with a site in the Browser tab, or when the user asks to "extract a brand", "pull the brand from <url>", "get the colors/fonts/logo from this site", or build a brand/design system from a reference website. Pairs with the agent-browser tool for measurement and pauses for the user when an anti-bot wall blocks the page.
브라우저에서 공개 사이트를 살펴보고 색상, 글꼴, 로고, 대표 이미지, 문체를 브랜드 자료로 정리합니다. 페이지 구조와 스타일 설정을 실측하고 색상을 배경, 본문, 강조색 등의 역할로 분류합니다. 로고 후보와 큰 이미지도 저장하며, 프로그램이 읽을 수 있는 brand.json과 문서형 가이드 BRAND.md를 만듭니다.
기존 사이트의 브랜드 표현을 정리하거나 참고 사이트에서 디자인 기준을 도출할 때 유용합니다. brand.html에서 진행 상황을 확인할 수 있습니다. 마무리 단계에서는 밝은 테마와 어두운 테마의 설정값을 만들고 랜딩 페이지, 슬라이드, 이메일 등의 미리보기도 생성합니다.
앱 내 브라우저, agent-browser, od brand preview, od brand finalize를 사용할 환경과 파일 쓰기 권한이 필요합니다. 인증 화면 등으로 탐색이 막히면 사용자의 조작을 기다립니다. 기존 브랜드 지식으로 정보를 보충하면 그 사실을 기록합니다.
이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.
AI가 SKILL.md의 내용만을 근거로 4가지 관점에서 판정했습니다. 스타 수나 인기도는 판정에 넣지 않았습니다.
총점은 각 항목을 A=25점, B=15점, C=5점으로 더한 값입니다. 2026년 10월 20일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Turn a live website into a complete, machine-consumable Brand Kit —
identity, semantic color palette, typography, voice — by measuring the real
page, not guessing from memory. This is the methodology behind a brand-extraction
project: the target site is open in a secondary in-app Browser tab, and you
drive it with the agent-browser tool.
brand.html)The extraction project opens with brand.html as the active tab — a
self-contained brand-kit page (template:
brand-extract/templates/brand-kit.html) that the daemon renders from
brand.json. The daemon pre-seeds it with a deterministic first paint — a
harvested logo, an approximate palette, font families, and a few cover images —
so it is NOT all-skeleton when it opens. Your job is to replace that seed with
measured truth and fill in the rest, progressively, so the user watches it
complete module by module. You never hand-edit it: you write brand.json, then
run od brand preview <brandId> and the daemon re-renders the page (the page
soft-reloads itself while extracting). Optimize for fast first paint and
progressive fill-in — write a partial brand.json and preview it the moment
you have a name, a couple of colors, and a logo, then preview again after each
field group rather than batching the whole kit to the end.
The trap to avoid: an LLM left alone regresses to the mean — Inter, an indigo accent, a purple gradient. That is off-brand for everyone. Every value you emit must trace to something you measured on the page.
Work in order. Skipping straight to writing brand.json is how off-brand,
hallucinated kits happen.
Use agent-browser against the selected browser tab (its URL/title are in
your run context — treat "this page" / "the site" as that tab):
agent-browser get url / get title to confirm the target.agent-browser snapshot before extracting anything.background, surface, foreground, muted, border, accent,
accent-secondary. The most frequent near-white/cream is usually the
background; the most frequent chromatic mid-saturation color is usually the
accent.@font-face names and font-family declarations for
display, body, and (if present) mono. Note weights actually used.logos/: the inline header/nav <svg> (write the
literal <svg>…</svg> markup verbatim to logos/header.svg — do not just
reference it), any <img> logo, apple-touch-icon, favicon, and
og:image. Fetch the asset URLs directly — never leave logo.primary
empty when the site has any mark. Set logo.primary to the best vector /
transparent lockup (SVG wordmark > apple-touch-icon > favicon > og:image)
and list the rest in logo.alternates; the kit page renders them as
switchable thumbnails. (The daemon auto-fetches a favicon/og:image fallback
into logos/ so the page is never logo-less, but that safety net is no
substitute for saving the real wordmark.)imagery/: the og:image/twitter:image social card, the
hero/banner art, the largest <img> (resolve the highest-res srcset /
<picture> source), CSS background-image hero blocks, product or app
screenshots, and illustration/photography samples. Filter by rendered
size — keep only big images (roughly ≥320px on the long edge) and drop
icons, sprites, logos, avatars, and tracking pixels. List them in
brand.json as imagery.samples (see shape below); the kit page renders
them as a clean labeled Images gallery (a thumbnail grid). Pick 6–8 varied,
on-brand images — never UI chrome or icons. (The daemon runs a deterministic
cover/hero-image fallback at finalize so the gallery is rarely empty, but
that safety net is no substitute for picking the real hero images.)fonts/.If the page is an anti-bot interstitial instead of the real site — Cloudflare
"Just a moment…", "Verify you are human", "Attention Required", DataDome,
PerimeterX, Incapsula — stop measuring and emit a <question-form> asking
the user to clear it by hand in the Browser tab:
<question-form id="cf-verify" title="Verify in the browser">
[
{
"id": "ready",
"type": "radio",
"label": "The site is behind a verification wall. Please complete the check in the Browser tab on the right, then choose Continue.",
"options": ["Continue — I cleared the wall", "Skip — extract from public knowledge instead"]
}
]
</question-form>
Then end the turn. When the user submits the form, re-run
agent-browser snapshot on the now-unblocked tab and resume measuring. Never
attempt to solve CAPTCHAs or bypass the wall yourself. If the user picks
"Skip", fall back to your knowledge of the brand's public identity and clearly
mark each such value (from brand knowledge) in its usage/notes.
Write brand.json into the project as soon as you have the name, a couple of
colors, and a logo candidate — do not wait for everything. Then run:
od brand preview <brandId>
This re-renders brand.html so the user immediately sees a real, on-brand page
forming. Then preview after each field group, do not batch to the end —
after you measure and add each of (a) colors, (b) typography/fonts, (c) logo
candidates, (d) cover/hero imagery samples, (e) voice & tone, (f) imagery /
layout posture, update brand.json and re-run od brand preview. Partial data
renders the filled modules with skeletons for the rest, which is exactly the
progressive "filling in" experience the user should watch.
brand.json — must parse as JSON, with this exact shape:
{
"name": "Acme",
"tagline": "one-line brand tagline",
"description": "2-3 sentences on what the company does",
"sourceUrl": "https://acme.com",
"logo": { "primary": "logos/<best candidate or null>", "alternates": ["logos/<others>"], "notes": "why this primary; usage" },
"colors": [
{ "role": "background", "hex": "#f5f4ed", "oklch": "oklch(96% 0.01 90)", "name": "Parchment", "usage": "page background" },
{ "role": "surface", "hex": "#ffffff", "oklch": "oklch(100% 0 0)", "name": "Card", "usage": "cards, panels" },
{ "role": "foreground", "hex": "#141413", "oklch": "oklch(17% 0.005 90)", "name": "Ink", "usage": "primary text" },
{ "role": "muted", "hex": "#87867f", "oklch": "oklch(60% 0.01 90)", "name": "Stone", "usage": "secondary text" },
{ "role": "border", "hex": "#e8e6dc", "oklch": "oklch(92% 0.01 90)", "name": "Hairline", "usage": "borders, dividers" },
{ "role": "accent", "hex": "#d97757", "oklch": "oklch(67% 0.13 40)", "name": "Terracotta", "usage": "CTAs, links" },
{ "role": "accent-secondary", "hex": "#3d7a4f", "oklch": "oklch(50% 0.09 150)", "name": "Moss", "usage": "success, secondary" }
],
"typography": {
"display": { "family": "Tiempos", "fallbacks": ["Georgia", "serif"], "weights": [400, 600], "notes": "headlines" },
"body": { "family": "Inter", "fallbacks": ["system-ui", "sans-serif"], "weights": [400, 500, 700], "googleFontsUrl": "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" },
"mono": { "family": "JetBrains Mono", "fallbacks": ["monospace"], "weights": [400] }
},
"voice": { "adjectives": ["confident", "warm"], "tone": "how the brand speaks", "messagingPillars": ["pillar"], "vocabulary": { "use": ["words it uses"], "avoid": ["words it avoids"] } },
"imagery": {
"style": "one line", "subjects": ["typical subjects"], "treatment": "how images are treated", "avoid": ["clichés to avoid"],
"samples": [
{ "file": "imagery/hero.png", "kind": "hero", "caption": "Homepage hero" },
{ "file": "imagery/product.png", "kind": "product", "caption": "Product screenshot" }
]
},
"layout": { "radius": "12px", "borderWeight": "1px", "spacing": "8px baseline grid", "postureRules": ["3-5 observed posture rules"] }
}
Hard rules:
oklch() and say so in usage.family, put the closest Google Font first
in fallbacks, set googleFontsUrl, and note "stand-in for <face>".logos/<file> paths you saved; never pick a photographic
og:image as primary unless nothing else exists. Never leave logo.primary
empty when the site has any mark.imagery/
and reference them by their imagery/<file> path in imagery.samples; 6–8
varied, on-brand images filtered by rendered size — never icons or chrome.BRAND.md — a prose brand guide an autonomous design agent can follow
(visual theme, logo usage, color roles, typography, voice & tone, imagery,
component stylings, layout & spacing, depth, dos & don'ts, agent prompt guide).
Run the finalizer — it validates your brand.json, derives the
light/dark/compact design tokens and the brand-system artifacts (landing, deck,
poster, email, newsletter, form), and registers the brand as a reusable
user:<id> design system so it is selectable everywhere:
od brand finalize <brandId> --json
This self-hosts any Google Fonts you declared (so the Fonts specimen tiles —
a big "Ag" per family — and the kit render in the real typefaces), mirrors your
imagery/ samples into the brand so the Images gallery resolves, and
re-renders brand.html one last time with the status flipped to "Brand ready",
a Design system module (the live component kit
with a Light/Dark toggle plus the derived token chips — colorPrimary, fontSize,
borderRadius, …), and the six Brand Assets tiles (landing, deck, poster,
email, newsletter, form) lit up as live previews that each link to their full
system/artifacts/<kind>.html page. If finalize reports a validation error, fix
brand.json and run it again. Finish by pointing the user at the completed brand.html — the logo,
palette, typography, voice, and the assets they can now preview — and confirm
the brand was registered.
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
복고풍 픽셀 스타일의 세 장면 영상을 Hyperframes용 HTML로 만듭니다. 제목과 색상을 바꾸고 장면 전환과 움직임을 갖춘 구성으로 완성합니다.
소셜 미디어 광고와 검색 광고의 제목, 설명, 본문을 작성하고 표현을 반복해서 수정합니다. 광고 문구 후보를 준비하고 개선안을 검토할 때 활용합니다.
어두운 배경과 세리프 글꼴로 패션 잡지 같은 세 페이지 동적 연출을 만듭니다. 글자 단계 표시와 장면 전환을 포함한 단일 HTML 파일로 출력합니다.
브라우저에서 페이지를 살펴보고 클릭, 입력, 화면 캡처, 정보 추출을 수행합니다. OpenDesign의 로컬 미리보기를 중심으로 웹 앱의 동작과 품질을 확인합니다.
AI 음악 앨범의 콘셉트 구상부터 가사 초안, 곡 순서 검토, 내보내기까지 다룹니다. 독립 제작 실험과 브랜드 음악 기획에 활용합니다.
p5.js에서 계산 규칙과 난수로 생성 예술을 만듭니다. 난수의 초깃값을 고정해 같은 그림을 재현하며, 포스터와 동적인 느낌의 정지 이미지, 구도 시안 제작에 활용합니다.