arkennemasis Recipe Compile (validate + freeze)
Validate the recipe, inject the locks, freeze it — or stop the run
- recipe_json
- report
- needs_confirmation
- valid
The Tier 0 model has handed you a recipe JSON, and ArkRecipeCompile is the bouncer. It validates that JSON against the recipe schema, merges in the resolved specifications from the Spec Library, injects the two locks and the tolerances as constants, and hashes the result. Validation failure is a hard error - the node's own description makes the stakes plain: an invalid recipe silently poisons every image in the run. Much better to stop here than to discover it after 30 paid generations.
Anything the model wrote into lock_product, lock_scene or verification is discarded. Those aren't model opinions; they're the constants that keep the set consistent, and they arrive from the compile node's own widgets.
The inputs that matter
llm_json- the Tier 0 model's raw answer. Code fences are stripped, so paste the whole thing.intake_json- from Variation Intake.recipe_dir- whererecipe.jsonis written. Relative paths resolve inside ComfyUI's output directory.library_json- from Spec Library: each value's cached reference path and hash, so the recipe points at frozen local files instead of URLs that can change.plate_lock_json- the frozen plate's hash and measurements.lock_product- Lock A, the product identity constant appended verbatim to every prompt. The anti-improvement sentences are load-bearing: image models silently "help" by straightening and idealising, and every such improvement is a catalogue defect.lock_scene- Lock B, scene continuity.frame_tolerance(0.02),colour_tolerance_de(5),identity_tolerance(0.06) - the tolerances baked in as constants. The colour one is a CIEDE2000 number, and the tooltip notes it's as much a contractual figure as a technical one - agree it with the client in advance. All three are the kind of thing you calibrate with the Calibrate node rather than choose by feel.max_retries(3).
Outputs
recipe_json- the frozen, validated recipe, on to Recipe Gate.report,valid- status, and the boolean that tells you whether to keep going.needs_confirmation- the axes the model was unsure about. This is the list Recipe Gate exists to resolve.
Install and troubleshooting
Ships in the arkennemasis pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install -r ComfyUI/custom_nodes/comfyui-arkennemasis/requirements.txt
Restart, or install via ComfyUI Manager by repo URL.
Two failure modes matter. First, a hard validation error means the recipe is genuinely broken - fix the input, don't disable the node. Second, needs_confirmation comes back non-empty and you ignore it: the run proceeds with unresolved axes, and Recipe Gate will block you anyway. This node and the gate are a pair - compile catches what the schema can see, and the gate catches what only a human can. Wire them in that order and the pipeline does exactly what it says.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| llm_json | STRING | {} | The Tier 0 model's raw answer. Code fences are stripped. |
| intake_json | STRING | {} | — |
| recipe_dir | STRING | variation/recipes | Where recipe.json is written. Relative paths resolve inside ComfyUI's output directory. |
| library_jsonopt | STRING | From Spec Library. Supplies each value's cached reference path and hash, so the recipe points at frozen local files rather than at URLs that can change. | |
| plate_lock_jsonopt | STRING | From Plate Lock. Supplies the frozen plate's hash and measurements. | |
| lock_productopt | STRING | Lock A — product identity. A constant appended verbatim to every prompt. The anti-improvement sentences are load-bearing: image models silently 'help' by straightening and idealising, and each such improvement is a catalogue defect. | |
| lock_sceneopt | STRING | Lock B — scene continuity. A constant appended verbatim to every prompt. | |
| frame_toleranceopt | FLOAT | 0.0200–1 | Allowed subject box drift as a fraction of frame. CALIBRATE this against a labelled set with the Calibrate node — a number chosen by feel either passes drifted images or fails good ones. |
| colour_tolerance_deopt | FLOAT | 5.00–100 | Allowed CIEDE2000 difference from the specified hex. Commercially this is a contractual number as much as a technical one — agree it with the client in advance. |
| identity_toleranceopt | FLOAT | 0.0600–1 | Allowed relative drift in the proportion ratios that fingerprint this object. This is the check that catches a redesigned product, which colour checking cannot. |
| max_retriesopt | INT | 30–10 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| recipe_json | STRING | — |
| report | STRING | — |
| needs_confirmation | STRING | — |
| valid | BOOLEAN | — |