generate-worksheet

activev2026.09.16

Generate a printable children's practice worksheet (grade/subject/topic-driven) with the kid-safety contract baked into the prompt, 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
gradestringrequired—Grade level (e.g. kindergarten, 2nd grade)
subjectstringrequired—Subject (e.g. math, reading)
topicstringrequired—Specific skill/topic (e.g. addition to 10)
themestringoptional—Visual theme (e.g. dinosaurs, space)
promptstringoptional—Extra direction for the layout/content
styleenum
cartoon
optional"cartoon"Worksheet style
aspectRatioenum
1:13:44:33:22:316:99:16
optional"3:4"Aspect ratio
qualityenum
lowmediumhighxhighmax
optional"medium"Render quality tier
sizestringoptional""Exact WIDTHxHEIGHT for this render, e.g. '2560x1440'. Empty (the default) means aspectRatio decides. Both edges must be multiples of 16, neither over 3840, the ratio between 1:3 and 3:1, and the total pixels between 655,360 and 8,294,400. Above 2560x1440 the provider calls results experimental — allowed, more variable.
categoriesstringrequired—Comma-separated category slugs the classifier must choose from (empty fails the run in preflight)

How it runs — step topology

1
Render worksheetimageimageGenerator
promptTemplate
2
Classify assetllmclassifier
systempromptTemplatemaxTokens

Model roles: imageGenerator classifier bindings budgetPolicy

What you get — artifact

worksheetvisual

Version lineage

2026.09.16rev 88current2026-09-20
sha256:72059561c…
2026.09.09rev 802026-09-09
sha256:fda28c922…
2026.07.04rev 522026-08-06
sha256:ee84dccae…
2026.07.04rev 262026-07-26
sha256:cac2394ed…
2026.07.04rev 12026-07-04
sha256:c72858697…

Full contract (as served)

GET /v1/catalog/workflows/generate-worksheet
{
  "_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-22T16:13:54.045073Z",
  "id": "generate-worksheet",
  "name": "Generate Worksheet",
  "description": "Generate a printable children's practice worksheet (grade/subject/topic-driven) with the kid-safety contract baked into the prompt, plus classifier-produced catalog metadata.",
  "shortDescription": "Printable kid-safe educational worksheet.",
  "artifactClass": "visual",
  "outputType": "visual",
  "status": "active",
  "supersededById": null,
  "version": "2026.09.16",
  "stages": [
    {
      "name": "Render",
      "description": "Compose the worksheet prompt (safety preamble included) and call the image model.",
      "stepCount": 1
    },
    {
      "name": "Classify",
      "description": "Produce catalog metadata.",
      "stepCount": 1
    }
  ],
  "intakeSchema": {
    "fields": [
      {
        "name": "grade",
        "type": "string",
        "required": true,
        "description": "Grade level (e.g. kindergarten, 2nd grade)"
      },
      {
        "name": "subject",
        "type": "string",
        "required": true,
        "description": "Subject (e.g. math, reading)"
      },
      {
        "name": "topic",
        "type": "string",
        "required": true,
        "description": "Specific skill/topic (e.g. addition to 10)"
      },
      {
        "name": "theme",
        "type": "string",
        "required": false,
        "description": "Visual theme (e.g. dinosaurs, space)"
      },
      {
        "name": "prompt",
        "type": "string",
        "required": false,
        "description": "Extra direction for the layout/content"
      },
      {
        "name": "style",
        "type": "enum",
        "required": false,
        "description": "Worksheet style",
        "default": "cartoon",
        "options": [
          "cartoon"
        ]
      },
      {
        "name": "aspectRatio",
        "type": "enum",
        "required": false,
        "description": "Aspect ratio",
        "default": "3:4",
        "options": [
          "1:1",
          "3:4",
          "4:3",
          "3:2",
          "2:3",
          "16:9",
          "9:16"
        ]
      },
      {
        "name": "quality",
        "type": "enum",
        "required": false,
        "description": "Render quality tier",
        "default": "medium",
        "options": [
          "low",
          "medium",
          "high",
          "xhigh",
          "max"
        ]
      },
      {
        "name": "size",
        "type": "string",
        "required": false,
        "default": "",
        "description": "Exact WIDTHxHEIGHT for this render, e.g. '2560x1440'. Empty (the default) means aspectRatio decides. Both edges must be multiples of 16, neither over 3840, the ratio between 1:3 and 3:1, and the total pixels between 655,360 and 8,294,400. Above 2560x1440 the provider calls results experimental — allowed, more variable."
      },
      {
        "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 worksheet",
      "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": [
        "worksheet"
      ],
      "unlocks": [
        "step-2"
      ]
    }
  ],
  "artifactSchema": {
    "artifactClass": "visual",
    "artifactType": "worksheet",
    "files": [
      "image/webp"
    ],
    "metadata": {
      "grade": "string",
      "subject": "string",
      "topic": "string",
      "quality": "enum [low, medium, high]",
      "classification": "object"
    }
  },
  "providers": {
    "imageGenerator": "redacted",
    "classifier": "redacted"
  },
  "budgetPolicy": "redacted",
  "versions": [
    {
      "version": "2026.07.04",
      "revision": 1,
      "contentHash": "sha256:c7285869732603bc35662cc2455ea9b1340d5404aae11f843caf439e2b9ff36a",
      "createdAt": "2026-07-04T21:49:03.394572Z"
    },
    {
      "version": "2026.07.04",
      "revision": 26,
      "contentHash": "sha256:cac2394edba0fae62f59e7e4cb67cdb48d83b1ce00fae4ef595cf0f6d3a72de8",
      "createdAt": "2026-07-26T00:51:08.235190Z"
    },
    {
      "version": "2026.07.04",
      "revision": 52,
      "contentHash": "sha256:ee84dccae3bc847a76a30c101ceb95baf77439cc97108c453dbee5617a55e4d7",
      "createdAt": "2026-08-06T22:08:47.811788Z"
    },
    {
      "version": "2026.09.09",
      "revision": 80,
      "contentHash": "sha256:fda28c9227c83f2cba9038f26d9968040cc7b00b4b4d3cf9b716d5a42566a911",
      "createdAt": "2026-09-09T22:42:09.268210Z"
    },
    {
      "version": "2026.09.16",
      "revision": 88,
      "contentHash": "sha256:72059561ca6e139c63a58cb5fbb2f2be191dd06a8c69b5c9ab13e69db67441ed",
      "createdAt": "2026-09-20T02:38:59.995382Z"
    }
  ],
  "updatedAt": "2026-09-20T02:38:59.995382Z"
}

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