# Visuals

Every other file in this directory references assets by exact path. This file is the production manifest: what to make, where it lives, what it says, and what it must never look like. Treat it as the contract — if a file in this directory references `assets/x.png`, it has to be on disk before that channel ships.

The aesthetic rule, stated once: **proof, not decoration.** The visual carries one claim that a skeptical reader can verify in two seconds. If the reader can verify it, the visual earned its slot. If they can't, it didn't.

The visual style rule, stated once: **clean developer share cards.** Dark neutral background, strong type, generous spacing, one claim per image, monospaced numerics, no padlocks, no hooded figures, no glowing matrix-code, no AI-generated cyberpunk, no Rust gear logo unless you're following Mozilla's trademark policy.

---

## Asset Manifest

All assets live under `assets/distribution/`. Create the directory if it doesn't exist; commit the assets to the repo so the GitHub raw URLs (referenced by the DEV article and social cards) stay live.

| File | Format | Dimensions | Required by | Status |
|---|---|---|---|---|
| `launch-card.svg` | SVG | 1200 × 630 viewBox | README, DEV cover fallback, X parent, LinkedIn, Mastodon, Bluesky | **Produced** |
| `launch-card.png` | PNG (export of SVG) | 1200 × 630 | Social platforms that prefer PNG previews | **Produced** |
| `platform-matrix.svg` | SVG | 1200 × 630 viewBox | README, DEV inline, X reply, LinkedIn, Mastodon, Bluesky | **Produced** |
| `platform-matrix.png` | PNG (export of SVG) | 1200 × 630 | Social platforms that prefer PNG previews | **Produced** |
| `linux-geomean-chart.svg` | SVG | 1200 × 630 viewBox | README, DEV inline, X reply | **Produced** |
| `linux-geomean-chart.png` | PNG (export of SVG) | 1200 × 630 | Social platforms that prefer PNG previews | **Produced** |
| `dependency-collapse.svg` | SVG | 1200 × 630 viewBox | DEV inline, LinkedIn, migration guides | **Produced** |
| `dependency-collapse.png` | PNG | 1200 × 630 | DEV inline, LinkedIn, migration guides | **Produced** |
| `dispatch-flow.svg` | SVG | 1200 × 630 viewBox | architecture docs, GitHub Discussion, technical replies | **Produced** |
| `dispatch-flow.png` | PNG (export of SVG) | 1200 × 630 | Social platforms that prefer PNG previews | **Produced** |
| `blake3-narrow-claim.svg` | SVG | 1200 × 630 viewBox | Anywhere BLAKE3 is mentioned | **Produced** |
| `blake3-narrow-claim.png` | PNG (export of SVG) | 1200 × 630 | Social platforms that prefer PNG previews | **Produced** |
| `honest-losses.svg` | SVG | 1200 × 630 viewBox | Benchmark caveat replies, README/DEV caveat section | **Produced** |
| `honest-losses.png` | PNG (export of SVG) | 1200 × 630 | Social platforms that prefer PNG previews | **Produced** |
| `demo.mp4` | mp4, ≤ 60 s | 1920 × 1080 (or asciinema cast) | X reply, LinkedIn, README | **Not yet produced** |

A pre-launch sanity check:

```sh
ls assets/distribution/{launch-card.svg,launch-card.png,platform-matrix.svg,platform-matrix.png,linux-geomean-chart.svg,linux-geomean-chart.png,dependency-collapse.svg,dependency-collapse.png,dispatch-flow.svg,dispatch-flow.png,blake3-narrow-claim.svg,blake3-narrow-claim.png,honest-losses.svg,honest-losses.png,demo.mp4}
```

If any of those is missing 24 hours before sharing, use the text-only channel variant or a documented fallback. Do not publish a post with a broken raw GitHub image URL.

---

## 0 — Launch / README Share Card

**File**: `assets/distribution/launch-card.svg` and `assets/distribution/launch-card.png`
**Dimensions**: 1200 × 630.
**Used by**: README hero, DEV cover fallback, X parent, LinkedIn, Mastodon, Bluesky.

**Content**:

