Nodes/ꘇ Genereti/ꘇ dat.table
ComfyUI Node

ꘇ dat.table

Paste a CSV, get a table your graph can slice

By languel·Created about a month ago·Updated 3 days ago· 1
ꘇ dat.table
    • table
    • text
    ◄textname,value speed,0.5 influence,0.8►
    ◄delimiter▾►

    The plain one

    ꘇ dat.table is the least glamorous node in this pack and probably the one you'll actually use most, because it does one obvious thing: it parses delimited text into a table. Type (or wire, or paste) rows of text, pick a delimiter, and out comes a GENERETI_DAT table plus the same thing as CSV text.

    Why care? Because a DAT table is the pivot format for everything else in Genereti's data family. Tables go into dat.select to slice, dat.transpose to flip, dat.replace to rename, dat.merge to concatenate, and dat.tochop to become control channels that drive faders, seeds, or a live parameter. If you want a spreadsheet to steer a Comfy graph, this node is step one.

    How the parse works

    There's no cleverness here - it's Python's csv module, which is the right call because CSV quoting is genuinely fiddly. Rows are read with the delimiter you selected, and the parser runs in strict mode, which means unterminated quotes raise instead of quietly producing nonsense. That's a feature: silent CSV corruption is far worse than an error.

    Two details worth knowing before you debug something:

    • Numeric-looking cells stay strings in the table. The GENERETI_DAT type is a string table by design; conversion to numbers happens at the boundary, in dat.tochop (which sends non-numeric cells to 0.0) or dat.cell (which gives you a STRING and a FLOAT side by side). So don't expect the table itself to know 0.5 from "0.5".
    • The text output isn't a passthrough of what you typed - it's a re-serialisation from the parsed rows, newline-terminated, comma-separated. If you typed tabs and picked tab, the text output comes back comma-separated. Downstream nodes read the table, so this rarely matters, except when you're eyeballing it.

    Inputs and outputs

    Just two inputs:

    • text - the multiline editor, defaulting to name,value / speed,0.5 / influence,0.8. That default is a deliberate hint: name,value pairs are exactly what dat.tochop wants, because it uses row one as channel names.
    • delimiter - a combo of ,, tab, ;, |. Pick tab for anything pasted out of a spreadsheet, where the "tab" option is mapped to a literal tab character before parsing.

    Outputs are the DAT standard: table (GENERETI_DAT) and text (STRING, the CSV). Wire table into the operator chain, or wire text into dat.lesson/webview-style document nodes if you want to display it.

    A pattern that's worth stealing if you're wiring live controls: paste a small table of parameter names and values, run it through dat.tochop with header on, and you get one CHOP channel per row - named. Feed the channel value output into a converted numeric widget and you've turned a text box into a control surface. It's a silly amount of leverage for a CSV.

    Install

    Genereti ships this node and nothing else does. Manager → search Genereti (publisher liuboto) → restart → refresh the browser. Manual:

    cd ComfyUI/custom_nodes
    git clone https://github.com/languel/genereti.git genereti
    ./.venv/bin/python -m pip install -r custom_nodes/genereti/requirements.txt
    

    Use your ComfyUI's own Python - python_embeded\python.exe on Windows Portable - rather than a global pip. The requirements file is a single line, comfyui-frontend-package>=1.53.6, so this is a light install: no models, no torch surgery, no extra node packs. It does need a recent ComfyUI (0.38.2+), Python 3.11+, and a browser refresh after every restart because the editor widget is frontend JavaScript.

    Gotchas that will actually bite

    • strict CSV is strict. A stray " in a cell throws. Same for a row with an odd quote count. Fix the source text; there's no escape hatch.
    • It does not infer a header. Row one is a header only if a downstream node is told so - dat.tochop's header boolean, or dat.totop's. If you feed a headerless table into dat.tochop with header on, your first data row silently becomes channel names.
    • Ragged rows are legal. Your text output will be uneven; operators either pad or ignore missing columns depending on the node (dat.select emits an empty string for out-of-range columns, dat.transpose pads).
    • Zero community footprint, alpha code. The pack is explicitly "super alpha - early classroom testing; back up your workflows before updating," and it currently has essentially no discussion in the Reddit corpus. It's a stable little CSV parser; just don't assume the pack around it is done.
    CategoryGenereti / DAT

    Inputs (2)

    NameTypeDefaultDescription
    textSTRINGname,value speed,0.5 influence,0.8—
    delimiterCOMBO4 options: ,, tab, ;, |

    Outputs (2)

    NameTypeDescription
    tableGENERETI_DAT—
    textSTRING—