Create Branch Version In GenAsset
Create Branch Version In GenAsset — explore without breaking the mainline
- image
- image
- asset_id
- version_id
- status_json
If you've ever used git, you already know why branching exists: you want to try a risky idea without committing it to the main story. Create Branch Version In GenAsset brings that exact concept to image generation. You hand it a new image plus a parent_version_id, and it saves that image as a version that explicitly records which version it descended from.
The result is a proper lineage instead of a flat list. Every asset keeps its main thread of versions, and off to the side you get experimental branches - each one tagged with its parent, so nothing is lost and nothing pollutes the mainline. For anyone iterating on character design or a hero image, that's the difference between "I have 40 versions and no idea which led to which" and "I can see the family tree."
How it works
It's a manual save with a genealogy twist. The node takes your image, plus asset_id and parent_version_id, and uploads to the same api/v1/generations endpoint the save node uses - but it embeds a branch block in the metadata: the parent version UUID and created_in: comfyui. That's how the server knows this version is a branch of another rather than just the next number in line.
The inputs are manual on purpose - you set prompt_text, negative_prompt_text, model_name, seed, and extra_metadata_json yourself, because a branch is usually the result of an experiment you've already run, not a fresh auto-captured generation. It validates aggressively before calling the server: parent_version_id must be a real version UUID, asset_id must be a real asset UUID if provided, and you need at least an asset_id or an asset_name (which acts as a fallback if the asset doesn't exist yet).
Inputs and outputs that matter
The two that matter most:
parent_version_id- the source version this branch descends from. Required, and it must be a UUID. This is the whole point of the node.asset_id- the target asset. Leave it empty and the node will useasset_nameas a fallback target.
intent defaults to branch_edit, which is a sensible label for the GenAsset UI. Outputs are the standard save set: image passthrough, asset_id, version_id, and status_json (which includes the parent version id so you can confirm the link).
Installation
Part of the steliosot/ComfyUI-GenAsset pack. ComfyUI Manager → search GenAsset → install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/steliosot/ComfyUI-GenAsset.git
Restart, and have a workspace token ready (widget, env var, or ComfyUI/user/genasset.json). No extra pip dependencies.
Common issues
- "parent_version_id must be a version UUID." - you pasted something that isn't a full UUID, or left the placeholder in. The node is strict here on purpose; a branch without a real parent defeats the lineage feature.
- "Set asset_id or asset_name for branch save." - you need at least one target. Both empty and there's nowhere for the version to go.
- The recipe isn't auto-captured - unlike
Save To GenAsset, this node doesn't walk your graph for the prompt and model. You fill inprompt_textandmodel_nameyourself. If they're empty, your branch version stores an empty recipe. That's by design for a manual node, but it bites people who assume otherwise.
Branching is one of those features that seems like overhead until you need it, and then you can't believe you lived without it. This node is the "safe to experiment" button - the mainline stays clean, and every wild idea keeps its parent recorded.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| base_url | STRING | https://genasset.xyz | — |
| token | STRING | ComfyUI/user/genasset.json | — |
| asset_id | STRING | Target asset id to append a branched version. | |
| parent_version_id | STRING | Parent/source version id for this branch. | |
| asset_name | STRING | Optional fallback if asset_id is empty. | |
| prompt_text | STRING | — | |
| negative_prompt_text | STRING | — | |
| model_name | STRING | — | |
| seed | INT | 0 | — |
| tags_csv | STRING | — | |
| intent | STRING | branch_edit | — |
| extra_metadata_json | STRING | {} | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| asset_id | STRING | — |
| version_id | STRING | — |
| status_json | STRING | — |