Cookbook IDE & run_task¶
The cookbook IDE is where recipes are authored; run_task is how they
execute. Together they are the studio's automation authoring loop.
The IDE¶
/c/{company}/project/{project}/cookbook (app/tools/cookbook/) — a
workspace organized by software × category × recipe type × step. Categories:
phases, ui (menus / shelves / context menus), tools,
smart_task, io.
What you can do there:
- Create/edit steps — label, goal, step type, pass/fail criteria, order,
effort stats (min/max hours + likelihood), and
agentic_first_pass. - Edit step code — the built-in editor saves step Python
(
code_editor.py); saves are AST-checked so syntax errors never land on disk. - Create artist menus — named menu/shelf instances that become native DCC UI (see below).
- Test-run — stream a single step or a whole recipe (SSE), locally or submitted to Deadline.
Disk layout — the task IS the folder¶
{cookbook_dir}/{software}/{recipe_type}/{task}/
{task}.json # the recipe: ordered steps[]
{StepName}.py # one sibling file per step
Module path: cookbook.{software}.{recipe_type}.{task}.{name}. A
registry.json maps software → task → category → recipe type → path, and
save() also stages the change in git — the cookbook is version-controlled
like code.
Execution — run_task¶
PathObject.run_cookbook() is the entry point (default phases
["build", "publish"]):
- Farm default — the whole cookbook submits as one Deadline job
(chainable via
dependency_ids: dsn → mdl → rig). - Recipe resolution —
Recipe.resolve()walks the cross-DCC fallback chain:{dcc}/{type}/{task}→{dcc}/{type}/default→alchemy/{type}/{task}→alchemy/{type}/default. - Dispatch — the resolved recipe's software decides execution:
alchemyrecipes run as plain Python; DCC recipes importalc.plugins.{software}and run in the DCC.SmartScene._run_recipeis the single router — headless-first (spawns a clean DCC), in-session whenheadless=False, or on a Deadline Worker. DCC-less phases (start, review) short-circuit. - A failed required phase hard-stops the pipeline.
Generated DCC menus¶
Menu instances authored in the IDE render through Jinja templates
(menu_button.py.j2, shelf_button.py.j2, menu_panel.py.j2) into real
panel/operator code. In Blender, alc/plugins/blender/custom_menu.py loads
cookbook.blender.menus.{menu}.{menu} — so adding a recipe step
automatically adds its button.