- Headline: `Pure Rust crypto that stays portable.`
- Support line: `Small builds, hardware acceleration, no mandatory dependency stack.`
- Main proof block: `3,545 Linux wins`, `5,210 Linux wins-or-ties`, `235 Apple Silicon wins`, and `1.61x / 1.25x geomean`.
- Bottom proof cards:
  - `Zero default deps`: no C / no FFI / no OpenSSL
  - `Portable authority`: fast paths must match byte-for-byte
  - `6 target families`: x86, Arm, IBM Z, POWER, RISC-V, WASM
- Source footer: `benchmark_results/OVERVIEW.md`, Linux CI date/commit and Apple Silicon date/commit.

**Style**:

- Graphite/black canvas with subtle reference grid.
- Off-white type, restrained green proof accent, amber caveat line.
- One benchmark proof card and one compact three-column proof row.
- Geist / system sans for labels and body; Geist Mono / monospace for numbers and source fields.
- No colorful consumer panels, icons, shadows, glow, fake hardware, or decorative crypto imagery.

**Alt text**:

```text
rscrypto launch card. Headline: Pure Rust crypto that stays portable. It highlights small builds, RSA inclusion, hardware acceleration, zero default dependencies, no C, no FFI, no OpenSSL, portable Rust as the authority, six target families, 3,545 wins plus 5,210 wins-or-ties out of 5,832 Linux CI fastest-external comparisons, and 235 wins plus 450 wins-or-ties out of 463 Apple Silicon MBP M1 comparisons.
```

---

## 1 — Platform Matrix Card

**File**: `assets/distribution/platform-matrix.png`
**Dimensions**: 1200 × 630 (Open Graph standard).
**Used by**: DEV cover image, X launch parent, LinkedIn header, Mastodon attach, Bluesky attach.

**Content**:

- Headline: `Real target coverage`.
- Subtitle: `Nine Linux CI runners plus Apple Silicon. Portable fallback everywhere.`
- Six clean tiles:
  - `x86-64`: Intel + AMD runners, AVX2 / AVX-512 / AES / SHA
  - `Arm / AArch64`: Apple Silicon + Graviton3/4, NEON / AES / PMULL / SHA
  - `IBM Z`: z16 / s390x, CPACF / MSA / VGFM
  - `IBM POWER`: POWER10 / ppc64le, VSX / crypto / VPMSUMD
  - `RISC-V`: RISE runner, RVV / Zbc / Zvbc
  - `WASM`: wasm32 + WASI, portable core / SIMD128
- Bottom metrics: `9` measured Linux runners, `1` Apple Silicon full run, `1.61x / 1.25x` geomean, `3,545 Linux wins`, `235 Apple Silicon wins`.

**Style**:

- Same black canvas and rounded panel system as `launch-card`.
- Pale green headline block, then six flat color tiles.
- Geist / system sans for prose; Geist Mono / monospace for source labels and numbers.
- No maps, flags, CPU illustrations, or circuit decoration.

**Alt text**:

```text
rscrypto platform coverage card. Six target families are shown: x86-64, Arm/AArch64, IBM Z, IBM POWER, RISC-V, and WASM. Metrics: nine measured Linux runners, one Apple Silicon MBP M1 full run, 1.61× Linux CI geomean, 1.25× Apple Silicon geomean, 3,545 Linux wins, and 235 Apple Silicon wins.
```

**Production**: canonical SVG plus PNG export.

---

## 2 — Linux Geomean Speedup Chart

**File**: `assets/distribution/linux-geomean-chart.svg` (canonical) and `assets/distribution/linux-geomean-chart.png` (1200 × 630 export).
**Used by**: README performance section, DEV inline, X reply 4.

**Data** (from `benchmark_results/OVERVIEW.md`, recomputed from Linux CI 2026-05-27 and Apple Silicon 2026-06-01):

| Bar label | Geomean |
|---|---:|
| Checksums | 5.03× |
| BLAKE3 ≥64 KiB | 2.31× |
| SHA-3 | 2.15× |
| SHAKE | 1.86× |
| AEAD | 1.57× |
| RSA import + verify | 1.32× |

