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 agent needs to produce something visual — a status card, a dashboard, a receipt of its work — it generates React, HTML, or pixels, locked in the environment that made it. Embed it in markdown, pass it to another agent — it breaks or loses context. There's no portable visual primitive for agents.

HyperWeave is that primitive. One API call returns a self-contained SVG with data binding, branding, and machine-readable metadata baked in. No JavaScript, no dependencies, no runtime. It renders in GitHub READMEs, Slack, Notion, docs, your site, email, VS Code, or terminal. Every surface that renders an <img> tag is a HyperWeave surface.


Agentic Artifacts

Every AI coding session produces a receipt — cost, tokens, tool distribution, session rhythm. One install, fully automatic.

hyperweave install-hook

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

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

session rhythm strip — same session data at 92px tall

Rhythm strip — the same session data at 92px tall

session receipt — claude-code livery on warm paper substrate

Same data, different livery — claude-code

session receipt — codex agent transcript auto-detected from JSONL shape

Codex transcripts auto-detect from the JSONL shape

The livery matches the agent that produced the session:

Agent Livery
Claude Code claude-code
Codex codex
voltage
cream

Auto-detected from the session transcript. Pin a different default with hyperweave install-hook --genome voltage.


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.

brutalist · automata · chrome

brutalist

PYPI — celadon variant PYPI — carbon variant PYPI — alloy variant PYPI — temper variant PYPI — pigment variant PYPI — ember variant
PYPI — archive variant PYPI — signal variant PYPI — pulse variant PYPI — depth variant PYPI — afterimage variant PYPI — primer variant

12 variants: celadon · carbon · alloy · temper · pigment · ember · archive · signal · pulse · depth · afterimage · primer

Signals
state machine
passing warning critical
  • /v1/badge/{title}/{value}/{genome}.static?state={state}&variant={celadon|carbon|alloy|temper|pigment|ember|archive|signal|pulse|depth|afterimage|primer}
  • hyperweave.app/v1/badge/BUILD/passing/brutalist.static?state=passing&variant=celadon
Dashboard
strip
strip
  • /v1/strip/{title}/{genome}.static?data={tokens}&subtitle={text}&glyph={glyph}&variant={variant}
  • hyperweave.app/v1/strip/hyperweave/brutalist.static?data=gh:InnerAura/hyperweave.stars,pypi:hyperweave.version,gh:InnerAura/hyperweave.build&subtitle=InnerAura/hyperweave&glyph=github&variant=celadon
Profile
stats card
stats
  • /v1/stats/{username}/{genome}.static?variant={variant}
  • hyperweave.app/v1/stats/eli64s/brutalist.static?variant=celadon
Star Chart
star history
star chart
  • /v1/chart/stars/{owner}/{repo}/{genome}.static?variant={variant}
  • hyperweave.app/v1/chart/stars/eli64s/readme-ai/brutalist.static?variant=celadon
Marquee
horizontal ticker
marquee
  • /v1/marquee/{title}/{genome}.static?data={tokens}&variant={variant}
  • 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&variant=celadon
Icons
circle + square
github — celadon discord — carbon docker — alloy npm — temper spotify — pigment anthropic — ember
  • /v1/icon/{glyph}/{genome}.static?shape={circle|square}&variant={variant}
  • hyperweave.app/v1/icon/github/brutalist.static?shape=circle&variant=celadon
Divider
seam
brutalist seam divider
  • /v1/divider/seam/{genome}.static?variant={variant}
  • hyperweave.app/v1/divider/seam/brutalist.static?variant=celadon

automata

DOCKER PULL — teal variant DISCORD JOIN — violet variant STARS — amber variant HF MODELS — sulfur variant SPOTIFY LISTEN — jade variant

16 tones: violet · teal · bone · steel · amber · jade · magenta · cobalt · toxic · solar · abyssal · crimson · sulfur · indigo · burgundy · copper. Pair any two via ?variant=primary&pair=secondary.

Signals
state machine
passing warning critical
  • /v1/badge/{title}/{value}/{genome}.static?state={state}
  • hyperweave.app/v1/badge/BUILD/passing/automata.static?state=passing&variant=bone
Dashboard
strip
strip
  • /v1/strip/{title}/automata.static?data={tokens}&variant={tone}&pair={tone}&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=bone&pair=steel&glyph=github
Profile
stats card
stats
  • /v1/stats/{username}/{genome}.static?variant={tone}
  • hyperweave.app/v1/stats/eli64s/automata.static?variant=bone
Star Chart
star history
star chart
  • /v1/chart/stars/{owner}/{repo}/{genome}.static?variant={tone}
  • hyperweave.app/v1/chart/stars/eli64s/readme-ai/automata.static?variant=bone
Marquee
horizontal ticker
marquee
  • /v1/marquee/{title}/automata.static?data={tokens}&variant={tone}
  • 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=bone
