generate-coloring-page

activev2026.07.04

Generate a printable coloring page: clean black line art on a white background (no fills, no shading), plus classifier-produced catalog metadata.

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
promptstringrequiredSubject of the coloring page
styleenum
coloring
optional"coloring"Coloring style
aspectRatioenum
3:41:14:3
required"3:4"Aspect ratio
qualityenum
lowmediumhigh
optional"medium"Render quality tier
categoriesstringrequiredComma-separated category slugs the classifier must choose from (empty fails the run in preflight)

How it runs — step topology

1
Render line artimageimageGenerator
promptTemplate
2
Classify assetllmclassifier
systempromptTemplatemaxTokens

Model roles: imageGenerator classifier bindings budgetPolicy

What you get — artifact

coloring-pagevisual

Version lineage

2026.07.04rev 26current2026-07-26
sha256:10c84d784
2026.07.04rev 12026-07-04
sha256:fde512a83

Full contract (as served)

GET /v1/catalog/workflows/generate-coloring-page
{
  "_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-coloring-page",
  "name": "Generate Coloring Page",
  "description": "Generate a printable coloring page: clean black line art on a white background (no fills, no shading), plus classifier-produced catalog metadata.",
  "shortDescription": "Printable line-art coloring page with classification.",
  "artifactClass": "visual",
  "outputType": "visual",
  "status": "active",
  "supersededById": null,
  "version": "2026.07.04",
  "stages": [
    {
      "name": "Render",
      "description": "Compose the line-art prompt and call the image model.",
      "stepCount": 1
    },
    {
      "name": "Classify",
      "description": "Produce catalog metadata.",
      "stepCount": 1
    }
  ],
  "intakeSchema": {
    "fields": [
      {
        "name": "prompt",
        "type": "string",
        "required": true,
        "description": "Subject of the coloring page"
      },
      {
        "name": "style",
        "type": "enum",
        "required": false,
        "description": "Coloring style",
        "default": "coloring",
        "options": [
          "coloring"
        ]
      },
      {
        "name": "aspectRatio",
        "type": "enum",
        "required": true,
        "description": "Aspect ratio",
        "default": "3:4",
        "options": [
          "3:4",
          "1:1",
          "4:3"
        ]
      },
      {
        "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)"
      }
    ]
  },
  "runtimeSteps": [
    {
      "id": "step-1",
      "name": "Render line art",
      "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"
    }
  ],
  "gates": [
    {
      "id": "gate-render",
      "name": "Provider execution",
      "type": "quality",
      "inputs": [
        "intake"
      ],
      "outputs": [
        "line-art"
      ],
      "unlocks": [
        "step-2"
      ]
    }
  ],
  "artifactSchema": {
    "artifactClass": "visual",
    "artifactType": "coloring-page",
    "files": [
      "image/webp"
    ],
    "metadata": {
      "aspectRatio": "enum [3:4, 1:1, 4:3]",
      "quality": "enum [low, medium, high]",
      "classification": "object"
    }
  },
  "providers": {
    "imageGenerator": "redacted",
    "classifier": "redacted"
  },
  "budgetPolicy": "redacted",
  "versions": [
    {
      "version": "2026.07.04",
      "revision": 1,
      "contentHash": "sha256:fde512a832e869e9e8f20b4e0be2d4e839f1d578961e99ce7f64fd9d09b45576",
      "createdAt": "2026-07-04T21:49:03.195883Z"
    },
    {
      "version": "2026.07.04",
      "revision": 26,
      "contentHash": "sha256:10c84d7845b8f8639c3c94fe43273ef08568071e14202c2fafd0919463b6db45",
      "createdAt": "2026-07-26T00:51:05.101830Z"
    }
  ],
  "updatedAt": "2026-07-26T00:51:05.101830Z"
}

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