AF - Enhanced HTML Note
Rich HTML notes right on your ComfyUI canvas
AF - Enhanced HTML Note is a note node that renders real HTML instead of a sad block of plain text. ComfyUI ships a Notes node that does the "sticky label" job, but it's unstyled monospace. This one gives you colored sections, lists, tables, code blocks, two-column layouts, and clickable links - all living inside a normal node on your canvas.
The reason you'd reach for it is sharing. ComfyUI's culture runs on "workflow included": you drag a PNG back in and the whole graph reconstructs, but the graph alone doesn't tell anyone what the prompts were, what model you used, or which settings matter. This node is how you attach that documentation to the canvas itself. Positive/negative prompts in green and red sections, model info, VRAM warnings, a link to the checkpoint - it turns "here's my workflow" into "here's my workflow with instructions built in." Nobody else has to guess, including future you.
How it works
This is a front-end-only node. The Python side is one function that takes your HTML string and renders it; it has no outputs and needs no connections - it's pure display, zero compute, zero VRAM. All the real work happens in the browser: the extension hides the input widget, injects your HTML into a node-sized display, and manages editing. You double-click anywhere on the content to open a textarea, hit Escape or click outside to save, and the raw HTML is stored back in the widget value so it persists inside your workflow JSON. Drag the PNG out and the note travels with it.
JavaScript is deliberately disabled - no <script> tags, no onclick, no javascript: links. Links work only when you hold Ctrl and click, which is also how the node avoids hijacking your canvas interactions. Styling comes from a bundled CSS file (web/AF-Enhanced-HTML-Note.css in the repo), so you can edit it to re-theme the sections or add your own classes.
The one input that matters
There's a single input, html_content (a multiline string). It ships with a big default page demonstrating every feature, which is honestly the best way to learn: drag the node in, double-click, and copy the classes.
The classes you'll actually use:
af-positive(green) andaf-negative(red) - prompt sectionsaf-neutral(gray),af-info(blue),af-warning(yellow) - notes, technicals, caveats- Spacers from
af-spacer-mini(4px) up toaf-spacer-xl(48px), plusaf-column-half-left/af-column-half-rightinside a.rowfor two columns
Everything else is plain HTML: <strong>, <code>, <pre>, <table>, inline style= attributes. If a class isn't to your taste, inline styles always win.
Installing it
Via ComfyUI Manager, search for "AF - Enhanced HTML Note" and install. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/alFrame/ComfyUI-AF-Enhanced-HTML-Note.git
Then restart ComfyUI and refresh the browser tab. There are no Python dependencies, no model downloads, no API keys, nothing to download. It's one of those rare custom nodes that can't break your environment - no pip conflicts, which in this ecosystem is worth something.
Where people get burned
The README's known limitation is real: middle-mouse-button panning doesn't work while your cursor is over the node. The HTML layer intercepts the event before the canvas sees it, and the author documents that browser security makes it unfixable. Workaround: hold Space to pan, or start your pan from outside the node.
A few more gotchas, all straight from the README:
- Clicking content doesn't select the node - grab the title bar or edges instead.
- Links don't respond - you forgot the Ctrl key. That's by design.
- Content "won't save" - it only commits when you exit edit mode (Escape or click out), and you still have to save the workflow afterward. Closing the tab mid-edit loses the changes.
- Styling not applying - class names must match exactly (
af-positive, not a typo), or the section class is missing from your CSS. After editing the CSS, hard-refresh with Ctrl+F5.
Honest framing: it does one job and does it well, and it's the only node in this pack. If you only ever share workflows with yourself, the built-in Notes node is fine. If you share them with other people - or want your own canvas to read like a manual instead of a cipher - this is the polite version.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| html_content | STRING | <h2>Positive Prompt Section</h2> <div class="af-section af-positive"> <h2>🟢 Positive Prompts</h2> <p><strong>masterpiece, best quality, highly detailed</strong></p> <ul> <li>Professional lighting</li> <li>Sharp focus</li> <li>8K resolution</li> </ul> </div> <h2>Negative Prompt Section</h2> <div class="af-section af-negative"> <h2>🔴 Negative Prompts</h2> <p><em>low quality, blurry, distorted</em></p> <p><code>nsfw, watermark, signature, bad anatomy</code></p> </div> <h2>Neutral Prompt Section</h2> <div class="af-section af-neutral"> <h3>📝 Notes</h3> <p>General notes and information...</p> <ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> </ul> </div> <h2>Info Section</h2> <div class="af-section af-info"> <h3>ℹ️ Information</h3> <p>Using: <strong>SDXL 1.0</strong></p> <p>Steps: <code>25</code> | CFG: <code>7.5</code> | Sampler: <code>DPM++ 2M Karras</code></p> </div> <h2>Warning Section</h2> <div class="af-section af-warning"> <h3>⚠️ Warning</h3> <p>This workflow requires:</p> <ol> <li>High VRAM (8GB+)</li> <li>Latest ComfyUI version</li> <li>SDXL compatible models</li> </ol> </div> <h2>Column Layouts</h2> <div class="row"> <div class="af-column-half-left"> <div class="af-section af-positive"> <h3>🎨 Style Settings</h3> <ul> <li>Style: Photorealistic</li> <li>Aspect: 16:9</li> <li>Quality: Ultra High</li> </ul> </div> <div class="af-spacer"></div> <div class="af-section af-info"> <h3>⚙️ Technical</h3> <p>Resolution: <code>1920x1080</code></p> <p>Batch: <code>4</code></p> </div> </div> <div class="af-column-half-right"> <div class="af-section af-negative"> <h3>🚫 Exclusions</h3> <ul> <li>No text in image</li> <li>Avoid oversaturation</li> <li>No watermarks</li> </ul> </div> <div class="af-spacer"></div> <div class="af-section af-warning"> <h3>💡 Tips</h3> <p>Use lower CFG for more creative results</p> </div> </div> </div> <h2>Clickable Links & Actions</h2> <div class="af-section af-info"> <h3>🔗 Interactive Links</h3> <!-- External links (opens in new tab with Ctrl+click) --> <h4>External link (opens in new tab with Ctrl+click)</h4> <p><a href="https://www.fullframestudios.ch/">Full Frame Studios - Alex Furer</a></p> <h4>Anchor Links</h4> <p><a href="https://www.fullframestudios.ch/#ThreeDee">Full Frame Studios - Alex Furer - 3D</a></p> </div> <h2>Custom Info Cards</h2> <div style="display: flex; gap: 10px; flex-wrap: wrap;"> <div style="flex: 1; min-width: 150px; background: rgba(144, 238, 144, 0.1); border: 1px solid #90EE90; padding: 12px; border-radius: 6px; text-align: center;"> <strong style="color: #90EE90; display: block; margin-bottom: 4px;">Steps</strong> <p style="margin: 0; font-size: 24px; color: #fff; font-weight: bold;">25</p> </div> <div style="flex: 1; min-width: 150px; background: rgba(135, 206, 235, 0.1); border: 1px solid #87CEEB; padding: 12px; border-radius: 6px; text-align: center;"> <strong style="color: #87CEEB; display: block; margin-bottom: 4px;">CFG Scale</strong> <p style="margin: 0; font-size: 24px; color: #fff; font-weight: bold;">7.5</p> </div> <div style="flex: 1; min-width: 150px; background: rgba(186, 85, 211, 0.1); border: 1px solid #BA55D3; padding: 12px; border-radius: 6px; text-align: center;"> <strong style="color: #BA55D3; display: block; margin-bottom: 4px;">Batch Size</strong> <p style="margin: 0; font-size: 24px; color: #fff; font-weight: bold;">4</p> </div> </div> | — |
Outputs (0)
No outputs