Icons
square
docker cobalt discord indigo github bone huggingface sulfur anthropic solar youtube crimson spotify jade
  • /v1/icon/{glyph}/automata.static?shape=square&variant={tone}
  • hyperweave.app/v1/icon/docker/automata.static?shape=square&variant=cobalt
Divider
dissolve
automata dissolve divider
  • /v1/divider/dissolve/{genome}.static?variant={tone}&pair={tone}
  • hyperweave.app/v1/divider/dissolve/automata.static?variant=bone&pair=steel

chrome

BUILD — horizon variant BLUESKY POST — abyssal variant DOCKER pulls — lightning variant STARS — graphite variant ANTHROPIC CLAUDE — moth variant

5 variants: horizon · abyssal · lightning · graphite · moth

Signals
state machine
passing warning critical
  • /v1/badge/{title}/{value}/{genome}.static?state={state}&variant={horizon|abyssal|lightning|graphite|moth}
  • hyperweave.app/v1/badge/BUILD/passing/chrome.static?state=passing&variant=horizon
Dashboard
strip
strip
  • /v1/strip/{title}/{genome}.static?data={tokens}&subtitle={text}&glyph={glyph}&variant={variant}
  • 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&variant=horizon
Profile
stats card
stats
  • /v1/stats/{username}/{genome}.static?variant={variant}
  • hyperweave.app/v1/stats/eli64s/chrome.static?variant=horizon
Star Chart
star history
star chart
  • /v1/chart/stars/{owner}/{repo}/{genome}.static?variant={variant}
  • hyperweave.app/v1/chart/stars/eli64s/readme-ai/chrome.static?variant=horizon
Marquee
horizontal ticker
marquee
  • /v1/marquee/{title}/{genome}.static?data={tokens}&variant={variant}
  • 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&variant=horizon
Icons
circle + square
youtube notion npm instagram
  • /v1/icon/{glyph}/{genome}.static?shape={circle|square}&variant={variant}
  • hyperweave.app/v1/icon/youtube/chrome.static?shape=circle&variant=horizon
Divider
band
chrome band divider
  • /v1/divider/band/{genome}.static?variant={variant}
  • hyperweave.app/v1/divider/band/chrome.static?variant=horizon

brutalist automata chrome
Aesthetic Raw material Living cellular grid Metallic precision
Variants 12 (6 dark, 6 light) 16 tones, any two pair 5 named
Motion Animated border SMIL Animated cell grid Animated border SMIL
Divider seam dissolve band

/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 variants (automata: 16 solo tones, pair any two via &pair=...; chrome: horizon/abyssal/lightning/graphite/moth)
curl 'https://hyperweave.app/v1/badge/PYPI/automata.static?variant=teal&pair=violet&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)
Bundled fonts 3 (JetBrains Mono, Orbitron, Chakra Petch — base64-embedded)

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


Data Connectors

HyperWeave binds live data into any artifact through a unified token grammar (?data=...). Tokens are comma-separated; each token is either a literal (text:, kv:) or a live fetch (<provider>:<identifier>.<metric>).

Prefix Source Identifier shape Metrics
gh / github GitHub owner/repo stars, forks, watchers, issues, license, language, build
pypi PyPI + pypistats.org package version, license, python_requires, downloads
npm npm registry package version, license, downloads
hf / huggingface HuggingFace Hub org/model downloads, likes, tags, pipeline_tag, library_name
docker Docker Hub namespace/repo pull_count, star_count, last_updated
arxiv arXiv API id (e.g. 2310.06825) title, authors, published, categories, summary
text literal renders the payload as displayed text
kv literal KEY=VALUE static role-tagged value

Live tokens cache for 5–10 minutes per provider. Failures cache for 60s and surface as the em-dash sentinel () instead of fabricating zero values. Each provider runs through its own circuit breaker so a single upstream outage cannot trip unrelated fetches.

Embedded commas inside text: and kv: values escape as \,.

Open an issue to request a connector.


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.3.4.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

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

hyperweave-0.3.4-py3-none-any.whl (611.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for hyperweave-0.3.4.tar.gz
Algorithm Hash digest
SHA256 8b7bba7ddf504a1fe9a21aa53d8cd1c09b911034f8628d8bc1f84398a691d919
MD5 f2761094e207568d19d00b1f80e89b58
BLAKE2b-256 f3f920f4bac1690241d3dd44747a9b3567727c5ed6d018beb999c5c10e0aa830

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperweave-0.3.4.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.3.4-py3-none-any.whl.

File metadata

  • Download URL: hyperweave-0.3.4-py3-none-any.whl
  • Upload date:
  • Size: 611.9 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.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 62a3698dcfaa5a380153e489837b2fb823903e370a07187b0580929fc1e0388f
MD5 3283048c90bdff1adcde437c49665996
BLAKE2b-256 a3b0150b83c3305799df32d1e0030e881d289838c3dfaa85b31c244b676ed910

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperweave-0.3.4-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