What this server runs, and which credential turns each piece on.
Nothing is reported as verified, generated or signed by a provider that is not configured here.
Turns on: Email sign-in and embedded wallets on Arbitrum Sepolia for creators and brands
Now: Wallets are off; only seeded dev wallets (DEV_WALLETS=1) can act in the UI
NEXT_PUBLIC_DYNAMIC_ENV_ID
Turns on: A one-time ETH top-up (0.0002 ETH) to each new, empty wallet, so creators and brands never buy gas
Now: New wallets get no gas: registering and paying fail until the wallet holds Arbitrum Sepolia ETH
DRIP_PRIVATE_KEY or DRIP_KEY_FILE · DRIP_AMOUNT_ETH · DRIP_PER_IP_PER_HOUR · DRIP_PER_HOUR
Turns on: One-click renders: the brand's embedded wallet sends payRender through the render service, under the payRender-only policy
Now: Brands confirm each payRender in their own wallet; seeded test brands can use dev delegation (DEV_DELEGATION=1)
DYNAMIC_API_KEY · DYNAMIC_WEBHOOK_SECRET · DYNAMIC_DELEGATION_PRIVATE_KEY_FILE or _PEM
Turns on: The render agent's Render signatures come from a Dynamic server wallet
Now: The render agent signs with a local key (RENDER_AGENT_KEY_FILE)
DYNAMIC_API_KEY · DYNAMIC_AGENT_FILE (written by pnpm agent:dynamic) or DYNAMIC_AGENT_JSON
Turns on: Creator verification at level free (passive liveness; photos matched on this server): 18+ from the ID's date of birth, liveness, selfie-to-ID face match
Now: Liveness not configured and ID check not performed: no creator can be attested as verified
DIDIT_API_KEY · VERIFICATION_LEVEL (free | full) · DIDIT_WORKFLOW_ID_FREE · DIDIT_WORKFLOW_ID_FULL · DIDIT_WEBHOOK_SECRET (optional; the server also polls)
Turns on: At VERIFICATION_LEVEL=free, matching the three reference photos to the Didit liveness selfie on this server (YuNet + AuraFace, in memory)
pnpm face:models · FACE_MODELS_DIR · FACE_MODELS_FETCH (on by default on Vercel) · LOCAL_FACE_MATCH_THRESHOLD
Turns on: Real renders from the creator's reference photos (Gemini image model, SynthID-watermarked) and the LLM banned-use prompt filter
Now: TEST RENDER from the DevRenderer; LLM filter not configured: prompts are checked by local keyword rules only
GEMINI_API_KEY · GEMINI_IMAGE_MODEL · GEMINI_FILTER_MODEL
Turns on: Marketplace, dashboards and history served from the indexer
Now: History comes from cached RPC log scans (100 blocks per call)
ENVIO_GRAPHQL_URL or ENVIO_PG_URL · ENVIO_API_TOKEN (indexer/.env, for HyperSync)
Turns on: Signing Render attestations so payRender can pay out
Now: No renders can be paid
RENDER_AGENT_KEY_FILE or RENDER_AGENT_PRIVATE_KEY
Turns on: C2PA manifests in every render (currently a TEST certificate, not on the C2PA trust list)
Now: Renders are refused: every output must carry a manifest
C2PA_CERT_FILE and C2PA_KEY_FILE, or C2PA_CERT_PEM and C2PA_KEY_PEM
Turns on: Brands can verify a work email other than their sign-in email with a 6-digit code
Now: Only the email a brand signs in with (proven by Dynamic) can verify its domain; otherwise it shows as an unverified brand
RESEND_API_KEY · MAIL_FROM (optional)
Turns on: Business verification of brands, beyond the domain check
Now: Not run: brand badges cover the email domain only, and nothing claims a business check
not built yet
Likeness is a protocol; this app is its reference client. Any image tool can check a licence, pay per render and anchor a receipt through the same four contracts on Arbitrum, and anyone can check a file.
Didit-backed attestation (ID 18+, liveness, face match), terms, payout and one-click revocation. Hashes only.
Non-transferable, expiring licences, issued against the creator's signature or inside their auto-approve terms.
USDC per licence. Each render pays the creator and anchors a receipt in one transaction; the rest is refundable.
One receipt per delivered file, keyed by its sha256. Anyone can look a file up.