BYOK control plane - no inference

Consent first.
Generate elsewhere.

PortraitKey is the control plane for AI portrait work. Prepare consented datasets, write explicit shoot recipes, price the job before it runs, and gate every output through human review. Your provider keys, your providers, your rules - PortraitKey never generates an image.

6connected control-plane views
3provider profiles supported
0images generated by PortraitKey itself
1human gate before anything ships

How it works

A pipeline with receipts

Prepare with consent

Every dataset starts with a rights basis: you are the subject, you hold documented permission, or the identity is licensed synthetic. No basis, no dataset.

Direct the brief

Shoot recipes make the brief explicit - use case, scene, wardrobe, lighting, framing, guardrails - so the job is reviewable before it exists.

Price before you run

The job manifest lays out provider, model, mode, output count, your rate per output, runtime estimate, and an optional budget cap. Surprises belong in portraits, not invoices.

Gate every output

Provider outputs come back for local human review against numeric thresholds for identity fidelity, artifact safety, and brief match. Automatic reject reasons are yours to define.

Inside the control plane

Consent, manifest, gate

One portrait job through the three controls that make it safe to hand to a provider: consent recorded per subject, a manifest that prices the run before anything executes, and an evaluation gate that measures identity instead of eyeballing it.

DATASET - SUBJECT RECORDCONSENT ACTIVE
Consent bindingRECORD ATTACHED
Retention policyAUTO-DELETE IN 30 DAYS
Expired recordsBLOCK MANIFESTS
CONSENT IS A FIELD
EXPIRY STOPS THE WORK
DATASET PREPNo consent, no manifestThe gate fails loudly instead of blocking silently
JOB MANIFESTESTIMATE ONLY
Images planned24 ACROSS 3 RECIPES
Provider keySUPPLIED OUTSIDE, NEVER STORED
Cost before computePRICED IN THE MANIFEST
KNOW WHAT WOULD RUN
NO INFERENCE IN THIS APP
MANIFESTA dry-run with receiptsThe job is data you can inspect before any provider sees it
EVALUATION GATE1 BELOW THRESHOLD
Identity similarity - batch APASS
Identity similarity - batch BFAIL - REVIEW
FailuresSTAY VISIBLE, NOT DISCARDED
MEASURED, NOT EYEBALLED
IDENTITY IS NOT A VIBE
EVAL GATEScores against the source setWhat fails the threshold is named, batch by batch

Dataset prep

Consent is a field, not a footnote

Rights basis

Three lawful bases

I am the subject. I have the subject's documented permission. Licensed synthetic identity. The dataset cannot proceed without one.

Subject label

Identity tracked

Every reference set carries its subject label, so datasets never blur whose face is inside.

Local only

Images stay put

Reference images are handled in the browser session. PortraitKey uploads nothing.

Shoot recipe

Direct the brief

A recipe is the creative brief made explicit: use case (professional headshot, editorial, dating profile, creator campaign, product/lifestyle), scene, wardrobe, one of four lighting styles, one of four framings, plus your guardrails. Named scenarios save and reload.

Lighting

Four setups

Soft window light, high-key studio, golden hour, dramatic side light - chosen, not hoped for.

Framing

Four crops

Chest-up, full body, close-up, environmental wide. The brief says which before anything runs.

Guardrails

Written down

Hard limits ride inside the recipe, visible to everyone who touches the job.

Job manifest

Know what would run

Providers

Your keys, your providers

Replicate-compatible APIs, a custom HTTPS provider, or a local ComfyUI endpoint. PortraitKey describes the job; you run it where your keys live.

Cost

Priced in the open

Mode (zero-shot, LoRA training, image-to-image), output count, your rate per output, training/runtime estimate, and an optional budget cap - computed before anything moves.

Evaluation gate

Identity is not a vibe

Thresholds

Numeric minimums

Identity fidelity, artifact safety, and brief match each carry a 1-5 minimum you set. The gate applies them uniformly.

Rejects

Your reject list

Identity drift, extra fingers, text artifacts, unsafe content - the automatic reject reasons are configurable and visible.

Delivery

Package what passes

Approved outputs build into a delivery package with a contact sheet. Nothing ships that a human did not pass.

Governance

Consent has a lifecycle

Purpose

Purpose limitation

Personal profiles, owned brand marketing, or internal evaluation only - recorded with the provider and recipient.

Retention

Deadlines, not vibes

Every dataset carries a retention deadline. Allowed output use is recorded alongside it.

Revocation

Deletion receipts

Consent can be revoked, and deletion produces a receipt you can keep. Consent ends in writing too.

No fake generator

PortraitKey runs zero inference

There is no hidden model here. The studio prepares, prices, reviews, and governs - the generating happens at your provider, under your key, on your bill. If a job could not be described honestly in the manifest, it does not belong in the pipeline.