Apple Silicon companion numbers for callouts: checksums 2.76×, BLAKE3 ≥64 KiB 1.80×, SHA-3 0.94×, SHAKE 1.32×, AEAD 1.47×, RSA import plus verify 1.45×.

**Style**:

- Horizontal bars sorted descending by speedup.
- Bars start at `1.00×` parity rather than zero; the visual shows lift above the fastest matched baseline.
- Same black canvas and flat panel style as the rest of the kit.
- Y-axis: large readable labels.
- X-axis: linear scale 0–5×, gridlines at 1× and 2× labelled.
- A vertical reference line at `1.00×` labelled `parity with external crate`.
- Subtitle below the chart: `Speedup is external_crate_time / rscrypto_time. Above 1.00× means rscrypto is faster.`
- Footer: `Source: benchmark_results/OVERVIEW.md, Linux CI 2026-05-27; Apple Silicon 2026-06-01.`

**Alt text**:

```text
Bar chart of selected Linux CI fastest-external geomean speedups. Bars start at 1.00× parity. Checksums 5.03×, BLAKE3 large inputs 2.31×, SHA-3 2.15×, SHAKE 1.86×, AEAD 1.57×, and RSA import plus verify 1.32×. The benchmark overview also includes Apple Silicon MBP M1 results.
```

**Production**:

- Generate SVG by hand for now. A small script that reads `benchmark_results/OVERVIEW.md` should replace this if benchmark visuals are updated often.
- A reasonable starting point: open `OVERVIEW.md`, copy the seven category rows into a JSON array, run a templating script. Aim for under 100 lines including the SVG header.

---

## 3 — Dependency Collapse Diagram

**File**: `assets/distribution/dependency-collapse.svg` and `assets/distribution/dependency-collapse.png`
**Dimensions**: 1200 × 630.
**Used by**: DEV article inline, LinkedIn first-comment image, migration guides.

**Content** — three build-shape cards:

- `LEAF`: one primitive, `features=["crc32c"]`.
- `FAMILY`: one group, `features=["checksums"]`.
- `FULL`: whole stack, `features=["full"]`.
- Bottom pills: `0 default deps`, `no C / FFI / OpenSSL`, `no_std first`, `WASM native`.

**Style**:

- Same black canvas and flat panel style as the rest of the kit.
- Three proportional cards. No arrows needed; the layout is the comparison.

**Alt text**:

```text
Build-shape diagram. rscrypto can be enabled as one leaf primitive, one primitive family, or the full stack. Bottom callouts: zero default dependencies, no C or FFI or OpenSSL, no_std-first design, and native WASM support.
```

**Production**: canonical SVG plus PNG export.

---

## 4 — Dispatch Flow Diagram

**File**: `assets/distribution/dispatch-flow.svg` (canonical), `assets/distribution/dispatch-flow.png` (1200 × 630 export).
**Used by**: DEV inline, GitHub Discussion, `docs/architecture.md` (when it picks the asset up).

**Content** — three-step horizontal flow:

```text
API call -> portable Rust -> fast path
             authority      CPU caps + SIMD/ASM

CI gate: accelerated output == portable output
```

**Style**: same black canvas and flat panel style as the rest of the kit. Three cards, two arrows, one CI gate. Nothing else.

**Alt text**:

```text
Dispatch-flow diagram. An API call goes through portable Rust, which is the byte-for-byte authority. A fast path is selected through CPU capabilities only when available, and CI requires accelerated output to equal portable output.
```

**Production**: canonical SVG plus PNG export.

---

## 5 — BLAKE3 Narrow-Claim Card

**File**: `assets/distribution/blake3-narrow-claim.svg` and `assets/distribution/blake3-narrow-claim.png`
**Dimensions**: 1200 × 630.
**Used by**: anywhere BLAKE3 is discussed standalone (X follow-up, blog comments, migration guide section on `blake3`).

This card exists to make the boast safe. The caveat is the point — it sits in the image, not below it.

**Content**:

