Skip to content

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"]):

  1. Farm default — the whole cookbook submits as one Deadline job (chainable via dependency_ids: dsn → mdl → rig).
  2. Recipe resolution — Recipe.resolve() walks the cross-DCC fallback chain: {dcc}/{type}/{task} → {dcc}/{type}/default → alchemy/{type}/{task} → alchemy/{type}/default.
  3. Dispatch — the resolved recipe's software decides execution: alchemy recipes run as plain Python; DCC recipes import alc.plugins.{software} and run in the DCC. SmartScene._run_recipe is the single router — headless-first (spawns a clean DCC), in-session when headless=False, or on a Deadline Worker. DCC-less phases (start, review) short-circuit.
  4. 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.