generate-clip-art-asset-v2
activev2026.07.24Generate a catalog-ready clip-art asset: styled render, optional background removal (variant selectable via the backgroundRemover role), and classifier-produced catalog metadata — one audited run per asset. Successor to generate-clip-art-asset.
This page renders the template’s published registry entry — the contract itself, not a description of it. Immutable versions; sealed properties exist but are not public.
What you provide — intake contract
How it runs — step topology
1
Render imageimageimageGenerator
promptTemplate
2
Remove backgroundtoolbackgroundRemover
3
Classify assetllmclassifier
systempromptTemplatemaxTokens
4
Text gatellmtextGategate
Hard gate: the run fails unless pass — OCR text gate rejected the render
systempromptTemplatemaxTokens
Model roles: imageGenerator backgroundRemover classifier textGate bindings budgetPolicy
What you get — artifact
clip-artvisual
Version lineage
2026.07.24rev 26current2026-07-26
sha256:ae4da68c6…
2026.07.18rev 212026-07-20
sha256:6e4730873…
2026.07.18rev 202026-07-20
sha256:31f173a2a…
2026.07.18rev 152026-07-18
sha256:d5812e65b…
2026.07.18rev 142026-07-18
sha256:dd3ed99e6…
2026.07.04rev 12026-07-04
sha256:be5e2113e…
Full contract (as served)
GET /v1/catalog/workflows/generate-clip-art-asset-v2
{
"_comment": "SYNCED SNAPSHOT — do not hand-edit. Regenerate with: node scripts/sync-workflow-catalog.mjs (pulls api.esy.com GET /v1/catalog/workflows/{id}).",
"generatedAt": "2026-07-28T04:45:44.335802Z",
"id": "generate-clip-art-asset-v2",
"name": "Generate Clip Art (v2)",
"description": "Generate a catalog-ready clip-art asset: styled render, optional background removal (variant selectable via the backgroundRemover role), and classifier-produced catalog metadata — one audited run per asset. Successor to generate-clip-art-asset.",
"shortDescription": "Catalog-ready clip-art asset with classification.",
"artifactClass": "visual",
"outputType": "visual",
"status": "active",
"supersededById": null,
"version": "2026.07.24",
"stages": [
{
"name": "Render",
"description": "Compose the styled prompt and call the image model.",
"stepCount": 1
},
{
"name": "Post-process",
"description": "Remove the background when transparency is requested.",
"stepCount": 1
},
{
"name": "Classify",
"description": "Produce catalog metadata (title/slug/description/category/tags).",
"stepCount": 1
}
],
"intakeSchema": {
"fields": [
{
"name": "prompt",
"type": "string",
"required": true,
"description": "Subject prompt for the isolated object or character"
},
{
"name": "style",
"type": "enum",
"required": true,
"description": "Clip-art style",
"default": "flat",
"options": [
"flat",
"minimal",
"outline",
"black-and-white",
"cartoon",
"mascot",
"sticker",
"emoji",
"vintage",
"watercolor",
"storybook",
"isometric",
"clay",
"chibi",
"pixel",
"kawaii",
"3d",
"doodle"
]
},
{
"name": "aspectRatio",
"type": "enum",
"required": true,
"description": "Aspect ratio",
"default": "1:1",
"options": [
"1:1",
"3:4",
"4:3"
]
},
{
"name": "quality",
"type": "enum",
"required": false,
"description": "Render quality tier",
"default": "low",
"options": [
"low",
"medium",
"high"
]
},
{
"name": "backgroundRemovalEnabled",
"type": "boolean",
"required": false,
"description": "Deliver the asset with a transparent background",
"default": true
},
{
"name": "elementType",
"type": "enum",
"required": false,
"default": "",
"description": "Pack element type; 'pattern' ships full-bleed and skips background removal",
"options": [
"",
"subject",
"pose",
"prop",
"border",
"corner",
"pattern",
"scene"
]
},
{
"name": "categories",
"type": "string",
"required": true,
"description": "Comma-separated category slugs the classifier must choose from (empty fails the run in preflight)"
},
{
"name": "textPolicy",
"type": "enum",
"required": false,
"default": "",
"options": [
"",
"none",
"exact",
"freeform"
],
"description": "Per-item text contract: none = text forbidden; exact = must match expectedText; freeform = text allowed, judged on legibility/spelling only. Empty derives from textBearing (true=exact, false=none)."
},
{
"name": "textBearing",
"type": "boolean",
"required": false,
"default": false,
"description": "True when the asset must carry legible text (the OCR gate then checks it)"
},
{
"name": "expectedText",
"type": "string",
"required": false,
"default": "",
"description": "The EXACT text the asset must carry; leave empty unless textPolicy is 'exact'"
}
]
},
"runtimeSteps": [
{
"id": "step-1",
"name": "Render image",
"kind": "image",
"role": "imageGenerator",
"promptTemplate": "redacted"
},
{
"id": "step-2",
"name": "Remove background",
"kind": "tool",
"role": "backgroundRemover",
"inputPath": "step-1.url"
},
{
"id": "step-3",
"name": "Classify asset",
"kind": "llm",
"capability": "text",
"role": "classifier",
"jsonSchema": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Catalog-ready title, <= 60 chars"
},
"slug": {
"type": "string",
"description": "kebab-case URL slug"
},
"description": {
"type": "string",
"description": "1-2 sentence SEO-friendly description"
},
"category": {
"type": "string",
"description": "Exactly one of the provided category slugs"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "3-8 search tags"
}
},
"required": [
"title",
"slug",
"description",
"category"
],
"additionalProperties": false
},
"system": "redacted",
"promptTemplate": "redacted",
"maxTokens": "redacted"
},
{
"id": "step-4",
"name": "Text gate",
"kind": "llm",
"capability": "text",
"role": "textGate",
"requireTrue": "pass",
"failMessage": "OCR text gate rejected the render",
"jsonSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"foundText": {
"type": "string",
"description": "All legible text read from the image; empty if none"
},
"pass": {
"type": "boolean"
},
"reason": {
"type": "string"
}
},
"required": [
"foundText",
"pass",
"reason"
]
},
"system": "redacted",
"promptTemplate": "redacted",
"maxTokens": "redacted"
}
],
"gates": [
{
"id": "gate-render",
"name": "Provider execution",
"type": "quality",
"inputs": [
"intake"
],
"outputs": [
"raw-image"
],
"unlocks": [
"step-2"
]
},
{
"id": "gate-bg",
"name": "Background removal",
"type": "quality",
"inputs": [
"raw-image"
],
"outputs": [
"processed-image"
],
"unlocks": [
"step-3"
]
},
{
"id": "gate-text",
"name": "Text gate",
"type": "quality",
"inputs": [
"processed-image"
],
"outputs": [
"verified-image"
]
}
],
"artifactSchema": {
"artifactClass": "visual",
"artifactType": "clip-art",
"files": [
"image/webp"
],
"metadata": {
"style": "string",
"aspectRatio": "enum [1:1, 3:4, 4:3]",
"quality": "enum [low, medium, high]",
"backgroundRemoved": "boolean",
"classification": "object"
}
},
"providers": {
"imageGenerator": "redacted",
"backgroundRemover": "redacted",
"classifier": "redacted",
"textGate": "redacted"
},
"budgetPolicy": "redacted",
"versions": [
{
"version": "2026.07.04",
"revision": 1,
"contentHash": "sha256:be5e2113e3739c90b9ebbb8adefe3a3d6a69a2ffa8f7d599d35fd0c0ee489105",
"createdAt": "2026-07-04T21:49:03.075001Z"
},
{
"version": "2026.07.18",
"revision": 14,
"contentHash": "sha256:dd3ed99e6e2dd182361c7edfc22c930b370b85adf3452d1962111e40b85ce9c1",
"createdAt": "2026-07-18T19:19:05.110094Z"
},
{
"version": "2026.07.18",
"revision": 15,
"contentHash": "sha256:d5812e65b973ff63201e8520097d1aeed414f803d6aa8060e034d78ab6ed742b",
"createdAt": "2026-07-18T19:45:10.346245Z"
},
{
"version": "2026.07.18",
"revision": 20,
"contentHash": "sha256:31f173a2a1db243a3a8a694a4b566b1c4aaf38e571e6c7a668dd73ccfa3bf3d9",
"createdAt": "2026-07-20T20:32:04.210893Z"
},
{
"version": "2026.07.18",
"revision": 21,
"contentHash": "sha256:6e47308733ec5e9f1b5c9695eba52c51e1e8cb24f3c7b60840e3fdadc8ec8df4",
"createdAt": "2026-07-20T21:59:24.931304Z"
},
{
"version": "2026.07.24",
"revision": 26,
"contentHash": "sha256:ae4da68c6f1ef72f5259c587811d534c431605b1f580876feb6656263937cdc5",
"createdAt": "2026-07-26T00:51:03.156140Z"
}
],
"updatedAt": "2026-07-26T00:51:03.156140Z"
}Snapshot generated 2026-07-28 from the live registry.