ꘅ Text / JSON Viewer
The viewer that shows you what the graph actually produced
What it is
ꘅ Text / JSON Viewer is the terminal end of every workflow in this pack. One STRING in, nothing out, and a readable panel on the node face. Its source comment calls it "a dependency-free text/JSON sink for queued workflow outputs," which is about as modest as node descriptions get, and accurate.
You reach for it because the alternative is terrible. A decision model emits {"choice":"blue","scores":{"blue":0.8,"orange":0.2}} as a STRING. Drop that on Comfy's built-in text preview and you get one unbroken line you have to squint at. This node parses it and lets you flip the view.
The one input, and the toolbar
text is a STRING, and it's declared forceInput - no widget, you must wire it. Normally it comes from decision_json or metrics on ꘅ Local Decision, or from the text output of ꘅ Local Text / ꘅ Local Vision. If you want to hand-type something to view, put a core String primitive in front of it.
Once data is in, the viewer toolbar offers Tree, Pretty, and Minified. Tree is the one you'll live in for decisions: it collapses the object so scores is a node you can open, instead of a wall of nested braces. Pretty is indented JSON. Minified is for copying one line into a bug report. All three are views over the same payload - switching them doesn't touch the data.
No outputs at all, and it's registered as an output node, so Comfy treats it as a workflow destination and executes the chain that feeds it. That's the entire mechanism.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/languel/genereticore
Restart Comfy, or search GeneretiCore in ComfyUI Manager. It lands under Genereti / Inference as ꘅ Text / JSON Viewer.
Unlike the inference nodes in this pack, this one has no platform requirement and no model. Base install declares zero dependencies and this class imports nothing beyond the Comfy runtime. It works fine on Linux and Windows, which makes it a reasonable pairing even if you're only using the pack's plumbing nodes (the validator, the label-to-number mapper) and running your inference elsewhere.
Where people get burned
The blank panel. Nine times out of ten this is the button. ϟ on an inference node runs an async preview inside that node and deliberately does not update connected outputs - so the model node shows an answer and the viewer sits empty forever. Top Run or the node's ▷ is what pushes data downstream. The pack's own getting-started guide has a table of the five toolbar buttons specifically because this tripped someone up in testing.
The second trap is quieter: this is a viewer, not a validator. It will happily render malformed JSON as raw text, because it never checks anything. If you're debugging why a downstream consumer is throwing, don't conclude the payload is correct because it looks fine here - run it through ꘅ Decision Scores Validator instead, which actually enforces the contract and tells you what's wrong.
Third: the node returns its string through Comfy's ui payload and coerces with str(text), so anything non-string arrives as a Python repr. For this pack's outputs that never matters - decision_json and metrics are already JSON strings - but if you wire a dict from some other node, expect single quotes and None where you wanted null.
One genuinely nice property: because it holds no model and no state, it's a free place to look. Add two of them, one on choice and one on metrics, and you can watch a decision graph's input side and timing side at a glance while you change the state prompt. That's the loop this whole pack is built around - change one authored thing, run, read the distribution - and the viewer is where you read it.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — |
Outputs (0)
No outputs