ꘇ webview
A Markdown-and-math panel that lives inside your graph
- text
A node that displays nothing it didn't already have
ꘇ webview - class name GeneretiDocument - is the pack's document surface. You give it a format and some text, and it renders that text in the node body. Markdown with KaTeX and Mermaid, raw HTML, plain text, or an embedded page URL.
The odd bit, and the good bit: the text output is the same string you put in. Nothing is converted, sanitised, or transformed. If you wire a prompt through it, the prompt arrives downstream byte-for-byte, and the node has just been a very pretty label. That's the "unchanged text ports" property the pack advertises.
So what's the actual use? Documentation that doesn't rot. You've built a graph with twelve nodes and a parameter you'll forget by Thursday; drop a webview node next to it with the reasoning written in Markdown, and it's a sticky note that survives in the workflow JSON. Wire a computed string into it and it becomes a readout - a report surface that renders formatting instead of dumping text into the console.
Formats and what they mean
format is a four-way combo:
markdown(the default) - rendered with math and diagrams. The default text is a deliberate demo of both: a header, a$$E = mc^2$$block for KaTeX, and a Mermaid flowchart. If you've ever wanted to explain a sampling pipeline as an actual diagram next to the pipeline, this is that.html- the markup runs in an isolated browser frame, so a document with its own styles and scripts won't reach into Comfy's UI.text- monospaced display, nothing parsed.url- embeds a page by address. Here's the honest caveat, in the author's own words: URL pages retain their own app, and external sites may prohibit embedding. Plenty of sites sendX-Frame-Optionsor a restrictive frame policy and simply won't appear. A refusal there is the site's decision, not a bug in the node.
There's a Raw/Rendered toggle, and it changes only how you see the document - the text output is unaffected either way.
Inputs and outputs
format- the combo above, defaultmarkdown.text- multiline string, with the pack's own CodeMirror-style editor widget. Same widget family used by the DAT operators, so it behaves like the rest of Genereti.text-STRINGout, unchanged.
It's an output node, which means it runs whenever you queue, even if nothing consumes it. That's what you want for a display: it stays current. It also means it appears in the execution list on every run, which is a small thing to know when you're reading logs.
Because the output is verbatim, it composes: build a string anywhere upstream, render it here, and keep going with the same string. The pack's DAT nodes share a document export path - Markdown, standalone static HTML, or the host print dialog for PDF - which pairs naturally with this node when you want the thing you're reading to leave Comfy as a file.
Install
Part of Genereti; no standalone version exists. ComfyUI Manager → search Genereti (publisher liuboto) → install → restart → hard-refresh the browser, because the rendering surface is frontend JavaScript and a stale tab shows an empty panel. Manual:
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 your ComfyUI's interpreter (python_embeded\python.exe on Portable). Requirements are one line - comfyui-frontend-package>=1.53.6 - and the pack downloads no models and installs no inference server. ComfyUI 0.38.2+, Python 3.11+, modern browser.
Gotchas
- Don't expect it to parse anything for you. It's a viewer. If you need Markdown generated, that's
dat.lesson's job, which builds Markdown from a lesson document and hands it over as a STRING. - Embedded URLs are a lottery. Sites that refuse framing refuse framing.
- Big documents get slow to render. It's a browser surface; there's no virtualisation.
- The pack is "super alpha" by its own README - early classroom testing, back up workflows before updating. UI surfaces like this one move fastest, so screenshots in tutorials (including the position of that Raw/Rendered toggle) shouldn't be trusted too far.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| format | COMBO | markdown | 4 options: markdown, html, text, url |
| text | STRING | # A creative notebook Edit in **Raw**, then switch to Rendered. $$E = mc^2$$ ```mermaid flowchart LR Text --> View --> Output ``` | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |