πͺ Json comparator
The JSON diff node with the lowercase name
- json_old
- json_new
- json_compared
If you searched for this node and landed here with a "wait, didn't I just see this?" feeling - you're not wrong. There's also a JSON comparator (capital JSON) in this same pack with an identical job: take two JSON objects, diff them, hand back what changed. Same required inputs, same output, same category. Crystools' own changelog explains why two exist: version 1.25.3 lowercased the node's registered name, then version 1.27.0 reverted it because, in the author's words, it "cannot change on registry." Whichever one you find in the node search, you're getting the same functionality - just pick one and don't worry about it.
Setting the naming quirk aside, what it actually does is useful: a generic diff between any two JSON objects flowing through your graph.
How it works
It compares json_old against json_new and returns a new JSON structure describing what's different between them - additions, removals, and changed values. It's the same idea as Metadata comparator, but deliberately more generic. Where Metadata comparator is scoped specifically to comparing two images' embedded Prompt/Workflow/Fileinfo (and requires the special METADATA_RAW type), this node works on plain JSON - the diff output of another comparator, a value pulled from a config file, or anything else typed as JSON in your graph.
The inputs and outputs that matter
json_old- the baseline you're comparing against.json_new- the one you're checking for changes.- Output:
json_compared- the diff, as a new JSON object. This is an output node, so it displays right on the canvas even with nothing downstream - though the output is also JSON-typed, so it chains cleanly into JSON extractor if you want to pull one specific changed field out as a typed value instead of reading the whole diff.
How to install it
Same pack, same steps as everything else here. Through ComfyUI Manager: search crystools, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/crystian/comfyui-crystools.git
cd comfyui-crystools
pip install -r requirements.txt
You'll find it under crystools πͺ / Utils. No models, no GPU dependency.
Common issues & troubleshooting
Beyond the naming duplication itself - which is cosmetic, not a bug, and doesn't affect either node's behavior - the main thing to watch is type strictness. Both json_old and json_new need to actually be JSON-typed connections, not raw strings. If you're trying to feed it something like a text widget's output, it won't connect; you'd need to parse it into JSON first (Show any to JSON, mentioned in the README, is one way to get a value into that shape).
The other practical note: this node compares whole structures, so if you're diffing two large workflow exports or deeply nested configs, the resulting diff can itself be sizeable and not the friendliest thing to read raw off the node display. For anything beyond a quick check, piping the json_compared output into JSON extractor to grab just the field you care about is a lot more usable than scrolling a wall of nested JSON on the canvas.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| json_old | JSON | β | |
| json_new | JSON | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| json_compared | JSON | β |