Skip to content

Recipes

Save any selection of nodes from the node graph as a reusable preset, pin frequently used recipes to the top shelf, and share recipes between systems as portable .cadrecipe files.

Recipes are Caddis's answer to "I keep rebuilding this same chain in every project." A recipe is a frozen subgraph — nodes, edges, and their relative positions — saved per system (not per project), surfaced from a customizable shelf and a Recipe Book modal.

Saving a recipe

  1. In the node graph, marquee-select the nodes you want to bundle (or shift-click).
  2. Click the Save to Recipe icon in the node-graph toolbar (between Add Note and Create Group). The button is disabled until at least one node is selected.
  3. Fill in the Save dialog:
    • Name — required; shows on the shelf tooltip and in the Recipe Book.
    • Description — optional short text describing what the recipe does.
    • Icon — pick from the curated grid. Tinted by the chosen color.
    • Color — accent color for the shelf icon.
    • Pin to Shelf — when on, the recipe immediately appears as a clickable icon in the top shelf. You can toggle this later from the Recipe Book.
  4. Click Save.

Edges are saved only when both endpoints are part of the selection. Edges that cross the selection boundary are dropped — recipes are self-contained.

Note nodes are preserved like any other node (their text and collapsed state round-trip).

Pasting a recipe

There are two ways to paste:

  • Click a pinned shelf icon. The recipe is pasted into the active layer's graph, centered on the current viewport.
  • From the Recipe Book (📖 button at the end of the Recipes shelf): select the recipe, drag-paste support is in v2 — for now click the shelf icon.

Every paste is wrapped in a node group named after the recipe. The group, all nodes, and all edges are added in a single undo step, so Cmd+Z removes the entire paste cleanly. The pasted nodes are auto-selected so you can immediately move or wire them.

If the destination layer already has an Output node, the recipe's Output (if any) is skipped to avoid duplicates.

The Recipe Book

Opens via the 📖 icon on the right edge of the Recipes shelf (or empty-state if you haven't pinned anything yet).

  • Search — filters by name and description.
  • List — every saved recipe, plus any built-in recipes that ship with the app (marked BUILT-IN).
  • Detail panel — edit name, description, icon, and color of any user recipe. Built-in recipes are read-only; click Duplicate to my recipes to fork an editable copy.
  • Pin to shelf — checkbox on each recipe.
  • Export… — write a .cadrecipe JSON file you can share.
  • Delete — removes a user recipe from disk. Built-ins cannot be deleted.
  • Import… (header button) — load a .cadrecipe file that someone shared with you. If the recipe's id collides with an existing one, a fresh id is generated to keep both.

Where recipes live

  • User recipes: ~/Library/Application Support/Caddis/recipes/<id>.cadrecipe (macOS), the equivalent userData directory on Windows / Linux. One file per recipe.
  • Pin order: ~/Library/Application Support/Caddis/recipes-shelf.json. Plain JSON — { "pinnedIds": [...] }. Edit by hand if you want.
  • Built-in recipes ship in apps/editor/resources/recipes/ and are loaded read-only.

The Recipe Book has a Reveal Folder button in its header that opens the user-recipes directory in Finder / Explorer — easiest way to grab a .cadrecipe file to share.

File format

.cadrecipe is a JSON file:

json
{
  "type": "caddis-recipe",
  "version": 1,
  "id": "uuid",
  "name": "Particle Trails",
  "description": "...",
  "icon": "wave",
  "color": "#a3e635",
  "createdAt": "2026-05-04T...",
  "updatedAt": "2026-05-04T...",
  "graph": {
    "nodes": [/* full Node structs with params, ports, exposeChannels, etc. */],
    "edges": [/* Edge structs */],
    "positions": [{ "nodeId": "...", "dx": 0, "dy": 0 }]
  }
}

Files written by older dev builds use "cadmium-recipe" as the type marker; those are still loaded transparently and re-saved as "caddis-recipe" on next edit.

Positions are relative offsets from the saved selection's centroid, so a recipe pastes the same shape no matter where on the canvas you click.

Caveats and limitations

  • Asset paths. Recipes that include ImageSource or VideoSource nodes save the absolute path verbatim. They'll work on the machine that authored them; on another machine the path will be missing and the engine surfaces the usual "missing asset" warning. If you want to share a recipe with media included, export the project instead.
  • Color tokens. Color values linked to a project's color tokens are snapshotted at save time — the recipe carries the resolved RGBA, not the token id. Pasting into a fresh project gives you the exact color, but the link to the original token is not preserved.
  • Stateful nodes (PointAdvect, PointTrail). Their per-frame caches are not part of the recipe. Pasting gets you a fresh starting state — you may want to reset the simulation if you paste mid-playback.

Built-in recipes

NameWhat it does
Particle Trails8×8 point grid advected through a curl-noise vector field; trails rendered as lime polylines. Great as a sanity test or a starting point for flow-field motion.

Caddis — professional motion design.