- Headline: `BLAKE3 large-input speedup`.
- Metric (large): `2.31×` geomean, `Linux CI`; secondary metric `1.80×`, `Apple Silicon MBP M1`.
- Scope strip: `one-shot · keyed · derive-key · inputs ≥ 64 KiB`.
- Caveat strip (must be visible in the image, not buried in alt text): `Smaller inputs, Apple Silicon 64 KiB rows, and some platforms are at parity or lose. The benchmark overview shows every tie and loss.`
- Footer: source URL.

**Alt text**:

```text
BLAKE3 large-input speedup card. rscrypto is 2.31× geomean faster than the blake3 crate on Linux CI and 1.80× on Apple Silicon MBP M1 for one-shot, keyed, and derive-key inputs of 64 KiB or larger. Caveat: smaller inputs, Apple Silicon 64 KiB rows, and some platforms are at parity or lose.
```

---

## 6 — Honest Losses Card

**File**: `assets/distribution/honest-losses.svg` and `assets/distribution/honest-losses.png`
**Dimensions**: 1200 × 630.
**Used by**: benchmark caveat replies, README/DEV caveat section, skeptical social threads.

**Content**:

- Headline: `The losses are part of the data.`
- Four Linux CI pressure points:
  - PBKDF2-SHA256 `iters=1`: `0.81x`
  - X25519 DH: `0.92x`
  - RSA-4096 verify: `0.94x`
  - Small-message AEAD: many 1-byte and 32-byte losses
- Apple Silicon companion pressure points: BLAKE3 64 KiB, HMAC-SHA256 bulk
  against `aws-lc-rs`, empty-message ChaCha20-Poly1305, and SHA3-256
  streaming.
- Bottom callout: `Hiding losses makes the benchmark useless.`

**Alt text**:

```text
rscrypto honest benchmark caveats card. It says the losses are part of the data and lists current Linux pressure points: PBKDF2-SHA256 iters=1 at 0.81x, X25519 DH at 0.92x, RSA-4096 verification at 0.94x, and small-message AEAD losses. It also names Apple Silicon BLAKE3 64 KiB, HMAC-SHA256 bulk, empty-message ChaCha20-Poly1305, and SHA3-256 streaming pressure.
```

---

## 7 — Demo Video

**File**: `assets/distribution/demo.mp4` (or `assets/distribution/demo.cast` if asciinema-only).
**Length**: 45–60 seconds. Hard ceiling at 60 s; X autoplays the first 30 silently.
**Used by**: X (attach to launch parent or to reply 1), LinkedIn, GitHub README badge.

**Script** (timed for ~50 seconds):

| Time | What's on screen | What's narrated (or text overlay if silent) |
|---|---|---|
| 0:00–0:08 | A `Cargo.toml` editor view with seven separate crypto dependencies highlighted | "Before: seven crypto crates, seven release cadences, seven platform stories." |
| 0:08–0:16 | The seven lines collapse into one: `rscrypto = { version = "0.3.0", default-features = false, features = ["full"] }` | "After: one feature-selected crate. Zero default dependencies." |
| 0:16–0:25 | Terminal: `cargo tree --no-default-features --features full` showing a single root | "Same toolbox. One audit surface." |
| 0:25–0:35 | Terminal: a tiny example program that calls `Sha256::digest`, `Crc32C::checksum`, and `ChaCha20Poly1305::encrypt_in_place` runs successfully | (text overlay: `same API shape across every primitive`) |
| 0:35–0:48 | Browser scrolling through `benchmark_results/OVERVIEW.md`, settling on the Linux and Apple Silicon scorecards | "Benchmarked across nine Linux CI runners plus Apple Silicon. 3,545 Linux wins; 235 Apple Silicon wins." |
| 0:48–0:58 | Title card: `rscrypto v0.3.0` with the GitHub URL and `review wanted` underneath | "Published. Hard review wanted." |

**Style**:

