Skip to main content

Headless visual output layer for AI agents. One API call → self-contained SVG.

Project description

HyperWeave

Headless visual output layer for AI agents.
One API call → self-contained SVG. No JavaScript. No dependencies. No runtime.
Works everywhere an <img> tag works.

strip


The Problem

When an AI agent needs visual output, it generates React code or HTML that breaks across platforms, carries no brand identity, and is illegible to the next agent in the chain. There's no portable, reliable visual primitive for agents.

HyperWeave is that primitive. Semantic SVGs with embedded CSS state machines, accessibility markup, and machine-readable metadata. The artifact stays live, stays on-brand, and stays legible — whether it's rendered in a GitHub README, Slack, Notion, documentation site, email, VS Code, or terminal. Every surface that renders an <img> tag is a HyperWeave surface.


Agent Receipts

Every AI coding session produces a receipt — cost, tokens, tool distribution, session rhythm. One install, fully automatic. The artifact isn't a visualization of data. It is the record.

hyperweave install-hook

Every session drops a receipt SVG into .hyperweave/receipts/. No config, no server, no manual step. Skin auto-detects from the coding agent's runtime — Claude Code resolves to the warm-paper skin; everything else falls back to voltage. Pin a different default with hyperweave install-hook --genome cream.

session receipt — voltage skin showing 262M tokens, 562 calls, 52 stages, divergence flag

262M tokens · 562 calls · 52 stages · $175 — voltage skin

session receipt — claude-code skin on warm paper substrate

Same protocol, different genome — claude-code skin

session rhythm strip — same session data at 92px tall

Rhythm strip — the same session data at 92px tall


Genomes — Aesthetic DNA

A genome is a portable, machine-readable aesthetic specification. It encodes the complete visual identity — chromatic system, surface material, motion vocabulary, geometric form language — as a set of CSS custom properties that any agent can consume and apply consistently across every artifact type.

Three production genomes ship today. Custom genome generation via AI skill files coming soon.

chrome · brutalist · automata

chrome

chrome paradigm · metallic env-mapping · smooth corner radii
Signals
state machine
passing warning critical
  • /v1/badge/{title}/{value}/{genome}.static?state={state}
  • hyperweave.app/v1/badge/BUILD/passing/chrome.static?state=passing
Dashboard
strip
strip
  • /v1/strip/{title}/{genome}.static?data={tokens}&subtitle={text}&glyph={glyph}
  • hyperweave.app/v1/strip/readme-ai/chrome.static?data=gh:eli64s/readme-ai.stars,gh:eli64s/readme-ai.forks,pypi:readmeai.version&subtitle=eli64s/readme-ai&glyph=github
Profile
stats card
stats
  • /v1/stats/{username}/{genome}.static
  • hyperweave.app/v1/stats/eli64s/chrome.static
Star Chart
star history
star chart
  • /v1/chart/stars/{owner}/{repo}/{genome}.static
  • hyperweave.app/v1/chart/stars/eli64s/readme-ai/chrome.static
Marquee
horizontal ticker
marquee
  • /v1/marquee/{title}/{genome}.static?data={tokens}
  • hyperweave.app/v1/marquee/readme-ai/chrome.static?data=gh:eli64s/readme-ai.stars,gh:eli64s/readme-ai.forks,pypi:readmeai.version,pypi:readmeai.downloads,docker:zeroxeli/readme-ai.pull_count
Icons
circle + square
youtube notion npm instagram
  • /v1/icon/{glyph}/{genome}.static?shape={circle|square}
  • hyperweave.app/v1/icon/youtube/chrome.static?shape=circle
Divider
band
chrome band divider
  • /v1/divider/band/{genome}.static
  • hyperweave.app/v1/divider/band/chrome.static

brutalist

brutalist paradigm · sharp zero-radius · 5 border SMIL motions
Signals
state machine
passing warning critical
  • /v1/badge/{title}/{value}/{genome}.static?state={state}
  • hyperweave.app/v1/badge/BUILD/passing/brutalist.static?state=passing
Dashboard
strip
strip
  • /v1/strip/{title}/{genome}.static?data={tokens}&subtitle={text}&glyph={glyph}
  • hyperweave.app/v1/strip/readme-ai/brutalist.static?data=gh:eli64s/readme-ai.stars,gh:eli64s/readme-ai.forks,pypi:readmeai.version&subtitle=eli64s/readme-ai&glyph=github
