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 |
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 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:- Pin design presets with the
slug@versionsyntax ("design_preset": { "preset_id": "promo-bold@3" }) so preset edits never surprise you. - Pin the API version with the
X-API-Versionheader (see 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.