ComfyUI Node

FatLabels

Big readable labels for messy workflows — a two-input text node

By aianimation55·Created 3 years ago·Updated 2 years ago· 5
FatLabels
    • IMAGE
    textHello
    font_size36

    FatLabels is the node you reach for when a workflow has outgrown your ability to tell the sections apart. ComfyUI graphs get chaotic fast - dozens of wires, tiny node titles, and the default text node that renders at a size you can't read from across the room. This one renders your text big, on a black canvas, as an actual image. The name isn't a joke; it's the whole pitch.

    It's also a nice snapshot of what a "first custom node" looks like, because that's literally what this is. The author (Jon D at aianimation.com) says so in the README: first custom node, first GitHub repo. It does one thing and does it simply, and that honesty is kind of refreshing in an ecosystem where every utility pack is trying to be the next rgthree.

    What it does

    Two inputs, one output:

    • text - the string to render (default "Hello")
    • font_size - size in pixels, default 36, minimum 1

    That's it. No color picker, no font selector, no alignment options. The author explicitly says font/color options are a "if I get time" item. It outputs an IMAGE, which you wire into a Preview Image or Save Image node - or, if you're being fancy, into the actual generation.

    Under the hood it's pure PIL: it measures your text, creates a grayscale canvas sized to the text plus 20px of padding on every side, and draws the string centered in white, using DejaVu Sans Bold. Then it converts the result to a torch tensor and hands you an IMAGE. Nothing calls an API, nothing downloads a model, no heavyweight dependencies - the pack ships no requirements.txt, because Pillow, torch, and numpy are already sitting in every ComfyUI install.

    One mechanism quirk worth knowing: the canvas is grayscale, and the tensor that comes out is single-channel - shape (1, H, W) rather than ComfyUI's standard (batch, H, W, channels). It'll happily preview in some contexts, but if a downstream node expects a proper 4D IMAGE it can complain. And on that note: it's white-on-black only. So when you use it for labeling, you're making a title card, not a subtle caption.

    Why you'd actually bother

    The real use case is documentation, not generation. People share complex workflows as PNGs, and the community norm is that a labeled workflow beats an unlabeled one. Drag one of these in per section, type "ControlNet pass" or "Upscale here," set the font size to something that survives a compressed screenshot, and your workflow is suddenly readable on a phone screen. That's the same spirit that made tools like rgthree and Impact Pack popular - making giant graphs navigable - except where those packs reorganize the graph, this just annotates it.

    If you genuinely want text baked into a generation, you can wire the output into an img2img or ControlNet input as a prompt image and see what the model does with it. Your mileage will vary, and the single-channel grayscale output makes it a slightly awkward citizen there. For serious text-on-image work you're better off with a dedicated option.

    Installing

    ComfyUI Manager has it: search FatLabels (or "Fat") and install. Or the manual route:

    cd ComfyUI/custom_nodes
    git clone https://github.com/aianimation55/ComfyUI-FatLabels
    

    Then restart ComfyUI. No models to download, no extra pip packages - this is about the friendliest custom-node install there is.

    The traps

    The big one: the font is hardcoded to /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf. That's a Linux path. On Windows - where a huge slice of ComfyUI users live - that file doesn't exist, and the node throws. That's the single most likely reason this node fails on a fresh install, and the author doesn't mention it in the README. There's also no font fallback, no color choice, no multiline handling to speak of, and the output is stuck at grayscale. It's a starter node, and the rough edges are the rough edges of a starter node.

    Still, for its one job - a big readable label on a screenshot - it works, and you can't beat the install cost.

    Categoryimage/text

    Inputs (2)

    NameTypeDefaultDescription
    textSTRINGHello
    font_sizeINT36

    Outputs (1)

    NameTypeDescription
    IMAGEIMAGE