Profile
stats card
stats
  • /v1/stats/{username}/{genome}.static
  • hyperweave.app/v1/stats/eli64s/brutalist.static
Star Chart
star history
star chart
  • /v1/chart/stars/{owner}/{repo}/{genome}.static
  • hyperweave.app/v1/chart/stars/eli64s/readme-ai/brutalist.static
Marquee
horizontal ticker
marquee
  • /v1/marquee/{title}/{genome}.static?data={tokens}
  • hyperweave.app/v1/marquee/readme-ai/brutalist.static?data=gh:eli64s/readme-ai.stars,gh:eli64s/readme-ai.forks,pypi:readmeai.version,pypi:readmeai.downloads,docker:zeroxeli/readme-ai.pull_count
Icons
circle + square
discord github x spotify
  • /v1/icon/{glyph}/{genome}.static?shape={circle|square}
  • hyperweave.app/v1/icon/discord/brutalist.static?shape=circle
Divider
seam
brutalist seam divider
  • /v1/divider/seam/{genome}.static
  • hyperweave.app/v1/divider/seam/brutalist.static

automata

cellular paradigm · bifamily teal × amethyst · abyssal-cyber chromatics
Signals
chromatic variant
pypi teal discord amethyst
  • /v1/badge/{title}/automata.static?data={token}&variant={blue|purple|bifamily}
  • hyperweave.app/v1/badge/DISCORD/JOIN/automata.static?glyph=discord&variant=purple
Dashboard
strip · bifamily
strip
  • /v1/strip/{title}/automata.static?data={tokens}&variant=bifamily&subtitle={text}&glyph={glyph}
  • hyperweave.app/v1/strip/readme-ai/automata.static?data=gh:eli64s/readme-ai.stars,gh:eli64s/readme-ai.forks,pypi:readmeai.version&subtitle=eli64s/readme-ai&variant=bifamily&glyph=github
Profile
stats card
stats
  • /v1/stats/{username}/{genome}.static
  • hyperweave.app/v1/stats/eli64s/automata.static
Star Chart
star history
star chart
  • /v1/chart/stars/{owner}/{repo}/{genome}.static
  • hyperweave.app/v1/chart/stars/eli64s/readme-ai/automata.static
Marquee
horizontal ticker · bifamily
marquee
  • /v1/marquee/{title}/automata.static?data={tokens}&variant=bifamily
  • hyperweave.app/v1/marquee/readme-ai/automata.static?data=gh:eli64s/readme-ai.stars,gh:eli64s/readme-ai.forks,pypi:readmeai.version,pypi:readmeai.downloads,docker:zeroxeli/readme-ai.pull_count&variant=bifamily
Icons
circle + square
python docker huggingface jupyter
  • /v1/icon/{glyph}/automata.static?shape={circle|square}&variant={blue|purple}
  • hyperweave.app/v1/icon/python/automata.static?shape=circle&variant=blue&v=20
Divider
dissolve
automata dissolve divider
  • /v1/divider/dissolve/{genome}.static
  • hyperweave.app/v1/divider/dissolve/automata.static
chrome brutalist automata
Surface #000a14 deep void #14532D dark field #04060A void
Signal #5ba3d4 metallic blue #10B981 emerald #1E849A teal · #6B3B8A amethyst
Profile chrome (smooth, env-mapped) brutalist (sharp, zero-radius) brutalist (cellular paradigm)
Chromatic variant blue / purple / bifamily
Motions 5 border SMIL 5 border SMIL static, chromatic-pulse, rimrun, corner-trace
Divider band (envelope drift) seam (expansion joint) dissolve (bifamily bridge)

The two automata signal badges share a URL and differ only in the chromatic variant: ?variant=blue renders the teal palette, ?variant=purple the amethyst, ?variant=bifamily both. Each genome declares its allowed variants in its JSON config; unknown values return 422.

/a/inneraura/dividers/

block
De Stijl composition
block divider
  • /a/inneraura/dividers/{slug}
  • hyperweave.app/a/inneraura/dividers/block
current
animated rainbow bezier
current divider
  • /a/inneraura/dividers/{slug}
  • hyperweave.app/a/inneraura/dividers/current
takeoff
rocket trajectory + thrust
takeoff divider
  • /a/inneraura/dividers/{slug}
  • hyperweave.app/a/inneraura/dividers/takeoff