- Terminal recording (not a screen recording with cursor visible) — use [asciinema](https://asciinema.org) to record, then convert to mp4 with [agg](https://github.com/asciinema/agg) or a similar tool.
- One typeface (Geist Mono or the terminal default).
- No background music. Developers trust silence.
- No outro logo splash, no animated wipes, no Premiere Pro defaults.

**Alt text** (for video, used as the LinkedIn caption when video alt is supported):

```text
60-second demo: a typical Rust crypto Cargo.toml with seven separate crates collapses into one rscrypto entry with features = "full"; a small example program runs hashes, checksums, and AEAD encryption from the same crate; the benchmark overview shows 3,545 wins and 5,210 wins-or-ties out of 5,832 Linux CI comparisons plus 235 wins and 450 wins-or-ties out of 463 Apple Silicon MBP M1 comparisons.
```

**Why a video at all**: every algorithmic feed (X, LinkedIn, Threads) treats native video as a first-class engagement signal. A 60-second terminal cast also costs less to produce than a designed image once you've recorded it.

---

## Style Tokens (one source of truth)

| Token | Value | Notes |
|---|---|---|
| Background | `#030303` | Black canvas. Strong in README and social crops. |
| Primary panel | `#dfeadb` | Pale green for the main claim. |
| Supporting panel A | `#9c9500` | Muted olive for dependency/performance support. |
| Supporting panel B | `#a197bd` | Lavender for trust/model/context support. |
| Caveat panel | `#ff4d2e` | Coral for scope, caveats, and action. |
| Primary text | `#f5f7f1` / `#030303` | Light on black, black on panels. |
| Sans typeface | Geist or system sans | Basic, developer-friendly. |
| Mono typeface | Geist Mono or system monospace | Numbers, labels, source fields. |

---

## What Never To Use

- **Padlock stock art.** Anywhere. Including as an icon. Including ironically.
- **Hooded figures, glowing matrix code, "hacker" imagery.** This is a library, not a Mr. Robot trailer.
- **AI-generated cyberpunk crypto art.** Looks the same as everyone else's; signals low effort.
- **"Military-grade," "bulletproof," "unbreakable."** Not in copy, not in callouts, not in alt text.
- **Mascot art.** OpenClaw and Pokemon-card style mascots have a vibe; crypto libraries do not.
- **Rust gear logo** unless you've reviewed Mozilla's trademark policy and you're sure your usage is compliant. The Ferris crab is friendlier and trademark-clear if you really need a Rust signal.
- **Stock photos of laptops, server racks, fingers on keyboards.** Same energy as padlocks — instantly forgettable, often actively negative.
- **Multi-emoji titles or thumbnails.** 🚀✨ etc.
- **Glow / neon outline effects** on type. They photograph badly when reposted.
- **Rotating 3D logos, lottie animations, or other moving parts** in static images. Defeat the purpose of a static visual.

---

## Pre-Launch Asset Checklist

48 hours before sharing, walk this list:

- [ ] `assets/distribution/launch-card.svg` and `.png` exist and render correctly in a 1200 × 630 preview.
- [ ] `assets/distribution/platform-matrix.svg` and `.png` exist and the platform labels match `docs/platforms.md`.
- [ ] `assets/distribution/linux-geomean-chart.svg` and `.png` exist and the numbers match the current `benchmark_results/OVERVIEW.md`.
- [ ] `assets/distribution/dependency-collapse.svg` and `.png` exist and the feature examples match the README.
- [ ] `assets/distribution/dispatch-flow.svg` and `.png` exist and the diagram matches the description in `docs/platforms.md`.
- [ ] `assets/distribution/blake3-narrow-claim.svg` and `.png` exist and the caveat is visible in the image, not just in alt text.
- [ ] `assets/distribution/honest-losses.svg` and `.png` exist and the loss numbers match the current benchmark overview.
- [ ] `assets/distribution/demo.mp4` exists, plays without sound, has burned-in captions, and is under 60 seconds.
- [ ] All assets have alt text drafted in the channel files that reference them (DEV body, LinkedIn first comment, etc.).
- [ ] The GitHub raw URLs in `devto-article.md`'s front matter resolve to the actual files (not 404).
- [ ] No asset includes a typo in the headline number — recompute the number from `benchmark_results/OVERVIEW.md` once more.
