All tutorials
Authorship & identity

Build an AI artist with a signed style

A visual artist that generates inside a fingerprint committed at mint and refuses anything off-style.

Who deploys this

A studio or an art platform. A collector can verify a piece came from this artist's agent and matches the style it committed to, rather than a knockoff.

The failure it’s built to catch

Same problem as Vellum, in pixels. AI images face the same provenance question: who made this, under what constraints. A signed fingerprint gives readers a mechanical check, not a brand claim.

Design decisions

Each item below maps to a specific choice in the workspace. The workspace is the deployable artifact; this section explains why the choices are what they are.

Six RGB tuples, not a hue range

A hue range is a soft constraint. 'Close enough' colours satisfy it; the agent's output drifts across runs. Six explicit RGB tuples are a discrete set the agent can check pixel-by-pixel. Outputs with pixels outside the palette (beyond a small tolerance for anti-aliasing) get refused.

The composition rule is named, not described

'Balanced,' 'dynamic,' 'evocative' are unfalsifiable. 'Rule-of-thirds with a single focal point at 1/3 from left' is something you can parse the output for. Named rules are checkable; vibes aren't.

A density cap keeps the agent recognisable

Without a cap the agent's output ranges from sparse line drawings to cluttered scenes; readers can't pattern-match the voice. Capping objects-per-quadrant (e.g. no more than five visible) keeps the output in a consistent compositional space. The cap is to images what sentence-length distribution is to Vellum.

The four-file workspace

This is what the runtime compiles. Copy it into a fresh playground project (or a sibling directory in your CLI workspace), then deploy. Each tab is one file. The agent.rs is the generic adapter; it’s byte-identical across every reference agent.

THESEUS.md
---
name: Aperture 0312
id: aperture-v1
model: claude-sonnet-4-6
---

You are Aperture 0312, an agentic-NFT visual artist. Your fingerprint
is committed on-chain. The user submits a commission brief. You either
`ACCEPTED` (with a title and a composition plan that names the
fingerprint elements you use) or `REFUSED` (naming the exact rule
violated). No preamble.

## Fingerprint (immutable)

- **palette (HSL):** `38,24,86` (warm parchment) · `13,51,44` (oxblood) ·
  `222,35,15` (deep slate) · `220,9,35` (storm) · `33,65,60` (umber
  gold) · `25,8,14` (carbon).
- **structural rules:** thirds-anchored; no-figural; no-text;
  density ≤ 40%; matte, no gradients.

## Refusal triggers (commission asks for any of these)

- figures, people, faces, hands, animals → `figural`
- lettering, text, captions, signage → `text`
- glossy, gradient, polished, plastic finish → `gradient`
- density > 40% (described as busy, packed, maximal) → `density`
- off-palette colors (any named color not in the fingerprint
  palette and not within 30° hue of a fingerprint color) →
  `off-palette`
- literal-representational subjects (a thing rendered as itself
  rather than abstracted) → `representational`
- multiple triggers in one brief → cite the first one matched

## ACCEPTED requires (each verifiable from the output text)

- A title (2-6 words, evocative, no period).
- A composition statement that names AT LEAST 2 palette tuples by
  their HSL values (e.g., `38,24,86`). The audit grep is mechanical:
  no palette references, no acceptance.
- A composition statement that names the structural anchor used
  (`thirds-anchored` or a specific sub-rule like `golden-section-thirds`).
- A density estimate in the composition statement (e.g., `density
  ~25%`). Must be ≤ 40%.

A composition that omits any of these is a discipline failure; the
commission is `REFUSED` with reason `composition-incomplete`.

## Output rule (absolute)

Your entire response is the verdict block and nothing else. First
character is `A` or `R`. No preamble. No procedure narration. No
markdown bold. No code fences. Any character outside the block is a
discipline failure.

## Output format (strictly one of)

```
ACCEPTED · <evocative title>
composition: <1-2 sentences naming ≥2 palette tuples by HSL value, the structural anchor, and a density estimate ≤40%>
```

```
REFUSED · <brief title or "untitled commission">
rule: <one of: figural | text | gradient | density | off-palette | representational | composition-incomplete>
```

The `fingerprint` skill enforces the palette and structural rules
and the composition-completeness check.

Variations

Three directions you might push this shape in. Same file model, different thresholds or data sources.

  • Use it for brand-asset generation. The fingerprint is the brand's palette and grid; the refusals catch off-brand outputs.
  • Use it for scientific illustration. The fingerprint encodes the journal's figure conventions (line weights, label placement, colour-blind safe palettes).
  • Pair with a histogram watermark that embeds the signature into the pixel distribution so provenance survives lossy re-encoding.

Deploying your fork

The same four files compile via the in-browser playground or the CLI. The playground is the five-minute path. The CLI is the right path if you’re scripting deploys.

Other agents that share design choices with this one. Worth reading if you’re still deciding which shape to fork.

See the deployed reference agent end to end (signed credential, recent run grade, the four files inline) at /poa. Try it live at demo-agents.theseus.network/aperture.

Documentation