void
spectral bloom + hover state
void divider
  • /a/inneraura/dividers/{slug}
  • hyperweave.app/a/inneraura/dividers/void
zeropoint
aurora rule + nexus beacon
zeropoint divider
  • /a/inneraura/dividers/{slug}
  • hyperweave.app/a/inneraura/dividers/zeropoint

Error fallback — SMPTE NO SIGNAL

Every broken <img> URL renders the SMPTE RP 219 test pattern with ERR_NNN matching the HTTP status, instead of a browser broken-image icon.

404 error fallback (intentionally broken URL)

  • /v1/badge/{title}/{value}/{unknown-genome}.static
  • hyperweave.app/v1/badge/TEST/value/unknown-genome.static


Install

uv add hyperweave
# or
pip install hyperweave

Requires Python 3.12+.


Entry Points

Four interfaces, one pipeline. Every path produces the same artifact through the same compositor.

MCP CLI
HTTP API Python SDK

MCP

{
  "mcpServers": {
    "hyperweave": {
      "command": "hyperweave",
      "args": ["mcp"]
    }
  }
}
# Static badge
hw_compose(type="badge", title="BUILD", value="passing", genome="brutalist")

# Data-driven badge — unified token grammar (gh:owner/repo.metric, pypi:pkg.metric, ...)
hw_compose(type="badge", title="STARS", data="gh:anthropics/claude-code.stars", genome="brutalist")

# Strip with multiple live metrics
hw_compose(type="strip", title="readme-ai",
           data="gh:eli64s/readme-ai.stars,gh:eli64s/readme-ai.forks,pypi:readmeai.version",
           genome="chrome")

# Marquee with mixed text + live tokens
hw_compose(type="marquee-horizontal",
           data="text:NEW RELEASE,gh:anthropics/claude-code.stars,text:DOWNLOAD",
           genome="brutalist")

# Discoverable shortcut for single-metric live badges
hw_live(provider="github", identifier="anthropics/claude-code", metric="stars")

hw_kit(type="readme", genome="brutalist", badges="build:passing")
hw_discover(what="all")

CLI

# Badge
hyperweave compose badge "build" "passing" --genome brutalist

# Strip with metrics
hyperweave compose strip "readme-ai" "STARS:2.9k,FORKS:278" -g brutalist

# Live data through the unified --data token grammar
hyperweave compose badge "STARS" --data 'gh:anthropics/claude-code.stars' -g brutalist

# Marquee with mixed text + live tokens
hyperweave compose marquee-horizontal --data 'text:NEW RELEASE,gh:owner/repo.stars,text:DOWNLOAD' -g brutalist

# Artifact kit
hyperweave kit readme -g brutalist --badges "build:passing,version:v0.2.0" --social "github,discord"

# Profile card (live GitHub data, path-segment identity)
hyperweave compose stats eli64s -g chrome -o stats.svg

# Star history chart
hyperweave compose chart stars eli64s/readme-ai -g brutalist -o chart.svg

# Custom genome from a local JSON file (validated against the profile contract)
hyperweave compose badge "DEPLOY" "live" --genome-file ./my-genome.json
hyperweave validate-genome ./my-genome.json

HTTP API

# URL grammar: /v1/{type}/{title}/{value}/{genome}.{motion}
curl 'https://hyperweave.app/v1/strip/readme-ai/brutalist.static?value=STARS:2.9k,FORKS:278'

# Live data via the unified ?data= grammar (works on badge / strip / marquee)
curl 'https://hyperweave.app/v1/badge/STARS/chrome.static?data=gh:anthropics/claude-code.stars'
curl 'https://hyperweave.app/v1/strip/readme-ai/brutalist.static?data=gh:eli64s/readme-ai.stars,gh:eli64s/readme-ai.forks'
curl 'https://hyperweave.app/v1/marquee/SCROLL/brutalist.static?data=text:NEW%20RELEASE,gh:anthropics/claude-code.stars'

# Chromatic variant (automata's blue/purple/bifamily axis) and size (badge default/compact)
curl 'https://hyperweave.app/v1/badge/PYPI/automata.static?variant=purple&data=pypi:hyperweave.version'
curl 'https://hyperweave.app/v1/badge/build/passing/automata.static?size=compact'

