CD · Environment Lock
Record the exact runtime and models a run needs to be reproducible
- environment_lock
- environment_json
- environment_hash
Here's the reproducibility nightmare nobody talks about: same prompt, same seed, same workflow - different ComfyUI version, or a swapped checkpoint, and the output isn't the same. "What version was this rendered with?" is the question every production eventually asks, and most of the time nobody can answer it. CDEnvironmentLock is the node that answers it by recording the runtime versions and model inventory alongside your production, in a hash-linked record - so the environment is as much a part of the package as the shots themselves.
It's from Continuity Director, a 20-node pack for repeatable AI video production, and it's one of the reliability nodes, explicitly described as the way to "record the runtime versions and model inventory required to reproduce a production run."
What you set
- comfyui_version - the ComfyUI version, default
unknown. Fill it in (or wire it from a version node if you have one). - frontend_version - the frontend version, default
unknown. - models_json - the model inventory, default
[]. A JSON array of model names (or objects) - checkpoints, LoRAs, VAEs. Duplicates are deduplicated and the list is sorted, so the same inventory typed in a different order produces the same record. - notes - free text for anything else: "rendered with Wan 2.2, 720p, fp8", driver version, whatever.
What it adds automatically
This node goes beyond the widgets: it captures the Python version, the Python implementation, the platform, and the machine architecture at runtime, all without asking. So the lock doesn't just record what you typed - it records the actual interpreter that ran. Then the whole thing gets a SHA-256 hash.
Outputs: environment_lock (a CD_ENVIRONMENT_LOCK wire), environment_json (the full record - useful to paste into a manifest or export package), and environment_hash (the fingerprint). Fold the JSON into CDExportPackage's flow or save it next to your outputs, and "what environment made this" stops being a guess.
Installing it
Continuity Director installs with zero friction: no model downloads, no API keys, and requirements.txt is literally a comment saying "No mandatory third-party Python dependencies." Pure standard library. Search "Continuity Director" in ComfyUI Manager and restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/xinjian0101/continuity-director.git ComfyUI-ContinuityDirector
Restart ComfyUI - nodes appear as CD · ..., plus a Continuity Director sidebar with an "Add starter chain" scaffold. Update with git pull.
The honest take
The gap here is that the two fields that matter most - comfyui_version and frontend_version - default to unknown and expect you to fill them in. The pack can't reliably introspect ComfyUI's own version from inside a custom node, so the lock is only as good as your discipline in keeping those fields accurate. A lock that says "unknown" for both is a start but not an answer. Do the small extra step of filling them (a version node or even a manual note at upgrade time), and this becomes the record that saves you a genuinely miserable debugging session three months from now when a "identical" re-render comes out different.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| comfyui_version | STRING | unknown | — |
| frontend_version | STRING | unknown | — |
| models_json | STRING | [] | — |
| notes | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| environment_lock | CD_ENVIRONMENT_LOCK | — |
| environment_json | STRING | — |
| environment_hash | STRING | — |