> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kynva.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# The determinism contract

> Same request in, byte-identical pixels out. What Kynva guarantees, what it doesn't, and why it changes how you build.

Kynva is a **deterministic design engine**. Generative image models give you
a different picture every time you ask; Kynva gives you the same one — down
to the byte.

## The guarantee

> **Same request + same engine version + same seed → byte-identical output.**

Concretely, a request is "the same" when these are unchanged:

| Input                                          | Where it lives         |
| ---------------------------------------------- | ---------------------- |
| Content (headline, subhead, body, CTA, points) | `intent.content`       |
| Brand kit (fonts, colors, logos, policies)     | `intent.brand_kit`     |
| Style brief + design preset (version-pinned)   | `intent.style_brief`   |
| Export target (platform, format, profile)      | `intent.export_intent` |
| Seed                                           | `execution.seed`       |

Run it twice, run it next month, run it in CI — identical bytes. There are no
hidden timestamps, no random layout jitter, no model temperature.

## What this buys you

* **Snapshot-testable design.** Render in CI, byte-compare against the
  committed PNG, fail the build on unexpected visual change — exactly like
  golden-file testing, because it is.
* **Cache forever.** A rendered asset never goes stale for the same inputs.
  [Signed image URLs](/api-reference/generate/render-png) are built on this:
  the same URL never renders twice — and is never billed twice.
* **Reviewable diffs.** Change one input, and the only pixel difference is
  the one you caused.
* **Reproducible incidents.** A customer report + their request = your exact
  repro, months later.

## Version pinning

Determinism holds **per engine version**. Engine upgrades may improve layout,
typography, or color decisions — which changes bytes. Two controls:

1. **Pin design presets** with the `slug@version` syntax
   (`"design_preset": { "preset_id": "promo-bold@3" }`) so preset edits
   never surprise you.
2. **Pin the API version** with the `X-API-Version` header (see
   [API versioning](/concepts/api-versioning)). Breaking engine-output
   changes ship behind new versions.

## Honest exclusions

* **External images you reference by URL** — if the content behind your URL
  changes, the render changes. Upload assets to Kynva for full determinism.
* **Font catalog updates** — a font file replaced upstream can shift metrics.
  Brand-kit fonts you upload are immutable.
* **Engine major versions** — as above; pin to control when you absorb them.

## Determinism ≠ idempotency

They're related but distinct: [idempotency](/concepts/idempotency) means a
*retried request* isn't processed twice (billing safety); determinism means a
*repeated request* produces identical output (rendering guarantee). Kynva
gives you both — the idempotency key protects your wallet, the seed protects
your pixels.