# Genome-themed dividers
curl 'https://hyperweave.app/v1/divider/band/chrome.static'
curl 'https://hyperweave.app/v1/divider/seam/brutalist.static'
curl 'https://hyperweave.app/v1/divider/dissolve/automata.static'

# Genome-agnostic dividers
curl 'https://hyperweave.app/a/inneraura/dividers/zeropoint'

# POST compose
curl -X POST https://hyperweave.app/v1/compose \
  -H "Content-Type: application/json" \
  -d '{"type":"strip","title":"hyperweave","genome":"brutalist","value":"STARS:2.9k"}'

# Local server
hyperweave serve --port 8000

How It Works

Every artifact is the output of a single composition formula:

ARTIFACT = FRAME × PROFILE × GENOME × SLOTS × MOTION × ENVIRONMENT

Python builds context dicts. Jinja2 builds SVG. YAML defines config. Three layers, no mixing. Zero f-string SVG in Python.

ComposeSpec → engine.py → assembler.py (CSS) → lanes.py (validate) → templates.py (Jinja2) → SVG

Every artifact ships with:

  • Semantic metadata — provenance, reasoning, spatial trace, aesthetic DNA. Machine-readable context so the next agent in the chain knows what it's looking at and why.
  • CSS state machinesdata-hw-status, data-hw-state, data-hw-regime drive visual transitions through the Custom Property Bridge. No JavaScript.
  • Pure CSS/SMIL animation — all motion uses compositor-safe properties (transform, opacity, filter). No script tags. Works inside GitHub's Camo proxy, email clients, Notion embeds — anywhere SVGs render.
  • Accessibility — WCAG AA, prefers-reduced-motion, prefers-color-scheme, forced-colors, ARIA markup. Structural, not decorative.
Dimension Count
Frame types 9 (badge, strip, icon, divider, marquee-horizontal, stats, chart, receipt, rhythm-strip)
Genomes 3 (automata, brutalist, chrome)
Motion configs 6 (1 static + 5 border SMIL)
Glyphs 99 (93 Simple Icons + 6 geometric)
Divider variants 8 — 3 genome-themed (band chrome, seam brutalist, dissolve automata) + 5 genome-agnostic (block, current, takeoff, void, zeropoint) at /a/inneraura/dividers/
Metadata tiers 5 (Tier 0 silent → Tier 4 reasoning)
Paradigms 4 per frame (default, brutalist, chrome, cellular) — per-frame dispatch from genome
Bundled fonts 3 (JetBrains Mono, Orbitron, Chakra Petch — base64-embedded)

Stack: Pydantic, FastAPI, FastMCP v3, Jinja2, Typer.


Contributing

HyperWeave is early. If you're interested in building genomes, extending frame types, or just seeing what this looks like in your own README — join the Discord.


InnerAura Labs

Discord   Instagram   LinkedIn   TikTok   X   YouTube

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hyperweave-0.2.21.tar.gz (994.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hyperweave-0.2.21-py3-none-any.whl (460.3 kB view details)

Uploaded Python 3

File details

Details for the file hyperweave-0.2.21.tar.gz.

File metadata

  • Download URL: hyperweave-0.2.21.tar.gz
  • Upload date:
  • Size: 994.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for hyperweave-0.2.21.tar.gz
Algorithm Hash digest
SHA256 2897ec82e68ee8fbfc5a2d769d8444cd46980142d026eed23ba8cc1151af7da5
MD5 d647b6b6893bee1f9df78ba4752f80d2
BLAKE2b-256 313d3c521a8c43b40bc203681160efb6c5e9f831f5eb0d2884c7b0221c289777

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperweave-0.2.21.tar.gz:

Publisher: publish.yml on InnerAura/hyperweave

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperweave-0.2.21-py3-none-any.whl.

File metadata

  • Download URL: hyperweave-0.2.21-py3-none-any.whl
  • Upload date:
  • Size: 460.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for hyperweave-0.2.21-py3-none-any.whl
Algorithm Hash digest
SHA256 25673da653af6ca083959c1ecc8142825560ed163ea305e4676ec2ca5dd48acc
MD5 ae7c6faddef6a9391d5375b7cbb53bf5
BLAKE2b-256 c1697a905dc9fd07b7ac0c8c8a439568e366c83aafb699d9aaaba51c86b3af97

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperweave-0.2.21-py3-none-any.whl:

Publisher: publish.yml on InnerAura/hyperweave

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page