DAELAB - 多维表格
The spreadsheet that isn't allowed to lie to your graph
- table_json
A ComfyUI workflow is a bad place to hold structured data. Everything that looks like a list is really a batch of tensors, and the moment you need "row 7 needs this prompt and that reference image" you're either doing index gymnastics or moving to Airtable.
DAELAB - 多维表格 is this pack's answer: a real table - fields, records, column types, per-row values - living in a node, serialising to a single table_json string that the rest of the pipeline can consume. It's the hub of the storyboard and video workflows in this library, and it's a different mental model from the rest of ComfyUI.
What it does, mechanically
table_data is the table's state: a hidden, socketless string that the front-end panel writes as you edit. execute parses it, runs it through a validation/normalisation layer, and emits table_json.
Two behaviours are worth knowing because they're the whole reason this node is trustworthy:
Validation is strict. Malformed JSON doesn't half-work; the table is normalised through a schema-aware adapter that guarantees downstream sees a consistent {fields, records} shape. You get a clean error or a clean table.
A broken upstream link is an error, not a guess. If the node is in live-source mode and that source has gone away, it raises 上游表格已断开,请重新连接 - "the upstream table is disconnected, reconnect it." That's the right behaviour and it's rarer than you'd hope: the alternative is a downstream generation run quietly working from a stale copy of your table and billing you for rows you already deleted.
The node is registered as an output node. Queuing a workflow that contains it will execute it, and the JSON lands as the node's own value. In practice that makes it the pack's save/export point: a single string you can inspect, copy between workflows, or log, containing the full task list with its column definitions and per-row metadata.
Why a table, honestly
Because storyboard work is inherently tabular and ComfyUI keeps pretending otherwise. You have N shots, each with a description, a duration, maybe a reference image, maybe a camera note. You want to edit the descriptions as text, run a prompt-parse over one column, mark which column holds reference images, and then hand the whole thing to a generation step that loops.
The pack builds exactly that on top of this node - generation columns, per-column prompt templates, same-row @column references, a per-cell and whole-column LLM optimisation flow that you apply manually. The table is the substrate that makes those composable without each feature inventing its own storage.
For a beginner, the important consequence is this: the table is where you edit, and the generation node is where you spend. Don't expect the table node to generate anything. It has one output and it is JSON.
Outputs
table_json - a single string. Wire it into the pack's generation/storyboard consumers. Because it's a string, it also plays nicely with anything that takes text: a save-text node if you want a file copy, a display node if you want to eyeball the structure, a JSON parser if you're doing something custom.
There are no tensor outputs and no image passthrough, so this node never sits on a pixel path. If your graph is mostly image work, the table branch can live off to the side entirely, and ComfyUI's caching will only re-run it when its inputs or its state actually change.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/TeutonicMepheles/ComfyUI-DAELab-Custom-Nodes-Library.git
Restart ComfyUI and refresh the browser. The table UI is front-end code in web/, so a stale tab means you'll see the node with an opaque string widget and no editor - refresh before you start debugging.
It's a V3 node on comfy_api.latest. Old ComfyUI core → No module named 'comfy_api' at startup, and the fix is updating ComfyUI. ComfyUI Manager users: search "ComfyUI-DAELab-Custom-Nodes-Library".
One install note specific to this pack right now: the shared canvas and the DAELAB.MediaUpload control moved to a separate ComfyUI-DAELab-Creative-Canvas repository. The README says existing canvas users need to install that repo too and restart. Tables, storyboards, LibTV and badge business stay in this library - but if the table's media cells expect upload controls that don't appear, that's the missing repo.
Gotchas
The document-import path is a different node with different dependencies. This table node alone needs nothing beyond ComfyUI itself; the moment you use the script parser to fill it from a DOCX, you need python-docx, openpyxl and pdfplumber installed in ComfyUI's environment. Don't install those speculatively.
Empty tables are legal. {"fields":[],"records":[]} validates fine and outputs a valid empty table, so a generation node downstream will see zero rows rather than an error. If a run seems to do nothing, glance at the row count before you blame the generator.
And because this is stateful front-end data, treat the panel as the source of truth. Copying table_data between two nodes to clone a table works, and is genuinely useful for branching a project - just be aware both copies then diverge independently, including any generation-column configuration inside them.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| table_data | STRING | — | |
| source_tableopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| table_json | STRING | — |