generate-illustration

activev2026.08.22

Generate a full-scene illustration (detailed background, environment, lighting) in one of 25 styles, plus classifier-produced catalog metadata and an OCR text gate.

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

FieldTypeRequiredDefaultDescription
promptstringrequiredScene to illustrate
styleenum
flatcartoonwatercolorvintage3ddoodlekawaiistorybookdigital-artfantasyanimecollagegouachepaper-artchalk-pastelretroisometricline-artpencil-sketchcomicpixel-artpop-artminimalistbotanicalcinematic
required"flat"Illustration style
aspectRatioenum
4:31:13:416:9
required"4:3"Aspect ratio
qualityenum
lowmediumhigh
optional"medium"Render quality tier
categoriesstringrequiredComma-separated category slugs the classifier must choose from (empty fails the run in preflight)
textPolicyenumoptional""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.
textBearingbooleanoptionalfalseTrue when the asset must carry legible text (the OCR gate then checks it)
expectedTextstringoptional""The EXACT text the asset must carry; leave empty unless textPolicy is 'exact'

How it runs — step topology

1
Render illustrationimageimageGenerator
promptTemplate
2
Classify assetllmclassifier
systempromptTemplatemaxTokens
3
Text gatellmtextGategate

Hard gate: the run fails unless pass OCR text gate rejected the render

systempromptTemplatemaxTokens

Model roles: imageGenerator classifier textGate bindings budgetPolicy

What you get — artifact

illustrationvisual

Version lineage

2026.08.22rev 67current2026-08-22
sha256:787da6fca
2026.07.04rev 522026-08-06
sha256:76366421c
2026.07.04rev 262026-07-26
sha256:5ed1aa5aa
2026.07.04rev 12026-07-04
sha256:2323a12ce

Full contract (as served)

GET /v1/catalog/workflows/generate-illustration
{
  "_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-09-07T04:32:14.515090Z",
  "id": "generate-illustration",
  "name": "Generate Illustration",
  "description": "Generate a full-scene illustration (detailed background, environment, lighting) in one of 25 styles, plus classifier-produced catalog metadata and an OCR text gate.",
  "shortDescription": "Full-scene styled illustration with classification.",
  "artifactClass": "visual",
  "outputType": "visual",
  "status": "active",
  "supersededById": null,
  "version": "2026.08.22",
  "stages": [
    {
      "name": "Render",
      "description": "Compose the styled scene prompt and call the image model.",
      "stepCount": 1
    },
    {
      "name": "Classify",
      "description": "Produce catalog metadata, then run the OCR text gate.",
      "stepCount": 2
    }
  ],
  "intakeSchema": {
    "fields": [
      {
        "name": "prompt",
        "type": "string",
        "required": true,
        "description": "Scene to illustrate"
      },
      {
        "name": "style",
        "type": "enum",
        "required": true,
        "description": "Illustration style",
        "default": "flat",
        "options": [
          "flat",
          "cartoon",
          "watercolor",
          "vintage",
          "3d",
          "doodle",
          "kawaii",
          "storybook",
          "digital-art",
          "fantasy",
          "anime",
          "collage",
          "gouache",
          "paper-art",
          "chalk-pastel",
          "retro",
          "isometric",
          "line-art",
          "pencil-sketch",
          "comic",
          "pixel-art",
          "pop-art",
          "minimalist",
          "botanical",
          "cinematic"
        ]
      },
      {
        "name": "aspectRatio",
        "type": "enum",
        "required": true,
        "description": "Aspect ratio",
        "default": "4:3",
        "options": [
          "4:3",
          "1:1",
          "3:4",
          "16:9"
        ]
      },
      {
        "name": "quality",
        "type": "enum",
        "required": false,
        "description": "Render quality tier",
        "default": "medium",
        "options": [
          "low",
          "medium",
          "high"
        ]
      },
      {
        "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 illustration",
      "kind": "image",
      "role": "imageGenerator",
      "promptTemplate": "redacted"
    },
    {
      "id": "step-2",
      "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-3",
      "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": [
        "illustration"
      ],
      "unlocks": [
        "step-2"
      ]
    },
    {
      "id": "gate-text",
      "name": "Text gate",
      "type": "quality",
      "inputs": [
        "illustration"
      ],
      "outputs": [
        "verified-image"
      ]
    }
  ],
  "artifactSchema": {
    "artifactClass": "visual",
    "artifactType": "illustration",
    "files": [
      "image/webp"
    ],
    "metadata": {
      "style": "string",
      "aspectRatio": "enum [4:3, 1:1, 3:4, 16:9]",
      "quality": "enum [low, medium, high]",
      "classification": "object"
    }
  },
  "providers": {
    "imageGenerator": "redacted",
    "classifier": "redacted",
    "textGate": "redacted"
  },
  "budgetPolicy": "redacted",
  "versions": [
    {
      "version": "2026.07.04",
      "revision": 1,
      "contentHash": "sha256:2323a12ce55302e72eddc3ba89db53af3ea5a8d443091fcd39cb5d1cbeae6c65",
      "createdAt": "2026-07-04T21:49:03.297839Z"
    },
    {
      "version": "2026.07.04",
      "revision": 26,
      "contentHash": "sha256:5ed1aa5aad23c2b43db13e5c40c0af58db7f49cbbfb7f34b847410b5430b495b",
      "createdAt": "2026-07-26T00:51:06.773051Z"
    },
    {
      "version": "2026.07.04",
      "revision": 52,
      "contentHash": "sha256:76366421cec4ea973a76b1eb715b7bc9a598ed8bf836e6c4d0cc928ff09cb573",
      "createdAt": "2026-08-06T22:08:47.634152Z"
    },
    {
      "version": "2026.08.22",
      "revision": 67,
      "contentHash": "sha256:787da6fca183754ea2ca7ae3aaba5aa55d10c29e8194e58b11644acf62595e65",
      "createdAt": "2026-08-22T21:33:33.982946Z"
    }
  ],
  "updatedAt": "2026-09-06T00:04:41.840544Z"
}

Snapshot generated 2026-09-07 from the live registry.