generate-clip-art-asset-v2
activev2026.07.31.2Generate 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
Refine edgestool
4
Audit cutouttool
5
Classify assetllmclassifier
systempromptTemplatemaxTokens
6
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.31.2rev 53current2026-08-06
sha256:42578c51d…
2026.07.31.2rev 522026-08-06
sha256:2fabc4ab7…
2026.07.31.2rev 392026-07-31
sha256:c1aa8f499…
2026.07.31rev 372026-07-31
sha256:431138b0c…
2026.07.30rev 362026-07-30
sha256:51adc2497…
2026.07.29.4rev 332026-07-30
sha256:db7f46d50…
2026.07.29.3rev 322026-07-29
sha256:364b5ea7c…
2026.07.29.2rev 282026-07-29
sha256:75b65a465…
2026.07.29.1rev 272026-07-29
sha256:b767729f3…
2026.07.24rev 262026-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-08-20T16:48:44.771196Z",
"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.31.2",
"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, refine the cutout edge, then audit the result.",
"stepCount": 3
},
{
"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. Do NOT include background/transparency wording — transparency is the backgroundRemovalEnabled flag's job, and transparency prose makes raster models draw the checkerboard (issue #213); such phrases are scrubbed"
},
{
"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; full-bleed types ('pattern', 'scene') skip background removal — compositions have no single subject to isolate",
"options": [
"",
"subject",
"pose",
"prop",
"border",
"corner",
"pattern",
"scene"
]
},
{
"name": "alphaAuditMode",
"type": "enum",
"required": false,
"default": "enforce",
"description": "Cutout QA after background removal: 'enforce' (default) fails bad cutouts (holes/halos/spill) so they retry through the removal ladder, 'report' records metrics only, 'off' skips the audit",
"options": [
"enforce",
"report",
"off"
]
},
{
"name": "removalEscalationEnabled",
"type": "boolean",
"required": false,
"default": true,
"description": "On an enforced cutout-audit failure, retry the same render through stronger background-removal models (Heavy/Matting at 2K, then BRIA) before re-rendering; off fails straight to re-render"
},
{
"name": "matteColor",
"type": "string",
"required": false,
"default": "",
"description": "Chroma-key backing color for the keyed render (single-primary hex, e.g. #00FF00); empty lets the engine choose"
},
{
"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=freeform). Use 'none' deliberately, for assets that must carry no characters at all."
},
{
"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-2a",
"name": "Refine edges",
"kind": "tool",
"inputPath": "step-2.url"
},
{
"id": "step-2b",
"name": "Audit cutout",
"kind": "tool",
"inputPath": "step-2a.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-alpha",
"name": "Cutout alpha audit",
"type": "quality",
"inputs": [
"processed-image"
],
"outputs": [
"audited-image"
]
},
{
"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"
},
{
"version": "2026.07.29.1",
"revision": 27,
"contentHash": "sha256:b767729f3f3b7179074af29d3fd8df9fbed5dff6a253fbf9ace5eb867cbb7d84",
"createdAt": "2026-07-29T14:44:36.347900Z"
},
{
"version": "2026.07.29.2",
"revision": 28,
"contentHash": "sha256:75b65a46508b72d81bb04822042f5ba63ea9be5f28d6f42c646ab651d3e098f5",
"createdAt": "2026-07-29T18:03:01.887403Z"
},
{
"version": "2026.07.29.3",
"revision": 32,
"contentHash": "sha256:364b5ea7cb17f63f33206be0001d34da7b9d23ab21139776b981f39ba226656c",
"createdAt": "2026-07-29T23:31:43.076942Z"
},
{
"version": "2026.07.29.4",
"revision": 33,
"contentHash": "sha256:db7f46d50616ec7bc506b8a8467caa9153161365362e9b14d568171f8897fdb8",
"createdAt": "2026-07-30T00:05:51.254245Z"
},
{
"version": "2026.07.30",
"revision": 36,
"contentHash": "sha256:51adc24978e77e51da174af284bc55718ae4744fa71e571e82662424f9d56b9f",
"createdAt": "2026-07-30T21:21:43.002491Z"
},
{
"version": "2026.07.31",
"revision": 37,
"contentHash": "sha256:431138b0ce9479c08d4f7ffbaa040651c854fc580b93ccaad514066656507a99",
"createdAt": "2026-07-31T17:44:49.683929Z"
},
{
"version": "2026.07.31.2",
"revision": 39,
"contentHash": "sha256:c1aa8f49908b8a3a906c0b550c84681f3a6d8ebee1641eba3f11d88c8a90dc61",
"createdAt": "2026-07-31T23:05:48.582477Z"
},
{
"version": "2026.07.31.2",
"revision": 52,
"contentHash": "sha256:2fabc4ab754af1a88a09ab0808d54c616d91e6dffbf0305a8de2bb5a8cfd7695",
"createdAt": "2026-08-06T22:08:47.312726Z"
},
{
"version": "2026.07.31.2",
"revision": 53,
"contentHash": "sha256:42578c51d5e1df3aab3c681d810b6d8817b41ba0112f7849e3b841e2d4c36553",
"createdAt": "2026-08-06T22:47:27.001404Z"
}
],
"updatedAt": "2026-08-14T06:05:02.506875Z"
}Snapshot generated 2026-08-20 from the live registry.