ꘇ dat.lesson
Build a guided walkthrough of your own workflow
- document
- markdown
What it is
ꘇ dat.lesson is a tutorial engine disguised as a data node. You write a lesson as JSON in a CodeMirror editor, press Run in the node toolbar, and the pack plays it back in the browser: a floating panel narrates each step, highlights the actual node or code region you're talking about, and can require the learner to have done something before they can continue.
This is the one node in the pack with almost no competition anywhere in the ComfyUI ecosystem. Workflow sharing in this community is famously rough - the KB's install-friction chapter is basically a list of people opening a downloaded graph and hitting a wall of missing nodes - and "here's a workflow, good luck" is the standard handoff. A lesson that walks someone through the graph, in the graph, is a genuinely different answer to that.
The document format
The guide input holds JSON with a format of genereti-guide and version 1. The shipped validator is strict, and its error message doubles as the spec: Expected genereti-guide v1 with 1..100 steps. Get the format name, the version, or the step count wrong and the node refuses to run.
Each step has a title, a text, an optional target and an optional check:
targetnames a node by its internal node type, not its visible label -GeneretiTextureExpression, notꘇ top.expression. You also pick a semanticpart:node,code,preview,toolbarorparameter, plus optionally a specific widget name. The first matching node in the workflow gets focused and outlined; if it isn't present, the learner is told to add it.checkgates progress. The available kinds arechanged-widget,connected-input,overlay-open,backdrop-openandpreview-frozen.changed-widgetcompares the widget's value to what it was when the step opened, which is how you say "edit the expression, then continue" and actually mean it.
Checks verify actions, not quality. The pack's own docs are blunt about this: checks "do not assess artistic correctness."
Layout can be styled per guide or per step - panel and target frame colour, glow radius, pulse - with CSS colours and screen-pixel dimensions, and the panel glow inherits the target frame colour unless you set one. Steps also carry an optional hint. A three-second pulse cycle is the default highlight; reduced-motion preferences suppress the animation, which is a nice touch.
You don't have to hand-write all of it. The authoring toolbar has ● Record tutorial actions, which captures what you do in the graph and appends draft steps you then edit.
Outputs, and what Queue does
Two outputs:
document-GENERETI_DAT, the lesson as a table of Markdown lines.markdown-STRING, the generated Markdown: title, summary, then numbered step sections with focus and check notes.
Important: Queueing the workflow does not play the tutorial. Queue just builds and returns that Markdown. Playback happens when you press Run in the toolbar (or hit Cmd/Ctrl+Enter, which applies the current draft first). That's a tidy separation - you can batch-render lesson documents in a queue without launching guides at anybody.
The same toolbar exports the authored document as Markdown, standalone static HTML, or via the host print dialog as PDF, plus {} to export the editable lesson JSON for reuse.
Install
Comes with the Genereti pack only. Manager → search Genereti (publisher liuboto) → install → restart → refresh the browser. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/languel/genereti.git genereti
cd ../
./.venv/bin/python -m pip install -r custom_nodes/genereti/requirements.txt
Use ComfyUI's own Python (python_embeded\python.exe on Windows Portable). Requirements are a single line, comfyui-frontend-package>=1.53.6 - no models, no inference server, and the bundled lesson examples install automatically at startup, appearing under Workflows → Genereti and Templates → genereti.
Gotchas
- Use internal node IDs in
target. Visible labels are cosmetic and will change; IDs likeGeneretiTextureExpressionare held stable for exactly this reason. - Guides can't do anything dangerous, by design. They can't execute code, queue inference, or open devices - arbitrary script and selector fields are discarded on import, and imports are capped at 512 KB. So a shared lesson is safe to run. Whether a shared workflow is safe is a different question entirely, and the ecosystem's answer to that is "read the code yourself."
- Nothing persists between page loads. Registered guides last for the current browser page, and first-time tracking is keyed locally by lesson ID. Save the JSON in the workflow or export it.
- Alpha. The README says "super alpha - early classroom testing" and warns to back up workflows before updating. The lesson feature is the most actively moving surface in the pack, and there's essentially no community discussion of it to fall back on - its own docs are your best reference.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| guide | STRING | { "format": "genereti-guide", "version": 1, "id": "my-lesson", "title": "My creative lesson", "summary": "Edit this guide, then press Run.", "steps": [ { "title": "Edit a texture", "text": "Change its expression, then continue.", "target": { "nodeType": "GeneretiTextureExpression", "part": "code", "widget": "expression" }, "check": { "kind": "changed-widget" } } ] } | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| document | GENERETI_DAT | — |
| markdown | STRING | — |