Most brands already exist somewhere. They’re on a live site, in a deck, in a screenshot someone sent you, or in a founder’s head while they walk you through a competitor’s homepage on a call. Capture is how you get that into sitekit as a reusable pack, rather than describing it to a model in a prompt and hoping.
Capture scaffolds and gathers evidence — it doesn’t call a model on its own. It sets up the pack, collects the source material, and installs the right authoring skill into your harness. Your agent does the extraction, with the evidence in front of it. That’s the same division of labour as the rest of sitekit.

Capturing a visual identity

sitekit style capture <name> --url https://example.com
That scaffolds a workshop style pack, records the source, runs the motion pass, and installs the capturing-a-style-pack skill. Your agent then reads the evidence and writes the pack.

Four ways to supply the source

sitekit style capture acme --url https://acme.com
The richest source. Your agent fetches the page in its own harness, and sitekit additionally runs a Playwright motion pass against the live DOM (see below). Both palettes can be captured rather than derived when the source ships its own dark theme.

The motion pass

When you capture from a URL, sitekit drives Playwright against the live page and reads motion off the real DOM rather than inferring it from a still image. It records:
  • CSS transition signatures — property, duration, timing function, delay
  • @keyframes bodies, with the real transform and opacity stops
  • Hover and focus signatures, by selector
  • Scroll-triggered reveals — what animates as it enters the viewport
  • Hidden elements that carry a transition — the modals, drawers, and flyouts you’d never see in a screenshot
  • The resolved timing register — the durations and easings the brand actually uses
This is the part a screenshot can’t give you, and it’s usually what makes a captured pack feel like the source rather than a flat imitation of it.
sitekit style capture acme --url https://acme.com --no-motion    # skip the pass
sitekit style capture acme --url https://acme.com --motion-only  # re-run motion on an existing pack
--motion-only is the one to use when a pack is already good but its motion is thin — it re-runs just the harness against an existing pack without re-scaffolding or reinstalling the skill.

Narration and transcripts

By default a screencast’s audio is transcribed automatically (via ElevenLabs). You can control that:
--fps <n>                        # sampling rate; omit to derive from duration
--transcript <file>              # bring your own SRT / VTT / JSON / txt
--no-transcribe                  # sample frames only, skip the audio
--transcription-provider <name>  # default: elevenlabs
Transcription is also available on its own, decoupled from capture:
sitekit transcribe walkthrough.mov
That produces a reviewable artifact — timed narration plus sampled frames — which your agent reads to drive on-brand changes through the maintenance loop. It’s the natural way to hand over “here’s a video of me walking through what I want changed.”

Capturing a voice

The verbal half works the same way:
sitekit voice capture <name> --url https://example.com
Your agent reads the source copy and extracts register, recurring sentence shapes, vocabulary, and the phrases the brand demonstrably never uses — which become machine-enforced bannedPhrases. See Voice packs.

Authoring from scratch

When there’s nothing to capture, scaffold a blank pack and let the authoring skill drive:
sitekit style author <name>      # installs authoring-a-style-pack
sitekit voice author <name>      # installs authoring-a-voice-pack
sitekit shape author <name>      # installs authoring-a-shape-pack
sitekit valence author <name>    # installs authoring-a-valence-pack
Each installs a skill that runs a clarify-intent → draft → preview → iterate → verify loop with your agent, rather than producing a pack in one shot and calling it done.

Adopting a site sitekit didn’t build

Capture is also the on-ramp for a site that already exists and isn’t going anywhere — a WordPress marketing site, a Squarespace page, a bespoke Next.js app.
# 1. capture the brand off the live site
sitekit voice capture acme-voice --url https://acme.com
sitekit style capture acme-style --url https://acme.com

# 2. bind the site to those packs
sitekit adopt acme --voice acme-voice --style acme-style --url https://acme.com
adopt writes a sitekit.adoption.json and installs the aligning-a-foreign-site skill. From then on you can judge any page or any proposed edit against the captured brand without migrating the site:
sitekit align --page ./about.html
sitekit verify --fragment ./proposed-hero.html --voice acme-voice --style acme-style
--fragment accepts - to read HTML from stdin, needs no workspace or marker, and returns a verdict against the resolved packs. It’s the primitive that makes “is this on-brand?” answerable for HTML sitekit never emitted.

Checking what you captured

sitekit style check <name>     # schema + required files
sitekit style verify <name>    # validate the manifest at any tier
sitekit style palette <name>   # inspect the declared palettes
sitekit style inspect <name>   # resolved details + three-tier resolution chain

A note on trademarks

Capture ports visual and verbal atoms — a palette, a type scale, a motion register, a set of motifs. It does not port a wordmark, a logo, or product imagery, and the bundled packs captured from real companies deliberately carry that boundary in their documentation. Author neutral content on top of a captured pack. The pack is a design language, not a costume.

What’s next

Style packs

What a style pack contains and the thirteen that ship.

Voice packs

Rules, prose, and the core writing guide beneath them.